同じワークフローが多重実行された場合、concurrencyとcancel-in-progressを設定することで、古いワークフローを自動的にキャンセルできます。
# 5分待機後に完了するAction
name: Stop multiple execution
on:
push:
branches: [ main ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Idle
run: trap "exit 0" TERM; while true; do sleep 30; done
mainブランチへ push されると、このワークフローが実行され、5分間待機します。
待機中に再度mainへpushすると、新しいワークフローが起動し、古い実行中のワークフローは自動的にキャンセルされます。
concurrencyは、groupの値を基準にワークフローをグループ化し、同じグループ内で多重実行が発生した際の動作を制御します。
通常は、古い実行が終わるまで新しい実行は開始されませんが、cancel-in-progress: trueを指定すると、進行中の古い実行をキャンセルして新しい実行を優先する動作に変わります。