robot-u-site/scripts/check_python_quality.sh

63 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
set -uo pipefail
status=0
root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
python_files=(
"app.py"
"auth.py"
"calendar_feeds.py"
"forgejo_client.py"
"live_prototype.py"
"prototype_cache.py"
"settings.py"
"update_events.py"
"tests"
)
if [[ -x "${root_dir}/.venv/bin/python" ]]; then
python_cmd=("${root_dir}/.venv/bin/python")
else
python_cmd=(python3)
fi
run_check() {
local label="$1"
shift
echo "==> ${label}"
if ! "$@"; then
status=1
fi
echo
}
cd "${root_dir}"
run_check \
"Ruff format" \
uv run --with "ruff>=0.15.0,<1.0.0" \
ruff format --check "${python_files[@]}"
run_check \
"Ruff lint" \
uv run --with "ruff>=0.15.0,<1.0.0" \
ruff check "${python_files[@]}"
run_check \
"Deptry" \
uv run --with "deptry>=0.24.0,<1.0.0" \
deptry . \
--requirements-files requirements.txt \
--known-first-party app,auth,calendar_feeds,forgejo_client,live_prototype,prototype_cache,settings,update_events \
--per-rule-ignores DEP002=uvicorn \
--extend-exclude ".*/frontend/.*" \
--extend-exclude ".*/\\.venv/.*" \
--extend-exclude ".*/__pycache__/.*"
run_check \
"Vulture" \
uv run --with "vulture>=2.15,<3.0.0" \
vulture app.py auth.py calendar_feeds.py forgejo_client.py live_prototype.py prototype_cache.py settings.py update_events.py tests --min-confidence 80
run_check \
"Backend Tests" \
"${python_cmd[@]}" -m unittest discover -s tests -p "test_*.py"
exit "${status}"