Files
vllm-omni/tools/pre_commit/shellcheck.sh
T

79 lines
2.0 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-Omni project
#
# Lint bash scripts for undefined vars, quoting, and similar bugs.
# Do not download a binary: use a distro/package-manager install so the
# artifact is signed (apt/dnf/brew) or at least an explicit local install.
set -euo pipefail
is_windows_exe() {
[[ "$1" == *.exe ]]
}
is_git_bash() {
case "$(uname -s)" in
MINGW*|MSYS*|CYGWIN*) return 0 ;;
*) return 1 ;;
esac
}
find_native_shellcheck() {
local cand
cand="$(command -v shellcheck 2>/dev/null || true)"
if [ -n "$cand" ] && ! is_windows_exe "$cand"; then
echo "$cand"
return 0
fi
return 1
}
install_hint() {
echo "Please install shellcheck with your package manager, then re-run:"
echo " Debian/Ubuntu/WSL: sudo apt-get install shellcheck"
echo " Fedora: sudo dnf install ShellCheck"
echo " macOS: brew install shellcheck"
echo " Git Bash: scoop install shellcheck"
echo " https://github.com/koalaman/shellcheck?tab=readme-ov-file#installing"
}
SHELLCHECK_BIN=""
if SHELLCHECK_BIN="$(find_native_shellcheck)"; then
:
elif is_git_bash && SHELLCHECK_BIN="$(command -v shellcheck.exe 2>/dev/null || true)" && [ -n "$SHELLCHECK_BIN" ]; then
:
else
install_hint
exit 1
fi
should_lint() {
local f="${1//\\//}"
f="${f#./}"
case "$f" in
*.sh) ;;
*) return 1 ;;
esac
git check-ignore -q "$f" && return 1
return 0
}
run_shellcheck() {
local f
for f in "$@"; do
if should_lint "$f"; then
"$SHELLCHECK_BIN" -s bash "$f"
fi
done
}
if [ "$#" -gt 0 ]; then
run_shellcheck "$@"
exit 0
fi
# Direct invocation with no args: lint every tracked *.sh.
while IFS= read -r -d '' f || [ -n "$f" ]; do
git check-ignore -q "$f" && continue
"$SHELLCHECK_BIN" -s bash "$f"
done < <(find . -path ./.git -prune -o -name "*.sh" -print0)