🐙

Check! GitHub Actions: 別のワークフローの実行リクエストまたは完了を契機にワークフローを実行する

2020/11/01に公開

Prologue

GitHub アクションで、「ワークフローが終わったら/リクエストされたら、実行する」というトリガをご紹介します。

私の例では、このようなニーズに対して対応することができました。

  1. first-workflow.yml: pull_requestpush: [main] などのトリガでテストを行うワークフロー実行
  2. second-workflow.yml: main ブランチへ push されたときにだけ、デプロイするための別のワークフローを実行

指定したワークフローを契機に実行されるトリガ workflow_run

on.workflow_run は、ワークフローがリクエストされた、または実行完了した契機で呼び出されるトリガです。

イベントタイプは completed または requested を指定でき、ワークフローの実行が終わった時点を契機にしたい場合は completed を指定します。

また、特定のブランチによって実行させたいときは、 branches または branches-ignore で振り分けることができます。

例えば以下のように記載すると、main ブランチに対する first-workflow という名前のワークフローの実行が終わったらこのワークフローを実行する、というトリガを設定することができます。

second-workflow.yml
on:
  workflow_run:
    workflows:
      - first-workflow
    branches:
      - main
    types: 
      - completed

おまけ: 契機となったワークフローの結果によって処理を変える

このトリガによって実行されたワークフローでは、 github.event.workflow_run.conclusion に、契機となったワークフローの処理結果が success または failure として設定されています。

たとえば、契機となったワークフローが失敗していたならそのあとに実行するワークフローも処理しないという場合は、下記のように if でチェックして run: exit 1 でジョブを失敗させることができます。

steps:
- name: Make fail if the previous workflow was failed
  if: ${{ github.event.workflow_run.conclusion != 'success' }}
  run: |
    echo '::error::Previous workflow was failed'
    exit 1

おまけ: ワークフローの実行ログにエラーとして表示する

上記の例では、 echo '::error::<message>' という形式でエラーメッセージを出力しています。このように書くと、単に echo するだけでなく、 workflow command の機能を使ってワークフローの実行ログにエラーとして表示することができます。

他に、filelinecol の表示も設定できます。エラー表示以外にも、様々な workflow comand があるので、詳しくはこちらのドキュメントをご参照ください。

Epilogue

このトリガのおかげで、すっきりしたワークフローを作ることができて満足です🤓

Discussion