Skip to content

feat(release): close GA gaps — signed tags, real install-path smoke test - #214

Open
2233admin wants to merge 2 commits into
mainfrom
claudeMaster/official-release-build-55f9cc
Open

feat(release): close GA gaps — signed tags, real install-path smoke test#214
2233admin wants to merge 2 commits into
mainfrom
claudeMaster/official-release-build-55f9cc

Conversation

@2233admin

Copy link
Copy Markdown
Owner

Summary

Closes the remaining gaps before cutting an official (non-beta) release: #59 proposal 6 (cross-platform-smoke never actually exercised the real release-artifact install path) and #158 (release provenance — attestation already existed, signed tags and verification docs did not).

  • Fix stale README/public-beta.md claims that macOS/Linux have no Release ZIP (false since v0.7.0-beta.2 / PR feat(release): macos/linux release artifacts + cross-platform Skill bootstrap (#59 P2) #65).
  • Add SSH-based GA tag signing: release.yml fails closed on unsigned GA (non -beta./-rc.) tags via git verify-tag against .github/allowed_signers; beta cadence is unaffected. docs/RELEASE_SIGNING.md covers maintainer setup.
  • Document release-provenance verification in README (gh attestation verify + SHA-256 + tag signature).
  • bootstrap.py: add --local-asset, a CI-only opt-in bypass around the GitHub API so a freshly built local zip can be driven through the real download-verify-install code path. Real (non-flag) installs are untouched.
  • cross-platform-smoke (ci.yml): package the build the way release.yml does, install it via bootstrap.py --local-asset, and assert PATH / CODE_INTEL_HOME actually persist (Windows: User registry scope; POSIX: a genuinely fresh interactive shell after the documented profile edit) instead of only proving $env:GITHUB_PATH was appended for this job.

Heads up for reviewers

  • .github/allowed_signers ships intentionally empty — the next non-beta tag will fail-closed at the new "Verify GA tag signature" step until a maintainer adds a real key via a follow-up PR (see docs/RELEASE_SIGNING.md). This is expected, not a bug.
  • The new POSIX assertion step appends a line to the runner's ~/.bashrc/~/.zshrc every run — runner is ephemeral so it doesn't accumulate, but flagging since it's a dotfile mutation in a "read-only" smoke job.
  • cross-platform-smoke now does a real package + install + shell-persistence check on top of what it already did, so this job runs a bit longer on all 3 matrix legs.

Test plan

  • python tests/test_repository_layout.py -v — 5/5 pass
  • python tests/test_skill_package.py -v — 18/18 pass (bootstrap.py change didn't break existing coverage)
  • Both workflow YAMLs parse (yaml.safe_load)
  • All 4 new PowerShell blocks pass [System.Management.Automation.Language.Parser]::ParseFile with zero errors
  • Locally reproduced the new --local-asset path end-to-end (package → install → doctor) against a real build of this branch, with repowise hidden from PATH to emulate a clean CI runner: status: installed, installer exit 0, doctor exit 0
  • Confirmed both CODE_INTEL_HOME and the bin dir actually land in the Windows User environment scope after that install
  • Cross-platform-smoke run on actual GitHub Actions (windows-latest / macos-latest / ubuntu-latest) — will confirm once this PR's CI runs

- Fix stale README/public-beta.md claims that macOS/Linux have no Release
  ZIP (false since v0.7.0-beta.2; PR #65 already shipped it).
- Add SSH-based tag signing: release.yml fails closed on unsigned GA
  (non-beta/-rc) tags via git verify-tag against .github/allowed_signers;
  beta cadence is unaffected. docs/RELEASE_SIGNING.md covers maintainer
  setup and verification.
- Document release-provenance verification in README (gh attestation
  verify + SHA-256 + tag signature).
- bootstrap.py: add --local-asset, a CI-only bypass around the GitHub API
  so a freshly built local zip can be installed through the real
  download-verify-install code path.
- cross-platform-smoke (ci.yml): package the build the way release.yml
  does, install it via bootstrap.py --local-asset, and assert PATH /
  CODE_INTEL_HOME actually persist (Windows: User registry scope; POSIX:
  a genuinely fresh interactive shell after the documented profile edit)
  instead of only proving $env:GITHUB_PATH was appended for this job.

Closes remaining #59 proposal 6 gap and #158.
@repowise-bot

repowise-bot Bot commented Aug 7, 2026

Copy link
Copy Markdown

✅ Health of changed files: 2.6 (unchanged)
⚠️ Change risk: moderate, riskier than 66% of this repo's commits.

📋 At a glance
1 hotspot touched · 1 new finding introduced · 1 dead-code finding. Scoped to skills.

✅ Health gate: passed

📌 Before you merge

  • Docs that usually track this code: README.md, docs/code-intel-architecture.md, skills/code-intel-pipeline/SKILL.md
🔎 More signals (2)

🔥 Hotspot touched (1)

  • .../scripts/bootstrap.py: 6 commits/90d, 0 dependents

💀 Dead code (1 finding)

  • 💀 .../scripts/bootstrap.py (file-level) (confidence 0.40)

📊 See the full report for this PR
Your repo map with this PR's blast radius lit up, every caller of the contracts it changes, and health before and after. No sign-in. · ⭐ Star Repowise · 📥 Install bot · Silence on a single PR with [skip repowise] in the title · Per-repo toggle on repowise.dev/settings?tab=bot · Updated 2026-08-07 04:14 UTC

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in: 49 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a36f06fb-e2b3-4552-9cbb-7f8e9a82044f

📥 Commits

Reviewing files that changed from the base of the PR and between 323c613 and 54d0421.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • README.md
📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added support for installing locally supplied release ZIPs without download access.
    • Official Windows, macOS, and Linux release ZIPs are now documented for v0.7.0-beta.2 and later.
    • Added release provenance verification using checksums, attestations, and signed tags.
  • Documentation

    • Documented release-signing procedures and verification requirements.
    • Clarified platform availability and installation guidance.
  • Quality Improvements

    • Release checks now validate installation results and environment persistence across platforms.
    • GA releases require verified signed tags; beta and release-candidate releases are exempt.

Walkthrough

The change adds local release-archive installation to bootstrap.py, expands cross-platform CI smoke validation, enforces SSH signatures for GA tags, and documents platform release archives and provenance verification.

Changes

Release distribution

Layer / File(s) Summary
Local archive installation and smoke validation
skills/code-intel-pipeline/scripts/bootstrap.py, .github/workflows/ci.yml
bootstrap.py accepts --local-asset archives. CI builds platform ZIPs, installs them, and validates environment persistence on Windows and POSIX systems.
GA tag signing and verification
.github/allowed_signers, docs/RELEASE_SIGNING.md, .github/workflows/release.yml
The repository documents authorized SSH signers and signed GA tags. Release CI verifies GA tags and skips beta and release-candidate tags.
Platform distribution and provenance documentation
README.md, docs/public-beta.md
Documentation describes three-platform Release ZIPs, bootstrap support, checksums, attestations, and signed-tag verification from v0.7.0-beta.2.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant CI smoke job
  participant bootstrap.py
  participant Release ZIP
  participant Environment
  CI smoke job->>Release ZIP: Build platform/version archive
  CI smoke job->>bootstrap.py: Install with --local-asset and --version
  bootstrap.py->>Release ZIP: Copy and install local archive
  bootstrap.py->>Environment: Persist PATH and CODE_INTEL_HOME
  CI smoke job->>Environment: Validate fresh environment state
Loading

Possibly related PRs

Suggested labels: risk-accepted

Poem

A rabbit checks the release trail,
With signed tags tucked beneath the veil.
ZIPs hop across each platform bright,
Bootstrap sets the path just right.
“Verified!” I twitch my nose—
Clean releases wherever one goes.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main release-readiness changes: signed GA tags and a real release-install smoke test.
Description check ✅ Passed The description directly explains the release-signing, provenance, installation, documentation, and cross-platform smoke-test changes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch

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.

@coderabbitai coderabbitai Bot added the risk-accepted 人已审阅并接受高风险评分,放行 pr-gate label Aug 7, 2026
@2233admin

Copy link
Copy Markdown
Owner Author

Checked both signals:

  • Dead-code (bootstrap.py, confidence 0.40, 0 dependents): false positive, didn't change anything. bootstrap.py isn't imported as a Python module anywhere — it's invoked externally as a subprocess entry point (python scripts/bootstrap.py ..., see skills/code-intel-pipeline/SKILL.md:21,29) and exercised by all 18 tests in tests/test_skill_package.py. A static import graph correctly shows in_degree=0 for CLI/installer entry scripts like this; it doesn't mean unreachable.
  • Docs checklist: checked docs/code-intel-architecture.md and skills/code-intel-pipeline/SKILL.md — neither enumerates bootstrap.py's full flag surface (SKILL.md documents only the user-facing subset: --repo-path/--dry-run/--json/--version/--channel; existing internal flags like --install-root are already omitted there too). The new --local-asset flag is explicitly CI-only, so it's intentionally left out of both, consistent with that existing pattern. README.md was already updated in this PR for the release-provenance-verification changes.

🤖 Addressed by Claude Code

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

Code Intel change risk

Score Percentile Level
58/100 48th (vs last 48 commits) 🟢 low

Top signals

  • Diff shape: 7 file(s), +313/-16 (max file share 0.39)
  • Test asymmetry: source changed, tests touched
  • Bug-magnet: 33 fix commit(s) in touched files (180d)
  • Churn: 116 commit(s) touching these files (90d)

revspec: origin/main..HEAD · threshold: percentile >= 90 blocks unless labeled risk-accepted · code-intel change risk

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 600-642: Update the CI persistence checks around the Windows and
POSIX assertion steps to isolate the local-asset installation from state created
by the earlier Install portable pipeline. Before bootstrap or the packaged
installation runs, remove or redirect the existing Windows user environment
values and POSIX environment/profile file, then assert the expected PATH and
CODE_INTEL_HOME values produced by the packaged install rather than accepting
pre-existing state.

In `@README.md`:
- Around line 248-249: Update the SHA-256 verification section in README.md to
provide separate commands for Windows using certutil, macOS using shasum, and
Linux using sha256sum, ensuring each command verifies the referenced Windows
archive checksum file.
- Line 65: Update the README macOS/Linux quick-start section to lead with the
packaged code-intel CLI and its Release ZIP/bootstrap.py installation path
available from v0.7.0-beta.2. Move the PowerShell and Rust source-build
prerequisites into an explicitly labeled fallback path, while preserving the
existing compatibility instructions and commands.
- Line 252: Update the release-tag requirement near the “正式版” description to
explicitly recognize versioned prerelease suffixes such as “-beta.<n>” and
“-rc.<n>”, or document the exact tag pattern; ensure tags like “v0.7.0-beta.2”
and “v0.7.0-rc.1” are excluded from the SSH-signature requirement.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: cdd0fc9a-aba5-43df-83ba-904962484890

📥 Commits

Reviewing files that changed from the base of the PR and between bfb1cd8 and 323c613.

📒 Files selected for processing (7)
  • .github/allowed_signers
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • README.md
  • docs/RELEASE_SIGNING.md
  • docs/public-beta.md
  • skills/code-intel-pipeline/scripts/bootstrap.py

Comment thread .github/workflows/ci.yml
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
…doc fixes

- ci.yml: reset PATH/CODE_INTEL_HOME persisted state before the packaged
  install runs, so the persistence assertion can only pass because
  bootstrap.py's release-artifact install path did the persisting, not
  because the earlier from-source "Install portable pipeline" step
  already left it there.
- README.md: lead the macOS/Linux quick start with the packaged CLI
  (Release ZIP, no Rust toolchain needed), keep source build as an
  explicitly labeled fallback.
- README.md: give real per-platform checksum verification commands
  (certutil/shasum/sha256sum) instead of naming three tools but only
  showing one command.
- README.md: state the beta/rc exclusion as an explicit suffix rule
  instead of ambiguous "not ending in -beta./-rc." prose that could be
  misread against tags like v0.7.0-beta.2.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk-accepted 人已审阅并接受高风险评分,放行 pr-gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant