前提
例えば以下のような、PRのイベントでもマージ後のpushでも実行するgithub actionがあるとする
on:
push:
branches:
- develop
- feature/**
- main
pull_request:
ここから更に、以下の要求を満たしたい
- PRへのpushなどのイベントのときは、古い実行を取り消して新しい実行だけにしてCI待ち時間を効率化したい
- ただし
branches
へのpushイベントのときは、不整合が起きないように毎回新しいactionを全部実行するままにしたい
方法
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.sha }}
cancel-in-progress: true
github.workflow
: ワークフロー名
github.event.number || github.sha
: on pull_requestならPR番号が入っているので、PRでグループ化される。on pushならそれがundefinedになり github.sha
が使われ、pushのたびに別グループになる
参考
余談
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
でも、github.head_refはPRのときだけhead branch名が入る ので同等のことができるかもしれない