Release process¶
A release starts when a version tag reachable from main is pushed. CHANGELOG.md has one section
per version and that section becomes the release description.
Versioning¶
The module uses semantic versioning, see Compatibility. Three places carry the version and must agree:
estVersioninclient.go, with thev, which the clientUser-Agentand the serverServerheader reportversionStringincmd/estclient/flags.goandcmd/estserver/flags.go, without thev
The tests fail when the tools and the library report different versions.
Steps¶
- On
dev, complete the## [X.Y.Z] - <date>section inCHANGELOG.mdand set the versions. -
Merge
devintomainand run the release check there:GLOBALSIGN_EST_SKIP=hsm,tpm VERSION=v1.4.1 make release-checkIt exports
HEADwithgit archive, verifies, builds, vets and tests the export and imports it from a separate module, so it catches files that are untracked or only present locally. WithVERSIONit also checks thatCHANGELOG.mdhas a dated heading for the version and no unreleased section and thatestVersionmatches. -
Create a signed tag and push
mainand the tag:git tag -s v1.4.1 -m 'v1.4.1' git push origin main v1.4.1 -
The release workflow repeats the check on the tag, builds the source archives, the SBOM and the checksums, attests their provenance and creates a draft release with the changelog section as its description. Review the draft and publish it.
Do not publish a release in the GitHub web interface. Publishing creates the tag, which starts the
workflow. The workflow then refuses to rebuild a release that is already published. A draft that
already exists for the tag is updated and gets the artifacts. Push only the new tag. Clones made from globalsign/est hold its
v1.0.x tags, which declare the old module path.
Verifying a release shows how users check the artifacts.