📆
GitHub Actionsのワークフロー内でpushイベントなのかscheduleイベントなのかを判定したい
GitHub Actionsである処理をpushとscheduleの両方から実行する際にscheduleの時はこのステップは処理したくないという要件があり、調べても参考事例を見つけられなかったので記事にしておこうと思います。
最初に結論
githubコンテキストに event_name
というプロパティがあり、ここにワークフローがトリガーされたイベント名が入っています(pushなら'push'、scheduleなら'schedule'、pull_requestなら'pull_request' です)。
これを使うことでscheduleの場合だけこのステップを実行する/しない、という処理がかけます。
サンプルコード
Node.jsのアプリケーションをデプロイするワークフローでmainブランチにコミットが積まれたときと定期的にデプロイをかけたいケースを想定していて、スケジューラーでデプロイが成功した時は通知をしないという要件を満たしてみます。
name: Deploy
on:
push:
- main
schedule:
- cron: 0 21 * * *
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Resolve frontend dependencies
run: yarn install
- name: Deploy
run: yarn deploy
- name: Notify to slack on success
# scheduleの場合はデプロイ成功通知を送らないようにする
if: ${{ success() && github.event_name != 'schedule' }}
uses: tokorom/action-slack-incoming-webhook@main
env:
INCOMING_WEBHOOK_URL: https://hooks.slack.com/services/hogehoge
with:
text: "デプロイが完了しました。"
- name: Notify to slack on failure
if: ${{ failure() }}
uses: tokorom/action-slack-incoming-webhook@main
env:
INCOMING_WEBHOOK_URL: https://hooks.slack.com/services/hogehoge
with:
text: "デプロイに失敗しました。"
${{ github.event_name != 'schedule' }}
を使うことでscheduleイベントなら...と分岐を使うことができます。
おわりに
今まではCircleCIを使っていてGitHub Actionsにはまだまだ慣れていないのですが、.github/workflows/
にファイルを設置するだけでジョブが実行されるのは楽で嬉しいですね。
日本語ドキュメントのアンカーが壊れていたり、今回のような細かい要件を満たすための参考事例がCircleCIと比べると少ないように感じるので今後のコミュニティの成長に期待したいと思います!😸
Discussion