GitHubマージキュー導入時のGitHub Actions CI設定変更
こんにちは、タイミーでPlatform Engineerをしている近藤です。
今回は、GitHubのマージキュー(Merge Queue)に対応するために、GitHub ActionsのCI設定を修正した話を紹介します。
TL;DR
GitHubのマージキュー(Merge Queue)を導入する場合、以下の設定が必要です。
- Rule Sets(Branch protection rule)で「Require status checks to pass」を有効化
- 「Merge Queue」の有効化
- CIワークフロー(ci.yml)の変更
merge_groupイベントの追加gh-readonly-queue/**ブランチをpushイベントから除外
GitHub Actionsの従来のCIワークフロー
まず、従来のCIワークフロー(ci.yml)の設定を振り返ります。元々の設定は以下のようになっていました。
name: ci on: push: branches: - '**' - '!master' tags-ignore: - '*' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: id-token: write contents: read pull-requests: write jobs: ci: uses: ./.github/workflows/_ci.yml secrets: inherit
この設定では、masterブランチ以外のすべてのpushイベントでCIが実行されます。
デプロイまでの従来の流れ
タイミーのdeployワークフローはGitHub Flowを採用していたため、以下のような流れになっていました。
- PRを作成し、CIが通ることを確認。
- PRをmasterブランチにマージ。
- マージによってmasterにpushが発生し、デプロイ用ワークフロー(deploy_prod.yml)が実行される。
deploy_prod.ymlは次のようになっています。
name: deploy_prod on: push: branches: - master jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 # デプロイ処理...
GitHubでの設定変更(Rule Sets)
マージキューを使うには、GitHubの設定画面から「Rule Sets」(従来はブランチプロテクションルール)を設定します。
多くのケースではすでにステータスチェック必須(Require status checks to pass)の設定がされていると思いますので、その場合は「Merge Queue」を追加でONにするだけです。

GitHub ActionsのCIワークフロー変更
PRからマージキューに積まれた際、gh-readonly-queue/xxxxというブランチが作成されるため、CIワークフロー(ci.yml)に以下の変更が必要になりました。
name: ci on: push: branches: - '**' - '!master' + - '!gh-readonly-queue/**' tags-ignore: - '*' + merge_group: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: id-token: write contents: read pull-requests: write jobs: ci: uses: ./.github/workflows/_ci.yml secrets: inherit
ポイント
merge_groupイベントを追加することで、マージキューにエンキューされたときにCIが実行されます。gh-readonly-queue/**を除外することで、不要な二重実行を防ぎます。
注意点
merge_groupイベントは単独で定義できず、必ず他のイベントと一緒に定義する必要があります。
The merge_group event cannot be the only event defined in a workflow.
変更が不要なワークフロー
デプロイ系ワークフロー(例:deploy_prod.yml)など、masterブランチへのpushのみで動作するワークフローは、マージキュー対応後も変更不要です。
おわりに
GitHubのマージキューは導入が比較的簡単ですが、既存のGitHub Actionsにも影響を与えます。本記事を参考に、スムーズにマージキューを導入していただければ幸いです。 最後までお読みいただき、ありがとうございました!