# 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: ```bash 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 ```bash ./tools/quality/quality.sh quick ./tools/quality/quality.sh test ./tools/quality/quality.sh release ``` - `quick` checks formatting, lint, Django configuration and missing migrations. - `test` also runs both test suites, the production frontend build and all migrations on a fresh temporary PostgreSQL database. - `release` first requires the complete repository to pass Ruff, ESLint and Prettier, then runs everything from `test`. `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.