Release process¶
A release is started by pushing a version tag that is reachable from main and by nothing else.
RELEASE_NOTES.md carries one section per version and that section becomes the release description.
Versioning¶
The module follows semantic versioning under the Compatibility policy.
Release headings use ## vX.Y.Z - D Mon YYYY, for example ## v0.4.0 - 11 Oct 2026, with an
unpadded day and an abbreviated English month. Keep TBD until the release date is set.
Steps¶
- Set the release date in
RELEASE_NOTES.mdand mergedevintomain. -
Run the release check on
main:make release-check VERSION=vX.Y.ZIt exports
HEADwithgit archiveinto a new temporary directory, builds, vets and tests the export and imports it from a separate module, so it catches files that are ignored, untracked or only present locally. It also checks the release notes heading. SetRELEASE_CHECK_DIRto a path that does not exist yet to keep the export somewhere else. -
Tag the release commit on
mainand push the tag:git push origin vX.Y.Z -
The release workflow repeats the check on the tag and creates a draft release with the release notes section as its description. Review the draft and publish it.
Never draft a release in the GitHub UI
Drafting there creates the tag, which starts the workflow against a release that is already published. The workflow refuses to rebuild a published release, so the release and its tag have to be removed before the tag can be pushed again.
Artifacts¶
Each release carries:
| Artifact | Content |
|---|---|
go-pki-cmp-<version>-source.zip and .tar.gz |
The complete tagged source tree |
go-pki-cmp-<version>-sbom.cdx.json |
A CycloneDX software bill of materials with license information |
go-pki-cmp-<version>_SHA256SUMS.txt |
SHA-256 checksums of the archives and the SBOM |
go-pki-cmp-<version>.intoto.jsonl |
A signed provenance bundle covering the artifacts |
Verify a file with gh attestation verify <file> --repo misiektoja/go-pki-cmp. Offline verification
takes --bundle and the provenance file.
Documentation¶
The documentation workflow publishes this site from the default branch to GitHub Pages whenever
docs/, mkdocs.yml or the examples change there. Pull requests and pushes to dev run the strict
build without publishing. The site therefore describes main, which is the latest release plus any
fixes merged since.