# Local Quality Gate A single command to detect broken GDScript, formatting issues, lint problems, parser errors, and LLM-generated garbage before committing. ## Requirements - **Python 3** with `gdtoolkit` (gdscript-toolkit): ```bash pip install gdtoolkit ``` - **Godot 4** binary on `PATH`, or set the `GODOT_BIN` environment variable ## Usage ### Full project check ```bash # Linux / macOS / Git Bash ./tools/quality.sh # Windows PowerShell pwsh ./tools/quality.ps1 ``` ### Fast changed-files mode Only runs `gdformat` / `gdlint` on `.gd` files modified since the last commit. The Godot parser check still runs on the whole project. ```bash ./tools/quality.sh --changed pwsh ./tools/quality.ps1 -Changed ``` ### Auto-format (not part of the gate) ```bash ./tools/fix_format.sh ``` ## What it checks | Check | Tool | What it detects | |---|---|---| | **gdformat** | `gdformat --check .` | Unformatted code (indentation, spacing) | | **gdlint** | `gdlint .` | Lint violations (unused args, long lines, naming, etc.) | | **godot-check** | `godot --headless --check-only` | Parser/syntax errors, missing dependencies | | **gut** | `godot -s gut_cmdln.gd` | Failing GUT unit tests (only if addon exists) | ## Output If everything passes: ``` QUALITY RESULT: PASS gdformat PASS gdlint PASS godot-check PASS gut SKIPPED Full logs: logs/quality/latest/ ``` On failure, only relevant errors and fix suggestions are shown: ``` QUALITY RESULT: FAIL gdformat FAIL gdlint FAIL godot-check PASS gut SKIPPED res://simulation/SimNPC.gd:42 Unused argument 'delta' res://simulation/task_manager.gd:88 Line too long (120 > 100) NEXT FIX: 1. Fix unused-argument in SimNPC.gd 2. Run gdformat to auto-format files Full logs: logs/quality/latest/ ``` Full logs are always written to `logs/quality/latest/` and never dumped to the terminal. ## Environment variables | Variable | Description | |---|---| | `GODOT_BIN` | Path to the Godot executable (auto-detected from PATH if unset) | ## CI setup To add this to CI, install the dependencies and run: ```bash pip install gdtoolkit ./tools/quality.sh ``` The script exits non-zero on any failure, so it will fail the CI step.