From cf65a13d19bcc33b421672317bade40339ee7b11 Mon Sep 17 00:00:00 2001 From: Marcus Pasell Date: Mon, 3 Aug 2026 18:54:32 -0700 Subject: [PATCH] fix(ci): stop main web runs from queueing behind unapproved runs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The workflow-level concurrency group keyed on github.ref, so every push to main landed in the same group. A run parked at the production/release approval gate keeps the run "in progress" for as long as it waits, holding the group — the next push sat pending behind it, and the push after that cancelled the pending run before it ran a single job. Recent main runs show exactly this: several parked 40-100+ hours at the gate, and newer runs cancelled after 11-22s with zero jobs executed. Fall back to github.run_id instead of github.ref when head_ref is empty, so each main run gets its own group and runs independently. PR behavior is unchanged: still keyed on the branch, still cancels superseded runs. Co-Authored-By: Claude Opus 5 --- .github/workflows/web.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index e01a97322dd..e165c1db533 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -24,10 +24,12 @@ on: workflow_dispatch: # Cancel superseded PR runs (new commits supersede in-flight CI). Keyed on the -# PR branch for PRs; on main, head_ref is empty so runs group by ref and do NOT -# cancel — an in-flight production deploy is never interrupted by a new push. +# PR branch for PRs; on main, head_ref is empty so we fall back to run_id, giving +# every main run its own group. Main runs are therefore independent — a run parked +# at the production/release approval gate never blocks (or is blocked by) the next +# push, and an in-flight deploy is never interrupted. concurrency: - group: web-${{ github.head_ref || github.ref }} + group: web-${{ github.head_ref || github.run_id }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} env: