Skip to content

feat(release): publish flight component to ghcr.io as a signed OCI artifact (+ wasm.directory path) - #301

Merged
avrabe merged 2 commits into
mainfrom
feat/oci-distribution-wasm-directory
Jul 22, 2026
Merged

feat(release): publish flight component to ghcr.io as a signed OCI artifact (+ wasm.directory path)#301
avrabe merged 2 commits into
mainfrom
feat/oci-distribution-wasm-directory

Conversation

@avrabe

@avrabe avrabe commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Adds the OCI-distribution channel behind wasm.directory publishing — the second half of "publish the wasm."

What lands

  • release.yml: on every tag, the flight-component job pushes the exact falcon-flight-vX.wasm it attached to ghcr.io/pulseengine/falcon-flight:<version> (and :latest) via wkg — which tags it with the Component-Model OCI media type wasm.directory expects, not a generic blob — then cosign-signs the ref keyless. Adds packages: write.
  • Non-blocking (continue-on-error): the primary artifact is still the cosign-signed GitHub Release; a registry hiccup must never fail a release. Tighten to hard-fail once it's proven across a few tags.
  • docs/OCI-DISTRIBUTION.md: pull/verify recipe + the two one-time owner steps and honest scope.

Two one-time manual steps (owner) — documented

  1. Make the ghcr package public after the first push (ghcr defaults to private; wasm.directory can only index public).
  2. Register the pulseengine namespace with wasm.directory (it's alpha — a visibility channel, not a dependency; the signed GitHub Release + ghcr ref remain the durable artifacts).

Honest caveats

  • Release CI is tag-triggered, so this can't run on the PR — it lands best-effort and self-validates on the next tag.
  • falcon:flight today exports two runnable smoke-test functions, not a reusable typed control interface — publishing is a provenance/visibility play; a richer typed interface is a separate follow-on.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG

avrabe and others added 2 commits July 22, 2026 13:26
…I artifact

Adds an additive distribution channel for the verified falcon:flight
component so it's pullable via `wkg oci pull` and indexable by
wasm.directory (a meta-registry over OCI 1.1 registries), alongside the
existing cosign-signed GitHub Release.

- release.yml flight-component job: after attaching the wasm, push it to
  ghcr.io/<owner>/falcon-flight:<version> and :latest via `wkg`
  (wasm-pkg-tools — carries the Component-Model OCI media type
  wasm.directory expects, not a generic blob), then cosign-sign the ref
  keyless. NON-BLOCKING (continue-on-error): a registry hiccup must never
  fail the primary signed release; tighten to hard-fail once proven over
  a few tags. Adds `packages: write`.
- docs/OCI-DISTRIBUTION.md: the pull/verify recipe + the two one-time
  owner steps (make the ghcr package public — it defaults private, and
  wasm.directory can only index public; register the namespace with
  wasm.directory) + honest scope (falcon:flight is a runnable smoke-test
  component today, not yet a reusable typed interface — publishing is a
  provenance/visibility play).

Ships on the next tagged release; can't be exercised on a PR (release is
tag-triggered), so it lands best-effort and self-validates on the next tag.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
Three findings on the freshly-added step, all addressed:
- command-injection (HIGH): bind the tag via env INPUT_TAG/GITHUB_REF_NAME
  instead of expanding ${{ }} inside run: (the convention this file
  documents), and validate it matches ^falcon-vX.Y.Z(-pre)?$ before use.
- supply-chain (MED): the crate is `wkg` (not wasm-pkg-tools — the old
  name would not have installed); pin it, `--version 0.15.1`.
- signing-by-mutable-tag (MED): capture the pushed digest and cosign-sign
  ${REPO}@sha256:<digest>, never the mutable :FULL tag; push :latest for
  discovery but never sign it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
@avrabe
avrabe merged commit df6de37 into main Jul 22, 2026
59 checks passed
@avrabe
avrabe deleted the feat/oci-distribution-wasm-directory branch July 22, 2026 12:24
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