Release process¶
Maintainer runbook for cutting a new Lintel release.
Cadence¶
- Patch releases (
0.1.x) as needed for bug fixes, ideally within a week of the fix landing onmain. - Minor releases (
0.x.0) roughly monthly once v1.0 is shipped. - Major releases aligned with the roadmap in
spec.md§21.
Release checklist¶
Prepare¶
- All desired PRs merged to
main. - CI green on
main. -
CHANGELOG.mdhas a populated[Unreleased]section. Move it to[X.Y.Z] - YYYY-MM-DDand update the comparison links at the bottom. - If any scanner pin changed, confirm all platforms have hashes.
- Run
make cilocally as a belt-and-braces check.
Tag¶
Tag names must match vX.Y.Z. The release workflow's trigger is tags: ['v*'].
Build and sign¶
The release.yml workflow runs on tag push and:
- Cross-compiles the binary for every supported platform.
- Computes SHA256 for each artifact.
- Signs each artifact with Sigstore keyless signing, producing
.sigand.sig.crtalongside the binary. - Uploads artifacts + checksums + signatures to the GitHub Release.
Verify the workflow completed and all artifacts are attached before announcing.
Verify the release¶
# Download and verify one platform as a sanity check.
version=0.1.0
curl -fsSLO "https://github.com/MHChlagou/lintel/releases/download/v${version}/lintel-linux-amd64"
curl -fsSLO "https://github.com/MHChlagou/lintel/releases/download/v${version}/lintel-linux-amd64.sha256"
sha256sum -c lintel-linux-amd64.sha256
# Sigstore verification (requires cosign v2.2+).
cosign verify-blob \
--bundle lintel-linux-amd64.sigstore \
--certificate-identity-regexp 'https://github.com/MHChlagou/lintel/.github/workflows/release.yml@.*' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
lintel-linux-amd64
Publish¶
- GitHub Release is published (not draft).
- Changelog link in Release body points at the right
CHANGELOG.mdanchor. - Docs site
mikedeploys the new version and updates thelatestalias. - Announce in Discussions with a short summary of highlights.
Yanking a bad release¶
If a release needs to be pulled:
- Add a yank notice to the top of the GitHub Release body. Do not delete the release - downstreams may already have it pinned.
- Open a tracking issue explaining what was wrong and which version to use instead.
- Cut a patch release with the fix.
- Leave the tag in place. Git tag deletion is a supply-chain footgun.
Docs versioning¶
Lintel uses mike for docs versioning. The docs.yml workflow calls mike deploy --push <version> latest on each tagged release. Users land on /latest/ by default; /<version>/ paths remain addressable forever.