chore:新增并完善 Godot CLI 测试技能

This commit is contained in:
2026-03-10 16:18:17 +08:00
parent 64850c2cae
commit 8123bc6b22
3 changed files with 183 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
---
name: godot-cli-test-runner
description: Run Godot CLI commands for this project with emphasis on headless test execution, script runs, scene runs, and export/debug operations. Use when the user asks to run Godot tests or commands (for example “Godot 跑测试”, “执行 Godot 命令”, “检查 Godot 参数”), troubleshoot CLI failures, or request reusable terminal/CI command templates.
---
# Godot CLI Test Runner
## Overview
Use deterministic Godot CLI workflows for Windows terminal and CI-style execution. Prefer `--headless`, explicit `--path`, and `--log-file` for reproducible diagnostics.
## Quick Decision
1. Parse-only check script syntax: `--headless --path . --script <file> --check-only`.
2. If test logic depends on autoload singletons (for example `SceneManager`, `LocationManager`, `EventSystem`), do not use direct `--script` as primary validation; use scene/project context first.
3. For isolated script tests without autoload dependencies, run `--headless --path . --script <file>`.
4. Export build by using `--export-release` / `--export-debug` with an existing preset.
5. Diagnose CLI behavior by adding `--verbose` and always writing `--log-file`.
## Workflow
### 1. Resolve executable and project path
1. Prefer `godot` from PATH.
2. If not available, use explicit exe path (for this machine typically `D:\technology\biancheng\Godot\Godot_v4.5.1-stable_win64_console.exe` or `D:\technology\biancheng\Godot\Godot_v4.5.1-stable_win64.exe`).
3. Run from repository root and always pass `--path .` unless intentionally targeting another project.
### 2. Preflight checks
1. Confirm engine version: `godot --version`.
2. Confirm options when needed: `godot --help`.
3. Confirm project exists: ensure `project.godot` is present under `--path`.
4. Read `project.godot` `[autoload]` and check whether the target test script references those singleton names.
5. Prepare a log output path (for example `.godot/test_xxx.log`) and pass `--log-file`.
### 3. Execute task type
1. Autoload-dependent validation (preferred when script references global singleton names):
`godot --headless --path . --scene res://scenes/MainScene.tscn --quit-after 120 --log-file .godot/smoke_main.log`
2. Scene-specific validation:
`godot --headless --path . --scene res://scenes/Maps/square.tscn --quit-after 90 --log-file .godot/smoke_square.log`
3. Script test (only for isolated logic or known SceneTree tests):
`godot --headless --path . --script tests/unit/test_xxx.gd --log-file .godot/test_xxx.log`
4. Script syntax only:
`godot --headless --path . --script tests/unit/test_xxx.gd --check-only --log-file .godot/check_xxx.log`
5. Export:
`godot --headless --path . --export-release "Web" web_assets/index.html --log-file .godot/export_web_release.log`
### 4. Capture and report results
1. Report exit code, key stdout/stderr lines, and failed command.
2. For failures, include one retry variant (for example add `--verbose`, switch explicit exe path, or switch from `--script` to `--scene` context).
3. Keep output concise and actionable.
4. If `--script` fails with missing singleton identifiers, mark it as context mismatch first, not business regression.
## Command Templates
### Windows (explicit exe)
```powershell
& "D:\technology\biancheng\Godot\Godot_v4.5.1-stable_win64_console.exe" --headless --path . --log-file .godot\test_websocket_close_code.log --script tests/unit/test_websocket_close_code.gd
```
### Generic (PATH)
```powershell
godot --headless --path . --log-file .godot/test_websocket_close_code.log --script tests/unit/test_websocket_close_code.gd
```
### With extra app args
```powershell
godot --headless --path . --log-file .godot/test_runner.log --script tests/unit/test_runner.gd -- --case websocket --timeout 30
```
## Minimal Runnable Examples
Run from repository root (`--path .`).
1. Run one scene-level smoke test (autoload-safe):
```powershell
godot --headless --path . --scene res://scenes/MainScene.tscn --quit-after 120 --log-file .godot/smoke_main.log
```
2. Run one test script (isolated logic):
```powershell
godot --headless --path . --script tests/unit/test_websocket_close_code.gd --log-file .godot/test_websocket_close_code.log
```
3. Run one scene:
```powershell
godot --headless --path . --scene res://scenes/SomeScene.tscn --quit-after 90 --log-file .godot/smoke_scene.log
```
4. Parse script only (syntax check):
```powershell
godot --headless --path . --script tests/unit/test_websocket_close_code.gd --check-only --log-file .godot/check_websocket.log
```
If `godot` is not in PATH, replace `godot` with explicit exe call:
```powershell
& "D:\technology\biancheng\Godot\Godot_v4.5.1-stable_win64.exe" <same arguments>
```
## Option Summary Reference
Use `references/godot-cli-commands.md` for categorized option summary and quick recipes based on `godot --help` output.
## Guardrails
1. Prefer non-interactive commands.
2. Prefer `--headless` for tests and scripts.
3. For this environment, include `--log-file` for reproducible logs and to avoid console build logging issues.
4. Avoid assuming GUT addon exists; check `addons/gut/gut_cmdline.gd` before using GUT command.
5. Use `--check-only` when user requests parse/syntax validation only.
6. For long-running runs, include `--quit-after` when appropriate.
7. Do not classify missing autoload singleton errors in `--script` mode as product regressions until scene/project-context validation is also run.

