Skip to content

feat: keyless-sign + attest published OCI charts - #64

Merged
viniciusdc merged 2 commits into
mainfrom
feat/sign-oci-charts
Jul 17, 2026
Merged

feat: keyless-sign + attest published OCI charts#64
viniciusdc merged 2 commits into
mainfrom
feat/sign-oci-charts

Conversation

@dcmcand

@dcmcand dcmcand commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Blocked by nebari-dev/.github#46 (this pins the sign-oci action from that PR). Do not merge until #46 is merged and v1 is retagged; then flip the pin to @v1.

What

Phase 2 of Nebari artifact signing: keyless-sign + provenance-attest every Helm chart this repo publishes to oci://quay.io/nebari/charts, so the artifact consumers actually helm install is verifiable. Complements the pack-side signing in nebari-dev/.github#46 (which signs container images and the .tgz on the pack's GitHub Release).

How

release-helm-charts.yml:

  • Digest capture: the helm push step now records each pushed chart's repo + digest and exposes them as a release job output (charts, a JSON array; empty -> []).
  • New sign job: fans out over the pushed charts via a dynamic matrix (fromJSON(needs.release.outputs.charts), guarded to skip when empty), docker logins to quay (cosign reads Docker's config, not helm's), and calls the shared sign-oci composite action per chart.
  • Scope: signature + SLSA build provenance, no SBOM (sbom: "false") - syft doesn't meaningfully SBOM a Helm chart artifact.
  • Permissions moved to job level: release keeps contents: write; sign gets id-token: write + attestations: write + contents: read.
  • Existing packaging / ensure-quay-repos / quay push / gh-pages index behavior is otherwise unchanged.

Signer identity for the OCI charts is this repo's release-helm-charts.yml (distinct from the pack's pack-build-image.yaml / pack-release.yaml identities), as documented in verifying-nebari-artifacts.md.

Dependency / merge order

Verification

  • actionlint clean.
  • Runtime validation: dispatched on this branch to sign the currently-published charts, then cosign verify an OCI chart against the release-helm-charts.yml identity (evidence added as a comment).

Draft until #46 lands and the pin is flipped to @v1.

@dcmcand

dcmcand commented Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Runtime validation - OCI chart signing works end-to-end

Dispatched this branch's release-helm-charts.yml (run 29587275447): the release job published, and all 11 sign matrix jobs succeeded (digest capture -> dynamic matrix -> docker login quay -> sign-oci per chart).

cosign verify of a published OCI chart (branch identity, since dispatched from feat/sign-oci-charts):

cosign verify quay.io/nebari/charts/nebari-llm-serving:0.1.2 \
  --certificate-identity-regexp "https://github.com/nebari-dev/helm-repository/\.github/workflows/release-helm-charts\.yml@.*" \
  --certificate-oidc-issuer "https://token.actions.githubusercontent.com"

-> verified: cosign signature (sigstore.dev/cosign/sign/v1) + SLSA provenance (slsa.dev/provenance/v1), transparency log + cert chain checked. No SBOM, as designed.

Notes

@viniciusdc
viniciusdc marked this pull request as ready for review July 17, 2026 14:20
@viniciusdc
viniciusdc merged commit 69d7966 into main Jul 17, 2026
12 checks passed
@viniciusdc
viniciusdc deleted the feat/sign-oci-charts branch July 17, 2026 14:20
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.

2 participants