Skip to content

Fix: Attest build provenance for every release tarball - #1648

Merged
huang195 merged 1 commit into
rossoctl:mainfrom
huang195:fix/supply-chain
Nov 3, 2026
Merged

huang195 merged 1 commit into
rossoctl:mainfrom
huang195:fix/supply-chain

Conversation

@huang195

@huang195 huang195 commented Nov 3, 2026

Copy link
Copy Markdown
Member

Problem

Part of #1641.

release-binaries.yaml attests build provenance only for the cortex-cpex tarballs. The default cortex and agentop tarballs, which most users install, have a checksums.txt entry but no provenance. gh attestation verify fails for them, so a user cannot prove that a binary came from this repo's CI.

Change

  • The attest-build-provenance step now covers dist/*.tar.gz, which is every tarball. The step condition is the same as before (event_name == 'push'), so a dry run still attests nothing.
  • The release notes, docs/laptop-service.md and CLAUDE.md now say that every tarball carries provenance.

Verification

  • Both workflow files parse as YAML.
  • The step runs only on a push (a v* tag, or main when the main channel is on), so this PR cannot exercise it. The first real check is the next release: gh attestation verify cortex_<ver>_<os>_<arch>.tar.gz --repo rossoctl/cortex must pass.

Not in this PR

Assisted-By: Claude (Anthropic AI) noreply@anthropic.com

Only the cortex-cpex tarballs got build provenance. The default cortex
and agentop tarballs, which most users install, had checksums only, so
gh attestation verify failed for them.

The attest step now covers dist/*.tar.gz. The release notes, the laptop
docs and CLAUDE.md now say that every tarball carries provenance.

Part of rossoctl#1641

Assisted-By: Claude (Anthropic AI) <noreply@anthropic.com>
Signed-off-by: Hai Huang <huang195@gmail.com>
@huang195
huang195 requested review from a team and rubambiza as code owners November 3, 2026 15:34
@coderabbitai

coderabbitai Bot commented Nov 3, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 44 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: de942136-bbdf-4bca-b8d5-7fc96dffe53b
Commits

Reviewing files that changed from the base of the PR and between d4da0e7 and 1af9ab2.

Files selected for processing: 3
  • .github/workflows/release-binaries.yaml
  • CLAUDE.md
  • docs/laptop-service.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

@clawgenti clawgenti left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Summary

Widening subject-path from dist/cortex-cpex_*.tar.gz to dist/*.tar.gz makes the existing provenance step cover all 11 release tarballs (8 agentop/cortex plus 3 cortex-cpex). The step still runs after the fail-closed presence check and before publish, keeps the same event_name == 'push' gate (a dispatch dry run attests nothing), and the job already holds id-token: write / attestations: write. The glob matches only the tarballs (checksums.txt is excluded), so it lines up with what gh release upload/create publishes. The release notes, docs/laptop-service.md and CLAUDE.md now match the workflow, and no other doc still says provenance is cpex-only. One non-blocking nit inline.

Author: huang195 (MEMBER — maintainer)
Areas reviewed: CI/GitHub Actions, Docs
Agent/IDE config (.claude/.vscode): none
Commits: 1 commit, all signed-off: yes
CI status: all completed checks passing (a few Go/Python jobs still pending; none failing). The attest step is push-only, so as the PR notes, the first real check is gh attestation verify on the next release.

Comment thread docs/laptop-service.md

The tarballs carry build provenance as well as their `checksums.txt` entry:
`gh attestation verify cortex-cpex_<version>_<os>_<arch>.tar.gz --repo rossoctl/cortex`.
Every release tarball, cpex or not, carries build provenance as well as its `checksums.txt`

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

nit: "Every release tarball" is true from the next release onward, but the agentop/cortex tarballs of releases already published have no attestation, so gh attestation verify will fail for them. Consider naming the first release that carries it (e.g. "From vX.Y.Z, every release tarball...") so a user checking an older default tarball does not read the failure as tampering.

@huang195
huang195 merged commit 1ffb7fe into rossoctl:main Nov 3, 2026
60 of 61 checks passed
@huang195
huang195 deleted the fix/supply-chain branch November 3, 2026 16:37
@github-project-automation github-project-automation Bot moved this from New/ToDo to Done in Rossoctl Issue Prioritization Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants