feat: publish Helm chart as an OCI artifact to ghcr.io#845
Conversation
Adds a release-charts-oci job that packages the chart and pushes it to oci://ghcr.io/open-feature/charts/open-feature-operator, then signs the artifact with cosign for parity with the operator image. The classic gh-pages chart repository is unchanged, so both distribution methods are available. Publishing an OCI chart lets consumers pull it directly with helm and proxy/mirror it through OCI-aware registries such as JFrog Artifactory or Harbor. A reusable `helm-push-oci` Make target and a `CHART_OCI_REGISTRY` variable are added so the push can be run locally, and the installation docs document the OCI install path. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Jason Benedicic <48251655+jabenedicic@users.noreply.github.com>
There was a problem hiding this comment.
Code Review
This pull request introduces support for publishing and installing the Helm chart via an OCI registry. It adds a CHART_OCI_REGISTRY variable and a helm-push-oci target to the Makefile, and updates the installation documentation with instructions for using the OCI registry. Feedback points out an inconsistency in the GitHub organization namespace used between RELEASE_REGISTRY (without a hyphen) and CHART_OCI_REGISTRY (with a hyphen) in the Makefile, suggesting they be aligned to the correct open-feature namespace.
| KUSTOMIZE_OVERLAY ?= DEFAULT | ||
| CHART_VERSION=v0.9.2# x-release-please-version | ||
| # OCI registry the packaged Helm chart is pushed to (helm appends the chart name). | ||
| CHART_OCI_REGISTRY?=oci://ghcr.io/open-feature/charts |
There was a problem hiding this comment.
There is an inconsistency in the default organization/registry namespace used in the Makefile:
RELEASE_REGISTRY(line 1) defaults toghcr.io/openfeature(no hyphen).CHART_OCI_REGISTRY(line 11) defaults tooci://ghcr.io/open-feature/charts(with hyphen).
Since the official GitHub organization is open-feature (with a hyphen), RELEASE_REGISTRY might contain a typo or legacy value. Consider aligning them to use the correct open-feature namespace across both variables to avoid confusion or publishing to the wrong registry namespace.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #845 +/- ##
===========================================
- Coverage 86.51% 69.42% -17.10%
===========================================
Files 19 31 +12
Lines 1587 2008 +421
===========================================
+ Hits 1373 1394 +21
- Misses 173 561 +388
- Partials 41 53 +12 see 26 files with indirect coverage changes
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
|
Oh this is cool. I will review soon, hopefully in the next day or two! |
Summary
Publishes the operator's Helm chart as an OCI artifact to GitHub Container Registry, in addition to the existing classic (gh-pages) chart repository. This gives consumers a second, OCI-native distribution channel that can be pulled directly with
helmand proxied/mirrored through OCI-aware registries such as JFrog Artifactory or Harbor.release-charts-ocijob inrelease-please.ymlthat, on a created release:make helm-package),oci://ghcr.io/<owner>/charts→ghcr.io/open-feature/charts/open-feature-operator:<version>,COSIGN_PRIVATE_KEY/COSIGN_PASSWORDsecrets, for parity with the operator image.helm-push-ociMake target +CHART_OCI_REGISTRYvariable so the push can be run/overridden locally.docs/installation.md: documents the OCI install path (wrapped in release-please version markers so it stays in sync).The existing classic chart flow (
release-charts→ gh-pages +index.yaml) and thehelm repo addinstall path are unchanged — both distribution methods are available.Why a separate OCI path
The container image already occupies
ghcr.io/<owner>/open-feature-operator. To avoid a tag collision between the image and the chart, the chart is published under acharts/sub-namespace:ghcr.io/open-feature/charts/open-feature-operator.Install example
Operational note for maintainers
On the first release after merge, GHCR will create a new package
charts/open-feature-operatorunder theopen-featureorg. It will default to private — a maintainer will need to set its visibility to public and link it to the repo so the published chart is pullable anonymously (same one-time step the image package needed). TheGITHUB_TOKENin the job haspackages: write, which is sufficient to create and push to the package.Test plan
make -n helm-push-ociresolves tohelm push charts/open-feature-operator-v0.9.2.tgz oci://ghcr.io/open-feature/charts(filename matcheshelm-packageoutput).release-charts-ocimirrors the existing signedbuild-ocijob (pinned action SHAs,packages: write, cosign sign step).cosign verify --key <pub> ghcr.io/open-feature/charts/open-feature-operator:<tag>) after the first release.🤖 Generated with Claude Code