Skip to Content
Unified docs shell with shared Classifyre tokens and acid-green highlight accents.
DeploymentChart Publishing

Publishing the Helm Chart

The Helm chart is published automatically to GHCR as an OCI artifact on every release. This page explains how the publishing pipeline works and how to trigger chart-only releases.

Where the chart lives

oci://ghcr.io/andrebanandre/unstructured/charts/classifyre

The chart is stored alongside the container images in the same GHCR namespace. No separate Helm repository needed.

Automated publishing on release

The release.yml GitHub Actions workflow handles everything:

Bump versions

Run the version script locally to bump all package.json files and Chart.yaml in sync:

cd .
node scripts/set-release-version.mjs 0.2.0
git add -A
git commit -m "chore: release 0.2.0"
git tag v0.2.0
git push origin main --tags

CI builds and publishes

The release workflow triggers on the pushed tag and:

  1. Builds Docker images (api, web, cli, all-in-one) tagged as main
  2. Retags images to 0.2.0, 0.2, 0, and latest
  3. Lints and packages the Helm chart
  4. Pushes the chart to oci://ghcr.io/andrebanandre/unstructured/charts/classifyre:0.2.0
  5. Creates the GitHub Release with auto-generated notes

The chart version and image appVersion are always in sync for full releases.

Verify

helm show chart oci://ghcr.io/andrebanandre/unstructured/charts/classifyre --version 0.2.0

Chart-only releases

When you need to fix a chart template, add a new value, or update documentation without releasing a new app version or rebuilding images, use the Release Chart GitHub Actions workflow.

This bumps only Chart.yaml version, leaves appVersion untouched so existing image tags remain valid, and publishes the updated chart.

Trigger the workflow

In the GitHub Actions UI:

  1. Go to Actions -> Release Chart
  2. Click Run workflow
  3. Enter the new chart version (for example 0.1.3)

The chart version must be higher than the current version in Chart.yaml.

What happens

  • Chart.yaml version is bumped (for example 0.1.2 -> 0.1.3)
  • appVersion is not changed, so images remain as 0.1.2
  • A chart-v0.1.3 git tag is pushed to main
  • The chart is linted, packaged, and pushed to GHCR

Verify

helm show chart oci://ghcr.io/andrebanandre/unstructured/charts/classifyre --version 0.1.3

Users upgrade chart-only by running helm upgrade with the new chart version. Pods only restart if templates changed.

Tag conventions

Tag formatExampleTrigger
v{version}v0.2.0Full app release (bumps images + chart)
chart-v{version}chart-v0.1.3Chart-only release (images unchanged)

Both are visible in the repository tag list and can be used to trace exactly what changed.

Checking what’s published

# Show chart metadata for a specific version
helm show chart oci://ghcr.io/andrebanandre/unstructured/charts/classifyre --version 0.2.0
 
# Pull chart tarball and inspect rendered templates
helm pull oci://ghcr.io/andrebanandre/unstructured/charts/classifyre \
  --version 0.2.0 --untar
 
# Render with your values (dry-run)
helm template classifyre ./classifyre \
  -f your-values.yaml \
  --debug

Regenerating the configuration reference

The values documentation in the Kubernetes deployment guide is auto-generated from helm/classifyre/values.yaml comments. After changing values or their descriptions, regenerate it:

# Regenerate helm/classifyre/README.md from values.yaml
bun run ops:helm:docs
 
# Commit the updated README
git add helm/classifyre/README.md
git commit -m "docs(helm): update values reference"

The docs site re-extracts the values table on every docs build, so there is no manual sync step inside apps/docs.

The check bun run ops:helm:docs:check runs in CI and fails if the generated README is out of date with values.yaml.

Last updated on