The Linux release tarball was x86_64-only, failing with "Exec format
error" on ARM Linux. Turn the linux CI job into a matrix over
ubuntu-latest and ubuntu-24.04-arm (GitHub's native arm64 runner), and
stamp the CPU architecture into the CPack tarball name
(Linux-x86_64 / Linux-aarch64) so the two release assets don't collide.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The release job hardcoded prerelease: true, so even a full version tag like
v1.38.0 published as a pre-release with no "Latest" badge. Derive both flags
from the tag name instead: a plain tag (v1.38.0) is a full release and is set
as Latest; a suffixed tag (v1.38.0-beta1, -alpha0, -rc1) stays a pre-release
and is never marked Latest.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Downloaded macOS apps failed with "You can't use this version of the
application with this version of macOS" on older systems. The SDL bundle
set no deployment target, so the toolchain stamped the binary's minimum-OS
(LC_BUILD_VERSION minos) with the build machine's SDK -- macOS 15 on the
macos-latest runner. Pin CMAKE_OSX_DEPLOYMENT_TARGET to 11.0 so the app
runs on macOS 11+.
Also add a second macOS CI job producing a universal (arm64 + x86_64) app
alongside the arm64-only Darwin build. It skips Homebrew SDL3 (arm64-only,
unlinkable into a universal binary) so CMake's FetchContent path builds a
universal SDL3 from source, and passes CMAKE_OSX_ARCHITECTURES. The artifact
is renamed GSplus-<ver>-macOS-universal.dmg to avoid colliding with the
arm64 dmg on the Release.
Universal exposed three CMake fixes:
- skip the legacy Swift/Cocoa app on multi-arch builds (Swift can't do
universal; that target is excluded from the default build anyway)
- enable_language(OBJC) so sdl_mac_menu.m gets a proper compile rule
- pass the SDL3 dylib dir to fixup_bundle so it resolves the FetchContent
build's @rpath/libSDL3.0.dylib
Verified locally: universal dmg contains an x86_64+arm64 app and SDL3,
minos 11.0, valid signature; the default single-arch path is unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
gsplus versions are MAJOR.MINOR.PATCH where MAJOR.MINOR mirrors the upstream
KEGS version (currently 1.38); first release is v1.38.0. Make the version flow
from one source so the tag, the application, and the release artifacts always
match:
- CMake: GSPLUS_VERSION (defaults to project() 1.38.0, overridable via
-DGSPLUS_VERSION). Drives CPACK_PACKAGE_VERSION (artifact names), the macOS
bundle CFBundleShortVersionString/CFBundleVersion, and a GSPLUS_VERSION_STR
compile definition.
- App: sdl_driver.c shows the version in the window title and logs it at
startup.
- CI: each Configure step passes -DGSPLUS_VERSION=<tag without 'v'> on tag
builds (e.g. v1.38.0 -> 1.38.0); branch builds use the default.
Fixes the previous mislabeling where artifacts were always named 0.0.1.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Allow the release job's GITHUB_TOKEN to create a GitHub Release (default
token is read-only on many repos), mark tag builds as prereleases, and
auto-generate release notes.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Windows job failed in setup-msys2 because the SDL3 package wasn't
available under that name. Use only the gcc/cmake/ninja toolchain and let
FetchContent build SDL3 from source, mirroring the Linux job.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Linux job builds SDL3 from source and was missing XTEST (and other
optional X11/wayland/audio) dev packages. Install SDL3's documented Linux
build deps so they resolve in one pass rather than one CI run at a time.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Phase 3 packaging via CPack, plus a GitHub Actions workflow.
CMake:
- find-or-fetch SDL3: use system SDL3 if present, otherwise build it
from source (FetchContent, pinned release-3.4.10) so CI runners without
SDL3 still build.
- macOS: gsplus-sdl is now a .app bundle (icon, Info.plist). install +
fixup_bundle copies libSDL3 into Contents/Frameworks and rewrites
paths, then re-signs ad-hoc, producing a self-contained app. CPack
DragNDrop wraps it into a .dmg (verified locally).
- Linux/Windows: $ORIGIN rpath; Windows bundles SDL3.dll next to the exe.
CPack TGZ (Linux) / ZIP (Windows).
CI (.github/workflows/build.yml): build + package on macOS (.dmg),
Linux (SDL3 from source, .tar.gz), and Windows (MSYS2/mingw + SDL3,
.zip); attach artifacts to GitHub Releases on v* tags. First iteration;
Linux/Windows jobs need validation against real runs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>