Files
security-game/docs/RELEASING.md
T
zwitschi a3768c2ce4
Full build / Import + headless tests (push) Successful in 2m25s
Full build / Full desktop build + optional release (push) Skipped
Remove dialogue tone-of-voice system, add Gitea Actions full build, add venue cycling
- Delete Rules.Tone/TONE_NAMES, NpcProfile.tone_modifiers, tone params on
  NPCController.roll_reaction/apply_player_action; dialogue_lines flattened
  to Array[String]; HUD tone label, T binding, and hud.tone_prefix removed
- Docs updated everywhere (PLAN, README, DONE, MEMORY); PLAN section heading
  'Tone and Design Direction' -> 'Design Direction'
- Add .gitea/workflows/build.yml: checks job (import+tests) on push/PR; full
  build job (export templates, Linux/Windows/macOS exports, artifact upload,
  and tag-based Gitea release publish via GITEA_TOKEN) on tags/dispatch
- Remove old .github/workflows/ci.yml to avoid double runs
- Add venue cycling (V) across all three scenarios with hud.venue_switched
- Refresh README screenshots to match the new HUD
- 53/53 tests pass, boot smoke clean
2026-10-31 13:08:20 +01:00

124 lines
4.2 KiB
Markdown

# 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. CI (Gitea Actions)
The repository ships a Gitea Actions workflow (`.gitea/workflows/build.yml`):
- Every push/PR runs the **checks** job: Godot 4.3 install, project import, and the
full headless test suite. This is the fast safety net.
- **Tags (`v*`)** and **manual `workflow_dispatch`** runs additionally execute the
**build** job: export templates install, import, `tools/build_releases.sh` for
Linux/Windows/macOS, artifact upload, and — on tags — release publication via
`tools/publish_release.sh`.
For tag builds, set a repo secret named **`GITEA_TOKEN`** (write:repository scope).
Without it the workflow still builds and tests, but the release publish step fails.
> The workflow lives in `.gitea/workflows/` (Gitea's canonical path). The old
> `.github/workflows/ci.yml` was removed to avoid double runs on hosts that scan
> both directories.
## 4. Local build (alternative to CI)
```bash
godot --headless --path . --script res://src/test/test_runner.gd # all tests
godot --headless --path . --quit-after 120 # boot smoke test
./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`.
Preferred path — use the helper script with a token:
```bash
GITEA_TOKEN=your_api_token ./tools/publish_release.sh 0.1.0
```
The script creates the release from `project.godot`'s `config/version`, uploads
all three `build/` artifacts, and prints the release URL. The token needs only
`write:repository` scope on the Gitea host.
Manual alternative:
### 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.