STAC-25494 stagger godeps-cache builds instead of gating on concurrency - #450
Merged
LouisParkin merged 1 commit intoJul 30, 2026
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
godeps-cachebuild job'sconcurrencygroup does not queue the three consumer workflows — it cancels one of them.The bug
GitHub allows one running and one pending entry per concurrency group. A third entrant evicts the pending one, and
cancel-in-progress: falsedoes not change that — it only governs the running entry. Cancellation then propagates to the caller: dependent jobs are skipped and the whole run ends ascancelled.Seen on #448 (run 30542704807, the workspace-tidy commit):
It fires on precisely the PRs that change the module graph — the ones that most need the unit suites. And it reports
cancelled, notfailure, so it reads as "someone pushed again" rather than "your tests never ran".The fix
Drop the group; stagger instead.
godeps-cache.ymltakes abuild_delay_secondsinput and, before building, polls the registry for the tag for that long, exiting early if a sibling publishes it.0— designated builder. It is the longest workflow of the three, so it is the one that must not wait.900— covers a ~7m build plus runner scheduling.Nothing is ever cancelled. If the builder fails or is slow, the waiters time out and build it themselves, so a bad sibling costs latency, not correctness. The idempotent pre-push
docker manifest inspectstays as the backstop, and the tag is content-addressed, so a duplicate push is harmless.Validation
zizmor --collect=workflows,actions,dependabot .— no findings.bash -n.godeps-cachejobs should short-circuit at the metadata lookup without entering the wait. Exercising the wait path needs a PR that changesgo.mod— STAC-25466 tidy the Go workspace manifests #448 is that PR, and rebasing it onto this will show the three-way race resolving without a cancellation.Jira: STAC-25494