The chart is no longer needed. Removes the chart directory, its publish workflow, and its row in the README chart table. Already published versions remain in the registry. Fixes #7
4.3 KiB
4.3 KiB
helm-charts
Collection of some self-made helm-charts. Each top-level directory is a standalone Helm chart that gets packaged and pushed to a private OCI registry (JK-Registry) via GitHub Actions.
Charts
| Chart | Deploys | Notes |
|---|---|---|
apache-tika |
Apache Tika | Deployment + Service only (no ingress) |
calibre-web-automated |
Calibre-Web Automated | StatefulSet, extra consume-PVC |
cyberchef |
CyberChef | Stateless Deployment |
gotenberg |
Gotenberg | Deployment + Service only (no ingress) |
homeassistant |
Home Assistant | StatefulSet, has NOTES.txt and Helm tests |
matrix-synapse |
Matrix Synapse | StatefulSet plus an nginx delegation Deployment/Service |
outline |
Outline | StatefulSet, separate DB/Redis secrets |
paperless-ngx |
Paperless-ngx | Largest chart: consume CronJob, SMB-connector PV/PVC, pre/post-consumption scripts ConfigMap |
patchmon |
PatchMon | Two Deployments (frontend + backend), OIDC secret |
rallly |
Rallly | Deployment, DB/OIDC/SMTP secrets |
samba |
Samba | StatefulSet, users secret + config ConfigMap |
satisfactory |
Satisfactory game server | StatefulSet, no ingress |
teamspeak-server |
TeamSpeak server | StatefulSet, no ingress |
template-chart |
— | Scaffold for new charts (placeholder xxx), never published |
urlaubsverwaltung |
Urlaubsverwaltung | Deployment, DB + OIDC secrets |
voucher-vault |
VoucherVault | StatefulSet, DB + OIDC secrets |
zipline |
Zipline | StatefulSet, DB secret |
Versioning
Chart.yaml uses the scheme version: <chart-semver>+up<app-version> (e.g. 1.4.0+up1.9.2), where appVersion matches the +up suffix (dashes in the app version are normalized to dots in the suffix, e.g. 0.0.36-beta → +up0.0.36.beta).
- Bump the semver part when the chart itself (templates/values) changes.
- The app version is bumped via the
Change App-Versionworkflow, which rewritesversion:/appVersion:and commits directly tomain.
CI/CD (GitHub Actions)
publish-<chart>.yml— one thin workflow per chart; triggers on any push touching<chart>/**(or manually) and calls the reusable workflow below. A push to a chart directory onmainpublishes that chart, so the chart version must be bumped in the same change.publish-helm-chart.yml— reusable workflow:helm package, thenhelm pushto the private JK-Registry. Registry credentials come from 1Password Connect (OP_CONNECT_TOKENsecret, items underop://GitHub-Actions/).change-app-version.yml— manually dispatched app-version bump; the chart must be listed in itschart-namechoice list.
Creating a new chart
- Copy
template-chart/to<chart-name>/and replace everyxxxplaceholder: template file names (xxx.deployment.yaml→<app>.deployment.yaml),Chart.yaml, thevalues.yamlkeys, and the.Values.xxx.*references inside the templates. - Add
.github/workflows/publish-<chart-name>.yml(copy an existing one, e.g.publish-outline.yml). - Add the chart name to the choice list in
.github/workflows/change-app-version.yml.
Validate locally with:
helm lint <chart-name>
helm template <chart-name> --set ingress.domain=example.com --set ingress.clusterIssuer=letsencrypt
(required values vary per chart)
Chart conventions
- Resources are named
{{ .Release.Name }}-{{ .Chart.Name }}-<kind>; template files are named<app>.<kind>.yaml(StatefulSets use.sfs.yaml). - Image tags come from
{{ .Chart.AppVersion }}. - Secrets are 1Password
OnePasswordItemCRs: values exposesecrets.<name>SecretRefholding anop://item path; the 1Password operator materializes the Kubernetes Secret in-cluster. - Ingress assumes ingress-nginx (
ingressClassName: nginx) and cert-manager:ingress.clusterIssuerandingress.domainare required values; the TLS secret is namedtls-<release>-<chart>-ingress. enventries invalues.yamlare rendered throughtpl, so values may contain Helm templating;value,secretKeyRefandconfigMapKeyRefforms are supported.- Hardened defaults:
automountServiceAccountToken: false, non-root user,readOnlyRootFilesystem: true, all capabilities dropped, probes and resource requests/limits always set. - Charts have no dependencies (
charts/directories are empty).