A release workflow: image published on a tag, a Forgejo release with notes, and the version shown in the interface #37
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Postulo/postulo#37
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
v0.1.0 was tagged by hand, the image was built by hand on ragnar with
docker compose build, and CI has no image job: the earlier attempt was removed because the runner executes jobs inside a container with no Docker daemon to talk to. Nothing publishes an image anyone can pull, the Compose file builds from source, and the version inpyproject.tomlis displayed nowhere — Server settings (#24) wants it on its Overview page, and Troubleshooting has no way to ask "which version are you running?".Shape
1. On a
v*tag, areleaseworkflow:pyproject.toml's version and thatCHANGELOG.mdhas a section for it; fail loudly otherwise. Releases that disagree with their own changelog are how confusion starts.uv build, and create the Forgejo release with that changelog section as its notes and the two files attached. This part runs on the current runner as it is.2. The image, which the current runner cannot build. Two ways, either acceptable:
dockerlabel, on ragnar (arm64) and, if one is available, an amd64 machine, running the job natively withbuildxfor a multi-architecture image — the Raspberry Pi needs arm64, most servers amd64. This is the conventional path and the one Forgejo's documentation describes.kanikoorbuildah, which needs no privileged runner but is slower and fussier about caching.Either way the result is pushed to Forgejo's container registry as
source.tiagoagueda.com/tiagoagueda/postulo:0.2.0,:0.2and:latest, anddocker/compose.ymlswitches frombuild:toimage:with a pinned minor, so an installation is a pull, not a compile.scripts/check-image.shruns against the pushed image before the tags move.3. The version in the interface.
importlib.metadata.version("postulo")once, in theuicontext processor, shown small in the footer and in full on Server settings → Overview (#24), and returned by/healthzso monitoring can see an upgrade happen.4. The GitHub mirror receives tags with the push; whether it should carry a matching GitHub Release (a second API call from the same workflow) is the open question below.
Classification
Enhancement, to the release process. Not breaking — but the Compose switch to a published image is a change operators will notice, and the upgrade note must say that
build:still works for anyone who wants it.Open questions