Addresses the known Windows build issues (see /mnt/archive/Issues.txt): - windows-build.cmd: loads vcvarsall with a stable Windows SDK (WINSDK, default 10.0.26100.0) fixing kernel32.lib LNK1104; sets MSYS2_ARG_CONV_EXCL=* so Git Bash does not corrupt %LIB%; inits submodules (including the broken-pin self-heal) before building. - release.sh: auto-detect the Title Update package (repo root or game dir); zip fallback to 7z or PowerShell Compress-Archive (Git Bash has no zip); upload JSON parsing falls back from python3/python to grep (Git Bash ships neither python).
5.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 (Visual Studio MSVC + Windows SDK, D3D12) | tools\release\windows-build.cmd (see below) |
| macOS | an Apple Silicon/Intel Mac (Homebrew LLVM + MoltenVK, per README) | ./tools/release/release.sh |
Cross-compiling Windows/macOS from a Linux box is not practical for this stack (D3D12 needs the Windows SDK, Cocoa/MoltenVK need a Mac), so each platform's release is built on that platform.
Windows build
On a Windows box, the known build issues (multiple Windows SDKs, Git Bash
%LIB% mangling, missing submodules) are handled by the launcher:
tools\release\windows-build.cmd --tag v2.0.2-mp1 --upload
It loads the MSVC environment (vcvarsall.bat x64 <SDK>), sets
MSYS2_ARG_CONV_EXCL=* so Git Bash doesn't corrupt %LIB%, initializes the
submodules (including the self-heal), and runs release.sh. Config via env:
VCVARSALL— path tovcvarsall.bat(default: VS 18 Community x64).WINSDK— Windows SDK version (default10.0.26100.0; try10.0.22621.0if yours differs — a broken SDK default is what causeskernel32.libLNK1104).GITBASH— path to Git for Windowsbash.exe.
release.sh now auto-detects the Title Update package (repo root or
game/), falls back to PowerShell Compress-Archive when zip is missing,
and no longer requires python3 for the upload JSON parsing. The Windows
build also needs the game dump (game/default.xex + EAWebkit.xex) and the
TU package present on that box (build-time only, never shipped).
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.