All projects

OCI Helm Chart Registry

HelmOCICI/CDPython

17 custom Helm charts authored to a single consistent contract and published to an OCI registry, with a CI pipeline that validates every chart without a live cluster and signs each release with cosign.

View Code on GitHub

Chart publish pipeline

Diagram: Chart publish pipeline

The registry is as much about consistency as distribution. Seventeen charts β€” covering stateful services, gateways, and utilities β€” share one authoring contract so any of them reads the same way, and eleven of them are what the GitOps platform actually deploys.

A contract, not a pile of charts

Values files carry structured @section/@param documentation, external credentials always arrive via an existingSecret reference instead of inline values, and template helpers fail fast on contradictory configuration. Charts ship the operational patterns real workloads need β€” probes, resource defaults, HPA, PodDisruptionBudget, ServiceMonitor β€” behind the same value names every time, so operating one chart teaches you all of them.

Validation without a cluster

The pipeline detects which charts a commit touched, renders each with helm template, and parses the output with Python to catch template errors, schema violations, and malformed manifests. The CI scripts themselves are pytest-covered β€” the pipeline is code with tests, not glue. None of it needs a Kubernetes cluster, so validation is fast and runs on every merge request.

Publishing that can’t clobber

Stable releases publish once: the pipeline checks whether a version already exists in the OCI registry and refuses to overwrite it, while work-in-progress builds get timestamped CI versions. Every published chart is cosign-signed by digest β€” and if signing fails, the publish rolls back rather than leaving an unsigned artifact in the registry. The verification key is committed in the repo, so consumers can verify what they pull.

Key Technical Highlights

  • One chart contract: Every chart follows the same conventions β€” @section/@param value docs, an existingSecret pattern for external secrets, and {{- fail }} validation helpers for mutually-exclusive options.
  • Cluster-free validation: CI renders each changed chart with helm template and parses the output with Python β€” catching template and schema errors without needing a Kubernetes cluster in the pipeline.
  • Idempotent, signed publishing: Charts publish to the OCI registry with smart version detection to prevent overwrite conflicts; each release is cosign-signed by digest, with an automatic rollback if signing fails.
  • Renovate-tracked images: Chart image tags are Renovate-managed and auto-bump the chart version, so upstream updates flow through as reviewable, soaked merge requests.

From chart source to running workload

Diagram: From chart source to running workload
The same signed OCI artifact CI publishes is what the GitOps platform renders and deploys.

Technologies

HelmOCI RegistryGitLab CIPythoncosignRenovate