fix(release): require verified release tags - #7122
Conversation
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
📝 WalkthroughWalkthroughRelease tagging now creates signed annotated semver tags. The workflow verifies GitHub’s tag object before promotion, updates ChangesRelease tag integrity
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant ReleaseWorkflow
participant GitHubAPI
participant ReleaseLatestTag
participant GitRemote
ReleaseWorkflow->>GitHubAPI: Verify release tag object
GitHubAPI-->>ReleaseWorkflow: Return verified tag object SHA
ReleaseWorkflow->>ReleaseLatestTag: Pass release tag and expected object SHA
ReleaseLatestTag->>GitRemote: Update latest to verified tag object
GitRemote-->>ReleaseLatestTag: Return remote latest object
ReleaseLatestTag-->>ReleaseWorkflow: Confirm matching object
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage remains at 96%, unchanged from the TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most impacted files.
Updated |
PR Review Advisor — InformationalAdvisor assessment: Informational / high confidence Model lanes
Nemotron output stays in workflow artifacts and does not change the assessment above. E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: None This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
Summary
verified: truebefore the release workflow can promotelatest.latesta second ref to the exact verified semver tag object instead of minting a distinct unsigned tag object in Actions.lkgguards.latestupdate cannot be overwritten.Why
The current release workflow creates
latestwithgit tag -fa, which produces a separate unsigned annotated object even when the semver release tag is signed. Authentication throughGITHUB_TOKENauthorizes the ref update but does not cryptographically sign the object. This causedlatestfor v0.0.86 to reportverified: falseuntil protected-tag remediation.The new trust chain keeps private signing material out of Actions: the operator signs the immutable semver object locally, GitHub verifies it, and Actions only aliases the mutable
latestref to that already-verified object.Security Boundary
This change authenticates the exact tag object and requires GitHub to recognize its signature. It does not introduce a separate allowlist of release signers: authorization to create a release tag remains governed by repository permissions and tag rulesets. Restricting tag creation to a designated release team or app, if required, is a separate policy hardening step.
Coordination
#7118 also updates the latest-tag workflow for release-label retirement. This patch applies cleanly over its current head; if #7118 lands first, its permissions, concurrency group, and retirement steps must be preserved when this branch is refreshed.
Type of Change
Verification
vitest run --project integration test/release-latest-tag.test.ts test/release-latest-tag-workflow.test.ts— 22 passedlatestandvX.Y.Zresolve through the same signed tag object.latestmovement.npm run build:cli && npm run check:diff— passedbash -n, ShellCheck, formatting, repository checks, source-shape budget, test-size budget, gitleaks, and DCO hooks — passedSigned-off-by: Aaron Erickson aerickson@nvidia.com