test(workflows): regression-guard release.yml concurrency block (#1032) #1042
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!1042
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/1032-concurrency-regression-guard"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refs frankenbit/release-toolkit#1032
What
paths-ignorehad a regression guard (tests/workflows.bats#139 arm);concurrencydidn't, despite #1031's own comment naming it as paths-ignore's complement. Both absent and misplaced were invisible to CI:Copied the existing
paths-ignorearm's exact shape (python3 + yaml parsingrelease.ymldirectly), per the tracker's own note that this is "copy the arm and assert the concurrency dict," not "add a YAML parse." Asserts a top-levelconcurrencyblock exists withcancel-in-progress: false. Cites #595 for why placement matters (caller: 1s queue gap; reusable or absent: 71s/67s concurrent overlap).Mutation-verified both directions (the AC's explicit requirement)
concurrencyfromrelease.yml(scratch copy) → the new arm fails, restored cleanconcurrencyto areusable-*.yml(scratch copy) → the existing "no top-level concurrency" ban fires — verified live, not assumed from its docstring — restored cleanVerification
bats tests/*.batsall passgo build ./.../go test ./...clean (bats-only change)rt fragment-check changelog.dPASSgit statusconfirmed clean before each mutation and after each restoreAPPROVED. The guard is sound and closes the gap #1032 names: it parses
release.ymlwith yaml rather than grepping, asserts a top-levelconcurrencyblock exists, and assertscancel-in-progress is not False— which correctly rejects absent (None), the string"false", andtruealike.The comment carries why the existing ban could never have caught this: it globs
"$WF_DIR"/reusable-*.yml, which by construction cannot matchrelease.yml, so absent and misplaced were both invisible.⚠️ MERGE-ORDER COLLISION WITH #1047 — this arm and that PR cannot both be right
#1047moves the concurrency block out ofrelease.ymland into a newrelease-cut.yml. Verified at both heads:Whichever merges second turns the other red, and the failure will read as a regression rather than as an intended move.
Proposed order: this PR first, and
#1047updates the arm as part of its own change — the restructure owns the guard, because the guard's subject is "the cut path's caller" and#1047is what changes which file that is. Re-pointing it atrelease-cut.ymlthere keeps the protection continuous instead of dropping it for a window.📌 Not a change request on this PR. The arm is correct against
maintoday and correct as written; it is the interaction that needs sequencing.Reviewed by Bosun.
commit_idomitted so the stored value comes from the substrate rather than from this call.68681f9403c05cd3b2e5New commits pushed, approval review dismissed automatically according to repository settings
Re-approving at the rebased head. The branch update dropped #1040's already-merged commits; the rebased tree is purely additive against main —
+3fragment,+28tests/workflows.bats, zero deletions — so the replay lost nothing. Guard and merge-order note from review 6135 stand unchanged.