From 7378a3a8153a519c2c98137f6e0cea375b39693a Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Tue, 25 Aug 2026 10:08:15 +0200 Subject: [PATCH] ci(quality): give every event its own concurrency lane, not just main and development MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The event suffix applied only when ref_name was main or development, so on every other branch push and pull_request computed the SAME group and cancel-in-progress made them kill each other — contradicting the comment above it, which already says push, dispatch and schedule each get their own lane. Reachable since the push allow-list widened on 2026-08-14 to include feat/**, fix/**, perf/**, refactor/** and chore/**: those branches now get both a push run and a pull_request run for one commit. quality / Quality Report is a needs:-gated aggregator that reports FAILURE when its dependencies are cancelled, so this shows up as a red gate on a PR that was never evaluated, and re-running collides the same way. Already applied to openregister, integriq and pipelinq, where cancellations went to zero. See ConductionNL/.github#563. --- .github/workflows/code-quality.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index ad607d7d..e7602f89 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -84,7 +84,25 @@ concurrency: # This is hermiq's form, already live there. Pull requests keep the bare # group (so a PR still supersedes its own earlier run); push, dispatch and # schedule each get their own lane. - group: quality-${{ github.head_ref || github.ref_name }}${{ (github.event_name != 'pull_request' && (github.ref_name == 'main' || github.ref_name == 'development')) && format('-{0}', github.event_name) || '' }} + # + # THE BRANCH RESTRICTION IS GONE, because it contradicted the sentence above. + # + # The suffix used to apply only when `ref_name` was `main` or `development`, + # so on every OTHER branch push and pull_request computed the SAME group — + # and `cancel-in-progress` made them kill each other. That became reachable + # when the push allow-list widened on 2026-08-14 to include `feat/**`, + # `fix/**`, `perf/**`, `refactor/**` and `chore/**`: those branches now get + # both a push run and a pull_request run for one commit. + # + # `quality / Quality Report` is a `needs:`-gated aggregator and reports + # FAILURE when its dependencies are CANCELLED, so the collision shows up as a + # red gate on a PR that was never actually evaluated — and re-running collides + # the same way. Measured on openregister#2821: a push run left queued and a + # pull_request run cancelled, 18 seconds apart, on one commit. + # + # A branch name is not a unique lane when two event types can each produce a + # run for it, so the event is now always part of the key. + group: quality-${{ github.head_ref || github.ref_name }}${{ github.event_name != 'pull_request' && format('-{0}', github.event_name) || '' }} cancel-in-progress: true # Permission CEILING for the called quality pipeline. GitHub statically