GitHubActionsで実行中のワークフローをキャンセルして最新のみを実行する方法

はじめに

例えば、GitHubActionsのワークフローで以下のような状況があったとする。

特にこのような場合は、すでにあるワークフローが実行中の状況で同一のワークフローが実行される場合に、直前のワークフローをキャンセルして最新のワークフローだけが実行されるようにしたい。そのための設定がGitHubActionsにもあったので残しておく。

設定方法

concurrencycancel-in-progresstrueに設定することで実現できた。concurrencyによってワークフローやジョブの並列実行を制御することができる。

on:
  push:
    branches:
      - develop

concurrency:
  group: deploy-${{ github.ref }}
  cancel-in-progress: true

groupによって同一の値を持つグループの並列実行を制御することができる。例えば、上記のようにdeploy-${{ github.ref }}をグループ名とすることで、ブランチごとに並列実行の制御が可能になる。

また、concurrencyの設定はジョブごとに設定することもできる。

jobs:
  some-job:
    runs-on: ubuntu-latest
    concurrency:
      group: job-something
      cancel-in-progress: true

おわり

これで無駄なワークフローの実行をキャンセルし、GitHubActionsの利用枠を節約することができた。

concurrencyに関する詳細は以下のドキュメントを参照されたい。

Next

Astro製のブログで使っているTailwindCSSをv4にアップグレードする

PR

関連記事