feat(linux): ship an AppImage, with the tarball as the fallback - #113
Merged
Merged
Conversation
The Linux release was a bare tarball: extract it and run ./vapourbox, with no desktop entry, no icon and no update path. package-linux.sh now also builds an AppImage and its .zsync from the same tree. - AppRun exports nothing, so no environment leaks into the worker or the ffmpeg/vspipe it spawns from the downloaded deps bundle. - Deps stay a first-launch download under $XDG_DATA_HOME: the mount is read-only, and deps are versioned separately in two CPU tiers. - Update information points at the latest GitHub release's .zsync. A missing zsyncmake fails the build rather than embedding a dead pointer. - appimagetool is pinned to 1.9.1 by version and SHA-256. - packaging_test.dart lints the update filename, the release upload lists and the desktop/icon naming against APPLICATION_ID. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN
Owner
Author
|
Test build of this branch is green on both architectures: https://github.com/StuartCameronCode/VapourBox/actions/runs/37301057770 (version Each artifact holds all three files — Still unchecked: launching the AppImage on a real Linux desktop (deps download, an encode, a preview). 🤖 Generated with Claude Code |
1 of 5 tasks
The AppImage lint tests asserted whole lines ending in \n. A Windows checkout gives the workflow and desktop entry CRLF, so two of them failed on the Windows CI job only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN
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
The Linux release was a bare tarball: extract it and run
./vapourbox, with no desktop entry, no icon and no update path.package-linux.shnow also builds an AppImage and its.zsyncfrom the same tree. The tarball stays as the fallback.Scripts/package-linux.sh— buildsVapourBox-X.Y.Z-linux-<arch>.AppImage+.AppImage.zsyncalongside the tarball.--skip-appimagegives the tarball alone.packaging/linux/(new) —AppRun, the desktop entry, and a 256px icon rendered from the existing Swift source (generate-app-icons.shregenerates it).build-linux.yml— installszsyncanddesktop-file-utils; uploads all three files per arch.ci-build-and-release.sh,release.sh— the release upload picks up the AppImage and.zsync; release-notes text updated.packaging_test.dart— lints the update filename, the upload lists, and the desktop/icon naming againstAPPLICATION_ID.docs/BUILDING.md, a Linux section inCLAUDE.md.Design notes
AppRunexports nothing (noLD_LIBRARY_PATH, no bundled GTK): its environment is inherited by the worker and by the ffmpeg/vspipe it spawns from the downloaded deps bundle.$XDG_DATA_HOME. The AppImage mount is read-only, and deps are versioned separately in two CPU tiers.gh-releases-zsync|…|latest|VapourBox-*-linux-<arch>.AppImage.zsync. A missingzsyncmakefails the build rather than embedding a pointer to a file that was never made.appimagetoolis pinned to 1.9.1 by version and SHA-256. The runtime it embeds is fetched by the tool at build time and is not pinned.Not changed
Test plan
flutter test test/packaging_test.dartpasses locally (7 tests)gh workflow run build-linux.yml --ref linux-appimage -f version=0.0.0-test -f deps_tag=<current deps tag> -f arch=bothchmod +x, launch on Ubuntu 24.04: deps download, a job encodes, preview rendersdesktop-file-validateclean in the build log;.zsyncpresent in the artifact for both arches🤖 Generated with Claude Code
https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN