ci: build Linux releases (AppImage + portable tar.gz) - #91
Merged
Conversation
Adds a build-linux job to the tag-release workflow: - Builds on ubuntu-22.04 (oldest glibc) so one x86_64 binary covers Ubuntu 22.04+, Mint 21+, Debian 12+, Fedora 36+, openSUSE, Arch - Nuitka standalone bundle incl. onnxruntime (parity with Windows) - Bundles libxcb-cursor0, the Qt 6.5+ runtime dep most distros lack - Smoke-tests the bundle in bare Ubuntu 22.04 and Fedora containers under Xvfb before packaging - Ships both an AppImage (static runtime, no libfuse2 needed) and a portable tar.gz Also adds workflow_dispatch so builds can be tested without tagging: release upload steps are tag-gated, and the Linux job uploads its output as a workflow artifact on non-tag runs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mARQRfzeYh6SZz2id9AM4
Nuitka excludes the whole system X11/xkb stack, not just libxcb-cursor: the bare-container smoke test failed importing PySide6 (libxkbcommon.so.0 missing). Bundle every xcb extension/util lib the Qt xcb QPA needs plus libxkbcommon(-x11), and give the smoke-test containers only the truly universal host stack (libX11/libxcb core, SM/ICE, GL, fontconfig, glib, dbus). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mARQRfzeYh6SZz2id9AM4
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.
Summary
Tag releases now also build Linux binaries, in two formats:
FreeCCR_Linux_<version>-x86_64.AppImage— single-file, double-click-and-run. Built with appimagetool's static runtime, so it does not needlibfuse2on users' machines.FreeCCR_Linux_<version>-x86_64.tar.gz— the raw Nuitka standalone folder ("portable folder" style, as the Linux Mint user on the issue suggested). Extract anywhere, runFreeCCR/FreeCCR. No Python, no venv, no apt packages.Why one build covers Ubuntu, Fedora, Mint, etc.
Linux binaries link against the build machine's glibc, and glibc is only forward-compatible — so the job builds on
ubuntu-22.04(glibc 2.35), the oldest still-supported GitHub runner. One x86_64 build then runs on:There's a comment in the workflow warning not to bump the runner to
ubuntu-latestcasually, since that silently cuts off older distros.The libxcb-cursor0 problem
Qt ≥ 6.5's xcb platform plugin needs
libxcb-cursor.so.0, which most distros don't preinstall — it's exactly the one package the Mint user had tosudo apt install(and then vendored into a locallib/folder to stay portable). The workflow installs it on the build runner so Nuitka can bundle it, and a post-build step verifies it landed in the dist (copying it in manually if Nuitka excluded it). Users need to install nothing.Smoke tests
Before packaging, the job boots the built bundle under Xvfb in two bare containers (
ubuntu:22.04andfedora:latest) that only have the libs every desktop distro ships by default — deliberately withoutlibxcb-cursor0. The app must run for 25 s without crashing. This catches missing-library and missing-module bundling regressions on both .deb-world and .rpm-world before anything is released.Testing without tagging
The workflow now also has a
workflow_dispatchtrigger:Verified on this branch: dispatch run 28689242973 — all three jobs green, both container smoke tests passed, release-upload steps correctly skipped on the non-tag run, and the Linux AppImage + tar.gz are downloadable as a workflow artifact from that run (handy for giving the Mint user a test build).
Release-notes reminder
The static release-notes body now exists in three places (Windows, macOS, Linux jobs) — keep all three in sync, and update "What's New" as usual when tagging. The Install section already includes Linux instructions.
🤖 Generated with Claude Code
https://claude.ai/code/session_015mARQRfzeYh6SZz2id9AM4