はじめに
Githubでマージキューの設定でいくつかつまづいた点があるので、設定方法を残しておきます。
チェック動作のイメージ
この記事の内容を実行すると、下記のような順番で自動テストなどのチェックが走ります。
- PR作成・更新時、GithubActionsのワークフローで自動テストなどのCIを実行
- 上記のPRをマージ時、GithubActionsのワークフローで自動テストなどのCIを実行
(正確に言うと、PRをマージキューに追加し、マージする前にGithubActionsのワークフローで自動テストなどのCIを実行するという動作になります)
Organizationでリポジトリを作成
Githubの個人アカウントだと、マージキューは使えないみたいです。
したがって、Organizationでリポジトリを作成する必要があります。
私の場合、私用のOrganizationがなかったので、新しく作成しました。
FreeプランのOrganizationでPublicリポジトリを作成するか、Privateリポジトリにする場合は有料プラン(GitHub Enterprise)で作成する必要があるみたいです。
Githubの設定画面のOrganizationsから無料で作成できるので、とりあえず試してみたい方はそちらから作成して、リポジトリを作成してください。
お試しで使う場合はPublicでリポジトリを作成することをお忘れなく。
マージキュー時に使用するワークフローファイルの作成
後ほど、説明しますが、マージキュー時にワークフローを実行するために、一度ワークフローを実行しておく必要があります。
したがって、まず実行したいワークフローファイルを実行してください。
本記事ではサンプルとして、以下のようなワークフローファイルを作成します。
name: ci
on:
pull_request:
merge_group:
jobs:
CI:
name: CI
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run on pull_request and merge_group
run: echo "This step runs on pull_request and merge_group events."
- name: Run only on merge_group
if: github.event_name == 'merge_group'
run: echo "This step runs only on merge_group events."
要点は、on
に、pull_request
とmerge_group
を設定するだけです。
これで、PR作成・更新時と、PRをマージキューでマージする時に実行されます。
(もし、PR作成・更新時と、PRをマージキューでマージする時に異なる内容のチェックをしたい場合は、PR時とマージ時でチェック内容を変更したい場合を参照ください)
Githubでマージキューを設定
PR時とマージ時でチェック内容を変更したい場合
同じファイル内で処理を分ける方法と、別ファイルで管理する方法があります。
同じファイル内で処理を分ける
下記ファイルのように、 if: github.event_name == 'merge_group'
を設定し、特定のイベントの時のみ実行するように設定します。
name: ci
on:
pull_request:
merge_group:
jobs:
CI:
name: CI
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run on pull_request and merge_group
run: echo "This step runs on pull_request and merge_group events."
- name: Run only on merge_group
if: github.event_name == 'merge_group'
run: echo "This step runs only on merge_group events."
別ファイルで管理する
ポイントはjobの名前を共通にしておくことです。
同じ名前にしておかないと、実行されませんのでご注意ください。
name: flutter_ci
on: pull_request
jobs:
CI:
name: CI
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run on pull_request
run: echo "This step runs on pull_request events."
name: merge
on:
merge_group:
jobs:
CI:
name: CI
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run on merge_group
run: echo "This step runs on merge_group events."