Skip to content

ci: build once, test exact outputs, and promote by digest - #16

Merged
ndizazzo merged 9 commits into
mainfrom
codex/remove-blacksmith-references
Jul 31, 2026
Merged

ci: build once, test exact outputs, and promote by digest#16
ndizazzo merged 9 commits into
mainfrom
codex/remove-blacksmith-references

Conversation

@ndizazzo

@ndizazzo ndizazzo commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Summary

This applies the composable Mesh-LLM CI model to packaging:

  • replaces widening filters with a typed, fail-closed release planner;
  • gives native, Homebrew, and npm validation independent booleans and exact selectors;
  • resolves package/runtime base images to immutable digests;
  • produces each native package and final runtime image once per selected row;
  • keeps dry runs registry-read-only while testing the exact locally loaded final image;
  • stages publish candidates by digest, tests those exact digests, and promotes without rebuilding;
  • emits a deterministic canonical release index and moving-tag rollback ledger;
  • rejects conflicting immutable version tags;
  • consumes five checksummed upstream Node addon archives with strict extraction and manifest/digest validation;
  • keeps package, image, npm, and release publication behind protected environments.

Producer/composer contract

upstream product-v2 -> native package -> final runtime image -> exact QA -> index -> tag promotion

The reusable per-row workflow owns package and image production. Dry validation has only contents: read and performs no registry login or push. Publishing receives explicit staging permissions without broad secret inheritance, builds one staging image, pulls its exact digest for command/readiness QA, and records exact package, host, runtime, base-image, upstream, and source identities. Promotion consumes only the verified index and contains no Docker build.

Node addon ownership is upstream in merged Mesh-LLM PR #1113. Packaging downloads versioned release archives and checksum sidecars, accepts only the exact target directory plus addon/manifest files, rejects links and extra paths, verifies the inner SHA-256, and assembles npm without Cargo or build:native.

Dispatch policy

Manual runs use validate_native, validate_homebrew, and validate_npm, plus exact native/npm selectors. Selectors accept only all or checked-in IDs. Aliases, empty/duplicate tokens, unknown IDs, and all-disabled plans fail closed.

Image publication requires every native row; package release publication requires every native row plus Homebrew; npm publication requires all five addon lanes. Dry-run mode forces publication off without broadening the selected graph.

Validation and execution evidence

  • Current head: ffd240c099d38dc1e16cb252f30b347a6d835399.
  • Packaging Precheck: green.
  • 83/83 local TypeScript contract tests passed serially.
  • Image-matrix coverage: 100% lines, branches, and functions.
  • actionlint, workflow YAML parsing, ShellCheck, git diff --check, and rendered Homebrew brew style: clean.
  • Full production plan expands deterministically to 11 package rows, eight upstream products, and five npm lanes.
  • Complete v0.75.0-rc1 dry rehearsal: green at this exact head in 37m 10s, with 41 successful jobs, 15 intentional publication-only skips, and zero failures.
  • The rehearsal validated all 11 native package rows, exact local final images, package installation, deterministic client readiness, Homebrew, all five upstream Node addon lanes, npm assembly, host invariants, and immutable release evidence.

Earlier rehearsal failures exposed and fixed real integration gaps: prerelease npm tagging, CUDA flavor normalization, public-discovery-dependent readiness, current Homebrew style/audit behavior, and canonical Syft package-root representations for Arch and Debian. The final run exercises those fixes against the immutable upstream v0.75.0-rc1 release graph.

No package, image, npm, release asset, or production tag was published by these validations.

Rollback

Reverting this PR restores the previous workflow. For future promotion failures, the uploaded rollback ledger records each moving tag's prior digest; immutable version tags are never overwritten on a digest mismatch.

Summary by CodeRabbit

  • New Features
    • Added more precise release selection for native packages, Homebrew, npm, and container images.
    • Added immutable image staging, testing, verification, and promotion with rollback tracking.
    • Added secure validation of upstream Node SDK components and release metadata.
  • Bug Fixes
    • Improved SBOM, manifest, checksum, and artifact validation.
    • Simplified client readiness checks to avoid discovery and driver dependencies.
  • Documentation
    • Updated release, packaging, publishing, and testing guidance to reflect the new workflows.

@coderabbitai

coderabbitai Bot commented Jul 29, 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: bf61783c-7ffc-445c-b7bb-dd78d33063ef

📥 Commits

Reviewing files that changed from the base of the PR and between abdcbcd and ffd240c.

