Skip to content

ci(publish): build versioned release images on v* tags#60

Merged
roziscoding merged 1 commit into
mainfrom
ci/version-image-tags
Jun 28, 2026
Merged

ci(publish): build versioned release images on v* tags#60
roziscoding merged 1 commit into
mainfrom
ci/version-image-tags

Conversation

@roziscoding

@roziscoding roziscoding commented Jun 28, 2026

Copy link
Copy Markdown
Owner

Summary

Pushing a v* tag now builds and pushes semver-tagged Docker images for both packages (jack and jack-ui), so releases have an immutable, pinnable artifact instead of only the rolling :main.

On a v1.2.3 tag, docker/metadata-action emits:

  • :1.2.3, :1.2, :1, and :latest

:main (branch pushes) and :pr-<n> (PRs) are unchanged.

Notes

  • The bare major tag (:1) only appears from v1.0.0 onward — metadata-action skips :0 during 0.x.
  • Tags are numeric (no v prefix), per the usual convention.

Why now

Needed before cutting a tagged release: create-release.yml already fires on v* (Release + changelog), but publish.yml previously only built :main/:pr-<n>, so a tag produced no versioned image.

Greptile Summary

This PR adds release-image publishing for version tags. The main changes are:

  • publish.yml now runs on pushed v* tags.
  • Backend Docker metadata now emits semver image tags.
  • UI Docker metadata now emits the same semver image tags.

Confidence Score: 4/5

The tag publishing path can move stable image aliases to pre-release builds.

  • Pre-release tags can publish :latest, major, and minor aliases for both images.
  • The broad v* trigger can start a publish run that has no Docker tags to push.
  • Branch and pull request image tags appear unchanged.

.github/workflows/publish.yml

Fix All in Claude Code Fix All in Codex

Reviews (1): Last reviewed commit: "ci(publish): build versioned release ima..." | Re-trigger Greptile

Greptile also left 3 inline comments on this PR.

Pushing a v* tag now builds and pushes semver-tagged images for both the
backend and UI packages (:1.2.3, :1.2, :1, and :latest), so releases have an
immutable, pinnable artifact instead of only the rolling :main. The bare major
tag (:1) appears from v1.0.0 onward (metadata-action skips :0 during 0.x).
@roziscoding roziscoding merged commit ebd52ba into main Jun 28, 2026
9 of 10 checks passed
@roziscoding roziscoding deleted the ci/version-image-tags branch June 28, 2026 15:42
Comment on lines +50 to +51
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Pre-Releases Move Stable Aliases

When a tag like v1.2.3-beta.1 is pushed, these semver patterns still emit :1.2 and :1 for the backend image, while the default metadata flavor also emits :latest. That moves stable-looking aliases from the last stable release to a pre-release container, so users pinned to :1, :1.2, or :latest can receive beta or rc code.

Fix in Claude Code Fix in Codex

Comment on lines +75 to +76
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Pre-Releases Move UI Aliases

The UI image uses the same semver alias patterns, so a pre-release tag like v1.2.3-beta.1 can publish ghcr.io/${{ github.repository }}-ui:1.2, :1, and :latest. Consumers of the stable UI image aliases can be switched to an unstable release image without changing their pin.

Fix in Claude Code Fix in Codex

- main
# Version tags (e.g. v1.2.3) cut release images: :1.2.3, :1.2, :1 (and :latest).
tags:
- 'v*'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Broad Tag Glob Starts Empty Pushes

This trigger matches any tag beginning with v, but the only tag rules added for tag events are semver rules. If someone pushes a matching non-semver tag such as v1, vtest, or v2024.01.01, the workflow runs, branch and PR rules emit no tag, semver rules emit no tag, and the build-push steps run with an empty tag list.

Fix in Claude Code Fix in Codex

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant