fix: correct the published image tag in release notes and drop duplicate latest - #56
Merged
Conversation
docker/metadata-action's `type=semver,pattern={{version}}` strips the
leading `v` from the git tag, so `v0.1.0` publishes as image tag `0.1.0`.
The release body built its pull command from `github.ref_name` (the raw
git tag), advertising `:v0.1.0` — a tag that is never pushed. DOCKER.md
had the same `:vX.Y.Z` mistake in both the pull command and the compose
override example.
Use `steps.meta.outputs.version` for the release body so it always
matches the primary tag actually pushed.
Signed-off-by: Anna Effort <anna.effort@ibm.com>
metadata-action's default flavor is latest=auto, which already emits "latest" for stable semver refs and omits it for prereleases. The explicit type=raw,value=latest line duplicated that, so every stable release derived "latest" twice (tag-names: 0.1.0, 0.1, latest, latest). Pin latest=auto explicitly rather than relying on the implicit default, and drop the redundant type=raw line. The prerelease guard it was carrying is now handled by auto's semver parsing instead of a string check for "-" in the ref name. Signed-off-by: Anna Effort <anna.effort@ibm.com>
a-effort
force-pushed
the
fix/ghcr-release-image-tag
branch
from
August 20, 2026 17:09
6dfc36e to
f4dae43
Compare
gcgoncalves
approved these changes
Aug 21, 2026
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.
Problem
docker pull ghcr.io/contextforge-org/contextforge-web-ui:v0.1.0fails withnot found.The image published fine — the advertised tag is just wrong.
docker/metadata-action'stype=semver,pattern={{version}}strips the leadingvfrom the git tag, so git tagv0.1.0publishes as image tag0.1.0. What's actually on GHCR:But the release body built its pull command from
github.ref_name— the raw git tag — so it advertised:v0.1.0, a tag the workflow never pushes.DOCKER.mdhad the same:vX.Y.Zmistake in both the pull command and the compose-override example. This would have been wrong for every future release, not just v0.1.0.Changes
80c1024— document the tag that's actually publishedsteps.meta.outputs.version(the primary derived tag) instead ofgithub.ref_name.DOCKER.md: pull command and compose example corrected to:X.Y.Z, plus an explicit note that the image tag drops thevthe git tag carries — this is the part that surprised people.6dfc36e— stop derivinglatesttwiceThe metadata step derived
latesttwice on every stable release ("tag-names":["0.1.0","0.1","latest","latest"]). metadata-action's default flavor islatest=auto, which already emitslatestfor stable semver refs, so the explicittype=raw,value=latest,enable=...line was redundant.Worth noting the redundant line was not a broken prerelease guard —
latest=autoexcludes prereleases by design ("Pre-release (rc, beta, alpha) will only extend{{version}}"), so prereleases were protected from clobberinglatestby two mechanisms instead of one. This was cosmetic.latest=autois now pinned explicitly rather than left implicit, and the prerelease guard is handled by auto's semver parsing instead of a string check for-in the ref name.Verification
Confirmed against the live registry (anonymous token, so the package is public):
npm run format:checkpasses.Not verifiable without cutting a release: both changes only take effect on a tag-push run, so neither is exercised by CI here. The workflow's
workflow_dispatchcan be dispatched from the tag to prove it, but that would re-push0.1.0/latestover the existing digest.Follow-up (not in this PR)
:v0.1.0— its notes were rendered at run time. Being corrected by hand separately.prerelease: ${{ contains(github.ref_name, '-') }}should evaluate false forv0.1.0. Possibly toggled manually. Flagging in case it's unintended.