#!/bin/bash set -euo pipefail pass=0 fail=0 # Skip if shellcheck is not installed if ! command -v shellcheck &>/dev/null; then echo "=== ShellCheck ===" echo " SKIP shellcheck not found" echo "---" echo "Passed: 0 Failed: 0" exit 0 fi # Allow overriding shellcheck options via env var (e.g. -s bash) EXTRA_SHELLCHECK_OPTS="${SHELLCHECK_OPTS:-}" # Run shellcheck on a Go template after stripping template tags shellcheck_tmpl() { local tmpl=$1 # Strip Go template tags ({{ ... }} and {{- ... -}}) into whitespace # so shellcheck can parse the remaining bash. local cleaned cleaned=$(sed 's/{{[-]*[^}]*[-]*}}/true/g' "$tmpl") local tmpfile tmpfile=$(mktemp) printf '%s\n' "$cleaned" > "$tmpfile" if shellcheck $EXTRA_SHELLCHECK_OPTS "$tmpfile"; then echo " PASS $tmpl" pass=$((pass + 1)) else echo " FAIL $tmpl" fail=$((fail + 1)) fi rm -f "$tmpfile" } echo "=== ShellCheck ===" # Lint each template file passed as argument for f in "$@"; do [ -f "$f" ] && shellcheck_tmpl "$f" done echo "---" echo "Passed: $pass Failed: $fail" # Exit with failure if any template failed shellcheck [ "$fail" -eq 0 ]