mudflaps releases are tag-driven: pushing a vX.Y.Z tag triggers the
Release workflow, which runs GoReleaser to build
the binaries, the checksums, and the multi-arch container image, publishes a
GitHub Release, and pushes the image to ghcr.io/intentius/mudflaps.
-
Update the changelog. In
CHANGELOG.md, move the## [Unreleased]items into a new## [X.Y.Z] - YYYY-MM-DDsection and refresh the link references at the bottom. Commit it tomain(via PR). -
Cut the release from a clean
main:just release X.Y.Z # or: make release V=X.Y.ZThe recipe refuses to proceed unless the working tree is clean, you are on
main, the changelog has a## [X.Y.Z]section, andbuild/vet/gofmt/testall pass. It then tagsvX.Y.Zand pushes the tag. -
Watch the release build:
gh run watch --repo INTENTIUS/mudflaps
When it's green, confirm the GitHub Release has its assets and the image is pullable:
docker pull ghcr.io/intentius/mudflaps:X.Y.Z
A newly created GHCR container package is private by default. If
docker pull returns unauthorized, make the package public once:
org → Packages → mudflaps → Package settings → Change visibility → Public.
This is a one-time setting; later releases inherit it.
mudflaps follows semantic versioning. While pre-1.0, minor bumps carry new endpoints / behavior and patch bumps carry fixes.