42 lines
1004 B
Bash
Executable File
42 lines
1004 B
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
pass=0
|
|
fail=0
|
|
|
|
# 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 ]
|