Skip to content

Conversation

@aarongable
Copy link
Contributor

Separate the release workflow into three sequential jobs. The first simply creates a draft release, the second (which can be multiple parallel jobs, if there's a matrix of go versions) builds all the relevant release artifacts and uploads them to container registries and to the release itself, and the third takes the release out of draft mode if and only if the previous jobs succeeded.

This separation allows us to adopt Immutable Releases, which can provide attestations that release artifacts are not modified after they're created. This is because the release only becomes immutable once it is taken out of draft mode, so as long as it's just a draft, multiple different jobs can upload artifacts to it.

Along the way, make a few other small improvements to the release workflow, such as avoiding directly interpolating ${{ github.ref_name }} and using a pinned version of the docker/login-action to authenticate to ghcr.

Fixes #8380

@aarongable
Copy link
Contributor Author

Demonstration of this working can be seen on my personal fork of boulder.

First the release is created as a draft:
Screenshot-2025-10-23T15:47:47-07:00

Then the multi-stage job runs:
Screenshot-2025-10-23T15:48:10-07:00

And when it's done, the release is successfully populated with artifacts from multiple jobs:
image

@aarongable aarongable marked this pull request as ready for review October 23, 2025 23:12
@aarongable aarongable requested a review from a team as a code owner October 23, 2025 23:12
@aarongable aarongable merged commit ac08b11 into main Oct 27, 2025
13 checks passed
@aarongable aarongable deleted the immutable-release branch October 27, 2025 22:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Revamp release workflow to allow for immutable releases

4 participants