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.
104 lines
No EOL
4.9 KiB
Markdown
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. |