はじめに
- Github Actionsのワークフローが走る条件として、特定のディレクトリ配下のファイル変更が含まれている場合のみに動くようにしたいがうまくいかなかった。
問題点
- pathsによるディレクトリ指定を行うと、指定したパスに対する変更がトリガーとなるため、"api/**"のように指定するとapi配下のファイルが含まれている場合のみワークフローが動くようになるはずなのだがうまくいかない。
- 具体的には、空コミットでもワークフローが動いたり他のディレクトリ以下の変更のみのときも動いてしまったり動かなかったり挙動が不安定でした、、、。
試したこと(現状)
- pathsの追加
name: "do PHPUnit"
on:
pull_request:
types: [opened, reopened, synchronize]
// ここを追加
paths:
- "api/**" # api配下の変更が含まれている場合のみ実行
jobs:
//...(略)
解決策
-
pull_request
をpush
に変更
name: "do PHPUnit"
on:
push: // ここを変更
paths:
- "api/**" # api配下の変更が含まれている場合のみ実行
jobs:
//...(略)
結果
- 無事api配下のファイルの変更がある場合にのみワークフローが走るようになった。
終わりに
なぜpull_requesだとうまくいかないかはわかりませんが、今回pushで問題なさそうなので今回の変更で対応することにしました。
push
とpull_request
のトリガーされるタイミングの違い。
-
push
- リポジトリへのブランチやタグのプッシュ時にトリガー
-
pull_request
- プルリクエストの活動(作成、更新、同期、再オープンなど)に関連するイベント時にトリガー
動作の文脈
-
push
- 実行はプッシュされたブランチのコンテキスト
-
pull_request
- 実行はマージが行われた後のコード(すなわち、PRのブランチがベースブランチにマージされた状態)のコンテキスト