#!/bin/bash # validate-helm.sh - Validate Helm charts # Used by CI/CD pipelines to ensure Helm charts are valid set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" HELM_DIR="${REPO_ROOT}/devops/helm" echo "=== Helm Chart Validation ===" echo "Helm directory: $HELM_DIR" # Check if helm is installed if ! command -v helm &>/dev/null; then echo "::error::Helm is not installed" exit 1 fi # Check if helm directory exists if [[ ! -d "$HELM_DIR" ]]; then echo "::warning::Helm directory not found at $HELM_DIR" exit 0 fi FAILED=0 # Find all Chart.yaml files (indicates a Helm chart) while IFS= read -r -d '' chart_file; do chart_dir="$(dirname "$chart_file")" chart_name="$(basename "$chart_dir")" echo "=== Validating chart: $chart_name ===" # Lint the chart if helm lint "$chart_dir" 2>&1; then echo "✓ Chart '$chart_name' lint passed" else echo "✗ Chart '$chart_name' lint failed" FAILED=1 continue fi # Template the chart (dry-run) if helm template "$chart_name" "$chart_dir" --debug >/dev/null 2>&1; then echo "✓ Chart '$chart_name' template succeeded" else echo "✗ Chart '$chart_name' template failed" FAILED=1 fi done < <(find "$HELM_DIR" -name "Chart.yaml" -print0) if [[ $FAILED -eq 1 ]]; then echo "::error::One or more Helm charts failed validation" exit 1 fi echo "=== All Helm charts valid! ==="