
Helm Chart Builder
Package a solo-built service as a production-ready Helm chart with standard templates, helpers, and values patterns for Kubernetes.
Overview
Helm Chart Builder is an agent skill for the Operate phase that teaches production Helm chart layout, shared helpers, and Kubernetes template patterns for packaging solo-built services.
Install
npx skills add https://github.com/alirezarezvani/claude-skills --skill helm-chart-builderWhat is this skill?
- Documents minimal vs full production chart directory layouts with templates for Deployment, Service, Ingress, HPA, PDB,
- Standard _helpers.tpl patterns for chart name, fullname, and 63-character Kubernetes naming limits
- values.yaml and optional values.schema.json guidance for validated defaults
- helm test hook pattern under templates/tests for post-install connectivity checks
- charts/ dependency layout aligned with helm dependency update workflows
- Documents both minimal and full production chart directory layouts
- Standard Kubernetes name truncation at 63 characters in fullname helpers
Adoption & trust: 525 installs on skills.sh; 17.5k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You can run your app locally but lack a consistent, production-grade Helm chart structure for Kubernetes releases.
Who is it for?
Indie builders deploying APIs or SaaS on Kubernetes who want opinionated chart scaffolding instead of copying random gist templates.
Skip if: Teams that only use serverless or PaaS with no Helm pipeline, or operators who already maintain a shared internal chart library.
When should I use this skill?
You are authoring or refactoring a Helm chart for a service heading to Kubernetes and need standard structure and helper templates.
What do I get? / Deliverables
You get a documented minimal or full chart skeleton with standard helpers and core workload templates ready to customize and helm install or upgrade.
- Chart directory layout plan
- Adapted _helpers.tpl and core workload templates
- values.yaml structure with optional values.schema.json
Recommended Skills
Journey fit
Helm charts are the deployable unit for running apps on Kubernetes in production, which maps to operating infrastructure rather than ideation or marketing. Chart structure, helpers, and values wiring are infra artifacts you maintain after the app exists and before or during cluster rollout.
How it compares
Use as a chart authoring reference inside the agent, not as a live cluster MCP or CI runner that applies releases for you.
Common Questions / FAQ
Who is helm-chart-builder for?
Solo and indie developers shipping containerized apps to Kubernetes who need repeatable Chart.yaml, values, and templates without a dedicated DevOps hire.
When should I use helm-chart-builder?
Use it in Operate when packaging infra for clusters, and in Ship when preparing launch artifacts—whenever you are standardizing deployments, adding ingress/HPA/PDB, or fixing naming helper drift across charts.
Is helm-chart-builder safe to install?
It is procedural documentation for the agent; review the Security Audits panel on this page before trusting the skill source, and never let generated charts bypass your own cluster policy review.
SKILL.md
READMESKILL.md - Helm Chart Builder
# Helm Chart Patterns Reference ## Standard Chart Structure ### Minimal Production Chart ``` mychart/ ├── Chart.yaml ├── values.yaml ├── .helmignore └── templates/ ├── _helpers.tpl ├── deployment.yaml ├── service.yaml ├── serviceaccount.yaml ├── NOTES.txt └── tests/ └── test-connection.yaml ``` ### Full Production Chart ``` mychart/ ├── Chart.yaml ├── values.yaml ├── values.schema.json # JSON Schema validation ├── .helmignore ├── templates/ │ ├── _helpers.tpl │ ├── deployment.yaml │ ├── service.yaml │ ├── ingress.yaml │ ├── serviceaccount.yaml │ ├── hpa.yaml │ ├── pdb.yaml │ ├── networkpolicy.yaml │ ├── configmap.yaml │ ├── secret.yaml │ ├── NOTES.txt │ └── tests/ │ └── test-connection.yaml └── charts/ # Managed by helm dependency update ``` --- ## _helpers.tpl — Standard Helpers Every chart needs these. Copy and adapt. ```yaml {{/* Expand the name of the chart. */}} {{- define "mychart.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} {{- end }} {{/* Create a default fully qualified app name. Truncated at 63 chars because some Kubernetes name fields are limited. */}} {{- define "mychart.fullname" -}} {{- if .Values.fullnameOverride }} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} {{- else }} {{- $name := default .Chart.Name .Values.nameOverride }} {{- if contains $name .Release.Name }} {{- .Release.Name | trunc 63 | trimSuffix "-" }} {{- else }} {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} {{- end }} {{- end }} {{- end }} {{/* Create chart name and version as used by the chart label. */}} {{- define "mychart.chart" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- end }} {{/* Common labels. */}} {{- define "mychart.labels" -}} helm.sh/chart: {{ include "mychart.chart" . }} {{ include "mychart.selectorLabels" . }} {{- if .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} {{- end }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end }} {{/* Selector labels (immutable — used in matchLabels). */}} {{- define "mychart.selectorLabels" -}} app.kubernetes.io/name: {{ include "mychart.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} {{/* Create the name of the service account to use. */}} {{- define "mychart.serviceAccountName" -}} {{- if .Values.serviceAccount.create }} {{- default (include "mychart.fullname" .) .Values.serviceAccount.name }} {{- else }} {{- default "default" .Values.serviceAccount.name }} {{- end }} {{- end }} ``` ### Why These Helpers Matter - **Name truncation** — Kubernetes names max at 63 characters. Always trunc. - **Selector labels separate from common labels** — selectors are immutable after creation. Adding `app.kubernetes.io/version` to selectors breaks upgrades. - **nameOverride vs fullnameOverride** — `nameOverride` replaces the chart name portion, `fullnameOverride` replaces everything. --- ## Deployment Patterns ### Standard Web Service ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "mychart.fullname" . }} labels: {{- include "mychart.labels" . | nindent 4 }} spec: {{- if not .Values.autoscaling.enabled }} replicas: {{ .Values.replicaCount }} {{- end }} selector: matchLabels: {{- include "mychart.selectorLabels" . | nindent 6 }} template: metadata: {{- with .Values.podAnnotations }} annotations: {{- toYaml . | nindent 8 }} {{- end }} labels: {{- include "mychart.labels" . | nindent 8 }} {{- with .Values.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} spec: serviceAccountName: {{ include "mychart.serviceAccountName" . }} automountServiceAccountToken: false securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }} containers: - name: {{ .Char