GitHub
CI
merge
CircleCI
Mergify.IO

GitHub で CI をパスしたら自動マージさせたい。特定のファイル変更のみ限定 with Mergify.IO

Automated Merging with Mergify.IO


GitHub で PR 後、CI のテストをパスしたら Mergify.IO で自動的にマージさせたいが特定のファイルが変更された場合のみ自動マージさせるように限定したい。


例えば、下記の構成で PR(Pull Request)があった場合、CircleCI のテストをパスしても my-script.shrun-tests.sh に変更があった場合は自動マージさせず、JSON のデータ・ファイルが変更された場合のみ自動マージさせたいのです。

$ ls

my-script.sh data1.json data2.json run-tests.sh


TL;DR


.mergify.yml の PR 時の条件(pull_request_rules ルール)で conditions キーの files 属性を駆使する。


data1.json data2.json のどちらか(or)、もしくは両方(and)のファイルに変更があった場合のみ自動マージさせる設定は以下の通り。


AかBもしくはABの両方

pull_request_rules:

- name: automatic merge on CircleCI success if data1.json is changed
conditions:
- "status-success=ci/circleci: build"
- base=master
- files=data1.json
- "#files=1"
actions:
merge:
method: merge
strict: true

- name: automatic merge on CircleCI success if data2.json is changed
conditions:
- "status-success=ci/circleci: build"
- base=master
- files=data2.json
- "#files=1"
actions:
merge:
method: merge
strict: true


data1.json data2.json両方(and)のファイルに同時に変更があった場合のみ自動マージさせる設定は以下の通り。


AとBの両方

pull_request_rules:

- name: automatic merge on CircleCI success if data1.json is changed
conditions:
- "status-success=ci/circleci: build"
- base=master
- files=data1.json
- files=data2.json
- "#files=2"
actions:
merge:
method: merge
strict: true

ポイントは - files=<FILE NAME> と対象ファイルを限定し、- "#files=n" で変更されたファイル数を指定する組み合わせで、特定のファイルのみの変更の条件を作れます。

複数のファイルを指定したい場合、- files=["FILE1", "FILE2"] といった形式には対応していないので、 - files=<FILE NAME> を複数個指定します

また、同じ条件(condition)内での or には対応していないのですが、ルールを追加(別々の conditionに)することで or 対応できます。





  1. Mergify.IO とは GitHub Marketplace から追加できる GitHub App で、PR 時のマージ操作に特化した CI の1種です。(オフィシャルサイト
    PR があった場合、CI のテストをパスし、コードレビューで n 件の承認(Approve)が付いたら自動的にマージさせ、作業ブランチを削除する、といった自動化ができます。CI は CircleCI に限らず TravisCI や自作 GitHub App でも条件に追加できます。オープンソースの場合は無料で利用できます。
    少人数で開発されており、まだ若いサービスなので細かいところでドキュメントの情報が足りないのですが、2019/06/11現在、本体エンジン精力的に開発されています。
    Mergify.IO の使い方は、一般的な GitHub App の追加同様、GitHub Marketplace を開き、GitHub アカウントでログイン後、リポジトリに紐づけます。Mergify.IO の設定ファイルである .mergify.yml ファイルをリポジトリのルートに置き、一度監視対象のブランチ(master など)に反映させると、以降の PR で、その設定ファイルにそったマージ操作を行えます。
    (「いいね」が5件付いたら、導入の具体的な手順の記事を書きたいと思います。)