110 lines
2.4 KiB
Markdown
110 lines
2.4 KiB
Markdown
# 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
|
|
& ./tools/quality.ps1
|
|
```
|
|
|
|
### Fast changed-files mode
|
|
|
|
Only runs `gdformat` / `gdlint` on `.gd` files modified since the last commit.
|
|
The Godot dependency check and all project scenarios still run.
|
|
|
|
```bash
|
|
./tools/quality.sh --changed
|
|
& ./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** | Game-owned GDScript roots | Formatting without rewriting addons or demos |
|
|
| **gdlint** | Game-owned GDScript roots | Lint violations such as unused arguments and naming |
|
|
| **godot-check** | Headless definitions scenario | Parser errors and missing dependencies |
|
|
| **scenarios** | Every `tests/*_test.gd` script | Simulation, persistence, navigation, and presentation regressions |
|
|
| **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
|
|
scenarios 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
|
|
scenarios 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.
|