Skip to content

ci: also publish charts to GHCR as OCI artifacts - #36

Open
hisco wants to merge 2 commits into
mainfrom
feat/oci-chart-publish
Open

ci: also publish charts to GHCR as OCI artifacts#36
hisco wants to merge 2 commits into
mainfrom
feat/oci-chart-publish

Conversation

@hisco

@hisco hisco commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

What

After chart-releaser publishes to the HTTP repo (gh-pages) and GitHub Releases, mirror each newly-packaged chart to the GHCR OCI registry at oci://ghcr.io/skyhook-io/charts/<name>.

Why

OCI is the modern Helm distribution format (Helm 3.8+) and is what enterprise catalogs consume natively — NKP, Rancher, Argo CD, Flux. Without an OCI path, our charts cannot be listed in those catalogs. This matches the dual-publish posture of enterprise-facing charts (cert-manager → quay, Bitnami → docker.io), while keeping the existing HTTP Helm repo and Artifact Hub listing unchanged.

How

  • packages: write permission + azure/setup-helm@v4
  • New step pushes only the charts chart-releaser actually packaged this run (.cr-release-packages/*.tgz), so it never re-pushes unchanged charts
  • Idempotency guard: skip if name+version already exists in the registry, so an unrelated commit can never overwrite an existing (immutable) chart digest

Verified locally

  • YAML valid, actionlint clean
  • Name/version extraction on the real radar chart resolves to oci://ghcr.io/skyhook-io/charts/radar

Manual step required after first successful run

The first push creates a private GHCR package. It must be flipped to public in the package settings, then verified with a logged-out helm show chart oci://ghcr.io/skyhook-io/charts/radar --version <v>. Until that flip, anonymous pulls return 403.

https://claude.ai/code/session_01JV8VHKekHyabojMnJ74mti


Note

Low Risk
CI-only publishing change with no application runtime impact; main follow-up is making the new GHCR packages public for anonymous pulls.

Overview
Extends the release workflow so charts that chart-releaser packages on main are also published to GHCR as OCI artifacts at oci://ghcr.io/skyhook-io/charts/<name>, alongside the existing HTTP/gh-pages and GitHub Releases flow.

Adds packages: write, installs Helm 3.14.0, and a post–chart-releaser step that only runs when .cr-release-packages/*.tgz exist. Each tarball is pushed after login; pushes are skipped when that chart name+version is already present in the registry to avoid changing digests for immutable versions.

Reviewed by Cursor Bugbot for commit b7cb878. Bugbot is set up for automated code reviews on this repo. Configure here.

Mirror each chart-releaser package to oci://ghcr.io/skyhook-io/charts
after the HTTP repo (gh-pages) and GitHub Release are published, so
enterprise catalogs that consume charts over OCI (NKP, Rancher, Argo/Flux)
can pull oci://ghcr.io/skyhook-io/charts/<name>.

- add packages: write and azure/setup-helm
- push only charts chart-releaser actually packaged this run
  (.cr-release-packages/*.tgz)
- skip if the name+version already exists in the registry, so an
  unrelated commit never overwrites an existing immutable chart digest

The HTTP Helm repo and Artifact Hub listing are unchanged.

Claude-Session: https://claude.ai/code/session_01JV8VHKekHyabojMnJ74mti

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2d65c3b. Configure here.

Comment thread .github/workflows/release.yml Outdated
Bugbot: azure/setup-helm@v4 without a version input installs latest
(now Helm 4.x), leaving the untested-on-Helm-4 OCI push path exposed.
Match ci.yaml exactly (setup-helm@v5, version v3.14.0) for a single,
tested Helm line across the repo.

Claude-Session: https://claude.ai/code/session_01JV8VHKekHyabojMnJ74mti
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