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/classifyreThe 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 --tagsCI builds and publishes
The release workflow triggers on the pushed tag and:
- Builds Docker images (
api,web,cli, all-in-one) tagged asmain - Retags images to
0.2.0,0.2,0, andlatest - Lints and packages the Helm chart
- Pushes the chart to
oci://ghcr.io/andrebanandre/unstructured/charts/classifyre:0.2.0 - 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.0Chart-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:
- Go to Actions -> Release Chart
- Click Run workflow
- 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.yamlversionis bumped (for example0.1.2->0.1.3)appVersionis not changed, so images remain as0.1.2- A
chart-v0.1.3git tag is pushed tomain - The chart is linted, packaged, and pushed to GHCR
Verify
helm show chart oci://ghcr.io/andrebanandre/unstructured/charts/classifyre --version 0.1.3Users upgrade chart-only by running helm upgrade with the new chart version. Pods only restart if templates changed.
Tag conventions
| Tag format | Example | Trigger |
|---|---|---|
v{version} | v0.2.0 | Full app release (bumps images + chart) |
chart-v{version} | chart-v0.1.3 | Chart-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 \
--debugRegenerating 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.