Implement TODO backlog: LATE phase fix, protester, CALL_SOMEONE, door lock, flashlight, persistence, navmesh, JSON localization, and release tooling
CI / headless-tests (push) Successful in 55s
CI / headless-tests (push) Successful in 55s
- Fix LATE shift phase (start 700s) so the violent-threat event is reachable - Add PROTESTER archetype (rules, profile, colors, events in public venues) - Add CALL_SOMEONE reaction (FSM -> ARGUING, influencer/trespasser/protester weights) - Door lock: DoorState core class, L binding, red/green visual indicator, locked doors thwart FORCE_ENTRY - Flashlight: G binding, SpotLight3D, perception radius bonus at evening/late - Persistence: save shift results via Save autoload, history + best score on review screen, round-trip test - Navigation: flat NavigationRegion3D navmesh, NavigationAgent3D path following with direct-movement fallback; steps made visual-only so NPCs reach entrance - Localization: strings moved to content/strings.en.json (loader keeps lookup/fmt signatures; coverage test over all keys) - Distribution: export_presets.cfg (Linux/Windows/macOS), tools/build_releases.sh, docs/RELEASING.md, prominent README Downloads section - Remove stale signal_bus.gd (invalid static-signal experiment) - Tests: 53 passing across 9 suites
This commit is contained in:
1 parent
c808165302
commit
1e972a7490
27 files changed
+1044
-340
No files matched your search
@@ -0,0 +1,100 @@
|
||||
# Releasing Step Line
|
||||
|
||||
This guide describes how to produce downloadable executables and publish them
|
||||
so the README "Downloads" links always point at the latest release.
|
||||
|
||||
## 1. Install export templates
|
||||
|
||||
Godot needs platform export templates to build standalone binaries. The first
|
||||
time you export, either:
|
||||
|
||||
- Open the editor and use **Editor → Manage Export Templates** (downloads the
|
||||
matching templates), or
|
||||
- Install them manually from the
|
||||
[Godot downloads](https://godotengine.org/download/) page by placing the
|
||||
`Godot_v4.3-stable_export_templates.tpz` contents into
|
||||
`~/.local/share/godot/export_templates/4.3.stable/`.
|
||||
|
||||
Verify with:
|
||||
|
||||
```bash
|
||||
godot --headless --export-release "Linux" build/step-line-smoke.x86_64
|
||||
```
|
||||
|
||||
## 2. Bump the version
|
||||
|
||||
`project.godot` sets `config/version`. Keep it in sync with the release tag
|
||||
(e.g. `v0.3.0` → `config/version="0.3.0"`, plus a git tag `v0.3.0`).
|
||||
|
||||
## 3. Run the checks first
|
||||
|
||||
A release candidate must pass:
|
||||
|
||||
```bash
|
||||
godot --headless --path . --script res://src/test/test_runner.gd # all tests
|
||||
godot --headless --path . --quit-after 120 # boot smoke test
|
||||
```
|
||||
|
||||
## 4. Build
|
||||
|
||||
```bash
|
||||
./tools/build_releases.sh
|
||||
```
|
||||
|
||||
Artifacts are written to `build/`:
|
||||
|
||||
- `build/step-line-linux-<version>.x86_64`
|
||||
- `build/step-line-windows-<version>.exe`
|
||||
- `build/step-line-macos-<version>.zip`
|
||||
|
||||
> macOS builds are unsigned and will need `xattr -dr com.apple.quarantine`
|
||||
> guidance or notarization for production releases.
|
||||
|
||||
## 5. Publish on the repository host (Gitea/Forgejo)
|
||||
|
||||
The repository lives at `https://git.allucanget.biz/zwitschi/security-game`.
|
||||
|
||||
### Via the web UI
|
||||
|
||||
1. Create a **New Release** with tag `v<version>`.
|
||||
2. Attach all three `build/` artifacts.
|
||||
3. Write release notes (see checklist below).
|
||||
|
||||
### Via the API
|
||||
|
||||
```bash
|
||||
TOKEN="your_api_token"
|
||||
REPO="zwitschi/security-game"
|
||||
VERSION="0.3.0"
|
||||
API="https://git.allucanget.biz/api/v1/repos/$REPO/releases"
|
||||
|
||||
# Create the release
|
||||
RELEASE_JSON=$(curl -s -X POST "$API" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"v$VERSION\",\"name\":\"v$VERSION\",\"body\":\"Playable prototype release.\"}")
|
||||
|
||||
RELEASE_ID=$(echo "$RELEASE_JSON" | python3 -c "import sys,json;print(json.load(sys.stdin)['id'])")
|
||||
|
||||
for f in build/step-line-*"$VERSION"*; do
|
||||
curl -s -X POST "$API/$RELEASE_ID/assets" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-F "attachment=@$f"
|
||||
done
|
||||
```
|
||||
|
||||
## 6. Update the README
|
||||
|
||||
The **Downloads** section links to the host releases page
|
||||
(`https://git.allucanget.biz/zwitschi/security-game/releases`), so no README
|
||||
edit is needed when the page follows the naming pattern. If artifact names
|
||||
change, update `tools/build_releases.sh` first.
|
||||
|
||||
## Release notes checklist
|
||||
|
||||
- [ ] All headless tests pass (exit code 0).
|
||||
- [ ] Game boots cleanly in a smoke test.
|
||||
- [ ] Controls documented in `README.md` match the build.
|
||||
- [ ] Version in `project.godot` matches the tag.
|
||||
- [ ] Export templates used are the official ones for the pinned engine.
|
||||
- [ ] Artifacts uploaded; README downloads page shows them.
|
||||
Reference in new issue
Block a user