Skip to content

Commit ca7ba39

Browse files
authored
Merge pull request #5 from TheMaxMur/develop
Release v0.2.1 — fix the release pipeline (draft → provenance → publish)
2 parents 688970f + 3f46cbc commit ca7ba39

2 files changed

Lines changed: 46 additions & 5 deletions

File tree

.github/workflows/release.yml

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@
77
# on a bit-identical rebuild of all eight (a non-reproducible image fails the job
88
# before anything is published), generates a CycloneDX SBOM, hashes everything
99
# into SHA256SUMS, signs that with keyless cosign (sigstore/Fulcio via OIDC — no
10-
# private key), and publishes the GitHub Release.
10+
# private key), and creates the GitHub Release as a DRAFT.
1111
#
12-
# `provenance` then emits SLSA build provenance for every released artifact via
13-
# the slsa-github-generator reusable workflow (also keyless): a consumer can
14-
# verify which workflow, at which commit, on which runner built each .uf2.
12+
# `provenance` emits SLSA build provenance for every released artifact via the
13+
# slsa-github-generator reusable workflow (also keyless) and uploads it to the
14+
# draft: a consumer can verify which workflow, at which commit, on which runner
15+
# built each .uf2.
16+
#
17+
# `publish` un-drafts the release once the provenance is attached — a release
18+
# becomes immutable on publish, so the provenance must land while it's a draft.
1519
#
1620
# The .uf2 images are UNSIGNED for secure boot — cosign + the SLSA provenance
1721
# attest the BUILD, not the boot seal. On a secure-boot device, seal an image
@@ -159,14 +163,15 @@ jobs:
159163
} >> release-notes.md
160164
cat release-notes.md
161165
162-
- name: create the GitHub Release
166+
- name: create the GitHub Release (draft — published after provenance)
163167
env:
164168
GH_TOKEN: ${{ github.token }}
165169
run: |
166170
tag="${{ steps.tag.outputs.tag }}"
167171
gh release create "$tag" \
168172
--title "RS-Key $tag" \
169173
--notes-file release-notes.md \
174+
--draft \
170175
dist/*
171176
172177
# SLSA build provenance for every released artifact, generated + signed in the
@@ -190,3 +195,21 @@ jobs:
190195
upload-assets: true
191196
upload-tag-name: "${{ needs.build.outputs.tag }}"
192197
provenance-name: "rs-key-${{ needs.build.outputs.tag }}.intoto.jsonl"
198+
199+
# Publish (un-draft) the release only after the provenance asset is attached.
200+
# A release becomes immutable on publish, so the draft must carry everything —
201+
# artifacts (build) and provenance (provenance) — before this flips it live.
202+
publish:
203+
needs: [build, provenance]
204+
runs-on: ubuntu-latest
205+
timeout-minutes: 10
206+
permissions:
207+
contents: write # publish (un-draft) the release
208+
steps:
209+
- name: publish the draft release
210+
env:
211+
GH_TOKEN: ${{ github.token }}
212+
run: |
213+
gh release edit "${{ needs.build.outputs.tag }}" \
214+
--repo "${{ github.repository }}" \
215+
--draft=false

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,24 @@ tag: the USB `bcdDevice` build counter (bumped on every behavior change), and
1313

1414
## [Unreleased]
1515

16+
## [0.2.1] — 2026-06-15
17+
18+
No firmware change — `bcdDevice` stays `0x0760` and the eight `.uf2` images are
19+
bit-identical to 0.2.0. This release ships the fixed release pipeline: 0.2.0
20+
published its GitHub Release before the SLSA provenance was attached, and
21+
GitHub's immutable releases rejected the late upload.
22+
23+
### Fixed
24+
25+
- The release workflow now creates the GitHub Release as a draft, uploads the
26+
SLSA provenance to it, then publishes last — so the provenance lands before the
27+
release turns immutable.
28+
29+
### Changed
30+
31+
- All GitHub Actions bumped to their current major versions (off the deprecated
32+
Node 20 runtime).
33+
1634
## [0.2.0] — 2026-06-15
1735

1836
The cycle since 0.1.0. USB `bcdDevice` is now `0x0760` (incremented once per

0 commit comments

Comments
 (0)