📒 Files selected for processing (29)
  • .github/workflows/images-precheck.yml
  • .github/workflows/images-release.yml
  • .github/workflows/package-image-row.yml
  • README.md
  • TODO.md
  • docker/Dockerfile.mesh-llm
  • docs/matrix.md
  • docs/native-packages.md
  • docs/packaging-readiness-gaps.md
  • docs/publishing.md
  • docs/release-checklist.md
  • docs/runner-capacity.md
  • packaging/homebrew/Formula/mesh-llm.rb.template
  • scripts/client-readiness-smoke.sh
  • scripts/release-index.ts
  • scripts/release-plan.ts
  • scripts/upstream-archive.ts
  • scripts/upstream-node-addon.ts
  • scripts/verify-sbom-subject.ts
  • tests/client-readiness-smoke.test.ts
  • tests/homebrew-release.test.ts
  • tests/node-sdk-runtime-smoke.test.ts
  • tests/release-index.test.ts
  • tests/release-plan.test.ts
  • tests/release-workflow.test.ts
  • tests/sbom-subject.test.ts
  • tests/upstream-archive.test.ts
  • tests/upstream-node-addon.test.ts
  • tests/workflow-provenance.test.ts

📝 Walkthrough

Walkthrough

The release system now uses typed plans and exact selectors, a reusable package-image workflow, verified upstream Node addon archives, SPDX subject validation, canonical image indexes, and immutable digest promotion with conditional readiness checks.

Changes

Release packaging workflow

Layer / File(s) Summary
Typed release planning and indexing
.github/workflows/images-release.yml, scripts/release-plan.ts, scripts/release-index.ts, tests/release-plan.test.ts, tests/release-index.test.ts, tests/release-workflow.test.ts, TODO.md
Exact selectors, component enablement, publication prerequisites, deterministic plans, canonical indexes, and workflow assertions are added.
Reusable package and image QA
.github/workflows/package-image-row.yml, .github/workflows/images-release.yml, scripts/verify-sbom-subject.ts, tests/sbom-subject.test.ts, tests/workflow-provenance.test.ts, docs/native-packages.md
Package rows build artifacts, validate provenance and SBOMs, and test either a local runtime image or an immutable staged digest.
Verified upstream addon consumption
scripts/upstream-node-addon.ts, scripts/upstream-archive.ts, tests/upstream-node-addon.test.ts, tests/upstream-archive.test.ts, tests/node-sdk-runtime-smoke.test.ts, docs/matrix.md, docs/release-checklist.md, TODO.md
Addon archives and sidecars are verified before safe extraction, while SDK lanes consume upstream artifacts without native source compilation.
Canonical indexing and digest promotion
.github/workflows/images-release.yml, docs/publishing.md, docs/release-checklist.md, docs/runner-capacity.md, README.md, TODO.md
Staged results are indexed and verified, then promoted by digest with tag-drift rejection and rollback metadata.
Readiness and packaging validation
.github/workflows/images-precheck.yml, scripts/client-readiness-smoke.sh, packaging/homebrew/Formula/*, tests/client-readiness-smoke.test.ts, tests/homebrew-release.test.ts, docs/packaging-readiness-gaps.md
Validation uses the final runtime target, passive client readiness, explicit cleanup handling, serial tests, and conditional readiness requirements.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseWorkflow
  participant ReleasePlan
  participant PackageImageRow
  participant ReleaseIndex
  participant Registry
  ReleaseWorkflow->>ReleasePlan: build typed plan from selectors
  ReleasePlan-->>ReleaseWorkflow: return enabled rows and publication flags
  ReleaseWorkflow->>PackageImageRow: execute selected packaging rows
  PackageImageRow->>Registry: stage and test image digest
  PackageImageRow-->>ReleaseWorkflow: upload image result evidence
  ReleaseWorkflow->>ReleaseIndex: validate staged results and assemble index
  ReleaseIndex->>Registry: promote verified digests without rebuilding
Loading

Possibly related PRs

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/remove-blacksmith-references

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.

@ndizazzo ndizazzo changed the title docs(ci): remove legacy runner provider references ci: build once, test exact outputs, and promote by digest Jul 30, 2026
@ndizazzo
ndizazzo marked this pull request as ready for review July 31, 2026 01:04
@ndizazzo
ndizazzo merged commit 76c619b into main Jul 31, 2026
57 of 58 checks passed
@ndizazzo
ndizazzo deleted the codex/remove-blacksmith-references branch July 31, 2026 01:04
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