45 lines
1.1 KiB
Bash
45 lines
1.1 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Validate all shell scripts locally (no git/network). Produces docs/SCRIPTS_QA_REPORT.md
|
||
|
|
set -u
|
||
|
|
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
||
|
|
REPORT="$ROOT_DIR/docs/SCRIPTS_QA_REPORT.md"
|
||
|
|
mkdir -p "$ROOT_DIR/docs"
|
||
|
|
|
||
|
|
mapfile -t FILES < <(cd "$ROOT_DIR" && find scripts -type f -name '*.sh' | sort)
|
||
|
|
|
||
|
|
ok=0; fail=0
|
||
|
|
tmp=$(mktemp)
|
||
|
|
{
|
||
|
|
echo "# Scripts QA Report"
|
||
|
|
echo
|
||
|
|
echo "Generated: $(date -Iseconds)"
|
||
|
|
echo
|
||
|
|
echo "## Bash syntax check (bash -n)"
|
||
|
|
for f in "${FILES[@]}"; do
|
||
|
|
if bash -n "$f" 2>/dev/null; then
|
||
|
|
echo "- [OK] ${f#$ROOT_DIR/}"; ((ok++))
|
||
|
|
else
|
||
|
|
echo "- [FAIL] ${f#$ROOT_DIR/}"; ((fail++))
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
echo
|
||
|
|
echo "Summary: $ok OK, $((ok+fail)) total"
|
||
|
|
|
||
|
|
if command -v shellcheck >/dev/null 2>&1; then
|
||
|
|
echo
|
||
|
|
echo "## ShellCheck summary"
|
||
|
|
for f in "${FILES[@]}"; do
|
||
|
|
shellcheck -f gcc "$f" || true
|
||
|
|
done | tee "$tmp"
|
||
|
|
echo
|
||
|
|
echo "- ShellCheck issues: $(wc -l < "$tmp") lines reported"
|
||
|
|
else
|
||
|
|
echo
|
||
|
|
echo "## ShellCheck"
|
||
|
|
echo "shellcheck not found; skipping. Install with: sudo apt-get install shellcheck"
|
||
|
|
fi
|
||
|
|
} > "$REPORT"
|
||
|
|
|
||
|
|
rm -f "$tmp"
|
||
|
|
echo "QA report written: $REPORT"
|