-
-
Notifications
You must be signed in to change notification settings - Fork 4
Release Process
Firestaff uses semantic versioning: MAJOR.MINOR.PATCH (e.g., 3.0.282). The version is set in CMakeLists.txt:
project(Firestaff VERSION 3.0.282 LANGUAGES C)Every version block in RELEASE_NOTES.md is grouped by game. It contains
DM1, DM2, CSB, Nexus and Theron; each game contains Added,
Changed and Removed. A category with no change contains exactly None..
Non-empty bullets name the affected function, subsystem, command, screen or
feature in backticks.
-
Bump version in
CMakeLists.txt. -
Write release notes in
RELEASE_NOTES.md(add a section headed# Firestaff vX.Y.Z). The section must contain exactly these functional delta categories, each with concrete bullets:# Firestaff vX.Y.Z ## DM1 ### Added - None. ### Changed - `dm1_feature`: describe the concrete change. ### Removed - None. ## DM2 ### Added - None. ### Changed - None. ### Removed - None. ## CSB ### Added - None. ### Changed - None. ### Removed - None. ## Nexus ### Added - None. ### Changed - None. ### Removed - None. ## Theron ### Added - None. ### Changed - None. ### Removed - None.
Name the affected function, subsystem, command, screen or feature in every non-empty bullet. Do not use aggregate wording such as “various updates” or generic release summaries. A release with no delta in a category must say
None.explicitly. The release workflow rejects notes that do not meet this contract. -
Update active TODO and DONE ledgers as needed:
TODO.mdfor cross-game work,TODO-<game>.mdfor active game work, and the matchingDONE*.mdonly after evidence-backed completion. Then runscripts/sync_wiki.shin the release workflow to publishdocs/wiki/. -
Commit the version bump and documentation.
-
Tag with
vprefix only when a release is explicitly requested. -
Push the tag only for that release.
The GitHub Actions release workflow triggers automatically on v* tags.
Ordinary documentation and code work is pushed to main without creating a
tag or GitHub Release.
Runs on every push and PR. Tests on:
- Ubuntu 24.04
- macOS 14
- Windows 2022
Checks: build, test suite, compiler warnings, asset hygiene (no game data committed).
Triggers on v* tags or manual workflow_dispatch. Jobs:
-
Preflight — validates the version against
CMakeLists.txtand verifies that the selected release-notes section names added, changed and removed functions/features before extracting it -
macOS — builds x86_64 (Intel) and arm64 (Apple Silicon) in parallel
- Produces:
.dmg,.zip - Bundles: Artpack Studio, Dungeon Studio, Savegame Editor
- Runs Phase A and Audio smoke probes
- Produces:
-
Windows — builds x86_64 via MSYS2 UCRT64
- Produces: portable
.zip, Inno Setup installer.exe - Bundles: Artpack Studio, Dungeon Studio, Savegame Editor
- Produces: portable
-
Linux — builds x86_64 and arm64 in parallel
- Produces:
.deb,.rpm - x86_64 also produces Steam Deck pacman
.pkg.tar.zstand AppImage - SDL3 built from source (pinned to
release-3.2.14)
- Produces:
-
iOS — builds arm64 on macOS 14
- Cross-compiles with iOS toolchain (deployment target iOS 14.0)
- SDL3 built as static library for iOS
- Produces:
.ipa(ad-hoc signed, AltStore Classic sideloadable)
-
Android — builds arm64 on Ubuntu 24.04
- Cross-compiles with Android NDK 27 (API 24, arm64-v8a)
- SDL3 built as shared library for Android
- Produces:
.apk(debug-signed)
-
Publish — creates/updates the GitHub Release
- Downloads all platform artifacts
- Generates release notes from
RELEASE_NOTES.md - Creates combined SHA-256 checksum manifest
- Uploads all artifacts to the GitHub Release
All platform builds pin SDL3 to release-3.2.14 via the SDL3_TAG environment variable.
| Platform | Artifacts | Architecture |
|---|---|---|
| macOS |
.dmg, .zip
|
x86_64, arm64 |
| Windows |
.zip, .exe (installer) |
x86_64 |
| Linux |
.deb, .rpm
|
x86_64, arm64 |
| Steam Deck |
.pkg.tar.zst, .AppImage
|
x86_64 |
| iOS | .ipa |
arm64 |
| Android | .apk |
arm64 |
Each platform artifact set includes a .sha256 checksum file. A combined all-assets.sha256 manifest covers every artifact in the release.
Three checks run on every commit:
- newline_eof: all committed files must end with a newline
- trailing_whitespace: no trailing whitespace allowed
- no_game_data_payloads: original game data files (DUNGEON.DAT, GRAPHICS.DAT, etc.) must never be tracked by git
The release workflow can also be triggered manually via workflow_dispatch with optional inputs:
-
version: override release version (defaults to
CMakeLists.txtversion) - draft: create as draft release
- prerelease: mark as prerelease