Local quality gates
The checks run entirely on the development computer. GitHub and Gitea are not
contacted, except by the git push that starts the pre-push hook.
Setup
Install the project dependencies, then enable the versioned hooks for this checkout:
cd backend
python -m pip install -r requirements-ci.txt
cd ../frontend
npm ci
cd ..
./tools/quality/install-hooks.sh
Each clone or independently configured worktree needs the one-time activation
command. Merely receiving .githooks through a mirror does not activate them.
Commands
./tools/quality/quality.sh quick
./tools/quality/quality.sh test
./tools/quality/quality.sh release
quickchecks formatting, lint, Django configuration and missing migrations.testalso runs both test suites, the production frontend build and all migrations on a fresh temporary PostgreSQL database.releasefirst requires the complete repository to pass Ruff, ESLint and Prettier, then runs everything fromtest.
pre-commit runs quick --staged. It refuses partially staged files so the
checked content is exactly the content being committed. pre-push chooses
test for develop, release for master, and quick for other branches.
PostgreSQL validation requires Docker with the postgres:17-alpine image. The
temporary container is removed after the check.