D303 — A preview is an image built on demand, not a pushed tag¶
Decision. An unreleased main is tried on a real deployment through the
manually dispatched preview.yml workflow, which publishes only
ghcr.io/beppetemp/cartographer:<vX.Y.Z-suffix>. Nothing else is released.
Why. Validating a release against a real KB before the release PR is merged
leaves room for fixes that ship in the same version. A pushed v* tag cannot do
that: it runs the whole of release.yml, which moves latest, publishes the
Homebrew cask every macOS user upgrades to and adds an MCP Registry entry, none of
which can be taken back quietly. The cost is a second workflow that has to keep
the same build arguments as the docker job in release.yml.
Alternatives rejected.
- A pre-release tag (v0.18.0-rc.1): it triggers every publishing job above,
and release-please would then compute the next version from a tag it did not create.
- Building and pushing from the maintainer's machine: it needs a local container
runtime with amd64 emulation and a token with write:packages, and it produces
an image no workflow log can account for.
Consequences. The tag must carry a pre-release suffix, so a preview can never
overwrite the image of a real release; the workflow refuses anything else. A
macOS client for the preview is built from source, since there is no cask for it.
A change to the docker job in release.yml must be mirrored in preview.yml.