Skip to content

Create a first-party chart

This packages your own app as a Helm chart, installs it, and publishes it to GitHub Container Registry, which doubles as an OCI chart registry.

It assumes:

  • You can reach your cluster with kubectl (see the kubectl quickstart).
  • You have Helm installed locally.
  • You’ve set up GHCR credentials (Helm reuses the same token; pushing needs write:packages). See Set up GHCR credentials.
Terminal window
helm create hello

This generates a working chart under hello/:

  • Chart.yaml — the chart’s name and version.
  • values.yaml — default configuration.
  • templates/ — the Kubernetes manifests, parameterised with values.

The scaffold deploys nginx out of the box. To ship your own app instead, point image.repository and image.tag in values.yaml at an image you’ve pushed (see Ship your first app).

Terminal window
kubectl create namespace helm-demo
helm install hello ./hello -n helm-demo
Terminal window
kubectl rollout status -n helm-demo deploy/hello

Package the chart into a versioned archive (the version comes from Chart.yaml):

Terminal window
helm package hello

Log in and push it as an OCI artifact:

Terminal window
helm registry login ghcr.io -u <github-username>
helm push hello-0.1.0.tgz oci://ghcr.io/<github-username>

Paste the token at the prompt.

The chart now installs by reference, no working copy needed. This is how others, or your CI, would consume it (using a separate release name so it doesn’t collide with the working-copy install above):

Terminal window
helm install hello-oci oci://ghcr.io/<github-username>/hello --version 0.1.0 -n helm-demo
Terminal window
helm uninstall hello hello-oci -n helm-demo
kubectl delete namespace helm-demo

The pushed chart stays in GHCR; delete it from the repository’s package settings if you no longer want it.