LoginSignup
0
0

Githubでマージキューを使用し、PRをマージ時にCIを実行する

Posted at

はじめに

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_requestmerge_groupを設定するだけです。
これで、PR作成・更新時と、PRをマージキューでマージする時に実行されます。
(もし、PR作成・更新時と、PRをマージキューでマージする時に異なる内容のチェックをしたい場合は、PR時とマージ時でチェック内容を変更したい場合を参照ください)

Githubでマージキューを設定

  • リポジトリの設定からブランチの設定を開く
    image.png

  • 対象のブランチを設定
    image.png

  • プルリクエストを必須とする設定を追加(各項目の設定はお好みで)
    image.png

  • マージ前のチェック項目を設定(一度、ワークフローを実行していないとジョブ名が出てこないのでご注意を)
    image.png

  • マージキューの設定
    image.png

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の名前を共通にしておくことです。
同じ名前にしておかないと、実行されませんのでご注意ください。

.github/workflows/ci.yaml
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."
.github/workflows/marge.yaml
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."
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0