Summary
The Release Benchmarks workflow listens for release: published and later runs
gh release upload ... --clobber. Repository releases are immutable once
published, so the workflow cannot attach its durable Criterion archive at that
point.
The v0.4.5 release is immutable and has no release assets. Its workflow run
stopped earlier at the benchmark job timeout, but after that runtime failure is
fixed, the current upload step will still be unable to mutate the published
release.
Current State
.github/workflows/release-benchmarks.yml checks out the published tag, saves
and packages Criterion baselines, then uploads them to the already published
release with --clobber.
docs/RELEASING.md instructs maintainers to publish the GitHub release first
and then verify the workflow-created durable asset.
- The temporary Actions artifact is retained for 30 days and is explicitly not
a substitute for the release asset.
Proposed Changes
- Create the tagged GitHub release as a draft before running release
benchmarks.
- Trigger the release benchmark workflow for an explicit stable semver tag,
and fail closed unless that tag resolves to the expected mutable draft.
- Check out and benchmark that exact tag, package the complete baseline, and
upload it to the draft release.
- Publish the draft only after the durable asset upload succeeds.
- Define safe rerun behavior without relying on post-publication
--clobber,
while preserving concurrency and least-privilege permissions.
- Update release and benchmarking documentation, plus workflow validation and
any repository-owned tests, to match the new sequence.
Benefits
- Every immutable release is published with its durable benchmark evidence
already attached.
- Failed benchmark or upload runs leave a recoverable draft instead of a public
release with missing assets.
- The documented verification step reflects behavior GitHub permits.
Acceptance Criteria
Summary
The
Release Benchmarksworkflow listens forrelease: publishedand later runsgh release upload ... --clobber. Repository releases are immutable oncepublished, so the workflow cannot attach its durable Criterion archive at that
point.
The v0.4.5 release is immutable and has no release assets. Its workflow run
stopped earlier at the benchmark job timeout, but after that runtime failure is
fixed, the current upload step will still be unable to mutate the published
release.
Current State
.github/workflows/release-benchmarks.ymlchecks out the published tag, savesand packages Criterion baselines, then uploads them to the already published
release with
--clobber.docs/RELEASING.mdinstructs maintainers to publish the GitHub release firstand then verify the workflow-created durable asset.
a substitute for the release asset.
Proposed Changes
benchmarks.
and fail closed unless that tag resolves to the expected mutable draft.
upload it to the draft release.
--clobber,while preserving concurrency and least-privilege permissions.
any repository-owned tests, to match the new sequence.
Benefits
already attached.
release with missing assets.
Acceptance Criteria
unsuitable release targets before benchmarking.
la-stack-$TAG-criterion-baseline.tar.gzasset while the release is amutable draft.
immutable release.
docs/RELEASING.mdanddocs/BENCHMARKING.mddescribe the samedraft-run-publish sequence.
applicable local CI gate pass.