Skip to content

feat: build and release RiftLift as an AppImage - #10

Merged
Villagers654 merged 5 commits into
Villagers654:mainfrom
moi952:feat/appimage-build
Sep 16, 2026
Merged

Villagers654 merged 5 commits into
Villagers654:mainfrom
moi952:feat/appimage-build

Conversation

@moi952

@moi952 moi952 commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

Wanted a ready-to-use AppImage instead of making users build one themselves,
so I added a script + a job in the release workflow that produces it directly.

While testing the build I hit a download failure in the compatibility job
(securecdn-atl3-3.oculus.com doesn't resolve anymore), so I swapped it for
the generic securecdn.oculus.com host, same file/checksum, just a different
endpoint.

Package the CLI/GUI as a portable x86_64 AppImage using python-appimage,
buildable manually via scripts/build-appimage.sh and wired into the
release workflow as a new appimage job included in the release bundle.

Also fixes securecdn-atl3-3.oculus.com, a retired Meta CDN edge host that
no longer resolves, which broke both the CI compatibility payload build
and the app's own Oculus runtime download on install/launch. Replaced
with the working generic securecdn.oculus.com host (same pinned checksum).
The documented install path (install.sh) already runs `riftlift setup`
once during installation, so its users never see an unconfigured
compatibility stack. The AppImage has no equivalent install step - it's
just a binary you download and double-click - so a first-time user got no
prompt at all beyond a passive banner nobody had reason to look for yet.

Window now checks needs_setup() right after building its UI and, if the
compatibility runtime doesn't match what this build expects, starts the
same setup() the CLI's `riftlift setup` runs, through the existing
run_task/status machinery other background operations already use. Every
other install method (pip, install.sh) is unaffected in practice, since
their setup already matches by the time the window opens; this only
changes behavior for a user who has never run setup at all.
…a integrations

The entrypoint always ran riftlift-gui, which ignores its arguments and
only opens the main window - a Steam shortcut's `launch SLUG`, the Meta
login callback's `callback %u`, or a terminal `setup`/`doctor` all
silently did nothing. It now dispatches through the full `riftlift` CLI,
defaulting to `gui` on a plain double-click.

installed_command() also required a separately installed `riftlift` on
PATH to build Steam shortcuts or register the Meta login handler - a
standalone AppImage user has no such thing. It now resolves to the
running AppImage itself first, so a user who only ever downloaded the
AppImage can add games to Steam and sign in to Meta without anything
else installed.
@moi952
moi952 force-pushed the feat/appimage-build branch from 16245d7 to ac0e7b0 Compare September 16, 2026 17:51
@Villagers654
Villagers654 self-requested a review September 16, 2026 20:09

@Villagers654 Villagers654 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update this branch with main to pick up the compatibility and setup-validation fixes.

The remaining issue is the unquoted interpreter path in the AppImage entrypoint, which breaks startup when the path contains spaces. Please quote it in both branches as noted inline.

With those changes, this looks ready to merge.

Comment thread scripts/appimage/recipe/entrypoint.sh Outdated
@@ -0,0 +1,6 @@
bin="${APPDIR}/opt/python{{ python-version }}/bin"
if [ "$#" -eq 0 ]; then
{{ python-executable }} "$bin/riftlift" gui

@Villagers654 Villagers654 Sep 16, 2026

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

{{ python-executable }} expands to a path under $APPDIR. When that path contains spaces, the shell splits it into separate words and startup fails with exit code 127. I reproduced this using an extraction directory containing spaces.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done !

An unquoted {{ python-executable }} word-splits when the AppImage's
extraction directory contains spaces, failing startup with exit code 127.
@Villagers654

Copy link
Copy Markdown
Owner

LGTM

@Villagers654
Villagers654 merged commit 9f39fe7 into Villagers654:main Sep 16, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants