Skip to content

Expand GitHub workflow to build multi platform release - #1

Open
XargonWan wants to merge 16 commits into
XenuIsWatching:masterfrom
XargonWan:master
Open

Expand GitHub workflow to build multi platform release#1
XargonWan wants to merge 16 commits into
XenuIsWatching:masterfrom
XargonWan:master

Conversation

@XargonWan

@XargonWan XargonWan commented Aug 22, 2026

Copy link
Copy Markdown

Features

New plaforms added

These platform are added as experimental releases:

  • linux_x64-86 (tested)
  • linux_arm64 (untested)
  • macos_arm64 (tested)

Publishing

Release is published as a draft release and includes a templated do be manually edidte before push.
(based on 0.3.0 release notes).

Key generation

Android: if the signing key the workflow won't stuck: a key will be generated on the fly: the application will appear as a different one, good for testing for contributors to don't mess with the original installation.
A warning in the workflow summary will be posted.
Same for MacOS.

SideQuest

SideQuest is no more blocking: a warning in the workflow summary will be posted instead.

Examples

Example release

Can be found here

Workflow summary

image

NOTES

  • Without cache the workflow will take 1h17 minutes circa, after that the entire process will take around 7 minutes.
    The cache will be generated at first successful workflow (release is not needed for cache generation).

@XenuIsWatching

Copy link
Copy Markdown
Owner

can you rebase and remove the merge commit

… in release.yml

Extend the upstream release workflow (preflight/quest/windows/release) with two
new jobs, porting the platform tricks from the old implementation but fixing the
parts that were broken there:

- linux job (blocking, matrix): x86_64 -> ubuntu-24.04 (AppImage), arm64 ->
  ubuntu-24.04-arm (tar.gz). Builds both debug+release so the editor can load the
  classes, downloads the arch-correct Godot editor, builds SDL3 3.2.16 from source
  for arm64 (the vendored SDL3 is a Windows dev package with no source), fetches
  the arm64 libpdfium, patches libretro-godot and godot-pdfium SConscripts to be
  arch-aware, and patches godot-cpp for long ar command lines (TEMPFILE).
- macos job (experimental, continue-on-error): builds arm64 + x86_64 dylibs and
  lipos them into universal binaries, exports a universal .app, ad-hoc codesigns
  with entitlements (disable-library-validation, allow-unsigned-executable-memory,
  allow-jit), packages a zip.
- release job now needs [preflight, quest, windows, linux, macos].

Also:
- export_presets.cfg: add Linux and macOS presets (macOS universal, s3tc+etc2,
  codesign+entitlements), update runnable_presets.
- entitlements/macos.entitlements: new plist for ad-hoc signing.
- .gdextension files: add linux.arm64 and macos.universal entries (universal
  listed before per-arch so Godot's tie-break picks it).
- README: document the new platforms and the Linux libvlc (vlc-libs) runtime
  dependency for DVD/VHS playback.
…t runs

- checkout v4->v7, setup-java v4->v5, cache v4->v6, upload-artifact v4->v7,
  download-artifact v4->v8: clears the 'Node.js 20 is deprecated' warnings.
- quest: a missing ANDROID_KEYSTORE_BASE64 now only hard-fails tag/publish
  runs; a plain dispatch warns and exports an unsigned APK so the pipeline
  can be tested on forks without the signing secrets.
SDL3 3.2.16's CMake hard-errors when neither X11 nor Wayland development
headers are found, and the ubuntu-24.04-arm runner ships neither - the
configure step died with 'SDL could not find X11 or Wayland development
libraries'. Install the usual desktop dev set first so the built libSDL3
matches what distros ship.
…bc++

Two failures from run 32435542472:

linux (both arches): the editor could not dlopen libretro_godot - it links
SDL3 by soname with no rpath and expects the host to provide libSDL3.so.0,
which a bare runner does not have - so every script naming Libretro died
with 'could not find type'. Both arches now build SDL3 3.2.16 from source
(the committed x86_64 stand-in wants GLIBC_2.43, newer than ubuntu-24.04's
own 2.39), stage it next to the built .so where its $ORIGIN RUNPATH finds
it, and the gdextension [dependencies] entries bundle it into exports.
Also install the GL/Vulkan runtime libs the extension records as needed.

macos: Apple clang's libc++ construct_at lacks C++20 P0960 parenthesized
aggregate init, so OptionsHandler.cpp's emplace_back() on the aggregate
OptionValue failed to compile. Patched to brace init at build time until
the fix lands upstream (this account cannot push to
XenuIsWatching/libretro-godot).
… patch

- The staging step looked for libSDL3.so.0 under RetroXR/libretro-godot,
  but the SDL3 build writes it into the repo-root submodule tree - the
  arm64 job died on cp after 'all 10 builds OK'.
- Bundle SDL3 into build_out right after export instead of via
  [dependencies]: those entries would demand the file in every working
  tree and break local exports whose hosts already have SDL3.
- Replace the OptionsHandler.cpp call-site patch with one constructor
  patch on OptionsHandler.hpp: there are three emplace_back sites and
  libc++ rejects them all; constructors satisfy every one.
Three failures from run 32440283851:

- linux-arm64: the preset awk reset its in-Linux flag on [preset.N.options]
  too - and binary_format/architecture lives in exactly that options block,
  so the x86_64->arm64 substitution silently missed and export died copying
  a nonexistent x86_64 .so. Anchor the reset on bare [preset.N] headers.
- quest: --export-release refuses to run with no keystore at all ('Code
  Signing: Could not find release keystore'), so warn-and-export-unsigned
  cannot work. Test dispatches now mint a throwaway keystore instead;
  tag/publish runs still hard-require the real secret.
- linux-arm64: the freshly built extensions carry an unversioned DT_NEEDED
  libdl.so, which glibc-based distros stopped shipping when dl merged into
  libc. patchelf --replace-needed to libdl.so.2 after the build.
The ::warning annotation scrolls away with the log; write the notice to
GITHUB_STEP_SUMMARY too so the run report itself says the Quest APK is
signed with a one-off keystore. Upstream never takes this branch (the
secrets exist there), so PRing this file changes nothing upstream.
A publish dispatch without ANDROID_KEYSTORE_BASE64 died in the export
step ('secret ANDROID_KEYSTORE_BASE64 is unset'). Mint the throwaway
keystore whatever the run kind instead - the ::warning and the Summary
tab entry already say the APK is not upgrade-compatible with a real
release - and drop the now-unused PUBLISHING env.
A missing SIDEQUEST_RELEASE_WEBHOOK secret or a sync the portal never
picks up no longer fails the run - both land a ::warning and a Summary
tab entry with the manual fix (Developer Portal > RetroXR > Edit listing
> Distribution > Release). The release itself is already out by the time
this step runs; failing here only turned a finished pipeline red.
A dispatch that rebuilds the current version (code=6 after the v0.3.1
tag also carried 6) died in preflight before any build started. Like the
keystore and SideQuest steps, the check now lands a ::warning plus a
Summary tab entry - bump version/code before tagging or SideQuest will
reject the build - and lets the pipeline proceed.
- The release job ran only on tags or publish dispatches, so a plain
  dispatch threw every built artifact away. Run it whenever the builds
  succeed: create the release, or refresh the existing one's assets
  (--clobber) when the tag already exists.
- The upstream merge brought its own SCons cache steps back as
  actions/cache@v4 in quest and windows - bump both to v6 like the rest.
@XargonWan

Copy link
Copy Markdown
Author

can you rebase and remove the merge commit

Should be done

@XargonWan
XargonWan marked this pull request as ready for review August 24, 2026 07:00
@XenuIsWatching

Copy link
Copy Markdown
Owner

We've also got some fork'ed (vendored) libretro cores that have some custom patches on top of them like (mgba, dolphin, azahar. pcsx_rearmed) those will probably need a build as well as they just build android/windows for now. I can easily build them on Window's WSL for linux x86 and maybe linux arm as well. I'll have to look in to how those can be build for mac as well

@XargonWan

Copy link
Copy Markdown
Author

We've also got some fork'ed (vendored) libretro cores that have some custom patches on top of them like (mgba, dolphin, azahar. pcsx_rearmed) those will probably need a build as well as they just build android/windows for now. I can easily build them on Window's WSL for linux x86 and maybe linux arm as well. I'll have to look in to how those can be build for mac as well

Yeah I flagged some systems, like Mac, as experimental because I knew were unchecked/incomplete.
So I guess in this case we can integrate this build later on.

@XenuIsWatching
XenuIsWatching force-pushed the master branch 2 times, most recently from 2166445 to 2d11629 Compare September 2, 2026 06:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants