From 0cd95b6c93f64fb010ee9684a339a493b306f7b4 Mon Sep 17 00:00:00 2001 From: Alex Kanitz Date: Tue, 10 Nov 2026 20:57:49 +0100 Subject: [PATCH] ci: cancel PR runs only for new commits A newer run on the same commit (e.g. for an edit of the description) cancelled the run in progress, and its failed gate then blocked the merge. Only the first attempt of a run for a pull request's synchronize action now cancels runs in progress, as in "Cancelled runs" of actions/gate/README.md in elixir-cloud-aai/.github. Part of elixir-cloud-aai/.github#73 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_011FSoqMpmDCfbACLj3uy6xV --- .github/workflows/ci.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b8dce10a..4f29a5e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,11 +21,14 @@ on: permissions: contents: read -# Cancel superseded runs of a pull request; runs for pushes get their own -# group, so that runs for successive pushes are not dropped. Runs for edits -# that leave the title unchanged (e.g. of the description, also by bots) -# share a group of their own, so that they cancel each other but not the -# run for the pull request's commit +# Only a new head commit of a pull request cancels its runs in progress +# (action `synchronize`, first attempt); runs for other actions and reruns +# wait, so that a run on the same commit never leaves a cancelled, failed +# `CI passed` (see "Cancelled runs" in `actions/gate/README.md` of +# `elixir-cloud-aai/.github`). Runs for pushes get their own group, so that +# none is dropped. Runs for edits that leave the title unchanged (e.g. of +# the description, also by bots) share a group of their own, so that they +# don't wait for the run for the pull request's commit concurrency: group: >- ${{ github.workflow }}-${{ @@ -33,7 +36,10 @@ concurrency: github.event.action == 'edited' && !github.event.changes.title && format('{0}-edited', github.ref) || github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} + cancel-in-progress: >- + ${{ github.event_name == 'pull_request' + && github.event.action == 'synchronize' + && github.run_attempt == 1 }} jobs: