[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70K73WD7PZ8X55S2M3RRQ32":3,"skill-same:01M70K73WD7PZ8X55S2M3RRQ32":105},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":34,"publishedAt":54,"linkOnly":55,"markdownContent":56,"markdownBody":57,"frontMatter":58,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":64,"ownerHtmlUrl":65,"ownerBlogUrl":66,"ownerDescription":67,"updatedAt":68,"install":69,"resources":82},"01M70K73WD7PZ8X55S2M3RRQ32","helm-chart-scaffolding",null,"Design, organize, and manage Helm charts for templating and packaging Kubernetes applications with reusable configurations. Use when creating Helm charts, packaging Kubernetes applications, or implementing templated deployments.","shengdabai\u002FTony-Claude-Code-Skills","shengdabai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F116417419?v=4","01M70F6D2WY5PQV5A92BKYJQEW","Tony Sheng","01M70F6D3GAAAYZ5H4CC1G8VXM",3,"MIT","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002F_collections\u002Fwshobson-agents\u002Fplugins\u002Fkubernetes-operations\u002Fskills\u002Fhelm-chart-scaffolding\u002FSKILL.md",[18,23,26,29],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":30,"categoryName":31,"taxonomyType":32,"taxonomyTypeDesc":33},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],"chart","helm chart scaffolding","helm","scaffolding","with","reusable","use","deployments","kubernetes","applications","manage","for","organize","helm charts","when","design","implementing","packaging","Charts","2026-11-10 10:12:30",false,"---\nname: helm-chart-scaffolding\ndescription: Design, organize, and manage Helm charts for templating and packaging Kubernetes applications with reusable configurations. Use when creating Helm charts, packaging Kubernetes applications, or implementing templated deployments.\n---\n\n# Helm Chart Scaffolding\n\nComprehensive guidance for creating, organizing, and managing Helm charts for packaging and deploying Kubernetes applications.\n\n## Purpose\n\nThis skill provides step-by-step instructions for building production-ready Helm charts, including chart structure, templating patterns, values management, and validation strategies.\n\n## When to Use This Skill\n\nUse this skill when you need to:\n- Create new Helm charts from scratch\n- Package Kubernetes applications for distribution\n- Manage multi-environment deployments with Helm\n- Implement templating for reusable Kubernetes manifests\n- Set up Helm chart repositories\n- Follow Helm best practices and conventions\n\n## Helm Overview\n\n**Helm** is the package manager for Kubernetes that:\n- Templates Kubernetes manifests for reusability\n- Manages application releases and rollbacks\n- Handles dependencies between charts\n- Provides version control for deployments\n- Simplifies configuration management across environments\n\n## Step-by-Step Workflow\n\n### 1. Initialize Chart Structure\n\n**Create new chart:**\n```bash\nhelm create my-app\n```\n\n**Standard chart structure:**\n```\nmy-app\u002F\n├── Chart.yaml           # Chart metadata\n├── values.yaml          # Default configuration values\n├── charts\u002F              # Chart dependencies\n├── templates\u002F           # Kubernetes manifest templates\n│   ├── NOTES.txt       # Post-install notes\n│   ├── _helpers.tpl    # Template helpers\n│   ├── deployment.yaml\n│   ├── service.yaml\n│   ├── ingress.yaml\n│   ├── serviceaccount.yaml\n│   ├── hpa.yaml\n│   └── tests\u002F\n│       └── test-connection.yaml\n└── .helmignore         # Files to ignore\n```\n\n### 2. Configure Chart.yaml\n\n**Chart metadata defines the package:**\n\n```yaml\napiVersion: v2\nname: my-app\ndescription: A Helm chart for My Application\ntype: application\nversion: 1.0.0      # Chart version\nappVersion: \"2.1.0\" # Application version\n\n# Keywords for chart discovery\nkeywords:\n  - web\n  - api\n  - backend\n\n# Maintainer information\nmaintainers:\n  - name: DevOps Team\n    email: devops@example.com\n    url: https:\u002F\u002Fgithub.com\u002Fexample\u002Fmy-app\n\n# Source code repository\nsources:\n  - https:\u002F\u002Fgithub.com\u002Fexample\u002Fmy-app\n\n# Homepage\nhome: https:\u002F\u002Fexample.com\n\n# Chart icon\nicon: https:\u002F\u002Fexample.com\u002Ficon.png\n\n# Dependencies\ndependencies:\n  - name: postgresql\n    version: \"12.0.0\"\n    repository: \"https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\"\n    condition: postgresql.enabled\n  - name: redis\n    version: \"17.0.0\"\n    repository: \"https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\"\n    condition: redis.enabled\n```\n\n**Reference:** See `assets\u002FChart.yaml.template` for complete example\n\n### 3. Design values.yaml Structure\n\n**Organize values hierarchically:**\n\n```yaml\n# Image configuration\nimage:\n  repository: myapp\n  tag: \"1.0.0\"\n  pullPolicy: IfNotPresent\n\n# Number of replicas\nreplicaCount: 3\n\n# Service configuration\nservice:\n  type: ClusterIP\n  port: 80\n  targetPort: 8080\n\n# Ingress configuration\ningress:\n  enabled: false\n  className: nginx\n  hosts:\n    - host: app.example.com\n      paths:\n        - path: \u002F\n          pathType: Prefix\n\n# Resources\nresources:\n  requests:\n    memory: \"256Mi\"\n    cpu: \"250m\"\n  limits:\n    memory: \"512Mi\"\n    cpu: \"500m\"\n\n# Autoscaling\nautoscaling:\n  enabled: false\n  minReplicas: 2\n  maxReplicas: 10\n  targetCPUUtilizationPercentage: 80\n\n# Environment variables\nenv:\n  - name: LOG_LEVEL\n    value: \"info\"\n\n# ConfigMap data\nconfigMap:\n  data:\n    APP_MODE: production\n\n# Dependencies\npostgresql:\n  enabled: true\n  auth:\n    database: myapp\n    username: myapp\n\nredis:\n  enabled: false\n```\n\n**Reference:** See `assets\u002Fvalues.yaml.template` for complete structure\n\n### 4. Create Template Files\n\n**Use Go templating with Helm functions:**\n\n**templates\u002Fdeployment.yaml:**\n```yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: {{ include \"my-app.fullname\" . }}\n  labels:\n    {{- include \"my-app.labels\" . | nindent 4 }}\nspec:\n  {{- if not .Values.autoscaling.enabled }}\n  replicas: {{ .Values.replicaCount }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"my-app.selectorLabels\" . | nindent 6 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"my-app.selectorLabels\" . | nindent 8 }}\n    spec:\n      containers:\n      - name: {{ .Chart.Name }}\n        image: \"{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}\"\n        imagePullPolicy: {{ .Values.image.pullPolicy }}\n        ports:\n        - name: http\n          containerPort: {{ .Values.service.targetPort }}\n        resources:\n          {{- toYaml .Values.resources | nindent 12 }}\n        env:\n          {{- toYaml .Values.env | nindent 12 }}\n```\n\n### 5. Create Template Helpers\n\n**templates\u002F_helpers.tpl:**\n```yaml\n{{\u002F*\nExpand the name of the chart.\n*\u002F}}\n{{- define \"my-app.name\" -}}\n{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{\u002F*\nCreate a default fully qualified app name.\n*\u002F}}\n{{- define \"my-app.fullname\" -}}\n{{- if .Values.fullnameOverride }}\n{{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- $name := default .Chart.Name .Values.nameOverride }}\n{{- if contains $name .Release.Name }}\n{{- .Release.Name | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n{{- end }}\n{{- end }}\n\n{{\u002F*\nCommon labels\n*\u002F}}\n{{- define \"my-app.labels\" -}}\nhelm.sh\u002Fchart: {{ include \"my-app.chart\" . }}\n{{ include \"my-app.selectorLabels\" . }}\n{{- if .Chart.AppVersion }}\napp.kubernetes.io\u002Fversion: {{ .Chart.AppVersion | quote }}\n{{- end }}\napp.kubernetes.io\u002Fmanaged-by: {{ .Release.Service }}\n{{- end }}\n\n{{\u002F*\nSelector labels\n*\u002F}}\n{{- define \"my-app.selectorLabels\" -}}\napp.kubernetes.io\u002Fname: {{ include \"my-app.name\" . }}\napp.kubernetes.io\u002Finstance: {{ .Release.Name }}\n{{- end }}\n```\n\n### 6. Manage Dependencies\n\n**Add dependencies in Chart.yaml:**\n```yaml\ndependencies:\n  - name: postgresql\n    version: \"12.0.0\"\n    repository: \"https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\"\n    condition: postgresql.enabled\n```\n\n**Update dependencies:**\n```bash\nhelm dependency update\nhelm dependency build\n```\n\n**Override dependency values:**\n```yaml\n# values.yaml\npostgresql:\n  enabled: true\n  auth:\n    database: myapp\n    username: myapp\n    password: changeme\n  primary:\n    persistence:\n      enabled: true\n      size: 10Gi\n```\n\n### 7. Test and Validate\n\n**Validation commands:**\n```bash\n# Lint the chart\nhelm lint my-app\u002F\n\n# Dry-run installation\nhelm install my-app .\u002Fmy-app --dry-run --debug\n\n# Template rendering\nhelm template my-app .\u002Fmy-app\n\n# Template with values\nhelm template my-app .\u002Fmy-app -f values-prod.yaml\n\n# Show computed values\nhelm show values .\u002Fmy-app\n```\n\n**Validation script:**\n```bash\n#!\u002Fbin\u002Fbash\nset -e\n\necho \"Linting chart...\"\nhelm lint .\n\necho \"Testing template rendering...\"\nhelm template test-release . --dry-run\n\necho \"Checking for required values...\"\nhelm template test-release . --validate\n\necho \"All validations passed!\"\n```\n\n**Reference:** See `scripts\u002Fvalidate-chart.sh`\n\n### 8. Package and Distribute\n\n**Package the chart:**\n```bash\nhelm package my-app\u002F\n# Creates: my-app-1.0.0.tgz\n```\n\n**Create chart repository:**\n```bash\n# Create index\nhelm repo index .\n\n# Upload to repository\n# AWS S3 example\naws s3 sync . s3:\u002F\u002Fmy-helm-charts\u002F --exclude \"*\" --include \"*.tgz\" --include \"index.yaml\"\n```\n\n**Use the chart:**\n```bash\nhelm repo add my-repo https:\u002F\u002Fcharts.example.com\nhelm repo update\nhelm install my-app my-repo\u002Fmy-app\n```\n\n### 9. Multi-Environment Configuration\n\n**Environment-specific values files:**\n\n```\nmy-app\u002F\n├── values.yaml          # Defaults\n├── values-dev.yaml      # Development\n├── values-staging.yaml  # Staging\n└── values-prod.yaml     # Production\n```\n\n**values-prod.yaml:**\n```yaml\nreplicaCount: 5\n\nimage:\n  tag: \"2.1.0\"\n\nresources:\n  requests:\n    memory: \"512Mi\"\n    cpu: \"500m\"\n  limits:\n    memory: \"1Gi\"\n    cpu: \"1000m\"\n\nautoscaling:\n  enabled: true\n  minReplicas: 3\n  maxReplicas: 20\n\ningress:\n  enabled: true\n  hosts:\n    - host: app.example.com\n      paths:\n        - path: \u002F\n          pathType: Prefix\n\npostgresql:\n  enabled: true\n  primary:\n    persistence:\n      size: 100Gi\n```\n\n**Install with environment:**\n```bash\nhelm install my-app .\u002Fmy-app -f values-prod.yaml --namespace production\n```\n\n### 10. Implement Hooks and Tests\n\n**Pre-install hook:**\n```yaml\n# templates\u002Fpre-install-job.yaml\napiVersion: batch\u002Fv1\nkind: Job\nmetadata:\n  name: {{ include \"my-app.fullname\" . }}-db-setup\n  annotations:\n    \"helm.sh\u002Fhook\": pre-install\n    \"helm.sh\u002Fhook-weight\": \"-5\"\n    \"helm.sh\u002Fhook-delete-policy\": hook-succeeded\nspec:\n  template:\n    spec:\n      containers:\n      - name: db-setup\n        image: postgres:15\n        command: [\"psql\", \"-c\", \"CREATE DATABASE myapp\"]\n      restartPolicy: Never\n```\n\n**Test connection:**\n```yaml\n# templates\u002Ftests\u002Ftest-connection.yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: \"{{ include \"my-app.fullname\" . }}-test-connection\"\n  annotations:\n    \"helm.sh\u002Fhook\": test\nspec:\n  containers:\n  - name: wget\n    image: busybox\n    command: ['wget']\n    args: ['{{ include \"my-app.fullname\" . }}:{{ .Values.service.port }}']\n  restartPolicy: Never\n```\n\n**Run tests:**\n```bash\nhelm test my-app\n```\n\n## Common Patterns\n\n### Pattern 1: Conditional Resources\n\n```yaml\n{{- if .Values.ingress.enabled }}\napiVersion: networking.k8s.io\u002Fv1\nkind: Ingress\nmetadata:\n  name: {{ include \"my-app.fullname\" . }}\nspec:\n  # ...\n{{- end }}\n```\n\n### Pattern 2: Iterating Over Lists\n\n```yaml\nenv:\n{{- range .Values.env }}\n- name: {{ .name }}\n  value: {{ .value | quote }}\n{{- end }}\n```\n\n### Pattern 3: Including Files\n\n```yaml\ndata:\n  config.yaml: |\n    {{- .Files.Get \"config\u002Fapplication.yaml\" | nindent 4 }}\n```\n\n### Pattern 4: Global Values\n\n```yaml\nglobal:\n  imageRegistry: docker.io\n  imagePullSecrets:\n    - name: regcred\n\n# Use in templates:\nimage: {{ .Values.global.imageRegistry }}\u002F{{ .Values.image.repository }}\n```\n\n## Best Practices\n\n1. **Use semantic versioning** for chart and app versions\n2. **Document all values** in values.yaml with comments\n3. **Use template helpers** for repeated logic\n4. **Validate charts** before packaging\n5. **Pin dependency versions** explicitly\n6. **Use conditions** for optional resources\n7. **Follow naming conventions** (lowercase, hyphens)\n8. **Include NOTES.txt** with usage instructions\n9. **Add labels** consistently using helpers\n10. **Test installations** in all environments\n\n## Troubleshooting\n\n**Template rendering errors:**\n```bash\nhelm template my-app .\u002Fmy-app --debug\n```\n\n**Dependency issues:**\n```bash\nhelm dependency update\nhelm dependency list\n```\n\n**Installation failures:**\n```bash\nhelm install my-app .\u002Fmy-app --dry-run --debug\nkubectl get events --sort-by='.lastTimestamp'\n```\n\n## Reference Files\n\n- `assets\u002FChart.yaml.template` - Chart metadata template\n- `assets\u002Fvalues.yaml.template` - Values structure template\n- `scripts\u002Fvalidate-chart.sh` - Validation script\n- `references\u002Fchart-structure.md` - Detailed chart organization\n\n## Related Skills\n\n- `k8s-manifest-generator` - For creating base Kubernetes manifests\n- `gitops-workflow` - For automated Helm chart deployments\n","# Helm Chart Scaffolding\n\nComprehensive guidance for creating, organizing, and managing Helm charts for packaging and deploying Kubernetes applications.\n\n## Purpose\n\nThis skill provides step-by-step instructions for building production-ready Helm charts, including chart structure, templating patterns, values management, and validation strategies.\n\n## When to Use This Skill\n\nUse this skill when you need to:\n- Create new Helm charts from scratch\n- Package Kubernetes applications for distribution\n- Manage multi-environment deployments with Helm\n- Implement templating for reusable Kubernetes manifests\n- Set up Helm chart repositories\n- Follow Helm best practices and conventions\n\n## Helm Overview\n\n**Helm** is the package manager for Kubernetes that:\n- Templates Kubernetes manifests for reusability\n- Manages application releases and rollbacks\n- Handles dependencies between charts\n- Provides version control for deployments\n- Simplifies configuration management across environments\n\n## Step-by-Step Workflow\n\n### 1. Initialize Chart Structure\n\n**Create new chart:**\n```bash\nhelm create my-app\n```\n\n**Standard chart structure:**\n```\nmy-app\u002F\n├── Chart.yaml           # Chart metadata\n├── values.yaml          # Default configuration values\n├── charts\u002F              # Chart dependencies\n├── templates\u002F           # Kubernetes manifest templates\n│   ├── NOTES.txt       # Post-install notes\n│   ├── _helpers.tpl    # Template helpers\n│   ├── deployment.yaml\n│   ├── service.yaml\n│   ├── ingress.yaml\n│   ├── serviceaccount.yaml\n│   ├── hpa.yaml\n│   └── tests\u002F\n│       └── test-connection.yaml\n└── .helmignore         # Files to ignore\n```\n\n### 2. Configure Chart.yaml\n\n**Chart metadata defines the package:**\n\n```yaml\napiVersion: v2\nname: my-app\ndescription: A Helm chart for My Application\ntype: application\nversion: 1.0.0      # Chart version\nappVersion: \"2.1.0\" # Application version\n\n# Keywords for chart discovery\nkeywords:\n  - web\n  - api\n  - backend\n\n# Maintainer information\nmaintainers:\n  - name: DevOps Team\n    email: devops@example.com\n    url: https:\u002F\u002Fgithub.com\u002Fexample\u002Fmy-app\n\n# Source code repository\nsources:\n  - https:\u002F\u002Fgithub.com\u002Fexample\u002Fmy-app\n\n# Homepage\nhome: https:\u002F\u002Fexample.com\n\n# Chart icon\nicon: https:\u002F\u002Fexample.com\u002Ficon.png\n\n# Dependencies\ndependencies:\n  - name: postgresql\n    version: \"12.0.0\"\n    repository: \"https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\"\n    condition: postgresql.enabled\n  - name: redis\n    version: \"17.0.0\"\n    repository: \"https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\"\n    condition: redis.enabled\n```\n\n**Reference:** See `assets\u002FChart.yaml.template` for complete example\n\n### 3. Design values.yaml Structure\n\n**Organize values hierarchically:**\n\n```yaml\n# Image configuration\nimage:\n  repository: myapp\n  tag: \"1.0.0\"\n  pullPolicy: IfNotPresent\n\n# Number of replicas\nreplicaCount: 3\n\n# Service configuration\nservice:\n  type: ClusterIP\n  port: 80\n  targetPort: 8080\n\n# Ingress configuration\ningress:\n  enabled: false\n  className: nginx\n  hosts:\n    - host: app.example.com\n      paths:\n        - path: \u002F\n          pathType: Prefix\n\n# Resources\nresources:\n  requests:\n    memory: \"256Mi\"\n    cpu: \"250m\"\n  limits:\n    memory: \"512Mi\"\n    cpu: \"500m\"\n\n# Autoscaling\nautoscaling:\n  enabled: false\n  minReplicas: 2\n  maxReplicas: 10\n  targetCPUUtilizationPercentage: 80\n\n# Environment variables\nenv:\n  - name: LOG_LEVEL\n    value: \"info\"\n\n# ConfigMap data\nconfigMap:\n  data:\n    APP_MODE: production\n\n# Dependencies\npostgresql:\n  enabled: true\n  auth:\n    database: myapp\n    username: myapp\n\nredis:\n  enabled: false\n```\n\n**Reference:** See `assets\u002Fvalues.yaml.template` for complete structure\n\n### 4. Create Template Files\n\n**Use Go templating with Helm functions:**\n\n**templates\u002Fdeployment.yaml:**\n```yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: {{ include \"my-app.fullname\" . }}\n  labels:\n    {{- include \"my-app.labels\" . | nindent 4 }}\nspec:\n  {{- if not .Values.autoscaling.enabled }}\n  replicas: {{ .Values.replicaCount }}\n  {{- end }}\n  selector:\n    matchLabels:\n      {{- include \"my-app.selectorLabels\" . | nindent 6 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"my-app.selectorLabels\" . | nindent 8 }}\n    spec:\n      containers:\n      - name: {{ .Chart.Name }}\n        image: \"{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}\"\n        imagePullPolicy: {{ .Values.image.pullPolicy }}\n        ports:\n        - name: http\n          containerPort: {{ .Values.service.targetPort }}\n        resources:\n          {{- toYaml .Values.resources | nindent 12 }}\n        env:\n          {{- toYaml .Values.env | nindent 12 }}\n```\n\n### 5. Create Template Helpers\n\n**templates\u002F_helpers.tpl:**\n```yaml\n{{\u002F*\nExpand the name of the chart.\n*\u002F}}\n{{- define \"my-app.name\" -}}\n{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{\u002F*\nCreate a default fully qualified app name.\n*\u002F}}\n{{- define \"my-app.fullname\" -}}\n{{- if .Values.fullnameOverride }}\n{{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- $name := default .Chart.Name .Values.nameOverride }}\n{{- if contains $name .Release.Name }}\n{{- .Release.Name | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n{{- end }}\n{{- end }}\n\n{{\u002F*\nCommon labels\n*\u002F}}\n{{- define \"my-app.labels\" -}}\nhelm.sh\u002Fchart: {{ include \"my-app.chart\" . }}\n{{ include \"my-app.selectorLabels\" . }}\n{{- if .Chart.AppVersion }}\napp.kubernetes.io\u002Fversion: {{ .Chart.AppVersion | quote }}\n{{- end }}\napp.kubernetes.io\u002Fmanaged-by: {{ .Release.Service }}\n{{- end }}\n\n{{\u002F*\nSelector labels\n*\u002F}}\n{{- define \"my-app.selectorLabels\" -}}\napp.kubernetes.io\u002Fname: {{ include \"my-app.name\" . }}\napp.kubernetes.io\u002Finstance: {{ .Release.Name }}\n{{- end }}\n```\n\n### 6. Manage Dependencies\n\n**Add dependencies in Chart.yaml:**\n```yaml\ndependencies:\n  - name: postgresql\n    version: \"12.0.0\"\n    repository: \"https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\"\n    condition: postgresql.enabled\n```\n\n**Update dependencies:**\n```bash\nhelm dependency update\nhelm dependency build\n```\n\n**Override dependency values:**\n```yaml\n# values.yaml\npostgresql:\n  enabled: true\n  auth:\n    database: myapp\n    username: myapp\n    password: changeme\n  primary:\n    persistence:\n      enabled: true\n      size: 10Gi\n```\n\n### 7. Test and Validate\n\n**Validation commands:**\n```bash\n# Lint the chart\nhelm lint my-app\u002F\n\n# Dry-run installation\nhelm install my-app .\u002Fmy-app --dry-run --debug\n\n# Template rendering\nhelm template my-app .\u002Fmy-app\n\n# Template with values\nhelm template my-app .\u002Fmy-app -f values-prod.yaml\n\n# Show computed values\nhelm show values .\u002Fmy-app\n```\n\n**Validation script:**\n```bash\n#!\u002Fbin\u002Fbash\nset -e\n\necho \"Linting chart...\"\nhelm lint .\n\necho \"Testing template rendering...\"\nhelm template test-release . --dry-run\n\necho \"Checking for required values...\"\nhelm template test-release . --validate\n\necho \"All validations passed!\"\n```\n\n**Reference:** See `scripts\u002Fvalidate-chart.sh`\n\n### 8. Package and Distribute\n\n**Package the chart:**\n```bash\nhelm package my-app\u002F\n# Creates: my-app-1.0.0.tgz\n```\n\n**Create chart repository:**\n```bash\n# Create index\nhelm repo index .\n\n# Upload to repository\n# AWS S3 example\naws s3 sync . s3:\u002F\u002Fmy-helm-charts\u002F --exclude \"*\" --include \"*.tgz\" --include \"index.yaml\"\n```\n\n**Use the chart:**\n```bash\nhelm repo add my-repo https:\u002F\u002Fcharts.example.com\nhelm repo update\nhelm install my-app my-repo\u002Fmy-app\n```\n\n### 9. Multi-Environment Configuration\n\n**Environment-specific values files:**\n\n```\nmy-app\u002F\n├── values.yaml          # Defaults\n├── values-dev.yaml      # Development\n├── values-staging.yaml  # Staging\n└── values-prod.yaml     # Production\n```\n\n**values-prod.yaml:**\n```yaml\nreplicaCount: 5\n\nimage:\n  tag: \"2.1.0\"\n\nresources:\n  requests:\n    memory: \"512Mi\"\n    cpu: \"500m\"\n  limits:\n    memory: \"1Gi\"\n    cpu: \"1000m\"\n\nautoscaling:\n  enabled: true\n  minReplicas: 3\n  maxReplicas: 20\n\ningress:\n  enabled: true\n  hosts:\n    - host: app.example.com\n      paths:\n        - path: \u002F\n          pathType: Prefix\n\npostgresql:\n  enabled: true\n  primary:\n    persistence:\n      size: 100Gi\n```\n\n**Install with environment:**\n```bash\nhelm install my-app .\u002Fmy-app -f values-prod.yaml --namespace production\n```\n\n### 10. Implement Hooks and Tests\n\n**Pre-install hook:**\n```yaml\n# templates\u002Fpre-install-job.yaml\napiVersion: batch\u002Fv1\nkind: Job\nmetadata:\n  name: {{ include \"my-app.fullname\" . }}-db-setup\n  annotations:\n    \"helm.sh\u002Fhook\": pre-install\n    \"helm.sh\u002Fhook-weight\": \"-5\"\n    \"helm.sh\u002Fhook-delete-policy\": hook-succeeded\nspec:\n  template:\n    spec:\n      containers:\n      - name: db-setup\n        image: postgres:15\n        command: [\"psql\", \"-c\", \"CREATE DATABASE myapp\"]\n      restartPolicy: Never\n```\n\n**Test connection:**\n```yaml\n# templates\u002Ftests\u002Ftest-connection.yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: \"{{ include \"my-app.fullname\" . }}-test-connection\"\n  annotations:\n    \"helm.sh\u002Fhook\": test\nspec:\n  containers:\n  - name: wget\n    image: busybox\n    command: ['wget']\n    args: ['{{ include \"my-app.fullname\" . }}:{{ .Values.service.port }}']\n  restartPolicy: Never\n```\n\n**Run tests:**\n```bash\nhelm test my-app\n```\n\n## Common Patterns\n\n### Pattern 1: Conditional Resources\n\n```yaml\n{{- if .Values.ingress.enabled }}\napiVersion: networking.k8s.io\u002Fv1\nkind: Ingress\nmetadata:\n  name: {{ include \"my-app.fullname\" . }}\nspec:\n  # ...\n{{- end }}\n```\n\n### Pattern 2: Iterating Over Lists\n\n```yaml\nenv:\n{{- range .Values.env }}\n- name: {{ .name }}\n  value: {{ .value | quote }}\n{{- end }}\n```\n\n### Pattern 3: Including Files\n\n```yaml\ndata:\n  config.yaml: |\n    {{- .Files.Get \"config\u002Fapplication.yaml\" | nindent 4 }}\n```\n\n### Pattern 4: Global Values\n\n```yaml\nglobal:\n  imageRegistry: docker.io\n  imagePullSecrets:\n    - name: regcred\n\n# Use in templates:\nimage: {{ .Values.global.imageRegistry }}\u002F{{ .Values.image.repository }}\n```\n\n## Best Practices\n\n1. **Use semantic versioning** for chart and app versions\n2. **Document all values** in values.yaml with comments\n3. **Use template helpers** for repeated logic\n4. **Validate charts** before packaging\n5. **Pin dependency versions** explicitly\n6. **Use conditions** for optional resources\n7. **Follow naming conventions** (lowercase, hyphens)\n8. **Include NOTES.txt** with usage instructions\n9. **Add labels** consistently using helpers\n10. **Test installations** in all environments\n\n## Troubleshooting\n\n**Template rendering errors:**\n```bash\nhelm template my-app .\u002Fmy-app --debug\n```\n\n**Dependency issues:**\n```bash\nhelm dependency update\nhelm dependency list\n```\n\n**Installation failures:**\n```bash\nhelm install my-app .\u002Fmy-app --dry-run --debug\nkubectl get events --sort-by='.lastTimestamp'\n```\n\n## Reference Files\n\n- `assets\u002FChart.yaml.template` - Chart metadata template\n- `assets\u002Fvalues.yaml.template` - Values structure template\n- `scripts\u002Fvalidate-chart.sh` - Validation script\n- `references\u002Fchart-structure.md` - Detailed chart organization\n\n## Related Skills\n\n- `k8s-manifest-generator` - For creating base Kubernetes manifests\n- `gitops-workflow` - For automated Helm chart deployments\n",{"name":5,"description":7},"main","7850740bd837adb32f0a109ab2af82482196c6f2","skills\u002F_collections\u002Fwshobson-agents\u002Fplugins\u002Fkubernetes-operations\u002Fskills\u002Fhelm-chart-scaffolding",1,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills","https:\u002F\u002Fzturnsgo.com","https:\u002F\u002Fgithub.com\u002Fshengdabai","https:\u002F\u002Fzturnsgo.com\u002F","AI × education creator — producer, not consumer. Taught 6,000+ learners; shipping learning tools & daily essays with Claude Code, practicing @xiaolai's way 🥋","2026-11-01 21:28:23",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add shengdabai\u002FTony-Claude-Code-Skills --skill helm-chart-scaffolding",{"tool":75,"command":76},"bunx","bunx skills add shengdabai\u002FTony-Claude-Code-Skills --skill helm-chart-scaffolding",{"tool":78,"command":79},"pnpm","pnpm dlx skills add shengdabai\u002FTony-Claude-Code-Skills --skill helm-chart-scaffolding","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002F_collections\u002Fwshobson-agents\u002Fplugins\u002Fkubernetes-operations\u002Fskills\u002Fhelm-chart-scaffolding\u002FSKILL.md",true,[83,89,93,99],{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"assets\u002FChart.yaml.template","ASSET","资产文件",801,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002F_collections\u002Fwshobson-agents\u002Fplugins\u002Fkubernetes-operations\u002Fskills\u002Fhelm-chart-scaffolding\u002Fassets\u002FChart.yaml.template",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},"assets\u002Fvalues.yaml.template",3190,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002F_collections\u002Fwshobson-agents\u002Fplugins\u002Fkubernetes-operations\u002Fskills\u002Fhelm-chart-scaffolding\u002Fassets\u002Fvalues.yaml.template",{"path":94,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Fchart-structure.md","REFERENCE","参考文档",11775,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002F_collections\u002Fwshobson-agents\u002Fplugins\u002Fkubernetes-operations\u002Fskills\u002Fhelm-chart-scaffolding\u002Freferences\u002Fchart-structure.md",{"path":100,"resourceType":101,"resourceTypeDesc":102,"sizeBytes":103,"sourceHtmlUrl":104},"scripts\u002Fvalidate-chart.sh","SCRIPT","脚本",6506,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002F_collections\u002Fwshobson-agents\u002Fplugins\u002Fkubernetes-operations\u002Fskills\u002Fhelm-chart-scaffolding\u002Fscripts\u002Fvalidate-chart.sh",[106,123,153,178,200,220],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":115,"publishedAt":54},"01M70P17DAD4C1C47NPH6A96EM","xiaolai-methodology","以李笑来(Li Xiaolai)的思考方式、方法论与表达风格,为用户做全方位 1-on-1 教练指导,覆盖创业、赚钱、投资、学习、自学、读书写作、用 AI、以及人生心态与自我管理。当用户提到 \"李笑来\"、\"笑来\"、\"笑来老师\"、\"扮演李笑来\"、\"找笑来聊聊\"、\"笑来怎么看\"、\"xiaolai\"、\"把时间当作朋友\"、\"通往财富自由之路\"、\"定投改变命运\"、\"韭菜的自我修养\"、\"自学是门手艺\"、\"让时间陪你慢慢变富\"、\"七年就是一辈子\"、\"元认知\"、\"活在未来\"、\"复利\u002F长期主义\"、\"践行\"、\"痴迷改进\"、\"个人商业模式\u002F出售时间\"、\"睡后收入\"、\"定投\"、\"财富自由\"、\"操作系统升级\"、\"最少必要知识\"、\"北极星提示词\"、\"用 AI 该怎么学\u002F思考\" 等任一触发词,或当用户带着关于创业\u002F赚钱\u002F投资\u002F学习\u002F职业\u002F重大人生决策的困惑、希望被人用笑来式的「逻辑 + 大白话 + 类比 + 重新定义 + 践行导向」来点醒和指导时,自动进入李笑来教练模式。","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fxiaolai-methodology\u002FSKILL.md",[112],{"categoryNo":113,"categoryName":114,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",[116,117,118,119,120,121,122],"methodology","xiaolai","xiaolai methodology","朋友","投资","writing","收入",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":133,"publishedAt":54},"01M70P13NB9YP7ACJR1S861CDS","zread","Produce and consume a wiki-style knowledge base for a code repository via the `zread` CLI and its on-disk output under `.\u002F.zread\u002Fwiki\u002F`. Use this skill whenever the user wants to understand, onboard onto, explore, summarize, map, or get an overview of an unfamiliar codebase; asks for architecture docs, a project wiki, a repo walkthrough, module\u002Fpackage explanations, or \"what does this repo do\"; wants to generate, regenerate, resume, browse, or serve code documentation locally; or mentions zread \u002F zread.ai directly. Also use it proactively before diving into a large unknown repo — if `.\u002F.zread\u002Fwiki\u002Fcurrent` exists, read the generated pages instead of crawling source file-by-file; if it doesn't, consider offering to run `zread generate`. The trigger is the intent (understand a codebase through generated docs), not the literal word \"zread\".","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fzread\u002FSKILL.md",[129,130],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":131,"categoryName":132,"taxonomyType":32,"taxonomyTypeDesc":33},"01JBSEEDCAT000000000000030","开发工程师",[125,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152],"knowledge","wiki","explore","walkthrough","project","get","knowledge base","run","generate","intent","cli","map","documentation","project wiki","disk","architecture","code","unknown","generated",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":163,"publishedAt":54},"01M70P10S4SWMZQ8BJAFBFDRW3","youtube","Launch the YouTube Creator Agent to auto-generate videos.\nUse when: user types \u002Fyoutube, wants to create YouTube videos,\ngenerate video content, or upload to YouTube.\nKeywords: youtube, video, 视频, 创作视频, 发布视频","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube\u002FSKILL.md",[159,160],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":161,"categoryName":162,"taxonomyType":32,"taxonomyTypeDesc":33},"01JBSEEDCAT000000000000036","内容创作者",[155,164,165,166,167,168,169,170,142,171,172,173,49,41,174,175,176,177],"user","content","视频","creator","generate video","videos","launch","video content","create","upload","auto","types","Video","创作",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":185,"publishedAt":54},"01M70P0YE95D8BACZCGV8BK90K","youtube-script-sync","Sync, update, or optimize Tony's GetNote knowledge base `Youtube视频逐字稿` by turning each parent recording or first-person idea note into an idempotent child note containing a directly recordable YouTube long-video or Shorts script. Use when the user says “更新\u002F同步\u002F优化 Youtube视频逐字稿知识库”, or says “更新\u002F同步\u002F优化该知识库” while this knowledge base is the active context.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fyoutube-script-sync\u002FSKILL.md",[184],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[186,187,155,188,189,176,190,191,192,193,194,195,196,197,140,198,49,41,134,199],"sync","script","youtube script sync","recording","shorts","first","base","person","update","active","child","optimize","idempotent","long",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":210,"publishedAt":54},"01M70P0WMV5XT0EEC0N445PW07","writing-skills","How to write SKILL.md files that trigger reliably and teach effectively. Use when creating, improving, or reviewing Claude Code skills.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fwriting-skills\u002FSKILL.md",[206,207,208,209],{"categoryNo":113,"categoryName":114,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":131,"categoryName":132,"taxonomyType":32,"taxonomyTypeDesc":33},{"categoryNo":161,"categoryName":162,"taxonomyType":32,"taxonomyTypeDesc":33},[211,121,212,213,214,215,150,49,41,216,217,218,219],"writing skills","how","teach","write skill","write","claude code skills","files","how to","trigger",{"skillNo":221,"name":222,"nameZh":6,"description":223,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":228,"publishedAt":54},"01M70P0SJFR4YVJQBGMHKGSKXT","writing-rules","How to write .claude\u002Frules\u002F files that Claude actually follows. Use when creating, improving, or reviewing project rules.","https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fxiaolai\u002Fnlpm\u002Fskills\u002Fnlpm\u002Fwriting-rules\u002FSKILL.md",[226,227],{"categoryNo":113,"categoryName":114,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":161,"categoryName":162,"taxonomyType":32,"taxonomyTypeDesc":33},[229,121,230,138,231,217,49,212,215,41,218],"Rules","writing rules","project rules"]