feat: airgap distribution — signed release tarballs + AIRGAP.md - #1
Open
turbobeest wants to merge 1 commit into
Open
feat: airgap distribution — signed release tarballs + AIRGAP.md#1turbobeest wants to merge 1 commit into
turbobeest wants to merge 1 commit into
Conversation
Add release.yml workflow that on v* tag push builds a deterministic tarball, computes SHA256, and signs with cosign keyless via sigstore GitHub Actions OIDC. All four artifacts (tarball, .sha256, .sig, .pem) are attached to the GitHub Release. Determinism is enforced via sorted file order, zeroed timestamps, and numeric owner/group in the tar invocation. The workflow includes a verification smoke test before publishing so a mis-signed release cannot reach consumers. AIRGAP.md documents consumer-side acquisition (gh release / curl), verification with cosign in both online and offline modes, extraction and consumption layout, and the update flow for vendored catalogs. A maintainer release-procedure section covers the tag-driven cut and the workflow_dispatch dry-run path. Targets autonomy-harness Mode-C/D deployments (RHEL VDIs, airgapped networks) but is useful for any consumer that wants to vendor the catalog at a known-good version. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.github/workflows/release.yml— onv*tag push, builds a deterministic tarball, computes SHA256, and signs with cosign keyless (sigstore GitHub Actions OIDC). All four artifacts (tarball,.sha256,.sig,.pem) are attached to the GitHub Release. Includes a verification smoke test before publishing so a mis-signed release cannot reach consumers.AIRGAP.md— consumer-facing offline-consumption guide covering acquisition (gh release / curl), verification with cosign in both online and offline modes, extraction and consumption layout, and the update flow for vendored catalogs. Also includes a maintainer release-procedure section.Why
Downstream consumers — specifically
autonomy-harnessMode-C/D deployments (RHEL VDIs pointed at Ollama on NVIDIA DGX Spark; airgapped networks) — need to vendor the catalog at a known-good version with cryptographic provenance. Today the only acquisition path isgit clone, which is unworkable for isolated networks and not auditable for regulated environments.This PR is also useful for non-airgap consumers who want to pin to a specific release rather than tracking
main.How it works
tar --sort=name --owner=0 --group=0 --numeric-owner --mtime='@0' --format=ustar, thengzip -n -9. Same tag → same tarball bytes.sigstore/cosign-installer@v3+cosign sign-blob. Uses GitHub Actions OIDC (id-token: write); no signing keys to manage. Identity is bound to the workflow running inturbobeest/auditsvia the certificate's SAN.cosign verify-blobagainst its own output before creating the release, so a mis-signed artifact halts the workflow rather than reaching the public release.workflow_dispatchpath produces the artifacts as workflow outputs only — no public release — so the artifact-production path can be exercised before tagging a realv1.0.0.What's NOT in this PR
v1.0.0.audit-browser/SvelteKit app is intentionally excluded from the tarball (it deploys separately viadeploy-pages.yml);AIRGAP.mddocuments how offline networks can deploy it themselves.LICENSE, the existingupdate-inventory.ymlcadence, or any audit YAML content.Test plan
workflow_dispatchwith inputv0.0.0-dryrunto confirm artifact production end-to-end on GitHub Actions.AIRGAP.md(sha256 +cosign verify-blob) on a local machine.AIRGAP.mddocuments.git tag -a v1.0.0 -m \"Release v1.0.0\" && git push origin v1.0.0. Confirm the release page lists all four artifacts and that the smoke-test step succeeded.Notes
AIRGAP.md"Offline verification").🤖 Drafted by Claude (Opus 4.7) on behalf of @turbobeest as part of the autonomy-harness deployment-modes work.