build_archive.py had no lint or test coverage, which is how the obsolete requirements/pyproject mirror check slipped through unnoticed. Close that gap: - Add tests/test_build_archive.py: a network-free smoke test that runs the manifest check, dependency parsing, tarball build, and re-verification, and asserts the moved docs/ files, LICENSE, and package sources are packaged. - Lint build_archive.py in both the local gate (scripts/check.sh) and the CI workflow; fix the one issue this surfaced (unused variable py_bin). - List the new test in the REQUIRED_FILES manifest. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
41 lines
1.1 KiB
Bash
Executable file
41 lines
1.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Local CI gate: lint + type-check + tests. Mirrors .forgejo/workflows/ci.yml
|
|
# so the same checks run before a push even without a Forgejo Actions runner.
|
|
#
|
|
# Run manually: scripts/check.sh
|
|
# Run automatically: git config core.hooksPath .githooks (see .githooks/pre-push)
|
|
# Bypass once (emergency): git push --no-verify
|
|
#
|
|
set -uo pipefail
|
|
|
|
cd "$(git rev-parse --show-toplevel)" || exit 1
|
|
|
|
# Prefer the project venv's tools if present, else fall back to PATH.
|
|
BIN=""
|
|
if [ -x ".venv/bin/ruff" ]; then BIN=".venv/bin/"; fi
|
|
|
|
fail=0
|
|
run() {
|
|
local label=$1; shift
|
|
echo "== ${label} =="
|
|
if "$@"; then
|
|
echo " OK"
|
|
else
|
|
echo " FAILED"
|
|
fail=1
|
|
fi
|
|
}
|
|
|
|
run "ruff (lint)" "${BIN}ruff" check src/ tests/ build_archive.py
|
|
run "mypy (types)" "${BIN}mypy"
|
|
# Use `python -m pytest` (not the pytest console script) so the repo root is on
|
|
# sys.path — the test modules import `from tests.test_docker_ops import ...`.
|
|
run "pytest (tests)" "${BIN}python" -m pytest -q
|
|
|
|
echo
|
|
if [ "$fail" -ne 0 ]; then
|
|
echo "CI gate FAILED — fix the above or push with --no-verify to bypass."
|
|
exit 1
|
|
fi
|
|
echo "CI gate passed."
|