Setting the file. One moment. Validate Chart · Helm Chart Scaffolding · wshobson/agents · Skills Docs19
Workflow Orchestration Patterns
57
Nx Workspace Patterns
Trace To Training Data
Web Component Design
scripts/validate-chart.sh
scripts/validate-chart.sh
Shell·244 lines·6 KB
13
GREEN
=
'\033[0;32m'
14YELLOW='\033[1;33m'
15RED='\033[0;31m'
16NC='\033[0m' # No Color
17
18success() {
19 echo -e "${GREEN}✓${NC} $1"
20}
21
22warning() {
23 echo -e "${YELLOW}⚠${NC} $1"
24}
25
26error() {
27 echo -e "${RED}✗${NC} $1"
28}
29
30# Check if Helm is installed
31if ! command -v helm &> /dev/null; then
32 error "Helm is not installed"
33 exit 1
34fi
35
36echo "📦 Chart directory: $CHART_DIR"
37echo ""
38
39# 1. Check chart structure
40echo "1️⃣ Checking chart structure..."
41if [ ! -f "$CHART_DIR/Chart.yaml" ]; then
42 error "Chart.yaml not found"
43 exit 1
44fi
45success "Chart.yaml exists"
46
47if [ ! -f "$CHART_DIR/values.yaml" ]; then
48 error "values.yaml not found"
49 exit 1
50fi
51success "values.yaml exists"
52
53if [ ! -d "$CHART_DIR/templates" ]; then
54 error "templates/ directory not found"
55 exit 1
56fi
57success "templates/ directory exists"
58echo ""
59
60# 2. Lint the chart
61echo "2️⃣ Linting chart..."
62if helm lint "$CHART_DIR"; then
63 success "Chart passed lint"
64else
65 error "Chart failed lint"
66 exit 1
67fi
68echo ""
69
70# 3. Check Chart.yaml
71echo "3️⃣ Validating Chart.yaml..."
72CHART_NAME=$(grep "^name:" "$CHART_DIR/Chart.yaml" | awk '{print $2}')
73CHART_VERSION=$(grep "^version:" "$CHART_DIR/Chart.yaml" | awk '{print $2}')
74APP_VERSION=$(grep "^appVersion:" "$CHART_DIR/Chart.yaml" | awk '{print $2}' | tr -d '"')
75
76if [ -z "$CHART_NAME" ]; then
77 error "Chart name not found"
78 exit 1
79fi
80success "Chart name: $CHART_NAME"
81
82if [ -z "$CHART_VERSION" ]; then
83 error "Chart version not found"
84 exit 1
85fi
86success "Chart version: $CHART_VERSION"
87
88if [ -z "$APP_VERSION" ]; then
89 warning "App version not specified"
90else
91 success "App version: $APP_VERSION"
92fi
93echo ""
94
95# 4. Test template rendering
96echo "4️⃣ Testing template rendering..."
97if helm template "$RELEASE_NAME" "$CHART_DIR" > /dev/null 2>&1; then
98 success "Templates rendered successfully"
99else
100 error "Template rendering failed"
101 helm template "$RELEASE_NAME" "$CHART_DIR"
102 exit 1
103fi
104echo ""
105
106# 5. Dry-run installation
107echo "5️⃣ Testing dry-run installation..."
108if helm install "$RELEASE_NAME" "$CHART_DIR" --dry-run --debug > /dev/null 2>&1; then
109 success "Dry-run installation successful"
110else
111 error "Dry-run installation failed"
112 exit 1
113fi
114echo ""
115
116# 6. Check for required Kubernetes resources
117echo "6️⃣ Checking generated resources..."
118MANIFESTS=$(helm template "$RELEASE_NAME" "$CHART_DIR")
119
120if echo "$MANIFESTS" | grep -q "kind: Deployment"; then
121 success "Deployment found"
122else
123 warning "No Deployment found"
124fi
125
126if echo "$MANIFESTS" | grep -q "kind: Service"; then
127 success "Service found"
128else
129 warning "No Service found"
130fi
131
132if echo "$MANIFESTS" | grep -q "kind: ServiceAccount"; then
133 success "ServiceAccount found"
134else
135 warning "No ServiceAccount found"
136fi
137echo ""
138
139# 7. Check for security best practices
140echo "7️⃣ Checking security best practices..."
141if echo "$MANIFESTS" | grep -q "runAsNonRoot: true"; then
142 success "Running as non-root user"
143else
144 warning "Not explicitly running as non-root"
145fi
146
147if echo "$MANIFESTS" | grep -q "readOnlyRootFilesystem: true"; then
148 success "Using read-only root filesystem"
149else
150 warning "Not using read-only root filesystem"
151fi
152
153if echo "$MANIFESTS" | grep -q "allowPrivilegeEscalation: false"; then
154 success "Privilege escalation disabled"
155else
156 warning "Privilege escalation not explicitly disabled"
157fi
158echo ""
159
160# 8. Check for resource limits
161echo "8️⃣ Checking resource configuration..."
162if echo "$MANIFESTS" | grep -q "resources:"; then
163 if echo "$MANIFESTS" | grep -q "limits:"; then
164 success "Resource limits defined"
165 else
166 warning "No resource limits defined"
167 fi
168 if echo "$MANIFESTS" | grep -q "requests:"; then
169 success "Resource requests defined"
170 else
171 warning "No resource requests defined"
172 fi
173else
174 warning "No resources defined"
175fi
176echo ""
177
178# 9. Check for health probes
179echo "9️⃣ Checking health probes..."
180if echo "$MANIFESTS" | grep -q "livenessProbe:"; then
181 success "Liveness probe configured"
182else
183 warning "No liveness probe found"
184fi
185
186if echo "$MANIFESTS" | grep -q "readinessProbe:"; then
187 success "Readiness probe configured"
188else
189 warning "No readiness probe found"
190fi
191echo ""
192
193# 10. Check dependencies
194if [ -f "$CHART_DIR/Chart.yaml" ] && grep -q "^dependencies:" "$CHART_DIR/Chart.yaml"; then
195 echo "🔟 Checking dependencies..."
196 if helm dependency list "$CHART_DIR" > /dev/null 2>&1; then
197 success "Dependencies valid"
198
199 if [ -f "$CHART_DIR/Chart.lock" ]; then
200 success "Chart.lock file present"
201 else
202 warning "Chart.lock file missing (run 'helm dependency update')"
203 fi
204 else
205 error "Dependencies check failed"
206 fi
207 echo ""
208fi
209
210# 11. Check for values schema
211if [ -f "$CHART_DIR/values.schema.json" ]; then
212 echo "1️⃣1️⃣ Validating values schema..."
213 success "values.schema.json present"
214
215 # Validate schema if jq is available
216 if command -v jq &> /dev/null; then
217 if jq empty "$CHART_DIR/values.schema.json" 2>/dev/null; then
218 success "values.schema.json is valid JSON"
219 else
220 error "values.schema.json contains invalid JSON"
221 exit 1
222 fi
223 fi
224 echo ""
225fi
226
227# Summary
228echo "═══════════════════════════════════════════════════════"
229echo " Validation Complete!"
230echo "═══════════════════════════════════════════════════════"
231echo ""
232echo "Chart: $CHART_NAME"
233echo "Version: $CHART_VERSION"
234if [ -n "$APP_VERSION" ]; then
235 echo "App Version: $APP_VERSION"
236fi
237echo ""
238success "All validations passed!"
239echo ""
240echo "Next steps:"
241echo " • helm package $CHART_DIR"
242echo " • helm install my-release $CHART_DIR"
243echo " • helm test my-release"
244echo ""