Repository navigation
Conversation
actionlint.yml and skill-docs.yml trigger on both push and pull_request but declared no concurrency, so a same-repo PR branch update left stale duplicate Workflow Lint / Skill Docs Freshness runs queued for superseded commits. The heavier workflows (evals, windows-free-tests, make-pdf-gate, version-gate, pr-title-sync) already cancel superseded runs. Add a concurrency group with cancel-in-progress: true to both, keyed on github.head_ref || github.ref_name (head_ref for pull_request, ref_name as the push fallback). Add test/workflow-concurrency.test.ts, a static gate-tier tripwire that fails if any push+pull_request workflow ships without cancel-in-progress. Fixes garrytan#2046 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
|
Thanks for this. Concurrency groups based only on branch names can collide across forks and cancel unrelated runs. Please include repository identity while retaining same-repository push/PR deduplication, and test both intended deduplication and cross-fork isolation. |
|
Thanks for this, @jbetala7. The fix is now on main: actionlint.yml and skill-docs.yml both have concurrency groups keyed on the PR number, so superseded runs are cancelled without cross-fork collisions (fixed in v1.74.0.0, #2721). Closing as superseded; if you still see the problem on the latest gstack, please open an issue with ./setup --status output. |
Problem
actionlint.yml(Workflow Lint) andskill-docs.yml(Skill Docs Freshness) both trigger onpushandpull_requestbut declare noconcurrency. On a same-repo PR branch, every new push leaves the previous (now-obsolete) runs queued/running for superseded commits, and the PR also double-runs them (once for the push, once for the PR). The heavier workflows already cancel superseded runs:evals.yml→concurrency: group: evals-${{ github.head_ref }}+cancel-in-progress: truewindows-free-tests.yml,make-pdf-gate.yml,version-gate.yml,pr-title-sync.yml— same patternThese two always-on lightweight workflows were the only
push + pull_requestones missing it.Fix
Add a
concurrencyblock to both workflows, keyed ongithub.head_ref || github.ref_name—head_refforpull_request, withref_nameas the fallback forpush(wherehead_refis empty), so a rapid push series collapses to the newest run instead of piling up stale ones.Regression test
test/workflow-concurrency.test.ts(gate-tier, free) statically scans.github/workflows/*.yml, parses eachon:block (handles both the inline-array and mapping forms; treatspull_request_targetas distinct frompull_request), and fails CI if any workflow triggered by bothpushandpull_requestlackscancel-in-progress: true. It also pinsactionlint.ymlandskill-docs.ymlexplicitly so a future trigger rename can't silently drop them from the checked set.Testing
bun test test/workflow-concurrency.test.ts→ 5 pass. Proven fail-on-base: reverting the two workflow edits fails 4 of the 5 assertions.actionlint v1.7.11on both edited workflows → clean.version-gateis not triggered (only fires onVERSION/CHANGELOG.md/package.json).Fixes #2046
🤖 Generated with Claude Code