🐙

GitHub Actions workflow_runがnot workingな時はブランチを疑う

2021/12/26に公開

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
.github/workflows/hello.yml
name: Hello
on: push

jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Hello"
.github/workflows/world.yml
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する内容が違うだけです。

.github/workflows/japan.yml
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