[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F7656DTMQ74YMQE5KTYFXS":3,"skill-same:01M6F7656DTMQ74YMQE5KTYFXS":79},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":33,"commitSha":59,"skillDirectory":60,"forksCount":61,"repositoryHtmlUrl":62,"repositoryHomepageUrl":6,"ownerHtmlUrl":63,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":64,"install":65,"resources":78},"01M6F7656DTMQ74YMQE5KTYFXS","helm-charts",null,"Create, manage, and deploy Helm charts for Kubernetes package management.","boisenoise\u002Fskills-collections","boisenoise","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F193180?v=4","01M6CDBDQK6BDN55ZMA6B6PKBM","01M6CDBDVSJ3JPTBYN26FZ7TZK",12,"MIT","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-helm-charts\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"helm charts","Charts","helm","only","2026","for","relevant","scripts","critical","platform","main","community","manage","security","environment","package management","access","devops-security","kubectl","ci","git","create","2026-11-10 10:12:30",false,"---\nname: helm-charts\ndescription: Create, manage, and deploy Helm charts for Kubernetes package management.\ncategory: devops\nrisk: critical\nsource: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\nsource_repo: BagelHole\u002FDevOps-Security-Agent-Skills\nsource_type: community\ndate_added: '2026-09-20'\nlicense: MIT\nlicense_source: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE\ncompatibility: Requires the relevant platform CLIs (kubectl, helm, terraform, git,\n  CI runners) and authorized access to the target environment. Docs-only; helper scripts\n  and templates not bundled.\nmetadata:\n  author: devops-skills\n  version: '1.0'\n---\n\n# Helm Charts\n\nPackage and deploy Kubernetes applications using Helm, the package manager for Kubernetes.\n\n## When to Use This Skill\n\nUse this skill when:\n- Creating reusable Kubernetes application packages\n- Deploying applications with configurable values\n- Managing Helm releases and upgrades\n- Using third-party Helm charts\n- Implementing chart versioning and repositories\n\n## Prerequisites\n\n- Helm 3.x installed\n- kubectl configured with cluster access\n- Basic Kubernetes knowledge\n\n## Release and template scope\n\nConfirm cluster\u002Fcontext\u002Fnamespace\u002Frelease and exact chart\u002Fdependency versions before writes. These snippets omit Service\u002FSecret\u002Fapplication files and are not a complete deployable chart; supply referenced assets and review rendered output. Helm hooks\u002Ftests execute containers and can run migrations; rollback\u002Funinstall cannot undo database\u002Fexternal effects automatically. Dry-run\u002Fdebug\u002Ftemplate\u002Fget-values output may expose secrets. Use protected secret references, reviewed charts\u002Fimages and valid version constraints\u002FChart.lock; render\u002Flint\u002Fschema-check before an authorized staged rollout and verify readiness beyond successful release metadata.\n\n## Chart Structure\n\n```\nmychart\u002F\n├── Chart.yaml          # Chart metadata\n├── values.yaml         # Default configuration values\n├── charts\u002F             # Chart dependencies\n├── templates\u002F          # Kubernetes manifest templates\n│   ├── deployment.yaml\n│   ├── service.yaml\n│   ├── ingress.yaml\n│   ├── configmap.yaml\n│   ├── secret.yaml\n│   ├── _helpers.tpl    # Template helpers\n│   ├── NOTES.txt       # Post-install notes\n│   └── tests\u002F\n│       └── test-connection.yaml\n└── .helmignore         # Files to ignore\n```\n\n## Chart.yaml\n\n```yaml\napiVersion: v2\nname: myapp\ndescription: A Helm chart for MyApp\ntype: application\nversion: 1.0.0\nappVersion: \"2.0.0\"\nkeywords:\n  - myapp\n  - web\nmaintainers:\n  - name: DevOps Team\n    email: devops@example.com\ndependencies:\n  - name: postgresql\n    version: \"12.x.x\"\n    repository: \"https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\"\n    condition: postgresql.enabled\n```\n\n## values.yaml\n\n```yaml\nreplicaCount: 2\n\nimage:\n  repository: myapp\n  tag: \"\"  # Defaults to appVersion\n  pullPolicy: IfNotPresent\n\nservice:\n  type: ClusterIP\n  port: 80\n\ningress:\n  enabled: false\n  className: nginx\n  hosts:\n    - host: myapp.example.com\n      paths:\n        - path: \u002F\n          pathType: Prefix\n  tls: []\n\nresources:\n  limits:\n    cpu: 500m\n    memory: 256Mi\n  requests:\n    cpu: 100m\n    memory: 128Mi\n\npostgresql:\n  enabled: true\n  auth:\n    database: myapp\n```\n\n## Templates\n\n### Deployment Template\n\n```yaml\n# templates\u002Fdeployment.yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: {{ include \"myapp.fullname\" . }}\n  labels:\n    {{- include \"myapp.labels\" . | nindent 4 }}\nspec:\n  replicas: {{ .Values.replicaCount }}\n  selector:\n    matchLabels:\n      {{- include \"myapp.selectorLabels\" . | nindent 6 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"myapp.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: 8080\n          {{- with .Values.resources }}\n          resources:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          env:\n            - name: DATABASE_URL\n              valueFrom:\n                secretKeyRef:\n                  name: {{ include \"myapp.fullname\" . }}-secrets\n                  key: database-url\n```\n\n### Helper Functions\n\n```yaml\n# templates\u002F_helpers.tpl\n{{\u002F*\nExpand the name of the chart.\n*\u002F}}\n{{- define \"myapp.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 \"myapp.fullname\" -}}\n{{- if .Values.fullnameOverride }}\n{{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- $name := default .Chart.Name .Values.nameOverride }}\n{{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n{{- end }}\n\n{{\u002F*\nCommon labels\n*\u002F}}\n{{- define \"myapp.labels\" -}}\nhelm.sh\u002Fchart: {{ .Chart.Name }}-{{ .Chart.Version }}\n{{ include \"myapp.selectorLabels\" . }}\napp.kubernetes.io\u002Fversion: {{ .Chart.AppVersion | quote }}\napp.kubernetes.io\u002Fmanaged-by: {{ .Release.Service }}\n{{- end }}\n\n{{\u002F*\nSelector labels\n*\u002F}}\n{{- define \"myapp.selectorLabels\" -}}\napp.kubernetes.io\u002Fname: {{ include \"myapp.name\" . }}\napp.kubernetes.io\u002Finstance: {{ .Release.Name }}\n{{- end }}\n```\n\n### Conditional Resources\n\n```yaml\n# templates\u002Fingress.yaml\n{{- if .Values.ingress.enabled -}}\napiVersion: networking.k8s.io\u002Fv1\nkind: Ingress\nmetadata:\n  name: {{ include \"myapp.fullname\" . }}\n  labels:\n    {{- include \"myapp.labels\" . | nindent 4 }}\n  {{- with .Values.ingress.annotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nspec:\n  ingressClassName: {{ .Values.ingress.className }}\n  {{- if .Values.ingress.tls }}\n  tls:\n    {{- range .Values.ingress.tls }}\n    - hosts:\n        {{- range .hosts }}\n        - {{ . | quote }}\n        {{- end }}\n      secretName: {{ .secretName }}\n    {{- end }}\n  {{- end }}\n  rules:\n    {{- range .Values.ingress.hosts }}\n    - host: {{ .host | quote }}\n      http:\n        paths:\n          {{- range .paths }}\n          - path: {{ .path }}\n            pathType: {{ .pathType }}\n            backend:\n              service:\n                name: {{ include \"myapp.fullname\" $ }}\n                port:\n                  number: {{ $.Values.service.port }}\n          {{- end }}\n    {{- end }}\n{{- end }}\n```\n\n## Helm Commands\n\n### Installing Charts\n\n```bash\n# Install from local chart\nhelm install myapp .\u002Fmychart\n\n# Install with custom values\nhelm install myapp .\u002Fmychart -f custom-values.yaml\n\n# Install with value overrides\nhelm install myapp .\u002Fmychart \\\n  --set replicaCount=3 \\\n  --set image.tag=2.0.0\n\n# Install in specific namespace\nhelm install myapp .\u002Fmychart -n production --create-namespace\n\n# Dry run to preview\nhelm install myapp .\u002Fmychart --dry-run --debug\n```\n\n### Managing Releases\n\n```bash\n# List releases\nhelm list\nhelm list -A  # All namespaces\n\n# Upgrade release\nhelm upgrade myapp .\u002Fmychart\nhelm upgrade myapp .\u002Fmychart -f new-values.yaml\n\n# Rollback\nhelm rollback myapp 1\nhelm history myapp\n\n# Uninstall\nhelm uninstall myapp\n```\n\n### Chart Development\n\n```bash\n# Create new chart\nhelm create mychart\n\n# Lint chart\nhelm lint .\u002Fmychart\n\n# Template locally (debug)\nhelm template myapp .\u002Fmychart\n\n# Package chart\nhelm package .\u002Fmychart\n\n# Update dependencies\nhelm dependency update .\u002Fmychart\n```\n\n## Repositories\n\n```bash\n# Add repository\nhelm repo add bitnami https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\n\n# Update repositories\nhelm repo update\n\n# Search charts\nhelm search repo postgresql\nhelm search hub prometheus\n\n# Install from repo\nhelm install postgres bitnami\u002Fpostgresql\n\n# Show chart info\nhelm show values bitnami\u002Fpostgresql\n```\n\n## Advanced Features\n\n### Hooks\n\n```yaml\n# templates\u002Fpre-install-job.yaml\napiVersion: batch\u002Fv1\nkind: Job\nmetadata:\n  name: {{ include \"myapp.fullname\" . }}-migration\n  annotations:\n    \"helm.sh\u002Fhook\": pre-install,pre-upgrade\n    \"helm.sh\u002Fhook-weight\": \"-5\"\n    \"helm.sh\u002Fhook-delete-policy\": hook-succeeded\nspec:\n  template:\n    spec:\n      containers:\n      - name: migrate\n        image: \"{{ .Values.image.repository }}:{{ .Values.image.tag }}\"\n        command: [\".\u002Fmigrate.sh\"]\n      restartPolicy: Never\n```\n\n### Tests\n\n```yaml\n# templates\u002Ftests\u002Ftest-connection.yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: \"{{ include \"myapp.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 \"myapp.fullname\" . }}:{{ .Values.service.port }}']\n  restartPolicy: Never\n```\n\n```bash\n# Run tests\nhelm test myapp\n```\n\n### Library Charts\n\n```yaml\n# Chart.yaml\napiVersion: v2\nname: mylib\ntype: library\nversion: 1.0.0\n```\n\n```yaml\n# Using library chart\ndependencies:\n  - name: mylib\n    version: \"1.x.x\"\n    repository: \"file:\u002F\u002F..\u002Fmylib\"\n```\n\n## OCI Registry Support\n\n```bash\n# Login to registry\nhelm registry login registry.example.com\n\n# Push chart to OCI registry\nhelm push mychart-1.0.0.tgz oci:\u002F\u002Fregistry.example.com\u002Fcharts\n\n# Pull from OCI registry\nhelm pull oci:\u002F\u002Fregistry.example.com\u002Fcharts\u002Fmychart --version 1.0.0\n\n# Install from OCI\nhelm install myapp oci:\u002F\u002Fregistry.example.com\u002Fcharts\u002Fmychart\n```\n\n## Common Issues\n\n### Issue: YAML Indentation Errors\n**Problem**: Template renders with wrong indentation\n**Solution**: Use `nindent` helper function\n\n```yaml\n{{- toYaml .Values.resources | nindent 12 }}\n```\n\n### Issue: Values Not Applying\n**Problem**: Custom values not reflected\n**Solution**: Check value paths, use `--debug` flag\n\n```bash\nhelm template myapp .\u002Fmychart --debug\n```\n\n### Issue: Dependency Errors\n**Problem**: Chart dependencies not found\n**Solution**: Run `helm dependency update`\n\n### Issue: Release Already Exists\n**Problem**: Cannot install, release exists\n**Solution**: Use `helm upgrade --install`\n\n```bash\nhelm upgrade --install myapp .\u002Fmychart\n```\n\n## Best Practices\n\n- Use semantic versioning for charts\n- Provide comprehensive default values\n- Document all values in values.yaml with comments\n- Use helper templates for repeated patterns\n- Implement chart tests\n- Use .helmignore to exclude unnecessary files\n- Pin dependency versions\n- Use `helm lint` in CI pipelines\n\n## Related Skills\n\n- kubernetes-ops (`kubernetes-ops`) - K8s fundamentals\n- argocd-gitops (`argocd-gitops`) - GitOps with Helm\n- kustomize (`kustomize`) - Alternative templating\n\n## Limitations\n\n- Guidance executes against real environments: confirm target, blast radius, and rollback plan before applying anything.\n- Never deploy to production without explicit approval. Docs-only import: upstream scripts and templates not bundled.\n\n### Example\n\n```bash\ngit status && git diff --stat\nkubectl diff -f manifest.yaml\n```\n\n> Adapted from [BagelHole\u002FDevOps-Security-Agent-Skills](https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use\u002FLimitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.\n","# Helm Charts\n\nPackage and deploy Kubernetes applications using Helm, the package manager for Kubernetes.\n\n## When to Use This Skill\n\nUse this skill when:\n- Creating reusable Kubernetes application packages\n- Deploying applications with configurable values\n- Managing Helm releases and upgrades\n- Using third-party Helm charts\n- Implementing chart versioning and repositories\n\n## Prerequisites\n\n- Helm 3.x installed\n- kubectl configured with cluster access\n- Basic Kubernetes knowledge\n\n## Release and template scope\n\nConfirm cluster\u002Fcontext\u002Fnamespace\u002Frelease and exact chart\u002Fdependency versions before writes. These snippets omit Service\u002FSecret\u002Fapplication files and are not a complete deployable chart; supply referenced assets and review rendered output. Helm hooks\u002Ftests execute containers and can run migrations; rollback\u002Funinstall cannot undo database\u002Fexternal effects automatically. Dry-run\u002Fdebug\u002Ftemplate\u002Fget-values output may expose secrets. Use protected secret references, reviewed charts\u002Fimages and valid version constraints\u002FChart.lock; render\u002Flint\u002Fschema-check before an authorized staged rollout and verify readiness beyond successful release metadata.\n\n## Chart Structure\n\n```\nmychart\u002F\n├── Chart.yaml          # Chart metadata\n├── values.yaml         # Default configuration values\n├── charts\u002F             # Chart dependencies\n├── templates\u002F          # Kubernetes manifest templates\n│   ├── deployment.yaml\n│   ├── service.yaml\n│   ├── ingress.yaml\n│   ├── configmap.yaml\n│   ├── secret.yaml\n│   ├── _helpers.tpl    # Template helpers\n│   ├── NOTES.txt       # Post-install notes\n│   └── tests\u002F\n│       └── test-connection.yaml\n└── .helmignore         # Files to ignore\n```\n\n## Chart.yaml\n\n```yaml\napiVersion: v2\nname: myapp\ndescription: A Helm chart for MyApp\ntype: application\nversion: 1.0.0\nappVersion: \"2.0.0\"\nkeywords:\n  - myapp\n  - web\nmaintainers:\n  - name: DevOps Team\n    email: devops@example.com\ndependencies:\n  - name: postgresql\n    version: \"12.x.x\"\n    repository: \"https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\"\n    condition: postgresql.enabled\n```\n\n## values.yaml\n\n```yaml\nreplicaCount: 2\n\nimage:\n  repository: myapp\n  tag: \"\"  # Defaults to appVersion\n  pullPolicy: IfNotPresent\n\nservice:\n  type: ClusterIP\n  port: 80\n\ningress:\n  enabled: false\n  className: nginx\n  hosts:\n    - host: myapp.example.com\n      paths:\n        - path: \u002F\n          pathType: Prefix\n  tls: []\n\nresources:\n  limits:\n    cpu: 500m\n    memory: 256Mi\n  requests:\n    cpu: 100m\n    memory: 128Mi\n\npostgresql:\n  enabled: true\n  auth:\n    database: myapp\n```\n\n## Templates\n\n### Deployment Template\n\n```yaml\n# templates\u002Fdeployment.yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: {{ include \"myapp.fullname\" . }}\n  labels:\n    {{- include \"myapp.labels\" . | nindent 4 }}\nspec:\n  replicas: {{ .Values.replicaCount }}\n  selector:\n    matchLabels:\n      {{- include \"myapp.selectorLabels\" . | nindent 6 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"myapp.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: 8080\n          {{- with .Values.resources }}\n          resources:\n            {{- toYaml . | nindent 12 }}\n          {{- end }}\n          env:\n            - name: DATABASE_URL\n              valueFrom:\n                secretKeyRef:\n                  name: {{ include \"myapp.fullname\" . }}-secrets\n                  key: database-url\n```\n\n### Helper Functions\n\n```yaml\n# templates\u002F_helpers.tpl\n{{\u002F*\nExpand the name of the chart.\n*\u002F}}\n{{- define \"myapp.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 \"myapp.fullname\" -}}\n{{- if .Values.fullnameOverride }}\n{{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- $name := default .Chart.Name .Values.nameOverride }}\n{{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n{{- end }}\n\n{{\u002F*\nCommon labels\n*\u002F}}\n{{- define \"myapp.labels\" -}}\nhelm.sh\u002Fchart: {{ .Chart.Name }}-{{ .Chart.Version }}\n{{ include \"myapp.selectorLabels\" . }}\napp.kubernetes.io\u002Fversion: {{ .Chart.AppVersion | quote }}\napp.kubernetes.io\u002Fmanaged-by: {{ .Release.Service }}\n{{- end }}\n\n{{\u002F*\nSelector labels\n*\u002F}}\n{{- define \"myapp.selectorLabels\" -}}\napp.kubernetes.io\u002Fname: {{ include \"myapp.name\" . }}\napp.kubernetes.io\u002Finstance: {{ .Release.Name }}\n{{- end }}\n```\n\n### Conditional Resources\n\n```yaml\n# templates\u002Fingress.yaml\n{{- if .Values.ingress.enabled -}}\napiVersion: networking.k8s.io\u002Fv1\nkind: Ingress\nmetadata:\n  name: {{ include \"myapp.fullname\" . }}\n  labels:\n    {{- include \"myapp.labels\" . | nindent 4 }}\n  {{- with .Values.ingress.annotations }}\n  annotations:\n    {{- toYaml . | nindent 4 }}\n  {{- end }}\nspec:\n  ingressClassName: {{ .Values.ingress.className }}\n  {{- if .Values.ingress.tls }}\n  tls:\n    {{- range .Values.ingress.tls }}\n    - hosts:\n        {{- range .hosts }}\n        - {{ . | quote }}\n        {{- end }}\n      secretName: {{ .secretName }}\n    {{- end }}\n  {{- end }}\n  rules:\n    {{- range .Values.ingress.hosts }}\n    - host: {{ .host | quote }}\n      http:\n        paths:\n          {{- range .paths }}\n          - path: {{ .path }}\n            pathType: {{ .pathType }}\n            backend:\n              service:\n                name: {{ include \"myapp.fullname\" $ }}\n                port:\n                  number: {{ $.Values.service.port }}\n          {{- end }}\n    {{- end }}\n{{- end }}\n```\n\n## Helm Commands\n\n### Installing Charts\n\n```bash\n# Install from local chart\nhelm install myapp .\u002Fmychart\n\n# Install with custom values\nhelm install myapp .\u002Fmychart -f custom-values.yaml\n\n# Install with value overrides\nhelm install myapp .\u002Fmychart \\\n  --set replicaCount=3 \\\n  --set image.tag=2.0.0\n\n# Install in specific namespace\nhelm install myapp .\u002Fmychart -n production --create-namespace\n\n# Dry run to preview\nhelm install myapp .\u002Fmychart --dry-run --debug\n```\n\n### Managing Releases\n\n```bash\n# List releases\nhelm list\nhelm list -A  # All namespaces\n\n# Upgrade release\nhelm upgrade myapp .\u002Fmychart\nhelm upgrade myapp .\u002Fmychart -f new-values.yaml\n\n# Rollback\nhelm rollback myapp 1\nhelm history myapp\n\n# Uninstall\nhelm uninstall myapp\n```\n\n### Chart Development\n\n```bash\n# Create new chart\nhelm create mychart\n\n# Lint chart\nhelm lint .\u002Fmychart\n\n# Template locally (debug)\nhelm template myapp .\u002Fmychart\n\n# Package chart\nhelm package .\u002Fmychart\n\n# Update dependencies\nhelm dependency update .\u002Fmychart\n```\n\n## Repositories\n\n```bash\n# Add repository\nhelm repo add bitnami https:\u002F\u002Fcharts.bitnami.com\u002Fbitnami\n\n# Update repositories\nhelm repo update\n\n# Search charts\nhelm search repo postgresql\nhelm search hub prometheus\n\n# Install from repo\nhelm install postgres bitnami\u002Fpostgresql\n\n# Show chart info\nhelm show values bitnami\u002Fpostgresql\n```\n\n## Advanced Features\n\n### Hooks\n\n```yaml\n# templates\u002Fpre-install-job.yaml\napiVersion: batch\u002Fv1\nkind: Job\nmetadata:\n  name: {{ include \"myapp.fullname\" . }}-migration\n  annotations:\n    \"helm.sh\u002Fhook\": pre-install,pre-upgrade\n    \"helm.sh\u002Fhook-weight\": \"-5\"\n    \"helm.sh\u002Fhook-delete-policy\": hook-succeeded\nspec:\n  template:\n    spec:\n      containers:\n      - name: migrate\n        image: \"{{ .Values.image.repository }}:{{ .Values.image.tag }}\"\n        command: [\".\u002Fmigrate.sh\"]\n      restartPolicy: Never\n```\n\n### Tests\n\n```yaml\n# templates\u002Ftests\u002Ftest-connection.yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: \"{{ include \"myapp.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 \"myapp.fullname\" . }}:{{ .Values.service.port }}']\n  restartPolicy: Never\n```\n\n```bash\n# Run tests\nhelm test myapp\n```\n\n### Library Charts\n\n```yaml\n# Chart.yaml\napiVersion: v2\nname: mylib\ntype: library\nversion: 1.0.0\n```\n\n```yaml\n# Using library chart\ndependencies:\n  - name: mylib\n    version: \"1.x.x\"\n    repository: \"file:\u002F\u002F..\u002Fmylib\"\n```\n\n## OCI Registry Support\n\n```bash\n# Login to registry\nhelm registry login registry.example.com\n\n# Push chart to OCI registry\nhelm push mychart-1.0.0.tgz oci:\u002F\u002Fregistry.example.com\u002Fcharts\n\n# Pull from OCI registry\nhelm pull oci:\u002F\u002Fregistry.example.com\u002Fcharts\u002Fmychart --version 1.0.0\n\n# Install from OCI\nhelm install myapp oci:\u002F\u002Fregistry.example.com\u002Fcharts\u002Fmychart\n```\n\n## Common Issues\n\n### Issue: YAML Indentation Errors\n**Problem**: Template renders with wrong indentation\n**Solution**: Use `nindent` helper function\n\n```yaml\n{{- toYaml .Values.resources | nindent 12 }}\n```\n\n### Issue: Values Not Applying\n**Problem**: Custom values not reflected\n**Solution**: Check value paths, use `--debug` flag\n\n```bash\nhelm template myapp .\u002Fmychart --debug\n```\n\n### Issue: Dependency Errors\n**Problem**: Chart dependencies not found\n**Solution**: Run `helm dependency update`\n\n### Issue: Release Already Exists\n**Problem**: Cannot install, release exists\n**Solution**: Use `helm upgrade --install`\n\n```bash\nhelm upgrade --install myapp .\u002Fmychart\n```\n\n## Best Practices\n\n- Use semantic versioning for charts\n- Provide comprehensive default values\n- Document all values in values.yaml with comments\n- Use helper templates for repeated patterns\n- Implement chart tests\n- Use .helmignore to exclude unnecessary files\n- Pin dependency versions\n- Use `helm lint` in CI pipelines\n\n## Related Skills\n\n- kubernetes-ops (`kubernetes-ops`) - K8s fundamentals\n- argocd-gitops (`argocd-gitops`) - GitOps with Helm\n- kustomize (`kustomize`) - Alternative templating\n\n## Limitations\n\n- Guidance executes against real environments: confirm target, blast radius, and rollback plan before applying anything.\n- Never deploy to production without explicit approval. Docs-only import: upstream scripts and templates not bundled.\n\n### Example\n\n```bash\ngit status && git diff --stat\nkubectl diff -f manifest.yaml\n```\n\n> Adapted from [BagelHole\u002FDevOps-Security-Agent-Skills](https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use\u002FLimitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.\n",{"name":5,"risk":31,"source":50,"license":14,"category":51,"metadata":52,"date_added":55,"description":7,"source_repo":56,"source_type":34,"compatibility":57,"license_source":58},"https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills","devops",{"author":53,"version":54},"devops-skills","1.0","2026-09-20","BagelHole\u002FDevOps-Security-Agent-Skills","Requires the relevant platform CLIs (kubectl, helm, terraform, git, CI runners) and authorized access to the target environment. Docs-only; helper scripts and templates not bundled.","https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE","7bf2279c8a65758319526a721d5c4b75683aec9c","skills\u002Fantigravity-helm-charts",3,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections","https:\u002F\u002Fgithub.com\u002Fboisenoise","2026-11-13 14:20:47",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add boisenoise\u002Fskills-collections --skill helm-charts",{"tool":71,"command":72},"bunx","bunx skills add boisenoise\u002Fskills-collections --skill helm-charts",{"tool":74,"command":75},"pnpm","pnpm dlx skills add boisenoise\u002Fskills-collections --skill helm-charts","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-helm-charts\u002FSKILL.md",true,[],[80,105,131,156,175,197],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":84,"licenseFileUrl":85,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":45},"01M6WNH92BHVFXHGPDZCPJ0AG0","web-access","Use Treg for public web or platform data only when existing search, browser and connected tools cannot cover the task, with explicit cost and data boundaries.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-web-access\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-web-access\u002FSKILL.md",[],[89,39,90,91,92,93,94,95,96,97,98,26,99,100,32,31,101,102,103,104,27],"web","web access","official","development","browser","search","data","Tools","read","fetch","youtube","free tools","free","cover","normal","when",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":84,"licenseFileUrl":109,"sourceHtmlUrl":110,"categories":111,"keywords":115,"publishedAt":45},"01M6WNF9XAYAB2CZDDJBAKNM93","treg","Use the Treg CLI or MCP catalog to discover, price and call authorized external tools with team-scoped credentials and a user-approved budget.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-treg\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-treg\u002FSKILL.md",[112],{"categoryNo":113,"categoryName":114,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[107,116,117,118,91,92,119,96,120,121,122,123,124,125,126,31,127,128,129,130,27],"MCP","cli","github","license","Budget","credentials","team","catalog","use","call","discover","external tools","with","scoped","blob",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":84,"licenseFileUrl":135,"sourceHtmlUrl":136,"categories":137,"keywords":143,"publishedAt":45},"01M6WN93MEAZ4E41DYAHJRPHQT","recruit","Turn a job description into an evidence-linked candidate shortlist through Treg, with job-related ranking and optional authorized business contact enrichment.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-recruit\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-recruit\u002FSKILL.md",[138],{"categoryNo":139,"categoryName":140,"taxonomyType":141,"taxonomyTypeDesc":142},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[133,118,91,119,144,145,146,147,148,149,31,150,151,152,128,28,153,154,155,130,107,27],"https","email","enrichment","business","evidence","phone","ranking","post","job description","person","candidate","reason",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":84,"licenseFileUrl":160,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":45},"01M6WN8R5RXSMHM9B4D9FAFX42","rea-growth","Analyze a company’s public growth and content through Treg, distinguish observations from hypotheses, and produce an evidence-linked playbook within an approved budget.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-rea-growth\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-rea-growth\u002FSKILL.md",[],[164,165,166,118,91,119,167,168,144,169,120,170,171,172,148,31,173,174,130,107,27],"growth","rea","rea growth","produce","content","playbook","marketing","analyze","public","observations","company",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":84,"licenseFileUrl":179,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":45},"01M6WN2EVE3RQRGWAKBT4S7YT2","make-ugc","Create original AI UGC-style product videos through Treg: research hooks, approve a licensed presenter and voice, generate clips, add captions and report costs.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-make-ugc\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-make-ugc\u002FSKILL.md",[],[183,184,118,185,91,44,119,186,187,188,189,190,31,191,192,193,194,195,196,130],"make","make ugc","research","Video","Captions","ads","short","hooks","head","style","niche","trending","talking-head","approve",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":84,"licenseFileUrl":201,"sourceHtmlUrl":202,"categories":203,"keywords":204,"publishedAt":45},"01M6WN10ARAA63Y8K1YNGXJ2RM","lead-signals","Find and qualify public buying signals through Treg, rank fitting business accounts and optionally enrich authorized business contact information.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-lead-signals\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-lead-signals\u002FSKILL.md",[],[205,206,207,118,91,119,208,209,147,210,211,31,212,213,214,215,216,217,218,130],"signals","lead","lead signals","how","find","ready","as","how to","qualify","people","information","enrich","changes","funding"]