GitHub Actions を使っていると、ファイルパスとブランチのANDが取れたときだけワークフローを動かしたくなることがある。
例えば、各ファイルに紐づくワークフローがあり、あるブランチにマージしたときだけ動かしたいとき。ここでは、未更新ファイルに紐づくワークフローは動いてほしくない。
期待はこう。
ファイル A を更新 → ワークフロー A だけが動く
ファイル B を更新 → ワークフロー B だけが動く
こうすればOK
workflow_A.yml
on:
push:
branches:
- main
paths:
- 'file_A' #このワークフローに紐づくファイル名を指定
ただ、公式Doc に明示的に仕様が書かれていなかったので、いくつかのパターンで検証してみました。
検証
ケース | 期待動作 |
---|---|
ファイル A を編集し main ブランチに push | ワークフロー A が動く |
ファイル B を編集し main ブランチに push | ワークフロー B が動く |
ファイル C を編集し main ブランチに push | どのワークフローも動かない |
ファイル A を編集し test ブランチに push | どのワークフローも動かない |
ファイル構成はこんな感じ。ワークフローの中身はこちら。
.
├── .github
│ └── workflows
│ ├── workflow_A.yml
│ └── workflow_B.yml
├── file_A
└── file_B
└── file_C
検証結果
ケース | 期待動作 | 結果 |
---|---|---|
ファイル A を編集し main ブランチに push | ワークフロー A が動く | OK |
ファイル B を編集し main ブランチに push | ワークフロー B が動く | OK |
ファイル C を編集し main ブランチに push | どのワークフローも動かない | OK |
ファイル A を編集し test ブランチに push | どのワークフローも動かない | OK |
以上の結果から、on.push.branches
と on.push.paths
を併用した場合は、ANDが取れた場合にのみ更新されることが確かめられました。