A collection of Helm charts for deploying applications in Kubernetes.
helm repo add ah-helm https://ilyario.github.io/ah-helm-charts
helm repo updateThe Helm repo index (index.yaml) and packaged charts (packages/*.tgz) are
served from this repository via GitHub Pages.
| Chart | Description | Links |
|---|---|---|
| citadel-monolith | Deploy monolithic applications in Kubernetes with Infisical secrets, autoscaling, jobs, Gateway API/Ingress, ServiceMonitor, PrometheusRule and a Grafana SRE dashboard | README |
| static-proxy | NGINX-based reverse proxy to external and internal resources, configured via values.yaml | README |
helm install my-static-proxy ah-helm/static-proxy
helm upgrade my-static-proxy ah-helm/static-proxyhelm install my-citadel ah-helm/citadelSee the citadel-monolith README for the full configuration reference (multiple applications per release, Infisical, jobs, cronjobs, monitoring).
Chart sources live in charts/; what users install comes from the published
repo index. The flow is automated by GitHub Actions:
- On push to
maintouchingcharts/**, theupdate-repo.yamlworkflow packages every chart (helm package→packages/*.tgz), regeneratesindex.yaml(helm repo index --merge) and commits both back tomain, where GitHub Pages serves them. Committedpackages/*.tgzare a mirror of published versions;--mergekeeps older chart versions installable. - On push of a SemVer git tag (
v1.2.3or1.2.3) thedocker-build.ymlworkflow builds the tools image and tags itX.Y.Z/X.Y/sha-*/latestin ghcr.io (docker/metadata-actiontype=semverworks only on tag pushes). - On pull requests the
lint-test.ymlworkflow runshelm lint,ct lint(chart-testing),kube-linterand the template smoke tests for changed charts.
Typical release flow:
# 1. Bump chart version(s) in charts/*/Chart.yaml, merge to main
# -> update-repo.yaml packages and publishes the charts automatically
# 2. Tag a Docker image release and push the tag
git tag -a 1.5.1 -m "Release 1.5.1" && git push origin 1.5.1Chart versions (SemVer in Chart.yaml) and Docker image tags (git tags) are
independent release lines.
ah-helm-charts/
├── charts/ # Chart sources (one directory per chart)
│ ├── citadel-monolith/
│ └── static-proxy/
├── scripts/ # Chart render smoke tests (bash/python)
├── docs/assets/ # Chart icons and other repository assets
├── packages/ # Committed chart *.tgz packages (regenerated by update-repo.yaml CI)
├── index.yaml # Helm repo index (regenerated by update-repo.yaml CI)
├── .github/workflows/ # CI: lint-test.yml (PRs), update-repo.yaml (push to main), docker-build.yml (push/tags)
└── README.md
Note: packages/*.tgz and index.yaml are generated artifacts — CI commits
them to main (GitHub Pages serves this branch); you normally don't edit them
by hand.
- Create a new directory in
charts/with your chart - Add
kubeVersion, keywords and artifacthub annotations toChart.yaml(see existing charts); add the chart icon SVG underdocs/assets/ - Document values with comments in
values.yamland generate the values tables with helm-docs (aREADME.md.gotmplin the chart dir renders README.md; CI checks for drift via.github/scripts/helm-docs-check.sh) - Open a PR — the
lint-test.ymlworkflow must pass - Merge to
main—update-repo.yamlpackages and publishes the chart; tag a Docker image release when needed (see Releases)
helm lint charts/citadel-monolith charts/static-proxy
./scripts/helm-template-test.sh
python3 scripts/test_citadel_update_strategy.py
python3 scripts/test_citadel_sre_dashboard.py
bash charts/citadel-monolith/tests/run-dns-label-test.sh
# Optional, matching CI:
# ct lint --config .github/ct.yaml --check-version-increment=false (chart-testing)
helm-docs # regenerate chart README tableskube-linter in CI starts from rendered manifests (see .github/workflows/lint-test.yml);
locally you can reproduce it the same way with helm template into a directory and
kube-linter lint <dir> --config .github/kube-linter.yaml.
MIT — see LICENSE.