Skip to content

Point the release job at the artifacts the build actually writes - #18

Merged
DeliriumPulse merged 1 commit into
mainfrom
fix/release-artifact-paths
Aug 7, 2026
Merged

Point the release job at the artifacts the build actually writes#18
DeliriumPulse merged 1 commit into
mainfrom
fix/release-artifact-paths

Conversation

@DeliriumPulse

Copy link
Copy Markdown
Collaborator

What broke

Tag v0.2.30 fired release run 31145203055, which failed at the attestation step:

##[error]Error: Could not find subject at path release/codetruss-cli-0.2.30.tgz

Everything before it passed — pnpm typecheck, pnpm test, pnpm release:artifact, pnpm release:verify, and pnpm test:install. No release object and no partial assets were created, so the failure state is clean.

Why

packages/cli/scripts/build-release.mjs writes its artifacts into public/downloads/. It used to write them into release/ (const releaseDir = join(repoRoot, 'release')), and the directory moved when the script was rewritten in #16. .github/workflows/release.yml was not part of that change and still resolved release/codetruss-cli-${VERSION}.*.

The rewritten script also no longer emits release-manifest.json. Its replacement is public/downloads/codetruss-cli-latest.json, which is website metadata rather than a release asset, so the upload list simply loses that entry.

The change

Three artifact paths repointed at public/downloads/, and release/release-manifest.json dropped from gh release upload. Nothing else in the workflow moves.

The uploaded asset names are unchanged, because gh release upload uses each file's basename — codetruss-cli-0.2.30.tgz, .tgz.sha256, and .sbom.cdx.json, which is what Formula/codetruss.rb in homebrew-codetruss pins.

On the attestation story

The attested bytes are still built in CI, not trusted from the tree. build-release.mjs builds a fresh deterministic archive, compares its digest against the committed immutable copy, and throws if they differ; release:verify then byte-compares the archive contents against the eight published files and the SBOM. The subject handed to actions/attest is therefore proven identical to a clean in-CI build before anything is signed.

Verification

CI on this branch exercises release:artifact and release:verify on all nine OS/Node combinations. The workflow path change itself is only provable by tagging, so v0.2.30 will be re-cut at this commit once it lands.

v0.2.30 tagged cleanly and then failed at attestation with "Could not find
subject at path release/codetruss-cli-0.2.30.tgz". Typecheck, tests,
release:artifact, release:verify, and test:install had all passed; only the
subject path was wrong.

build-release.mjs writes into public/downloads/, not release/ — the directory
moved when the script was rewritten, and release.yml was not updated with it.
The script also no longer emits release-manifest.json; the equivalent metadata
is public/downloads/codetruss-cli-latest.json, which is not a release asset.

Resolve the three artifact paths under public/downloads/ and drop the manifest
from the upload list. No other workflow behaviour changes: the archive is still
built fresh, byte-compared against the immutable published copy by
release:verify, and attested before the release is created.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@DeliriumPulse, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 27 minutes

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

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d942b14a-946b-4a0f-860c-a9b36b51ed06

📥 Commits

Reviewing files that changed from the base of the PR and between aa4e6e5 and d9dfa79.

📒 Files selected for processing (1)
  • .github/workflows/release.yml

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

Comment @coderabbitai help to get the list of available commands.

@DeliriumPulse
DeliriumPulse merged commit 992d6d3 into main Aug 7, 2026
10 checks passed
@DeliriumPulse
DeliriumPulse deleted the fix/release-artifact-paths branch August 7, 2026 15:10
Sign up for free to 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.

1 participant