Publish a release
Prepare, check, publish, and recover an mm release.
Releases are published by the protected GitHub Actions workflow. A manual workflow run builds packages for checking; it does not publish a stable release.
Before you start
You need permission to create release tags and approve the GitHub release
environment. The release infrastructure must already be configured:
- A dedicated Cloudflare R2 bucket connected to
get.modmon.org, with HTTPS and TLS 1.2 or newer. Disable its publicr2.devURL. - A bucket-scoped read/write token. Store
R2_ACCOUNT_ID,R2_ACCESS_KEY_ID, andR2_SECRET_ACCESS_KEYas protected environment secrets; storeR2_BUCKETas an environment variable. - Protected
v*tags: restrict creation/deletion, prevent updates, and require the release commit to be onmaster. - Cache rules that keep
/releases/**immutable for one year, revalidate/manifest.json, and give root installers a short cache lifetime.
Test infrastructure changes using a separate bucket and hostname before using the public release bucket. Keep credentials out of the repository and logs.
Prepare the candidate
- Update
core/Cargo.toml,Cargo.lock, andCHANGELOG.mdto the same version. - Run
make qualityfrom the repository root. - Run local release preflight:
./scripts/release-certify.sh preflight --output /tmp/mm-release-certification.json
The local report says incomplete until the hosted checks have passed. This is
expected: local checks cannot verify all supported platforms or public downloads.
- Push the candidate commit and run the live workflows for that exact commit: robustness, runtime, secret, Vault, scheduler, remote, local TLS, and supplemental checks. All must succeed; skipped or older runs do not qualify.
- Create a new
vMAJOR.MINOR.PATCHtag on that commit and push it. The version must match the package files and changelog. Never move an existing release tag.
Check publication
The tagged workflow builds x86-64 and ARM64 packages for Linux glibc, macOS, and Windows. It verifies uploads and clean installs before creating the GitHub Release. Check that:
- All workflow jobs passed, including public installation tests.
- The release includes binaries, source, checksums, manifests, and a passing
release-certificate.json. - The public install guide works and
mm --versionreports the new version. mm doctor --check-updatescan read the published manifest.- Earlier versions remain downloadable from
/releases/vMAJOR.MINOR.PATCH/.
Packages currently have no platform code signing or Apple notarization. The included package inventory and build statement do not imply signed provenance.
Recover a failed publication
Keep the workflow log and publication-log.json. Fix the reported upload,
permission, DNS, or cache problem before retrying. An unchanged run may retry
when already-uploaded files match byte-for-byte. Never delete or overwrite a
historical release to make a retry pass.
If source changes are needed, use a new version and tag. Restore a latest-release manifest only from a previously verified release, with its matching installers. Do not point users at a partial release or test bucket.
To rotate publishing credentials, create a replacement bucket token, update the protected environment, test with a non-production rehearsal, then revoke the old token. Revoke suspected compromised credentials immediately and check release file hashes and access logs.