Release process
- Merge: a maintainer merges the automated Release Please pull request.
- Draft release: Release Please opens a draft GitHub release for the version.
- Tag: Release Please pushes the version tag.
- Release creation: the tag push triggers GoReleaser to build the release artifacts.
- Signing: GoReleaser signs and attests the artifacts with cosign.
- Release ready: the pipeline publishes the release once it is signed and attested.
Creating a release
Section titled “Creating a release”A maintainer creates a release by merging the current Release PR.
A release is ready to create when:
mainis stable and fully tested, and- there are changes waiting to go out.
Prefer multiple, smaller releases over releases that have a greater number of changes.
Release signing
Section titled “Release signing”The Sigstore ecosystem is leveraged for signing executable release outputs. (Docs.)
cosignis used as the signing CLI tool- The
fulciopublic-good instance is used for ephemeral signing certificates - The
rekorpublic-good instance is used for Certificate Transparency record publishing.
The signing process allows some useful attributes of the binaries to be verified:
- the provider of the identity for the build process (i.e. GitHub Actions)
- the build process that was used to generate them (both scripts and compute)
- the Git reference of the code that was used to build the binary
Releases are signed with cosign, with transparency records published to the [public-good Rekor instance].
Testing the release process
Section titled “Testing the release process”It is possible to run GoReleaser locally to test some of the release processes.
(goreleaser must be available.)
# from the root of the local working copygoreleaser release --clean --verbose --skip "announce,validate"This will run the binary and image builds, and publish a temporary image to
ttl.sh. Temporary images can be used in local testing with
docker compose.
Some processes are skipped when doing this:
- binary signing
- image signing
- changelog generation
- GitHub release creation
Thus release testing verifies a proportion of the GoReleaser configuration, and allows the image/binary builds to be integration tested.
