Repository navigation
ci(linux): start the AppImage and the .deb, not only build them - #78
Merged
Merged
Conversation
scripts/linux-smoke.sh starts a Linux bundle on a virtual display (Xvfb) with an empty HOME and no session bus, and checks that the local server answers, /api/platform says linux with the browser off, it is a first run with /welcome served, a ConductLoop window exists, and closing the app stops the server. It runs in the bundles job (ubuntu-22.04, after the uploads) and in a new linux-smoke job on ubuntu-latest from the uploaded artifacts; screenshots and logs are kept for 3 days. Publishes nothing. The changelog line of #76 (Windows CI) had landed in the published 1.2.3 section; it moves to Unreleased. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
First run on CI: the AppImage came up (server in 2 s, linux, browser off, first run, window on screen). Two script bugs: dpkg-deb lists paths as "usr/bin/x" (no "./"), so the binary path came out relative; and the port closed a moment before the server process exited, which counted as "kept running". Wait up to 15 s for both, and show the process if one is left. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…aries The AppImage did not start on ubuntu-latest: "libEGL.so.1: cannot open shared object file". AppImages take libEGL/libGL from the system (they are on the AppImage exclude list) and every desktop has them; the runner image is a server without them. The .deb passed there (apt pulls them in), and on 22.04 they came with the build dependencies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 30, 2026
Merged
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.
What and why
The Linux bundles workflow built the AppImage and the
.debbut nothing ever started them: no one had run the Linux app yet (docs/PORTABILITY.md marks it untested on a real desktop). This adds a smoke test that starts both, as a new user would.scripts/linux-smoke.sh deb|appimage <file>:.debwith apt, or runs the AppImage with--appimage-extract-and-run(no FUSE);env -i, an empty temporaryHOMEand no session bus (so no Secret Service: the app must say so and keep working);/api/healthwithin 120 s;/api/platformsayslinuxwith the in-app browser off (and prints the sandbox and keychain state);/api/onboarding/stateis fresh and/welcomeis served; a ConductLoop window is on the display; closing the app stops the server within 15 s;It only talks to
127.0.0.1:7777with GETs and publishes nothing. It also works by hand on a Linux machine.Where it runs:
linux-bundlesjob (ubuntu-22.04, the build image), after the bundles are uploaded, so they are kept even when a check fails;linux-smokejob onubuntu-latest, from the uploaded artifacts: the bundles are built on 22.04 for an older glibc, so this checks they start on a newer system too.The
.debcheck runs even if the AppImage one fails, and the screenshots and logs are uploaded either way (!cancelled(), 3 days).Also: the changelog line of #76 (Windows CI) had landed inside the published 1.2.3 section; it moves to a new Unreleased section.
How it was tested
bash -nandshellcheckclean (two findings annotated: the apt log is written by the user,/etc/os-releaseis a system file).tests/test_linux_bundles_workflow.pyupdated and extended (both jobs, order after the uploads, artifacts,!cancelled(), the script only reading the local server and using a temporary HOME);tests/test_workflows_guard.pygreen (SHA pins,timeout-minutes, hosted runners;actions/download-artifactpinned to v8.0.2).The script can only run on Linux, so this PR's own runs were its real test. The first time the Linux app was ever started:
On both,
/api/platformsays linux, browser off, and no keychain (no session bus here) with the explanation and the encrypted-vault fallback. Code execution is available on 22.04 and off on 24.04 (sandbox_missing: bwrap missing or blocked there), with the message saying so. The welcome page renders in the window (screenshots in theconductloop-linux-smoke-*artifacts).What the first runs found, all fixed here:
dpkg-deb -clistsusr/bin/xwithout./(the binary path came out relative); the port closes a moment before the server exits (now waits for both); and the AppImage needs the system's libEGL/libGL like every AppImage, which a desktop has and the server runner image does not (libEGL.so.1: cannot open shared object file), so the ubuntu-latest job installs them.Seen, not changed here: the welcome page says the key "is stored in the Keychain of this Mac" on Linux too.
Checklist
CHANGELOG.mdentry under Unreleased.🤖 Generated with Claude Code