Check! GitHub Actions: 別のワークフローの実行リクエストまたは完了を契機にワークフローを実行する
Prologue
GitHub アクションで、「ワークフローが終わったら/リクエストされたら、実行する」というトリガをご紹介します。
私の例では、このようなニーズに対して対応することができました。
-
first-workflow.yml
:pull_request
やpush: [main]
などのトリガでテストを行うワークフロー実行 -
second-workflow.yml
:main
ブランチへpush
されたときにだけ、デプロイするための別のワークフローを実行
workflow_run
指定したワークフローを契機に実行されるトリガ on.workflow_run
は、ワークフローがリクエストされた、または実行完了した契機で呼び出されるトリガです。
イベントタイプは completed
または requested
を指定でき、ワークフローの実行が終わった時点を契機にしたい場合は completed
を指定します。
また、特定のブランチによって実行させたいときは、 branches
または branches-ignore
で振り分けることができます。
例えば以下のように記載すると、main
ブランチに対する first-workflow
という名前のワークフローの実行が終わったらこのワークフローを実行する、というトリガを設定することができます。
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 の機能を使ってワークフローの実行ログにエラーとして表示することができます。
他に、file
、line
、col
の表示も設定できます。エラー表示以外にも、様々な workflow comand があるので、詳しくはこちらのドキュメントをご参照ください。
Epilogue
このトリガのおかげで、すっきりしたワークフローを作ることができて満足です🤓
Discussion