skate3recomp-multiplayer/docs/releases.md
MiTHRAL 7173d7e88d releases: local build+upload script, optional Forgejo Actions workflow, docs
Clarifies that releases ship ONLY the recompiled binaries (skate3 +
librexruntime + ghost_relay + README) - never the game files; the game dump
(default.xex + EAWebkit.xex) is required at BUILD TIME for codegen only.

- tools/release/release.sh: builds + packages a per-platform release zip
  (configure -> codegen -> build -> zip), prints a sha256sum, and with
  --upload creates/updates a Forgejo Release and attaches the zip via the
  API (GITEA_TOKEN). Supports linux/windows/macos presets on their native
  hosts.
- .forgejo/workflows/release.yml: optional automation - builds on a
  self-hosted Docker runner (ubuntu-24.04 label), self-heals the broken
  nested submodule pins via tools/ci/init-submodules.sh, and publishes a
  Linux release on v* tags. Needs the game dump mounted on the runner
  (codegen only, never uploaded), SUBMODULE_KEY + RELEASE_TOKEN secrets.
- tools/ci/init-submodules.sh: recursive submodule init that self-heals
  upstream pins a fresh clone can no longer fetch (the rexglue fork pins
  thirdparty/imgui to a commit ocornut/imgui dropped; the script checks out
  the upstream default tip for any nested submodule left empty).
- docs/releases.md: what's in a release, the local path, and the optional
  CI path.
- .gitignore: keep tools/ci + tools/release, ignore local release zips.
2026-08-26 23:32:13 -04:00

104 lines
No EOL
4.9 KiB
Markdown

# Releases
Releases are prebuilt binaries that players download so they only need their
own Skate 3 ISO — **no building from scratch**. This project does not and
cannot ship game content; the release zip is just the recompiled binaries.
## What's in a release (and what isn't)
A release zip (`Skate3Recomp-Linux-<ver>.zip`) contains only:
- `skate3` — the recompiled game binary (also the in-app **ISO installer**)
- `librexruntime.so` (Linux) / `librexruntime.dll` (Windows) /
`librexruntime.dylib` (macOS)
- `ghost_relay` — the multiplayer relay server binary
- `README.md`
- `game/default.xexp` + `game/data/webkit/EAWebkit.xexp` — **only** when the
build used the Title Update package (these are the recompiled update
patches, not retail content)
**No game files.** Players download the zip, run `skate3`, click "Select
ISO", and the built-in installer extracts their own legally-owned copy. The
game dump (`default.xex` + `data/webkit/EAWebkit.xex`) is required **only at
build time** — codegen mechanically translates the actual Xbox 360 binary
into C++ source, which is what gets compiled. It is never included in, or
uploaded with, a release.
## Option A — build locally, upload manually (recommended)
You already build successfully on your machine, so this is the simple path:
```sh
# on your build machine, from the repo root
./tools/release/release.sh # build + package this platform
./tools/release/release.sh --tag v1.0.0 --upload # build + publish to Forgejo
```
The script builds (configure → codegen → build), packages the zip (binaries
+ `librexruntime.so` + `ghost_relay` + README + TU patches if used), prints a
`sha256sum`, and with `--upload` creates/updates a Forgejo Release and
attaches the zip.
`--upload` needs:
- `GITEA_TOKEN` — a Forgejo token with **write:repository** scope (Settings →
Applications → Generate New Token), covering the release APIs.
- Optional `FORGEJO_REPO` (default `ad3laid3/skate3recomp-multiplayer`) and
`FORGEJO_INSTANCE` (default `https://git.mithraic.cloud`).
Per-platform notes:
| Platform | Build machine | Command |
|---|---|---|
| Linux | any Linux with the toolchain (README: Ubuntu 24.04 + Clang 20) | `./tools/release/release.sh` |
| Windows | a **Windows** machine (MSVC/clang-cl + Windows SDK, D3D12) | run the same script on Windows (`--os windows`) |
| macOS | an **Apple Silicon/Intel Mac** (Homebrew LLVM + MoltenVK, per README) | run the same script on macOS |
Cross-compiling Windows/macOS from a Linux box is not practical for this
stack (D3D12 on Windows, Cocoa/MoltenVK on macOS need their native SDKs), so
each platform's release is built on that platform.
## Option B — automated via Forgejo Actions (optional)
`.forgejo/workflows/release.yml` builds and publishes Linux releases on push
of a `v*` tag (or a manual run), on a self-hosted runner.
Requirements for the automation path:
1. **A runner with the game dump.** Codegen needs the `.xex` files at build
time. On the runner, put the extracted dump at `/opt/skate3-game`
(`default.xex` + `data/webkit/EAWebkit.xex`, optionally the
`TU_12K2276_*` package). If your runner is a Docker container, mount that
directory into it (`-v /opt/skate3-game:/opt/skate3-game`). The game files
stay on the runner — they are never uploaded to the repo.
2. **Secrets** on the repo:
- `SUBMODULE_KEY` — an SSH deploy key with read access to
`ad3laid3/rexglue-skate3` (the self-hosted rexglue fork submodule).
- `RELEASE_TOKEN` — a Forgejo token with `write:repository` scope.
3. **Runner label** — the workflow uses `runs-on: ubuntu-24.04`; match it to
your runner's label (Docker runners commonly use
`ubuntu-latest`/`ubuntu-22.04`/`ubuntu-24.04` — change the `runs-on` line
to match).
4. **Broken submodule pins.** A fresh recursive clone currently fails because
the rexglue fork pins `thirdparty/imgui` to a commit `ocornut/imgui` no
longer carries. `tools/ci/init-submodules.sh` self-heals this (checks out
the upstream default tip for any nested submodule left empty) and the
workflow calls it after `git submodule update --init`.
Windows/macOS jobs can be added to the same workflow when native
Windows/macOS runners are available (each job uses its platform preset and
artifact names; the package step is per-OS).
## Doing it by hand
If you'd rather not use the script, the equivalent steps are:
```sh
cmake --preset linux-relwithdebinfo -DSKATE3_GAME_DATA_ROOT="$PWD/game" # add -DSKATE3_TITLE_UPDATE_PACKAGE=... if used
cmake --build --preset linux-relwithdebinfo --target generate-all --parallel
cmake --preset linux-relwithdebinfo -DSKATE3_GAME_DATA_ROOT="$PWD/game"
cmake --build --preset linux-relwithdebinfo --parallel
# zip out/build/linux-relwithdebinfo/{skate3,librexruntime.so,ghost_relay} + README
```
Then create a Release in the Forgejo web UI (`<repo> → Releases → New
Release`) and attach the zip.