Files
agent-skills/bin/lint.sh
T
naps62-yolo 2f092f9ee0
ci / nix (push) Successful in 8s
ci / lint (push) Successful in 10s
feat(ci): lint skills, refs and installer drift (#15)
2026-08-20 14:23:19 +01:00

89 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Runs every check CI runs. Missing tools are skipped with a note, so this
# works on a bare machine; LINT_STRICT=1 (what CI sets) turns a skip into a
# failure, so a tool silently missing from the runner cannot pass as green.
set -uo pipefail
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$REPO" || exit 1
STRICT="${LINT_STRICT:-0}"
fail=0
# Vendored skills are upstream copies: they follow their own conventions and a
# re-vendor replaces them wholesale, so linting them only makes noise.
own() { git ls-files "$@" | grep -v -e '^skills/impeccable/' -e '^skills/humanizer/'; }
run() { # run <name> <cmd...>
local name="$1"
shift
printf '\n== %s\n' "$name"
"$@" || fail=1
}
skip() { # skip <name> <tool>
printf '\n== %s\n' "$1"
if [ "$STRICT" = 1 ]; then
echo "$2 is not installed"
fail=1
else
echo "skipped ($2 not installed)"
fi
}
have() { command -v "$1" >/dev/null 2>&1; }
run "repo lints" python3 bin/lint-repo.py
if have shellcheck; then
# shellcheck disable=SC2046
run "shellcheck" shellcheck $(own '*.sh')
else
skip "shellcheck" shellcheck
fi
if have ruff; then
run "ruff" ruff check .
else
skip "ruff" ruff
fi
# shellcheck disable=SC2046
run "python syntax" python3 -m compileall -q $(own '*.py')
if have jq; then
printf '\n== json\n'
bad=0
while read -r f; do
jq -e . "$f" >/dev/null 2>&1 || { echo "invalid JSON: $f"; bad=1; }
done < <(own '*.json')
[ "$bad" = 0 ] && echo "ok" || fail=1
else
skip "json" jq
fi
if have node; then
printf '\n== js syntax\n'
bad=0
while read -r f; do
node --check "$f" || bad=1
done < <(own '*.js' '*.mjs')
[ "$bad" = 0 ] && echo "ok" || fail=1
else
skip "js syntax" node
fi
# The flake is what NixOS boxes install from; nothing else evaluates home.nix.
# CI runs it as its own job (installing nix costs more than the rest combined),
# so the lint job opts out rather than reporting a false skip.
if [ "${LINT_NO_NIX:-0}" = 1 ]; then
printf '\n== nix flake check\nskipped (LINT_NO_NIX=1)\n'
elif have nix; then
run "nix flake check" nix flake check --no-write-lock-file
else
skip "nix flake check" nix
fi
printf '\n'
[ "$fail" = 0 ] && echo "all checks passed" || echo "FAILED"
exit "$fail"