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.
4.9 KiB
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 binaryREADME.mdgame/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:
# 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 asha256sum, and with--uploadcreates/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(defaultad3laid3/skate3recomp-multiplayer) andFORGEJO_INSTANCE(defaulthttps://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:
- A runner with the game dump. Codegen needs the
.xexfiles at build time. On the runner, put the extracted dump at/opt/skate3-game(default.xex+data/webkit/EAWebkit.xex, optionally theTU_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. - Secrets on the repo:
SUBMODULE_KEY— an SSH deploy key with read access toad3laid3/rexglue-skate3(the self-hosted rexglue fork submodule).RELEASE_TOKEN— a Forgejo token withwrite:repositoryscope.
- Runner label — the workflow uses
runs-on: ubuntu-24.04; match it to your runner's label (Docker runners commonly useubuntu-latest/ubuntu-22.04/ubuntu-24.04— change theruns-online to match). - Broken submodule pins. A fresh recursive clone currently fails because
the rexglue fork pins
thirdparty/imguito a commitocornut/imguino longer carries.tools/ci/init-submodules.shself-heals this (checks out the upstream default tip for any nested submodule left empty) and the workflow calls it aftergit 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:
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.