Lesson 12 · Secrets, scale & operations

Chart quality

Catching a broken template before it reaches a cluster — lint, render, versioning, and the drift check.

Your win: name the tools that validate a chart (lint, template, schemas, versioning) and read this repo's actual quality posture — including where it relies on a drift check and where it has a gap.

The validation toolkit

ToolCatches
helm lintstructural/best-practice problems in a chart
helm template (dry-run render)template errors + lets you eyeball the YAML before deploy
values.schema.jsoninvalid/missing values, validated at install
chart version bumpstells consumers a chart changed (SemVer)
--dry-run / --debuga full server-side rehearsal of an install
The cheapest, highest-value habit helm template (render locally, no cluster) is the fastest way to catch the classic bugs — a mis-indented nindent, an undefined value, a bad toYaml. If it doesn't render, it was never going to deploy. Do it before every change lands.

This repo's quality posture — honest version

Anchor — what exists
Anchor — the gaps (worth naming in an interview) Being honest about what this repo doesn't do is itself good engineering judgement:

The drift-check pattern the repo does use elsewhere

Anchor — generated-artifact guards The repo does guard other generated artifacts with a git diff --exit-code pattern — regenerate, and fail CI if the committed output differs: .github/scripts/ensure-make-generate-dags.bash (the Airflow DAGs, from that course) and .github/scripts/ensure-make-gen-db-schema.bash (the DB schema). That's the exact technique that would guard templates/util/ — a nice "here's how you'd close the gap" answer, and the shape of the drift check that keeps generated code honest.
Read this next

Helm docs — Best Practices + helm lint / template

Chart conventions, and the lint/template validation commands.

helm.sh — Chart Best Practices
helm lint · helm template

Check yourself (from memory)

Q1. The fastest way to catch a template bug pre-deploy is…

Rendering locally surfaces indent/undefined-value errors with no cluster. If it won't render, it won't deploy.

Q2. A values.schema.json lets Helm…

It validates supplied values against a schema. This repo has just one (appsmith); backend charts rely on render errors instead.

Q3. The repo guards its generated DAGs/DB-schema with…

Regenerate then fail if committed output differs (ensure-make-*). The copied templates/util/ lacks this gate.
Chart validation tools + this repo's real quality posture.
recall, then click to reveal
VALIDATION: helm lint (structure/best-practice), helm template (render locally — cheapest, catches nindent/undefined-value bugs), values.schema.json (reject bad values at install), SemVer chart version bumps, --dry-run --debug. REPO POSTURE (honest): HAS — helm template in job.bash:183 + skaffold render, .helmignore everywhere, chart+appVersion. GAPS — no helm lint in CI, only ONE values.schema.json (appsmith), NO drift check on the copied templates/util/ (regenerate via make update-deps). The repo DOES use a git diff --exit-code drift check for DAGs + DB schema (ensure-make-*) — the same pattern that would guard templates/util/.
🎓 Course complete — all 12 lessons From "what Helm is" through chart anatomy, the template engine, values layering; then this repo's library-chart architecture (named templates, the copy model, hooks, Skaffold releases); then the production concerns (SOPS-in-app, values at scale, upgrade/rollback, quality). You've paid off Course 2's promise — you now know exactly how this codebase turns one library chart into ~106 charts of Kubernetes objects. Course 4 (Istio) is next, and it's Helm-deployed too — so it builds right on this.
Ready for Course 4 (Istio)? Or — nine courses' worth of lessons, still no retention check — let me run a mock interview on Helm and record where you're solid. Ask me.

1. Helm — Chart Best Practices; helm lint; helm template.