Skip to content

Commit eeb829b

Browse files
authored
release: switch signing sidecars to sigstore bundles (#358)
## Summary - switch shared release signing from legacy `.sig` / `.pem` sidecars to Sigstore bundle sidecars - update direct installers to verify `*.sigstore.json` bundles with `cosign verify-blob --bundle` - align release contracts and public docs with the new bundle-only direct install flow ## Evidence - fixes the `release-nodeup` failure in GitHub Actions where `cosign v3.0.5` rejected the old `sign-blob` invocation - local smoke test with `cosign v3.0.5` now produces `SHA256SUMS` plus `*.sigstore.json` and verifies successfully ## Current Gap - release automation still emitted legacy sidecars that are incompatible with the current `cosign` behavior - direct installer scripts and docs still referenced `.sig` / `.pem` artifacts ## Proposed Scope - update `scripts/release/generate-checksums.sh` to emit bundle sidecars only - update shell and PowerShell direct installers for `nodeup`, `derun`, and `dexdex` - update docs and public docs pages to document bundle-only direct installs ## Acceptance Criteria - release workflows publish `SHA256SUMS` and `*.sigstore.json` sidecars without legacy `.sig` / `.pem` files - direct installers verify bundle sidecars successfully - docs and public docs match the new release artifact contract ## Test Scenarios - `bash -n scripts/release/generate-checksums.sh scripts/install/nodeup.sh scripts/install/derun.sh scripts/install/dexdex-stack.sh` - local `cosign v3.0.5` smoke test for bundle generation and `verify-blob --bundle` - `pnpm --filter public-docs test` ## Out of Scope - republishing `nodeup@v0.1.10` - legacy installer fallback for historical `.sig` / `.pem`-only releases
1 parent 5bb2074 commit eeb829b

19 files changed

+145
-58
lines changed

apps/public-docs/derun.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ Script installer:
4343
./scripts/install/derun.ps1 -Version latest -Method direct
4444
```
4545

46+
Direct installers verify Sigstore bundle sidecars (`*.sigstore.json`) and only support bundle-enabled releases.
47+
4648
## Quick start
4749

4850
Run a command with transcript capture:

apps/public-docs/dexdex.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ Script installer:
4444
./scripts/install/dexdex-stack.ps1 -Version latest -Method direct
4545
```
4646

47+
Direct installers verify Sigstore bundle sidecars (`*.sigstore.json`) and only support bundle-enabled releases.
48+
4749
## Related pages
4850

4951
- [Projects Overview](projects-overview)

apps/public-docs/nodeup.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ Script installer:
4242
./scripts/install/nodeup.ps1 -Version latest -Method direct
4343
```
4444

45+
Direct installers verify Sigstore bundle sidecars (`*.sigstore.json`) and only support bundle-enabled releases.
46+
4547
## Common workflows
4648

4749
Set a global default runtime:

docs/cmds-derun-foundation.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
- Release artifact contract for distribution tooling:
2020
- Required asset names: `derun-linux-amd64.tar.gz`, `derun-darwin-amd64.tar.gz`, `derun-darwin-arm64.tar.gz`, `derun-windows-amd64.zip`.
2121
- Required build matrix: `linux/amd64`, `darwin/amd64`, `darwin/arm64`, `windows/amd64`.
22+
- Required signing sidecars: `SHA256SUMS.sigstore.json` and `<artifact>.sigstore.json`.
2223
- Homebrew `derun` formula contract:
2324
- Must install from GitHub release prebuilt tarballs (darwin amd64/arm64 and linux amd64).
2425
- Linux arm64 must fail explicitly as unsupported until a dedicated artifact is added.
26+
- Direct install scripts must verify release artifacts with `SHA256SUMS` and Sigstore bundle sidecars via `cosign verify-blob --bundle`.
2527
- User-facing error messages must remain single-line and follow stable style contracts:
2628
- Usage/validation: `invalid arguments: <reason>; details: <k=v,...>; hint: <how to fix>`
2729
- Runtime: `failed to <action>: <cause>; details: <k=v,...>`

docs/crates-cargo-mono-foundation.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,12 @@
6666
- Workspace validation baseline: `cargo test --workspace --all-targets`
6767
- CI alignment: `.github/workflows/CI.yml` Rust jobs
6868
- Release contract checks should align with `.github/workflows/release-cargo-mono.yml`.
69+
- Release signing outputs must use Sigstore bundle sidecars (`SHA256SUMS.sigstore.json` and `<artifact>.sigstore.json`).
6970

7071
## Dependencies and Integrations
7172
- Integrates with Cargo workspace metadata and release workflows.
7273
- Integrates with root automation (`auto-publish`) through stable command contracts, including CI-driven tag publication.
73-
- Integrates with tag-based binary distribution automation (`release-cargo-mono`) through stable artifact naming and signing contracts.
74+
- Integrates with tag-based binary distribution automation (`release-cargo-mono`) through stable artifact naming and bundle-signing contracts.
7475

7576
## Change Triggers
7677
- Update `docs/project-cargo-mono.md` with this file when command identifiers or ownership changes.

docs/crates-nodeup-foundation.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- Shim dispatch behavior must remain deterministic by executable name (`node`, `npm`, `npx`, `yarn`, `pnpm`).
1919
- Install/update command surfaces must preserve backward-compatible flags and outputs.
2020
- Homebrew installation must consume prebuilt release archives for `darwin/amd64`, `darwin/arm64`, and `linux/amd64`; Linux arm64 must fail with a clear unsupported-platform message.
21+
- Direct install scripts must verify release artifacts with `SHA256SUMS` and Sigstore bundle sidecars (`<artifact>.sigstore.json`) via `cosign verify-blob --bundle`.
2122
- `yarn`/`pnpm` delegated execution must honor nearest `package.json` `packageManager` when present.
2223
- `packageManager` parsing contract is strict: `<manager>@<exact-semver>` with manager limited to `yarn|pnpm`.
2324
- `packageManager` manager-command mismatch must fail with `conflict`; malformed values must fail with `invalid-input`.
@@ -53,6 +54,7 @@
5354
- Workspace baseline: `cargo test --workspace --all-targets`
5455
- Release contract checks should align with `release-nodeup` workflow expectations.
5556
- Release assets must include both standalone prebuilt binaries (`nodeup-<os>-<arch>[.exe]`) and compressed archives (`nodeup-<os>-<arch>.tar.gz|zip`) for the supported release matrix.
57+
- Release signing outputs must include `SHA256SUMS.sigstore.json` and `<artifact>.sigstore.json` sidecars; legacy `.sig`/`.pem` sidecars are out of scope for direct installation.
5658
- Homebrew release automation must render the prebuilt formula from release asset URLs and push tap updates directly to `delinoio/homebrew-tap` `main` with a dedicated tap-write credential.
5759
- Completion coverage must include successful script generation, invalid shell/scope validation, and JSON-mode raw output behavior.
5860
- Output color coverage must include flag/env precedence, invalid env fallback, stream-aware auto-mode behavior, and JSON/completion ANSI exclusion.

docs/project-cargo-mono.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Provide a Cargo subcommand for Rust monorepo lifecycle management, including ver
2121
- `publish` retry overrides must remain operator-controlled through `--max-attempts <count>` and `CARGO_MONO_PUBLISH_MAX_ATTEMPTS`, with precedence `--max-attempts` > env > default unlimited retries.
2222
- Remote tag publication remains CI-owned: `auto-publish` pushes release tags with `git push --tags` after a successful `publish` run, with checkout credential persistence disabled and authentication bound to `secrets.GH_TOKEN` (non-`GITHUB_TOKEN`) so downstream tag-triggered workflows run.
2323
- Publish tag configuration must be opt-in through `[workspace.metadata.cargo-mono.publish.tag].packages`, and tag naming must remain `<crate>@v<version>`.
24-
- Tag release automation must detect `cargo-mono@v*` and produce signed multi-OS prebuilt artifacts without changing CLI command behavior.
24+
- Tag release automation must detect `cargo-mono@v*` and produce signed multi-OS prebuilt artifacts with Sigstore bundle sidecars (`*.sigstore.json`) without changing CLI command behavior.
2525
- Runtime failure messaging must follow the `Summary/Context/Hint` three-line contract while command behavior, output schema, and exit code semantics remain stable.
2626
- Dependency-cycle conflicts in package ordering must identify cycle package names and dependency scope in `Context` without changing CLI flags, command behavior, or JSON output schema.
2727
- Human output color controls must remain stable: global `--color <auto|always|never>`, `CARGO_MONO_OUTPUT_COLOR`, and `NO_COLOR` with precedence `--color` > `CARGO_MONO_OUTPUT_COLOR` > `NO_COLOR` > auto-detection.

docs/project-derun.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ Provide a Go CLI that preserves terminal fidelity for AI-agent workflows and bri
1818
- User-facing error messages must remain single-line and include deterministic `details` segments with safe diagnostic fields only (no secrets).
1919
- User-facing error messages must preserve compatibility tokens used by MCP/automation integrations (`session not found`, `parse <field>`, `session_id is required`, `cursor is required`).
2020
- Release artifact matrix and names must remain stable: `derun-linux-amd64.tar.gz`, `derun-darwin-amd64.tar.gz`, `derun-darwin-arm64.tar.gz`, `derun-windows-amd64.zip`.
21+
- Release signing must publish Sigstore bundle sidecars (`*.sigstore.json`) for each artifact and `SHA256SUMS`, and direct installers only support bundle-enabled releases.
2122
- Homebrew distribution must install `derun` from GitHub release prebuilt archives (darwin amd64/arm64 and linux amd64) instead of source builds.
2223

2324
## Change Policy
2425
- Update this index and `docs/cmds-derun-foundation.md` together whenever command shape or runtime contracts change.
2526
- Update this index and `docs/cmds-derun-foundation.md` together whenever user-facing error message contracts or compatibility tokens change.
2627
- Update `.github/workflows/release-derun.yml`, `scripts/release/update-homebrew.sh`, and `packaging/homebrew/templates/derun.rb.tmpl` in the same change when derun release artifact names, target matrix, or package-manager distribution contracts change.
28+
- Keep direct installer contracts in `scripts/install/derun.sh` and `scripts/install/derun.ps1` synchronized with release signing changes.
2729
- Align command lifecycle changes with `cmds/AGENTS.md` and root `AGENTS.md`.
2830

2931
## References

docs/project-dexdex.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ Recommended runtime environment keys:
139139

140140
## Release Distribution Contracts
141141
- Release workflow: `.github/workflows/release-dexdex.yml`.
142-
- GitHub Releases publish signed desktop and server artifacts (`SHA256SUMS` + cosign signatures).
142+
- GitHub Releases publish signed desktop and server artifacts (`SHA256SUMS` + `.sigstore.json` bundle sidecars).
143+
- Direct installers verify Sigstore bundle sidecars and only support bundle-enabled releases.
143144
- Homebrew distribution:
144145
- `dexdex` cask consumes the macOS desktop DMG release artifact.
145146
- `dexdex-main-server` and `dexdex-worker-server` formulas consume prebuilt server release artifacts for `darwin/amd64`, `darwin/arm64`, and `linux/amd64`.

docs/project-nodeup.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ Provide a Rust-based Node.js version manager with predictable channel resolution
1818
- `package.json` `packageManager` support for `yarn|pnpm` must remain strict and deterministic.
1919
- Shell completion generation must remain deterministic for supported shells and top-level command scopes.
2020
- Human output styling controls (`--color`, `NODEUP_COLOR`, and `NO_COLOR` precedence) must remain stable across CLI and public documentation.
21-
- Release automation must publish both standalone prebuilt binaries and archive assets for the supported OS/architecture matrix.
21+
- Release automation must publish both standalone prebuilt binaries and archive assets for the supported OS/architecture matrix, plus Sigstore bundle sidecars (`*.sigstore.json`) for each artifact and `SHA256SUMS`.
22+
- Direct installers must verify `SHA256SUMS` entries and Sigstore bundle sidecars, and only support bundle-enabled releases.
2223
- Homebrew installation must use prebuilt `nodeup` release archives for `darwin/amd64`, `darwin/arm64`, and `linux/amd64`, while failing clearly for unsupported Linux arm64 hosts.
2324

2425
## Change Policy

0 commit comments

Comments
 (0)