fix: don't cancel in-flight :latest builds on release-please's follow-up push#75
Merged
Merged
Conversation
…-up push release-please auto-merges its release-bump PR seconds after a feature merge lands on main, so two pushes to main race for the same publish concurrency group. cancel-in-progress:true let the newer (release-bump) push's build get killed by the earlier one instead of the other way around, leaving GHCR's :latest tag built from the pre-bump commit — right code, stale version label — with no visible failure. Confirmed this happened for v1.6.0. Queue instead of cancel so both runs finish and :latest always ends up built from whichever commit landed last.
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.
Summary
:latesttag ended up built from the pre-release-bump commit (d570b1f), not the actual release commit (d662b93,chore(main): release 1.6.0). Confirmed by comparing GHCR manifest digests directly::latest=sha256:f7178f2...,:1.6.0=sha256:ec3377c...— different builds. The:1.6.0/:1.6pinned tags are correct; only:latestwas stale.release.yml'sconcurrency: cancel-in-progress: truetreats every push tomainas competing for onepublish-refs/heads/mainslot. release-please auto-merges its release-bump PR seconds after a feature merge, so two pushes race for that slot — and in this case the newer (release-bump) push's build got cancelled by the timing of the older one, leaving:lateststuck on pre-bump content with no visible failure anywhere (the run just shows "cancelled", easy to miss).cancel-in-progress: false. Both runs now queue and complete in order instead of one killing the other, so:latestalways ends up built from whichever commit landed last onmain. Also refreshed a stale comment in the same file describing an old dispatch-based flow that no longer exists (release-please.yml now relies on its PAT-authored tag push directly).mainand rebuild:latestfrom currentmain(already at 1.6.0), fixing the live GHCR tag as a side effect of merging.Test plan
ghcr.io/v2/strandedturtle/dockpull/manifests/latestvs/1.6.0)Publish imagerun ford662b93(head_branchmain) iscancelled; the tag-triggered run forv1.6.0succeeded independentlyPublish imagerun formaincompletes (not cancelled) and:latest's manifest digest matches:1.6.0'sGenerated by Claude Code