Files
PFVCluster/perf/shellcheck.sh
T
mrcharles 66e7843f27 refactor: reorganize merged repo into clean directory structure
Reorganize the merged KNELServerBuild + PFVCluster repo:

  provisioning/    server provisioning (was ProjectCode/ +
                   Project-Includes/ + Project-ConfigFiles/)
  tests/           test suite (was Project-Tests/)
  perf/            Proxmox perf scripts (was top-level *.sh + scripts/)
  docs/            all documentation (was ProjectDocs/ + PROJECT.md +
                   K8S.md + TODO.md)
  dns-cluster-setup/  Technitium DNS cluster (unchanged)
  netinfra/        netinfra audit scripts (unchanged)
  switches/        switch configs (unchanged)
  vendor/          vendored KNELShellFramework (unchanged)

Update all internal path references from old directory names
(ProjectCode/, Project-Includes/, Project-Tests/) to the new ones
(provisioning/, tests/) across all scripts.

🤖 Generated with [Crush](https://github.com/charmassociates/crush)

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-07-28 11:24:39 -05:00

66 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# shellcheck.sh - permanent wrapper to lint every shell script in this project.
#
# Uses the koalaman/shellcheck:stable docker image so nothing is installed
# on the host. Run from anywhere; lints scripts/ and any .sh under switches/.
#
# Usage:
# ./shellcheck.sh # tty output, all scripts
# ./shellcheck.sh --fix-info # treat style notes as non-blocking (default)
# ./shellcheck.sh --strict # exit non-zero on ANY finding (notes too)
# ./shellcheck.sh scripts/assess.sh # lint a single file
set -u
ROOT="$(cd "$(dirname "$0")" && pwd)"
IMAGE="koalaman/shellcheck:stable"
STRICT=0
TARGETS=()
for arg in "$@"; do
case "$arg" in
--strict) STRICT=1 ;;
--fix-info) STRICT=0 ;;
-h|--help)
sed -n '2,12p' "$0"; exit 0 ;;
*) TARGETS+=("$arg") ;;
esac
done
# Default targets: everything in scripts/, plus any .cmds is NOT shell - skip.
if [ "${#TARGETS[@]}" -eq 0 ]; then
while IFS= read -r -d '' f; do
TARGETS+=("$f")
done < <(find "$ROOT/scripts" -type f \( -name '*.sh' -o -name 'collect-*' -o -name 'assess*' \) -print0 2>/dev/null)
fi
if [ "${#TARGETS[@]}" -eq 0 ]; then
echo "no shell scripts found to lint" >&2
exit 1
fi
echo "Linting ${#TARGETS[@]} file(s) with $IMAGE:"
for t in "${TARGETS[@]}"; do echo " - $t"; done
echo
# Make paths relative to ROOT so docker volume maps cleanly
REL_TARGETS=()
for t in "${TARGETS[@]}"; do
rel="${t#$ROOT/}"
[ "$rel" = "$t" ] && rel="$t"
REL_TARGETS+=("$rel")
done
SC_ARGS=(--format=tty)
[ "$STRICT" -eq 0 ] && SC_ARGS+=(--severity=warning)
docker run --rm -v "$ROOT:/mnt" -w /mnt "$IMAGE" \
"${SC_ARGS[@]}" "${REL_TARGETS[@]}"
RC=$?
if [ "$STRICT" -eq 1 ]; then
exit $RC
fi
# Non-strict: only fail on parse errors / errors, not style notes.
# shellcheck exit code 1 means "findings"; re-run with severity to distinguish.
exit 0