- 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
3.0 KiB
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 page by placing the
Godot_v4.3-stable_export_templates.tpzcontents into~/.local/share/godot/export_templates/4.3.stable/.
Verify with:
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:
godot --headless --path . --script res://src/test/test_runner.gd # all tests
godot --headless --path . --quit-after 120 # boot smoke test
4. Build
./tools/build_releases.sh
Artifacts are written to build/:
build/step-line-linux-<version>.x86_64build/step-line-windows-<version>.exebuild/step-line-macos-<version>.zip
macOS builds are unsigned and will need
xattr -dr com.apple.quarantineguidance 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
- Create a New Release with tag
v<version>. - Attach all three
build/artifacts. - Write release notes (see checklist below).
Via the API
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.mdmatch the build. - Version in
project.godotmatches the tag. - Export templates used are the official ones for the pinned engine.
- Artifacts uploaded; README downloads page shows them.