8 Commits
Author SHA1 Message Date
Dagen BrockandClaude Fable 5 f757ccbd91 Add native arm64 Linux build to CI releases
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>
2026-07-17 21:39:12 -05:00
Dagen BrockandClaude Opus 4.8 266eb8214d CI: derive release prerelease/Latest from the tag name
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>
2026-06-28 18:21:33 -05:00
Dagen BrockandClaude Opus 4.8 2aa071fa9a CI: add universal macOS build + fix minimum-OS deployment target
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>
2026-06-28 17:22:32 -05:00
Dagen BrockandClaude Opus 4.8 1673f8babc Versioning: derive version from git tag (tag -> app -> release)
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>
2026-06-22 19:16:09 -05:00
Dagen BrockandClaude Opus 4.8 eecedafbd3 CI: grant contents:write + prerelease for the release job
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>
2026-06-22 17:26:10 -05:00
Dagen BrockandClaude Opus 4.8 5509b19ce7 CI: build SDL3 from source on Windows (drop MSYS2 SDL3 package)
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>
2026-06-22 15:52:52 -05:00
Dagen BrockandClaude Opus 4.8 172ec3e214 CI: add full SDL3 Linux build dependencies
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>
2026-06-22 15:48:39 -05:00
Dagen BrockandClaude Opus 4.8 aeb72a860d Add packaging: self-contained macOS .dmg + multi-platform CI
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>
2026-06-22 15:44:57 -05:00