fix(ci): ship Linux release as a self-contained AppImage again - #107
Merged
Conversation
v2.0.0 replaced the v1.8.4 AppImage with a bare dynamically-linked binary, which needs matching system SDL libraries and a new-enough glibc to start - so players on other distros cannot run it. Rebuild build-linux in an ubuntu:20.04 container (glibc 2.31) and bundle the binary + its libs into OpenXcoop-x86_64.AppImage via linuxdeploy. The data folders still ship next to it (the game finds them via the "./" CWD entry in findDataFolders), plus a HOW_TO_RUN.txt. The container drops sudo and installs git/python3 before checkout, matching build-winxp. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ci-validate's build-linux mirrors ci-main's so a PR cannot land a Linux build that only works post-merge. Apply the same ubuntu:20.04 container + linuxdeploy AppImage step here, and assert the AppImage (not the bare binary) in the staged tree. This gate still uploads nothing, so it proves the AppImage packaging without producing a downloadable artifact. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
NonPolynomialTim
enabled auto-merge (squash)
July 30, 2026 23:05
NonPolynomialTim
added a commit
that referenced
this pull request
Jul 31, 2026
…read) Rebuilt as a single clean delta on top of main (the branch predated #107's squash, so its old pre-squash AppImage commits conflicted with main). build-linux now: debian:11 (glibc 2.31 floor) + jsoncpp 1.9.5 built from source into /usr/local (distro 1.9.4/1.7.4 makes the coop code's raw int64/uint64 -> Json::Value writes ambiguous on gcc) + -pthread (glibc 2.31 has a separate libpthread the CMake build never links). Validated green end-to-end via a branch ci-main dispatch. Mirrored into ci-validate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
NonPolynomialTim
added a commit
that referenced
this pull request
Jul 31, 2026
…read) (#108) Rebuilt as a single clean delta on top of main (the branch predated #107's squash, so its old pre-squash AppImage commits conflicted with main). build-linux now: debian:11 (glibc 2.31 floor) + jsoncpp 1.9.5 built from source into /usr/local (distro 1.9.4/1.7.4 makes the coop code's raw int64/uint64 -> Json::Value writes ambiguous on gcc) + -pthread (glibc 2.31 has a separate libpthread the CMake build never links). Validated green end-to-end via a branch ci-main dispatch. Mirrored into ci-validate. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
v2.0.0 replaced the v1.8.4 AppImage with a bare, dynamically-linked
openxcombinary. A bare binary needs the matching system SDL libraries and a new-enough glibc to even start — so players on other distros report "can't run it" while the regular OXCE works. (Reported by a player on the Linux download.)What
Restore the self-contained AppImage in the
build-linuxjob ofci-main.yml, and mirror it into the PR gate copy inci-validate.yml:container: ubuntu:20.04— an AppImage bundles its libs but not glibc, so its portability floor is the build host's glibc. Building on ubuntu-latest (glibc 2.39) would lock out older distros and reproduce the bug; the 20.04 container drops the floor to glibc 2.31. Same container pattern asbuild-winxp.linuxdeploybundles the binary + its shared libs intoOpenXcoop-x86_64.AppImage(v1.8.4 asset name kept).APPIMAGE_EXTRACT_AND_RUN=1because hosted runners have no FUSE. Reuses the repo'sres/linux/openxcom.desktop+ icon.common/,standard/andrendezvous.jsonvia the./(CWD) entry infindDataFolders(), so no source change is needed — same behaviour as v1.8.4. AHOW_TO_RUN.txtspells out "run it from this folder".[Unreleased]entry.Not covered / notes
build-winxpcontainer job; the AppImage build itself is exercised by this PR'sbuild-linuxgate and, post-merge, by the nightly.ldd. SDL 1.2 debian libs link their codecs directly (unlike SDL2_image/_mixer, which dlopen), so libpng/vorbis get bundled. If a build ever errors on a missing codec, add--libraryflags.ci-validatecopy stops at the asserted tree (no upload), so it proves the AppImage builds but produces no downloadable artifact — the testable tarball comes from the nightly (ci-main→pkg-linux, 7-day retention).🤖 Generated with Claude Code