specweave 0.3.13 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +506 -17
- package/README.md +100 -58
- package/bin/install-all.sh +9 -2
- package/bin/install-hooks.sh +57 -0
- package/bin/specweave.js +16 -0
- package/dist/adapters/adapter-base.d.ts +21 -0
- package/dist/adapters/adapter-base.d.ts.map +1 -1
- package/dist/adapters/adapter-base.js +28 -0
- package/dist/adapters/adapter-base.js.map +1 -1
- package/dist/adapters/adapter-interface.d.ts +41 -0
- package/dist/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.d.ts +36 -0
- package/dist/adapters/claude/adapter.d.ts.map +1 -1
- package/dist/adapters/claude/adapter.js +135 -0
- package/dist/adapters/claude/adapter.js.map +1 -1
- package/dist/adapters/copilot/adapter.d.ts +25 -0
- package/dist/adapters/copilot/adapter.d.ts.map +1 -1
- package/dist/adapters/copilot/adapter.js +112 -0
- package/dist/adapters/copilot/adapter.js.map +1 -1
- package/dist/adapters/cursor/adapter.d.ts +36 -0
- package/dist/adapters/cursor/adapter.d.ts.map +1 -1
- package/dist/adapters/cursor/adapter.js +140 -0
- package/dist/adapters/cursor/adapter.js.map +1 -1
- package/dist/adapters/generic/adapter.d.ts +25 -0
- package/dist/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/adapters/generic/adapter.js +111 -0
- package/dist/adapters/generic/adapter.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +103 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts +37 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +296 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/core/agent-model-manager.d.ts +52 -0
- package/dist/core/agent-model-manager.d.ts.map +1 -0
- package/dist/core/agent-model-manager.js +120 -0
- package/dist/core/agent-model-manager.js.map +1 -0
- package/dist/core/cost-tracker.d.ts +108 -0
- package/dist/core/cost-tracker.d.ts.map +1 -0
- package/dist/core/cost-tracker.js +281 -0
- package/dist/core/cost-tracker.js.map +1 -0
- package/dist/core/model-selector.d.ts +57 -0
- package/dist/core/model-selector.d.ts.map +1 -0
- package/dist/core/model-selector.js +115 -0
- package/dist/core/model-selector.js.map +1 -0
- package/dist/core/phase-detector.d.ts +62 -0
- package/dist/core/phase-detector.d.ts.map +1 -0
- package/dist/core/phase-detector.js +229 -0
- package/dist/core/phase-detector.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +96 -0
- package/dist/core/plugin-detector.d.ts.map +1 -0
- package/dist/core/plugin-detector.js +349 -0
- package/dist/core/plugin-detector.js.map +1 -0
- package/dist/core/plugin-loader.d.ts +111 -0
- package/dist/core/plugin-loader.d.ts.map +1 -0
- package/dist/core/plugin-loader.js +319 -0
- package/dist/core/plugin-loader.js.map +1 -0
- package/dist/core/plugin-manager.d.ts +144 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/plugin-manager.js +393 -0
- package/dist/core/plugin-manager.js.map +1 -0
- package/dist/core/schemas/plugin-manifest.schema.json +253 -0
- package/dist/core/types/plugin.d.ts +252 -0
- package/dist/core/types/plugin.d.ts.map +1 -0
- package/dist/core/types/plugin.js +48 -0
- package/dist/core/types/plugin.js.map +1 -0
- package/dist/integrations/jira/jira-mapper.d.ts +2 -2
- package/dist/integrations/jira/jira-mapper.js +2 -2
- package/dist/types/cost-tracking.d.ts +43 -0
- package/dist/types/cost-tracking.d.ts.map +1 -0
- package/dist/types/cost-tracking.js +8 -0
- package/dist/types/cost-tracking.js.map +1 -0
- package/dist/types/model-selection.d.ts +53 -0
- package/dist/types/model-selection.d.ts.map +1 -0
- package/dist/types/model-selection.js +12 -0
- package/dist/types/model-selection.js.map +1 -0
- package/dist/utils/cost-reporter.d.ts +58 -0
- package/dist/utils/cost-reporter.d.ts.map +1 -0
- package/dist/utils/cost-reporter.js +224 -0
- package/dist/utils/cost-reporter.js.map +1 -0
- package/dist/utils/pricing-constants.d.ts +70 -0
- package/dist/utils/pricing-constants.d.ts.map +1 -0
- package/dist/utils/pricing-constants.js +71 -0
- package/dist/utils/pricing-constants.js.map +1 -0
- package/package.json +13 -9
- package/src/adapters/adapter-base.ts +33 -0
- package/src/adapters/adapter-interface.ts +46 -0
- package/src/adapters/claude/adapter.ts +164 -0
- package/src/adapters/copilot/adapter.ts +138 -0
- package/src/adapters/cursor/adapter.ts +170 -0
- package/src/adapters/generic/adapter.ts +137 -0
- package/src/agents/architect/AGENT.md +3 -0
- package/src/agents/code-reviewer.md +156 -0
- package/src/agents/data-scientist/AGENT.md +181 -0
- package/src/agents/database-optimizer/AGENT.md +147 -0
- package/src/agents/devops/AGENT.md +3 -0
- package/src/agents/diagrams-architect/AGENT.md +3 -0
- package/src/agents/docs-writer/AGENT.md +3 -0
- package/src/agents/kubernetes-architect/AGENT.md +142 -0
- package/src/agents/ml-engineer/AGENT.md +150 -0
- package/src/agents/mlops-engineer/AGENT.md +201 -0
- package/src/agents/network-engineer/AGENT.md +149 -0
- package/src/agents/observability-engineer/AGENT.md +213 -0
- package/src/agents/payment-integration/AGENT.md +35 -0
- package/src/agents/performance/AGENT.md +3 -0
- package/src/agents/performance-engineer/AGENT.md +153 -0
- package/src/agents/pm/AGENT.md +3 -0
- package/src/agents/qa-lead/AGENT.md +3 -0
- package/src/agents/security/AGENT.md +3 -0
- package/src/agents/sre/AGENT.md +3 -0
- package/src/agents/tdd-orchestrator/AGENT.md +169 -0
- package/src/agents/tech-lead/AGENT.md +3 -0
- package/src/commands/specweave.costs.md +261 -0
- package/src/commands/specweave.increment.md +48 -4
- package/src/commands/specweave.ml-pipeline.md +292 -0
- package/src/commands/specweave.monitor-setup.md +501 -0
- package/src/commands/specweave.slo-implement.md +1055 -0
- package/src/commands/specweave.sync-github.md +1 -1
- package/src/commands/specweave.tdd-cycle.md +199 -0
- package/src/commands/specweave.tdd-green.md +842 -0
- package/src/commands/specweave.tdd-red.md +135 -0
- package/src/commands/specweave.tdd-refactor.md +165 -0
- package/src/hooks/post-increment-plugin-detect.sh +142 -0
- package/src/hooks/post-task-completion.sh +53 -11
- package/src/hooks/pre-task-plugin-detect.sh +96 -0
- package/src/skills/SKILLS-INDEX.md +18 -10
- package/src/skills/billing-automation/SKILL.md +559 -0
- package/src/skills/distributed-tracing/SKILL.md +438 -0
- package/src/skills/e2e-playwright/README.md +1 -1
- package/src/skills/e2e-playwright/package.json +1 -1
- package/src/skills/gitops-workflow/SKILL.md +285 -0
- package/src/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/src/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/src/skills/grafana-dashboards/SKILL.md +369 -0
- package/src/skills/helm-chart-scaffolding/SKILL.md +544 -0
- package/src/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/src/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/src/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/src/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/src/skills/k8s-manifest-generator/SKILL.md +511 -0
- package/src/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/src/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/src/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/src/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/src/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/src/skills/k8s-security-policies/SKILL.md +334 -0
- package/src/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/src/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/src/skills/ml-pipeline-workflow/SKILL.md +245 -0
- package/src/skills/paypal-integration/SKILL.md +467 -0
- package/src/skills/pci-compliance/SKILL.md +466 -0
- package/src/skills/prometheus-configuration/SKILL.md +392 -0
- package/src/skills/slo-implementation/SKILL.md +329 -0
- package/src/skills/stripe-integration/SKILL.md +442 -0
- package/src/skills/tdd-workflow/SKILL.md +378 -0
- package/src/templates/README.md.template +1 -1
- package/src/skills/bmad-method-expert/SKILL.md +0 -626
- package/src/skills/bmad-method-expert/scripts/analyze-project.js +0 -318
- package/src/skills/bmad-method-expert/scripts/check-setup.js +0 -208
- package/src/skills/bmad-method-expert/scripts/generate-template.js +0 -1149
- package/src/skills/bmad-method-expert/scripts/validate-documents.js +0 -340
- package/src/skills/context-optimizer/SKILL.md +0 -588
- package/src/skills/figma-designer/SKILL.md +0 -149
- package/src/skills/figma-implementer/SKILL.md +0 -148
- package/src/skills/figma-mcp-connector/SKILL.md +0 -136
- package/src/skills/figma-to-code/SKILL.md +0 -128
- package/src/skills/spec-kit-expert/SKILL.md +0 -1010
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: helm-chart-scaffolding
|
|
3
|
+
description: 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.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Helm Chart Scaffolding
|
|
7
|
+
|
|
8
|
+
Comprehensive guidance for creating, organizing, and managing Helm charts for packaging and deploying Kubernetes applications.
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
This skill provides step-by-step instructions for building production-ready Helm charts, including chart structure, templating patterns, values management, and validation strategies.
|
|
13
|
+
|
|
14
|
+
## When to Use This Skill
|
|
15
|
+
|
|
16
|
+
Use this skill when you need to:
|
|
17
|
+
- Create new Helm charts from scratch
|
|
18
|
+
- Package Kubernetes applications for distribution
|
|
19
|
+
- Manage multi-environment deployments with Helm
|
|
20
|
+
- Implement templating for reusable Kubernetes manifests
|
|
21
|
+
- Set up Helm chart repositories
|
|
22
|
+
- Follow Helm best practices and conventions
|
|
23
|
+
|
|
24
|
+
## Helm Overview
|
|
25
|
+
|
|
26
|
+
**Helm** is the package manager for Kubernetes that:
|
|
27
|
+
- Templates Kubernetes manifests for reusability
|
|
28
|
+
- Manages application releases and rollbacks
|
|
29
|
+
- Handles dependencies between charts
|
|
30
|
+
- Provides version control for deployments
|
|
31
|
+
- Simplifies configuration management across environments
|
|
32
|
+
|
|
33
|
+
## Step-by-Step Workflow
|
|
34
|
+
|
|
35
|
+
### 1. Initialize Chart Structure
|
|
36
|
+
|
|
37
|
+
**Create new chart:**
|
|
38
|
+
```bash
|
|
39
|
+
helm create my-app
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Standard chart structure:**
|
|
43
|
+
```
|
|
44
|
+
my-app/
|
|
45
|
+
├── Chart.yaml # Chart metadata
|
|
46
|
+
├── values.yaml # Default configuration values
|
|
47
|
+
├── charts/ # Chart dependencies
|
|
48
|
+
├── templates/ # Kubernetes manifest templates
|
|
49
|
+
│ ├── NOTES.txt # Post-install notes
|
|
50
|
+
│ ├── _helpers.tpl # Template helpers
|
|
51
|
+
│ ├── deployment.yaml
|
|
52
|
+
│ ├── service.yaml
|
|
53
|
+
│ ├── ingress.yaml
|
|
54
|
+
│ ├── serviceaccount.yaml
|
|
55
|
+
│ ├── hpa.yaml
|
|
56
|
+
│ └── tests/
|
|
57
|
+
│ └── test-connection.yaml
|
|
58
|
+
└── .helmignore # Files to ignore
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 2. Configure Chart.yaml
|
|
62
|
+
|
|
63
|
+
**Chart metadata defines the package:**
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
apiVersion: v2
|
|
67
|
+
name: my-app
|
|
68
|
+
description: A Helm chart for My Application
|
|
69
|
+
type: application
|
|
70
|
+
version: 1.0.0 # Chart version
|
|
71
|
+
appVersion: "2.1.0" # Application version
|
|
72
|
+
|
|
73
|
+
# Keywords for chart discovery
|
|
74
|
+
keywords:
|
|
75
|
+
- web
|
|
76
|
+
- api
|
|
77
|
+
- backend
|
|
78
|
+
|
|
79
|
+
# Maintainer information
|
|
80
|
+
maintainers:
|
|
81
|
+
- name: DevOps Team
|
|
82
|
+
email: devops@example.com
|
|
83
|
+
url: https://github.com/example/my-app
|
|
84
|
+
|
|
85
|
+
# Source code repository
|
|
86
|
+
sources:
|
|
87
|
+
- https://github.com/example/my-app
|
|
88
|
+
|
|
89
|
+
# Homepage
|
|
90
|
+
home: https://example.com
|
|
91
|
+
|
|
92
|
+
# Chart icon
|
|
93
|
+
icon: https://example.com/icon.png
|
|
94
|
+
|
|
95
|
+
# Dependencies
|
|
96
|
+
dependencies:
|
|
97
|
+
- name: postgresql
|
|
98
|
+
version: "12.0.0"
|
|
99
|
+
repository: "https://charts.bitnami.com/bitnami"
|
|
100
|
+
condition: postgresql.enabled
|
|
101
|
+
- name: redis
|
|
102
|
+
version: "17.0.0"
|
|
103
|
+
repository: "https://charts.bitnami.com/bitnami"
|
|
104
|
+
condition: redis.enabled
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Reference:** See `assets/Chart.yaml.template` for complete example
|
|
108
|
+
|
|
109
|
+
### 3. Design values.yaml Structure
|
|
110
|
+
|
|
111
|
+
**Organize values hierarchically:**
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
# Image configuration
|
|
115
|
+
image:
|
|
116
|
+
repository: myapp
|
|
117
|
+
tag: "1.0.0"
|
|
118
|
+
pullPolicy: IfNotPresent
|
|
119
|
+
|
|
120
|
+
# Number of replicas
|
|
121
|
+
replicaCount: 3
|
|
122
|
+
|
|
123
|
+
# Service configuration
|
|
124
|
+
service:
|
|
125
|
+
type: ClusterIP
|
|
126
|
+
port: 80
|
|
127
|
+
targetPort: 8080
|
|
128
|
+
|
|
129
|
+
# Ingress configuration
|
|
130
|
+
ingress:
|
|
131
|
+
enabled: false
|
|
132
|
+
className: nginx
|
|
133
|
+
hosts:
|
|
134
|
+
- host: app.example.com
|
|
135
|
+
paths:
|
|
136
|
+
- path: /
|
|
137
|
+
pathType: Prefix
|
|
138
|
+
|
|
139
|
+
# Resources
|
|
140
|
+
resources:
|
|
141
|
+
requests:
|
|
142
|
+
memory: "256Mi"
|
|
143
|
+
cpu: "250m"
|
|
144
|
+
limits:
|
|
145
|
+
memory: "512Mi"
|
|
146
|
+
cpu: "500m"
|
|
147
|
+
|
|
148
|
+
# Autoscaling
|
|
149
|
+
autoscaling:
|
|
150
|
+
enabled: false
|
|
151
|
+
minReplicas: 2
|
|
152
|
+
maxReplicas: 10
|
|
153
|
+
targetCPUUtilizationPercentage: 80
|
|
154
|
+
|
|
155
|
+
# Environment variables
|
|
156
|
+
env:
|
|
157
|
+
- name: LOG_LEVEL
|
|
158
|
+
value: "info"
|
|
159
|
+
|
|
160
|
+
# ConfigMap data
|
|
161
|
+
configMap:
|
|
162
|
+
data:
|
|
163
|
+
APP_MODE: production
|
|
164
|
+
|
|
165
|
+
# Dependencies
|
|
166
|
+
postgresql:
|
|
167
|
+
enabled: true
|
|
168
|
+
auth:
|
|
169
|
+
database: myapp
|
|
170
|
+
username: myapp
|
|
171
|
+
|
|
172
|
+
redis:
|
|
173
|
+
enabled: false
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Reference:** See `assets/values.yaml.template` for complete structure
|
|
177
|
+
|
|
178
|
+
### 4. Create Template Files
|
|
179
|
+
|
|
180
|
+
**Use Go templating with Helm functions:**
|
|
181
|
+
|
|
182
|
+
**templates/deployment.yaml:**
|
|
183
|
+
```yaml
|
|
184
|
+
apiVersion: apps/v1
|
|
185
|
+
kind: Deployment
|
|
186
|
+
metadata:
|
|
187
|
+
name: {{ include "my-app.fullname" . }}
|
|
188
|
+
labels:
|
|
189
|
+
{{- include "my-app.labels" . | nindent 4 }}
|
|
190
|
+
spec:
|
|
191
|
+
{{- if not .Values.autoscaling.enabled }}
|
|
192
|
+
replicas: {{ .Values.replicaCount }}
|
|
193
|
+
{{- end }}
|
|
194
|
+
selector:
|
|
195
|
+
matchLabels:
|
|
196
|
+
{{- include "my-app.selectorLabels" . | nindent 6 }}
|
|
197
|
+
template:
|
|
198
|
+
metadata:
|
|
199
|
+
labels:
|
|
200
|
+
{{- include "my-app.selectorLabels" . | nindent 8 }}
|
|
201
|
+
spec:
|
|
202
|
+
containers:
|
|
203
|
+
- name: {{ .Chart.Name }}
|
|
204
|
+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
|
205
|
+
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
|
206
|
+
ports:
|
|
207
|
+
- name: http
|
|
208
|
+
containerPort: {{ .Values.service.targetPort }}
|
|
209
|
+
resources:
|
|
210
|
+
{{- toYaml .Values.resources | nindent 12 }}
|
|
211
|
+
env:
|
|
212
|
+
{{- toYaml .Values.env | nindent 12 }}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 5. Create Template Helpers
|
|
216
|
+
|
|
217
|
+
**templates/_helpers.tpl:**
|
|
218
|
+
```yaml
|
|
219
|
+
{{/*
|
|
220
|
+
Expand the name of the chart.
|
|
221
|
+
*/}}
|
|
222
|
+
{{- define "my-app.name" -}}
|
|
223
|
+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
|
224
|
+
{{- end }}
|
|
225
|
+
|
|
226
|
+
{{/*
|
|
227
|
+
Create a default fully qualified app name.
|
|
228
|
+
*/}}
|
|
229
|
+
{{- define "my-app.fullname" -}}
|
|
230
|
+
{{- if .Values.fullnameOverride }}
|
|
231
|
+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
|
232
|
+
{{- else }}
|
|
233
|
+
{{- $name := default .Chart.Name .Values.nameOverride }}
|
|
234
|
+
{{- if contains $name .Release.Name }}
|
|
235
|
+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
|
236
|
+
{{- else }}
|
|
237
|
+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
|
238
|
+
{{- end }}
|
|
239
|
+
{{- end }}
|
|
240
|
+
{{- end }}
|
|
241
|
+
|
|
242
|
+
{{/*
|
|
243
|
+
Common labels
|
|
244
|
+
*/}}
|
|
245
|
+
{{- define "my-app.labels" -}}
|
|
246
|
+
helm.sh/chart: {{ include "my-app.chart" . }}
|
|
247
|
+
{{ include "my-app.selectorLabels" . }}
|
|
248
|
+
{{- if .Chart.AppVersion }}
|
|
249
|
+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
250
|
+
{{- end }}
|
|
251
|
+
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
252
|
+
{{- end }}
|
|
253
|
+
|
|
254
|
+
{{/*
|
|
255
|
+
Selector labels
|
|
256
|
+
*/}}
|
|
257
|
+
{{- define "my-app.selectorLabels" -}}
|
|
258
|
+
app.kubernetes.io/name: {{ include "my-app.name" . }}
|
|
259
|
+
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
260
|
+
{{- end }}
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 6. Manage Dependencies
|
|
264
|
+
|
|
265
|
+
**Add dependencies in Chart.yaml:**
|
|
266
|
+
```yaml
|
|
267
|
+
dependencies:
|
|
268
|
+
- name: postgresql
|
|
269
|
+
version: "12.0.0"
|
|
270
|
+
repository: "https://charts.bitnami.com/bitnami"
|
|
271
|
+
condition: postgresql.enabled
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
**Update dependencies:**
|
|
275
|
+
```bash
|
|
276
|
+
helm dependency update
|
|
277
|
+
helm dependency build
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**Override dependency values:**
|
|
281
|
+
```yaml
|
|
282
|
+
# values.yaml
|
|
283
|
+
postgresql:
|
|
284
|
+
enabled: true
|
|
285
|
+
auth:
|
|
286
|
+
database: myapp
|
|
287
|
+
username: myapp
|
|
288
|
+
password: changeme
|
|
289
|
+
primary:
|
|
290
|
+
persistence:
|
|
291
|
+
enabled: true
|
|
292
|
+
size: 10Gi
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### 7. Test and Validate
|
|
296
|
+
|
|
297
|
+
**Validation commands:**
|
|
298
|
+
```bash
|
|
299
|
+
# Lint the chart
|
|
300
|
+
helm lint my-app/
|
|
301
|
+
|
|
302
|
+
# Dry-run installation
|
|
303
|
+
helm install my-app ./my-app --dry-run --debug
|
|
304
|
+
|
|
305
|
+
# Template rendering
|
|
306
|
+
helm template my-app ./my-app
|
|
307
|
+
|
|
308
|
+
# Template with values
|
|
309
|
+
helm template my-app ./my-app -f values-prod.yaml
|
|
310
|
+
|
|
311
|
+
# Show computed values
|
|
312
|
+
helm show values ./my-app
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**Validation script:**
|
|
316
|
+
```bash
|
|
317
|
+
#!/bin/bash
|
|
318
|
+
set -e
|
|
319
|
+
|
|
320
|
+
echo "Linting chart..."
|
|
321
|
+
helm lint .
|
|
322
|
+
|
|
323
|
+
echo "Testing template rendering..."
|
|
324
|
+
helm template test-release . --dry-run
|
|
325
|
+
|
|
326
|
+
echo "Checking for required values..."
|
|
327
|
+
helm template test-release . --validate
|
|
328
|
+
|
|
329
|
+
echo "All validations passed!"
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**Reference:** See `scripts/validate-chart.sh`
|
|
333
|
+
|
|
334
|
+
### 8. Package and Distribute
|
|
335
|
+
|
|
336
|
+
**Package the chart:**
|
|
337
|
+
```bash
|
|
338
|
+
helm package my-app/
|
|
339
|
+
# Creates: my-app-1.0.0.tgz
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
**Create chart repository:**
|
|
343
|
+
```bash
|
|
344
|
+
# Create index
|
|
345
|
+
helm repo index .
|
|
346
|
+
|
|
347
|
+
# Upload to repository
|
|
348
|
+
# AWS S3 example
|
|
349
|
+
aws s3 sync . s3://my-helm-charts/ --exclude "*" --include "*.tgz" --include "index.yaml"
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**Use the chart:**
|
|
353
|
+
```bash
|
|
354
|
+
helm repo add my-repo https://charts.example.com
|
|
355
|
+
helm repo update
|
|
356
|
+
helm install my-app my-repo/my-app
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### 9. Multi-Environment Configuration
|
|
360
|
+
|
|
361
|
+
**Environment-specific values files:**
|
|
362
|
+
|
|
363
|
+
```
|
|
364
|
+
my-app/
|
|
365
|
+
├── values.yaml # Defaults
|
|
366
|
+
├── values-dev.yaml # Development
|
|
367
|
+
├── values-staging.yaml # Staging
|
|
368
|
+
└── values-prod.yaml # Production
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**values-prod.yaml:**
|
|
372
|
+
```yaml
|
|
373
|
+
replicaCount: 5
|
|
374
|
+
|
|
375
|
+
image:
|
|
376
|
+
tag: "2.1.0"
|
|
377
|
+
|
|
378
|
+
resources:
|
|
379
|
+
requests:
|
|
380
|
+
memory: "512Mi"
|
|
381
|
+
cpu: "500m"
|
|
382
|
+
limits:
|
|
383
|
+
memory: "1Gi"
|
|
384
|
+
cpu: "1000m"
|
|
385
|
+
|
|
386
|
+
autoscaling:
|
|
387
|
+
enabled: true
|
|
388
|
+
minReplicas: 3
|
|
389
|
+
maxReplicas: 20
|
|
390
|
+
|
|
391
|
+
ingress:
|
|
392
|
+
enabled: true
|
|
393
|
+
hosts:
|
|
394
|
+
- host: app.example.com
|
|
395
|
+
paths:
|
|
396
|
+
- path: /
|
|
397
|
+
pathType: Prefix
|
|
398
|
+
|
|
399
|
+
postgresql:
|
|
400
|
+
enabled: true
|
|
401
|
+
primary:
|
|
402
|
+
persistence:
|
|
403
|
+
size: 100Gi
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**Install with environment:**
|
|
407
|
+
```bash
|
|
408
|
+
helm install my-app ./my-app -f values-prod.yaml --namespace production
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### 10. Implement Hooks and Tests
|
|
412
|
+
|
|
413
|
+
**Pre-install hook:**
|
|
414
|
+
```yaml
|
|
415
|
+
# templates/pre-install-job.yaml
|
|
416
|
+
apiVersion: batch/v1
|
|
417
|
+
kind: Job
|
|
418
|
+
metadata:
|
|
419
|
+
name: {{ include "my-app.fullname" . }}-db-setup
|
|
420
|
+
annotations:
|
|
421
|
+
"helm.sh/hook": pre-install
|
|
422
|
+
"helm.sh/hook-weight": "-5"
|
|
423
|
+
"helm.sh/hook-delete-policy": hook-succeeded
|
|
424
|
+
spec:
|
|
425
|
+
template:
|
|
426
|
+
spec:
|
|
427
|
+
containers:
|
|
428
|
+
- name: db-setup
|
|
429
|
+
image: postgres:15
|
|
430
|
+
command: ["psql", "-c", "CREATE DATABASE myapp"]
|
|
431
|
+
restartPolicy: Never
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
**Test connection:**
|
|
435
|
+
```yaml
|
|
436
|
+
# templates/tests/test-connection.yaml
|
|
437
|
+
apiVersion: v1
|
|
438
|
+
kind: Pod
|
|
439
|
+
metadata:
|
|
440
|
+
name: "{{ include "my-app.fullname" . }}-test-connection"
|
|
441
|
+
annotations:
|
|
442
|
+
"helm.sh/hook": test
|
|
443
|
+
spec:
|
|
444
|
+
containers:
|
|
445
|
+
- name: wget
|
|
446
|
+
image: busybox
|
|
447
|
+
command: ['wget']
|
|
448
|
+
args: ['{{ include "my-app.fullname" . }}:{{ .Values.service.port }}']
|
|
449
|
+
restartPolicy: Never
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
**Run tests:**
|
|
453
|
+
```bash
|
|
454
|
+
helm test my-app
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
## Common Patterns
|
|
458
|
+
|
|
459
|
+
### Pattern 1: Conditional Resources
|
|
460
|
+
|
|
461
|
+
```yaml
|
|
462
|
+
{{- if .Values.ingress.enabled }}
|
|
463
|
+
apiVersion: networking.k8s.io/v1
|
|
464
|
+
kind: Ingress
|
|
465
|
+
metadata:
|
|
466
|
+
name: {{ include "my-app.fullname" . }}
|
|
467
|
+
spec:
|
|
468
|
+
# ...
|
|
469
|
+
{{- end }}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### Pattern 2: Iterating Over Lists
|
|
473
|
+
|
|
474
|
+
```yaml
|
|
475
|
+
env:
|
|
476
|
+
{{- range .Values.env }}
|
|
477
|
+
- name: {{ .name }}
|
|
478
|
+
value: {{ .value | quote }}
|
|
479
|
+
{{- end }}
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
### Pattern 3: Including Files
|
|
483
|
+
|
|
484
|
+
```yaml
|
|
485
|
+
data:
|
|
486
|
+
config.yaml: |
|
|
487
|
+
{{- .Files.Get "config/application.yaml" | nindent 4 }}
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Pattern 4: Global Values
|
|
491
|
+
|
|
492
|
+
```yaml
|
|
493
|
+
global:
|
|
494
|
+
imageRegistry: docker.io
|
|
495
|
+
imagePullSecrets:
|
|
496
|
+
- name: regcred
|
|
497
|
+
|
|
498
|
+
# Use in templates:
|
|
499
|
+
image: {{ .Values.global.imageRegistry }}/{{ .Values.image.repository }}
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
## Best Practices
|
|
503
|
+
|
|
504
|
+
1. **Use semantic versioning** for chart and app versions
|
|
505
|
+
2. **Document all values** in values.yaml with comments
|
|
506
|
+
3. **Use template helpers** for repeated logic
|
|
507
|
+
4. **Validate charts** before packaging
|
|
508
|
+
5. **Pin dependency versions** explicitly
|
|
509
|
+
6. **Use conditions** for optional resources
|
|
510
|
+
7. **Follow naming conventions** (lowercase, hyphens)
|
|
511
|
+
8. **Include NOTES.txt** with usage instructions
|
|
512
|
+
9. **Add labels** consistently using helpers
|
|
513
|
+
10. **Test installations** in all environments
|
|
514
|
+
|
|
515
|
+
## Troubleshooting
|
|
516
|
+
|
|
517
|
+
**Template rendering errors:**
|
|
518
|
+
```bash
|
|
519
|
+
helm template my-app ./my-app --debug
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
**Dependency issues:**
|
|
523
|
+
```bash
|
|
524
|
+
helm dependency update
|
|
525
|
+
helm dependency list
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
**Installation failures:**
|
|
529
|
+
```bash
|
|
530
|
+
helm install my-app ./my-app --dry-run --debug
|
|
531
|
+
kubectl get events --sort-by='.lastTimestamp'
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
## Reference Files
|
|
535
|
+
|
|
536
|
+
- `assets/Chart.yaml.template` - Chart metadata template
|
|
537
|
+
- `assets/values.yaml.template` - Values structure template
|
|
538
|
+
- `scripts/validate-chart.sh` - Validation script
|
|
539
|
+
- `references/chart-structure.md` - Detailed chart organization
|
|
540
|
+
|
|
541
|
+
## Related Skills
|
|
542
|
+
|
|
543
|
+
- `k8s-manifest-generator` - For creating base Kubernetes manifests
|
|
544
|
+
- `gitops-workflow` - For automated Helm chart deployments
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
apiVersion: v2
|
|
2
|
+
name: <chart-name>
|
|
3
|
+
description: <Chart description>
|
|
4
|
+
type: application
|
|
5
|
+
version: 0.1.0
|
|
6
|
+
appVersion: "1.0.0"
|
|
7
|
+
|
|
8
|
+
keywords:
|
|
9
|
+
- <keyword1>
|
|
10
|
+
- <keyword2>
|
|
11
|
+
|
|
12
|
+
home: https://github.com/<org>/<repo>
|
|
13
|
+
|
|
14
|
+
sources:
|
|
15
|
+
- https://github.com/<org>/<repo>
|
|
16
|
+
|
|
17
|
+
maintainers:
|
|
18
|
+
- name: <Maintainer Name>
|
|
19
|
+
email: <maintainer@example.com>
|
|
20
|
+
url: https://github.com/<username>
|
|
21
|
+
|
|
22
|
+
icon: https://example.com/icon.png
|
|
23
|
+
|
|
24
|
+
kubeVersion: ">=1.24.0"
|
|
25
|
+
|
|
26
|
+
dependencies:
|
|
27
|
+
- name: postgresql
|
|
28
|
+
version: "12.0.0"
|
|
29
|
+
repository: "https://charts.bitnami.com/bitnami"
|
|
30
|
+
condition: postgresql.enabled
|
|
31
|
+
tags:
|
|
32
|
+
- database
|
|
33
|
+
- name: redis
|
|
34
|
+
version: "17.0.0"
|
|
35
|
+
repository: "https://charts.bitnami.com/bitnami"
|
|
36
|
+
condition: redis.enabled
|
|
37
|
+
tags:
|
|
38
|
+
- cache
|
|
39
|
+
|
|
40
|
+
annotations:
|
|
41
|
+
category: Application
|
|
42
|
+
licenses: Apache-2.0
|