View File

@@ -0,0 +1,4 @@
interface:
display_name: "Godot CLI Test Runner"
short_description: "Run Godot tests and command-line workflows"
default_prompt: "Use this skill to run Godot headless tests with autoload-aware strategy, check CLI options, and execute Godot commands with reproducible --log-file diagnostics."

View File

@@ -0,0 +1,74 @@
# Godot CLI Commands Summary
This reference summarizes the provided `godot --help` output for fast command selection.
## 1. Core inspection
- Help: `godot --help`
- Version: `godot --version`
- Verbose logs: `godot --verbose`
- Quiet mode: `godot --quiet`
## 2. Project targeting and run mode
- Point to project directory: `godot --path .`
- Run specific scene: `godot --path . --scene res://scenes/MainScene.tscn`
- Headless mode: `godot --headless --path . ...`
- Quit quickly: `godot --path . --quit`
- Quit after N frames: `godot --path . --quit-after 120`
## 3. Script execution and tests
- Run script: `godot --headless --path . --script tests/unit/test_xxx.gd`
- Parse-only script check: `godot --headless --path . --script tests/unit/test_xxx.gd --check-only`
- Pass custom user args to script:
`godot --headless --path . --script tests/unit/test_runner.gd -- --case websocket`
- Autoload-safe smoke test (preferred when test uses singleton globals):
`godot --headless --path . --scene res://scenes/MainScene.tscn --quit-after 120 --log-file .godot/smoke_main.log`
## 4. Debug and diagnostics
- Local debugger: `godot --debug --path .`
- Remote debug: `godot --remote-debug tcp://127.0.0.1:6007 --path .`
- Print FPS: `godot --path . --print-fps`
- Log to file: `godot --path . --log-file logs/godot.log`
- Disable VSync for profiling: `godot --path . --disable-vsync`
## 5. Display and runtime controls
- Fullscreen: `godot --path . --fullscreen`
- Windowed: `godot --path . --windowed`
- Resolution: `godot --path . --resolution 1920x1080`
- Max FPS: `godot --path . --max-fps 60`
- Fixed FPS: `godot --path . --fixed-fps 60`
- Time scale: `godot --path . --time-scale 0.5`
## 6. Export operations (editor build only)
- Release export:
`godot --path . --export-release "Web" build/web/index.html`
- Debug export:
`godot --path . --export-debug "Web" build/web/index.html`
- Pack export:
`godot --path . --export-pack "Web" build/web/game.pck`
- Check preset syntax only:
`godot --path . --export-debug "Web" --check-only`
## 7. Common quick recipes
- Run a unit test script (isolated logic):
`godot --headless --path . --script tests/unit/test_websocket_close_code.gd --log-file .godot/test_websocket_close_code.log`
- Validate script syntax without running:
`godot --headless --path . --script tests/unit/test_websocket_close_code.gd --check-only --log-file .godot/check_websocket.log`
- Run game with verbose logs:
`godot --verbose --path . --log-file .godot/main_verbose.log`
- Run scene and auto-exit after startup checks:
`godot --headless --path . --scene res://scenes/MainScene.tscn --quit-after 120 --log-file .godot/smoke_main.log`
## 8. Windows explicit executable pattern
When `godot` is not in PATH, call the executable directly:
```powershell
& "D:\technology\biancheng\Godot\Godot_v4.5.1-stable_win64.exe" --headless --path . --script tests/unit/test_websocket_close_code.gd
```
## 9. Notes for AI execution
- Prefer `--headless` for tests and scripts in terminal/CI.
- Always include `--path .` for reproducibility.
- Use `--check-only` for parse checks when execution is not needed.
- If a script depends on autoload singleton names from `project.godot` (`SceneManager`, `LocationManager`, `EventSystem`, etc.), validate in scene/project context before concluding regression.
- Prefer `--log-file` for reliable diagnostics and environment-specific logging issues.
- Add `--verbose` when failure context is insufficient.