💨

GitHub Actionsのworkflow_runトリガーを試してみる

2022/06/06に公開

はじめに

GitHub Actionsのワークフローのトリガーイベントの、「workflow_run」 を試してみました。
https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows#workflow_run
別のワークフローの実行または完了に基づいてワークフローを実行できるので、使いどころは多そう。

※イメージ

想定されるユースケース

  • 単純に、ワークフローを簡素化するために依存する処理を別のワークフローに分割する
  • 複数のワークフローに共通する処理を別の一つのワークフローに共通化して、それぞれから呼び出すようにすれば、ワークフローを簡潔化できたり、保守しやすくする

基本的な使い方

トリガーとなるワークフロー

name: Run Build

on:
  workflow_dispatch:

jobs:
  run-build:
    runs-on: ubuntu-latest
    steps:
      - name: Run Build
        run: |
          echo "Run Build"

workflow_run で呼び出されるワークフロー

name: Run Tests

on:
  workflow_run:
    workflows: [Run Build]
    types:
      - completed

jobs:
  run-test:
    runs-on: ubuntu-latest
    steps:
      - name: Run Test
        run: |
          echo "Run Test"

複数のワークフローをトリガーに指定する

workflow_runイベントに複数のワークフローを指定する場合、どれか一つのトリガーワークフローが実行されれば、ワークフローが実行されます。

on:
  workflow_run:
    workflows: [Staging, Production]
    types:
      - completed

トリガーワークフローの結果を取得してワークフローのstep実行を判断する

トリガーワークフローの結果に関係なくワークフローが実行されてしまう仕様のようなので、
トリガーワークフローの結果を参照して処理を分岐する必要があります。
${{ github.event.workflow_run.conclusion }}これで取得できるようです。

name: Run Tests

on:
  workflow_run:
    workflows: [Run Build]
    types:
      - completed

jobs:
  run-test:
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps:
      - name: Run Test
        run: |
          echo "Run Test"
  on-failure:
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    steps:
      - name: failure
        run: |
          echo "trigger build workflow failed"

トリガーワークフローが成功したときに、run-testジョブだけが実行される

参考

https://zenn.dev/dyoshikawa/articles/5edeedec36f269
https://awesome-linus.com/2022/01/12/github-actions-workflow-run/
https://swfz.hatenablog.com/entry/2022/04/24/183151
https://qiita.com/homoluctus/items/54a696a6953f2be6e7ff
https://qiita.com/masato_makino/items/f8cf20f3d0025d15bac8

Discussion