Skip to content

feat(release): macos/linux release artifacts + cross-platform Skill bootstrap (#59 P2) - #65

Merged
2233admin merged 1 commit into
mainfrom
feat/59-release-artifacts
Jul 28, 2026
Merged

feat(release): macos/linux release artifacts + cross-platform Skill bootstrap (#59 P2)#65
2233admin merged 1 commit into
mainfrom
feat/59-release-artifacts

Conversation

@2233admin

Copy link
Copy Markdown
Owner

Implements proposal 2 of #59: every release from the next tag ships code-intel-pipeline-<tag>-{windows,macos,linux}.zip, and the Skill bootstrap installs them on all three platforms.

release.yml: one gate chain, three packages, one publisher

  • release-windows — the existing authoritative chain (tag/version validation, skill tests, fmt/check/test, self-scan, package, packaged-payload validation) unchanged; now uploads its dist as a workflow artifact instead of publishing directly.
  • package-unix (macos-latest / ubuntu-latest matrix) — cargo build --release --locked, the same release-blocking self-scan, packaging via chmod 755 + system zip (PowerShell Compress-Archive cannot carry POSIX modes), identical .sha256 sidecar and code-intel-release-manifest.v1 fields, and a packaged validation that executes the binary straight from the extracted zip — proving the exec bit survived the round trip.
  • publish (needs both) — downloads all dists, fail-closed 9-asset inventory with sidecar re-hash, attests all three ZIPs, then the original no-clobber gh release logic extended to 9 assets. Privilege split: workflow-level permissions dropped to contents: read; only publish holds contents:write + id-token + attestations — no build step ever sees a write-capable token.

bootstrap.py: platform map + executable-bit restore

  • win32-only raise → platform map (windows/macos/linux; clear error otherwise), threaded into asset selection and recorded in the plan JSON.
  • POSIX modes restored from ZipInfo.external_attr during extraction; after install, a fail-closed check ensures bin/code-intel is executable (fallback chmod 0o755).
  • pwsh 7.2+ requirement kept, message made platform-neutral.

Also

  • New-BetaPackage.ps1 / Test-BetaPackage.ps1: -BinaryName parameter (default code-intel.exe, bare-name guard) — existing callers unaffected.
  • docs/public-beta.md + README: honest versioned statement — releases ≤ v0.6.0 stay Windows-only; next tag onward ships all three; attestation verify applies to every ZIP.

Verification

  • python tests/test_skill_package.py / test_repository_layout.py: OK (new cases: platform map incl. unsupported-platform error, mode-restore from crafted ZipInfo).
  • yaml.safe_load on release.yml passes; all embedded pwsh blocks parser-checked; action pins verified (download-artifact pin confirmed = v4.3.0 via git ls-remote, chosen to match the repo's upload-artifact v4 generation).
  • Honest limit: the workflow fires only on tag push, so the new jobs cannot run on this PR — first real exercise is the next release tag. The unix self-scan invocation is identical to what cross-platform-smoke already gates on both OSes per PR. macOS ripgrep via brew is unpinned (no supported pinning; mirrors the existing ci.yml precedent, noted in a workflow comment).

Refs #59 — proposals 5 (cargo install / brew) and 6 (CI real-user assertions) remain open there.

…gate (#59 P2)

release.yml restructured into three jobs:
- release-windows keeps the full authoritative gate chain and now uploads its
  dist as a workflow artifact instead of publishing
- package-unix (macos-latest/ubuntu-latest matrix): build --locked, the same
  release-blocking self-scan, packaging that preserves the executable bit
  (chmod 755 + system zip; Compress-Archive cannot carry POSIX modes), the
  same sha256 sidecar and release-manifest fields, and a packaged validation
  that executes the extracted binary (proving the exec bit survived)
- publish (needs both): downloads all dists, fail-closed 9-asset inventory
  with sidecar re-hash, attests all three ZIPs, single no-clobber gh release.
  Workflow-level permissions dropped to contents:read; only publish holds
  contents:write + id-token + attestations.

bootstrap.py: win32 raise replaced by a platform map (windows/macos/linux,
clear error otherwise); POSIX modes restored from ZipInfo.external_attr on
extraction with a fail-closed executable check on bin/code-intel after
install; pwsh requirement message made platform-neutral; platform recorded
in the plan JSON.

tools/New-BetaPackage.ps1 / Test-BetaPackage.ps1: binary name parameterized
(-BinaryName, default code-intel.exe, bare-name guard) - CLI contract
unchanged.

docs/public-beta.md and README: existing releases (<= v0.6.0) stay
Windows-only; from the next tag onward all three platform ZIPs ship, same
attestation verify applies, pwsh 7.2+ still required everywhere.

Refs #59 (proposal 2 of 8; 5 and 6 remain open there)
@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 14d17984-b5b1-4942-be3a-9a4018fe82d2

📥 Commits

Reviewing files that changed from the base of the PR and between 4b26d93 and 674a841.

📒 Files selected for processing (7)
  • .github/workflows/release.yml
  • README.md
  • docs/public-beta.md
  • skills/code-intel-pipeline/scripts/bootstrap.py
  • tests/test_skill_package.py
  • tools/New-BetaPackage.ps1
  • tools/Test-BetaPackage.ps1

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Release downloads now include separate Windows, macOS, and Linux packages.
    • The installer supports all three platforms, including platform-specific binaries, installation paths, and executable permissions.
    • Package creation and verification support platform-specific binary names.
  • Documentation

    • Updated installation, verification, compatibility, and platform support guidance for multi-platform releases.
  • Bug Fixes

    • Improved Unix archive permission restoration and executable validation.
    • Release publishing now verifies package checksums and manifests for every platform.

Walkthrough

The release pipeline now builds, validates, and publishes Windows, macOS, and Linux ZIPs. Bootstrap selects platform assets, restores Unix executable permissions, and uses platform-specific paths. Packaging scripts accept binary names, while tests and documentation cover the expanded distribution model.

Changes

Cross-platform release distribution

Layer / File(s) Summary
Parameterized package binaries
tools/New-BetaPackage.ps1, tools/Test-BetaPackage.ps1
Packaging and verification scripts accept validated binary names for platform-specific package contents and manifest hashing.
Cross-platform bootstrap installation
skills/code-intel-pipeline/scripts/bootstrap.py, tests/test_skill_package.py
Bootstrap resolves Windows/macOS/Linux assets, restores Unix permissions, computes platform-specific data roots, and verifies executable availability before installation; tests cover these behaviors.
Multi-platform release workflow
.github/workflows/release.yml
Separate Windows and Unix packaging jobs upload artifacts, while publishing verifies checksums and manifests, attests all ZIPs, and creates multi-platform release assets.
Platform release documentation
README.md, docs/public-beta.md
Documentation describes versioned platform support, entrypoints, verification, permissions, and PowerShell requirements.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related issues

  • 2233admin/code-intel-pipeline#59 — Covers macOS/Linux release packaging, platform-aware bootstrap support, and documented PowerShell prerequisites implemented here.

Possibly related PRs

Poem

A rabbit zipped three platforms bright,
Windows, Mac, and Linux light.
Permissions hopped back into place,
Checksums guarded every trace.
“Ship the hareware!” the bunnies cheer—
One release for every sphere!

✨ Finishing Touches
📝 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.

@2233admin
2233admin merged commit 1512c9d into main Jul 28, 2026
4 of 9 checks passed
@2233admin
2233admin deleted the feat/59-release-artifacts branch July 28, 2026 03:59
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