GitHub Actions workflow_runがnot workingな時はブランチを疑う
GitHub Actionsには「あるworkflowの実行開始/終了をトリガーとする」ことができるworkflow_runという機能があります。
初めてこれを使ってCIを整備しようとしたのですが、途中までworkflow_runが動かない、なぜ?となったのでメモ。
TLDR
Events that trigger workflows - GitHub Docs
This event will only trigger a workflow run if the workflow file is on the default branch.
on: workflow_run
のworkflowファイルがデフォルトブランチにプッシュされていないと機能しないようです。
この点、自分はデフォルトブランチから切った機能ブランチで作業していました。上の仕様を知らなかったため、プッシュしても反応しない理由がわからず首を傾げていました。
サンプルリポジトリを作って検証してみる
GitHub上で検証用リポジトリを作成しました。以下のようなworkflowsを作りデフォルトブランチであるmainにプッシュします。
- Hello(hello.yml): プッシュされる度に動作するworkflow
- World(world.yml): Helloが完了する度に動作するworkflow
name: Hello
on: push
jobs:
hello:
runs-on: ubuntu-latest
steps:
- run: echo "Hello"
name: World
on:
workflow_run:
workflows:
- Hello
types:
- completed
jobs:
world:
runs-on: ubuntu-latest
steps:
- run: echo "World"
すると、
意図通り、Helloが実行され、その後Worldも実行されました。
ブランチを切ってさらにworkflowファイルを追加する
ここでmainからtestというブランチを切り、そこに下記のjapan.ymlを加えてプッシュします。
- Japan(japan.yml): Helloが完了する度に動作するworkflow
基本的にWorld workflowと同じ内容で、echoする内容が違うだけです。
name: Japan
on:
workflow_run:
workflows:
- Hello
types:
- completed
jobs:
japan:
runs-on: ubuntu-latest
steps:
- run: echo "Japan"
testブランチにプッシュした結果が以下です。
HelloとWorldは動きましたがJapanは反応しません。
デフォルトブランチ自体を変更してみる
Japanを動くようにしてみましょう。
実際のプロジェクトではtestをmainにマージするのが一般的になると思いますが、今回はデフォルトブランチをmainからtestに変更する方法で試してみます。
デフォルトをtestに変更した後、もう一度プッシュしてHelloを発火させると、
3つのworkflowsがすべて実行されました。
Discussion