Skip to content

release-train: staging -> main - #428

Merged
tracebloc-release-train[bot] merged 5 commits into
mainfrom
release-train/to-main
Jul 29, 2026
Merged

release-train: staging -> main#428
tracebloc-release-train[bot] merged 5 commits into
mainfrom
release-train/to-main

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Automated promotion by the release train (RFC-0008 D14). Head is the train-managed release-train/to-main branch (a mirror of staging), so it never collides with a human PR. Merged only when the fr-gate is green.


Note

Medium Risk
Changes release gating and mandatory cosign verification on install; a VERSION/tag mismatch blocks releases, and stricter identity regex could reject signatures if workflow OIDC identity ever diverges from tag refs.

Overview
Tightens release-train hygiene and installer cosign policy for the 0.10.1 promotion.

Adds a root VERSION file (0.10.1) and makes the release workflow fail the build when the tag’s base semver doesn’t match that file (old tags without VERSION only get a warning). GitHub Release prerelease is now computed strictly: only a plain vX.Y.Z tag is stable/latest; RCs and malformed tag shapes stay prerelease instead of relying on a hyphen in the tag name.

Cosign verify-blob identity in release.yml docs, install.sh, and install.ps1 is narrowed from release.yml@.* to release.yml@refs/tags/v.* so verification expects signatures tied to version tags, not arbitrary workflow refs.

Reviewed by Cursor Bugbot for commit c8d142d. Bugbot is set up for automated code reviews on this repo. Configure here.

saadqbaland others added 5 commits July 27, 2026 17:07
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…9) (#415)
install.sh verified downloaded binaries against certificate-identity-regexp
'.../release.yml@.*' — @.* matches ANY ref, so a binary signed by release.yml
running on a feature branch verified identically to a tagged release. Anchor to
'@refs/tags/v.*' so only tag-built releases are trusted. Same anchor applied to
the documented verify command in release.yml.
Part of tracebloc/backend#1269 (row 4).
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…#417)
* chore: declare next release in VERSION (0.10.1) for the release train
The train reads this file to cut tags: vX.Y.Z-rc.N on every staging
promotion (pre-release binaries for FR; 'latest' never sees them) and
vX.Y.Z on the prod promotion. The binary's own version still derives
from the tag at build time (release.yml ldflags) -- this file only
declares intent, uniform with tracebloc-py-package's pyproject version.
0.10.1 ships the cosign identity anchor fix (#415).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(release): enforce tag==VERSION + strict prerelease detection
Two guards raised in release-train review: (1) any tag's base X.Y.Z must
match the VERSION file (train-cut or manual), so the file can never go
silently stale after an out-of-train release; pre-VERSION tags are
grandfathered for rebuilds. (2) STRICT stability: only plain vX.Y.Z is a
stable release -- rc tags AND malformed variants (v1.2.3rc1, no dash)
are prereleases, so 'releases/latest' (the installer bootstrap) can only
ever resolve a real production build.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* style: quote GITHUB_OUTPUT redirects (shellcheck SC2086)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…415) (#422)
install.sh rejects signatures from non-tag workflow runs; install.ps1
still accepted @.* -- Windows trusted what Unix refused. Same anchor now:
refs/tags/v.* (covers rc tags too).
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

bugbot run

@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

👋 Heads-up — Code review queue is at 43 / 30

Above the WIP limit. The team convention is to review existing PRs before opening new work.

Open PRs currently in Code review (oldest first):

Pull from review before opening new work. (This is a nudge from the kanban WIP check, not a block.)

@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

bugbot run

Comment threadscripts/install.sh
Comment threadscripts/install.sh
LukasWodka added a commit that referenced this pull request Jul 29, 2026
)
Cosign's keyless identity embeds the RUN's ref. workflow_dispatch took an
inputs.ref and could build a tag from a branch run, publishing signatures
(@refs/heads/...) that the tag-anchored installers reject on every customer
machine. inputs.ref removed; dispatch runs now hard-fail unless started at
a v* tag ref; rebuild paths = rerun the tag run or dispatch at the tag.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

bugbot run

@tracebloc-release-train
tracebloc-release-trainBot merged commit 40a04a0 into mainJul 29, 2026
38 checks passed
@tracebloc-release-train
tracebloc-release-trainBot deleted the release-train/to-main branch July 29, 2026 14:48

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit c8d142d. Configure here.

@tracebloc-release-train
tracebloc-release-trainBot restored the release-train/to-main branch July 29, 2026 15:36
LukasWodka added a commit that referenced this pull request Jul 30, 2026
…egrity (#429)
* fix(release): rebuilds must run at the tag ref (Bugbot on promotion #428)
Cosign's keyless identity embeds the RUN's ref. workflow_dispatch took an
inputs.ref and could build a tag from a branch run, publishing signatures
(@refs/heads/...) that the tag-anchored installers reject on every customer
machine. inputs.ref removed; dispatch runs now hard-fail unless started at
a v* tag ref; rebuild paths = rerun the tag run or dispatch at the tag.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* review: pre-flight guard job + refs via env (Asad's nits on #429)
Guard moved out of the 8-way matrix into a tiny job that release needs:
a branch-misdispatch now fails once in seconds instead of burning eight
runners' setup. Refs passed via env, never interpolated -- git permits
$/backticks in tag names, so a crafted v* tag would otherwise execute on
the runner (R8, same rule as the client installer workflows).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(release): pass the tag ref via env in Determine-release-tag (R8)
The one step this PR's hardening missed: it still did REF="${{ github.ref_name }}",
interpolating an attacker-controllable tag name straight into the shell, so a
crafted v* tag with backticks or $() would execute on the publish runner
before the release is created. Now passed as env REF_NAME and read as $REF_NAME,
matching the guard and version steps.
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for freeto 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.

2 participants

@LukasWodka@saadqbal