Skip to content

fix: ship the AppImage with the static runtime - #548

Merged
pedronauck merged 5 commits into
compozy:mainfrom
GabrielKifer:fix/appimage-static-runtime
Sep 4, 2026
Merged

pedronauck merged 5 commits into
compozy:mainfrom
GabrielKifer:fix/appimage-static-runtime

Conversation

@GabrielKifer

@GabrielKifer GabrielKifer commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

Summary

The released Linux AppImage refused to start on any distribution that ships only FUSE 3 — current Arch, Ubuntu 24.04 and later, recent Fedora — and reported AppImages require FUSE to run. electron-builder 26.15.3 leaves toolsets.appimage unset, which is equivalent to "0.0.0" and selects buildLegacyFuse2AppImage, whose runtime links libfuse2 dynamically.

  • Static runtime. Pinning the toolset to 1.0.3 switches packaging to buildStaticRuntimeAppImage, which embeds the static AppImage/type2-runtime (release 20251108). The host needs no libfuse2, and --appimage-extract-and-run stops being the price of a modern distribution. The same runtime becomes the electron-builder default in v27.
  • 1.0.3, not 1.0.2. The 1.0.2 toolset fails the build with a GLIBC mismatch on recent distributions (Running electron-builder --appimage with toolset 1.0.2 on Ubuntu 25.10 fails electron-userland/electron-builder#9598).
  • One key, every build path. desktop/src/release/release-config.ts, desktop/scripts/build-e2e-update.ts, and package-local.ts all extend desktop/electron-builder.yml, so release, E2E, and local packaging pick the runtime up without further wiring.
  • Docs follow the runtime. getting-started/installation.mdx and operations/desktop-app.mdx no longer tell operators to install libfuse2; the extraction fallback stays documented for hosts without kernel FUSE support, such as some containers.

Verification

  • make gate PASS on this head — js-desktop lane, which owns the change (.cache/gate/js-desktop.json).
  • Packaged locally and launched on Arch Linux with fuse3 3.18.2, no fuse2, and only /usr/bin/fusermount3 present. The AppImage mounted and opened the app twice with no extraction fallback, then provisioned ~/.compozy/bin/compozy from an empty home and started exactly one daemon; compozy status reported it running over its socket and HTTP port.
  • Artifact checks: embedded runtime is ELF 64-bit LSB pie executable, static-pie linked and not a dynamic executable; --appimage-offset is 944632; --appimage-mount mounted as type fuse.CompozyOS-0.3.0-linux-x86_64.AppImage.
  • AppImage type 2 magic survives the swap — bytes 8-10 are 41 49 02, so the desktop still resolves application/vnd.appimage and integration tools such as Gear Lever keep working. The packaged build was installed through Gear Lever and run from the app menu on the affected machine.
  • Updater path unchanged: the build log shows downloaded label=appimage-tools-runtime-20251108.tar.gz followed by building embedded block map, and latest-linux.yml is produced as before.
  • QA: docs/qa/reports/2026-09-03-appimage-static-runtime.md. APP-appimage-fuseless-launch added and walked; the Linux leg of APP-install-first-run-provision re-walked on the new artifact. Lab teardown left no process, mount, or path behind.
  • No tests added: this is one packaging configuration key with no runtime code path, and the existing desktop AppImage update lane already exercises the produced artifact.

Compozy Impact Audit

  • Native tools: no impact. No compozy__* ID, toolset, descriptor, I/O schema, digest, risk flag, availability diagnostic, or capability gate appears in the diff, which touches desktop/electron-builder.yml, two docs pages, and docs/qa/ only.
  • Extensibility and hooks: no impact. No extension, hook, skill, capability, tool, resource, registry, bridge SDK, MCP sidecar, or config.toml key changes; the AppImage runtime is chosen at package time and exposes no runtime surface.
  • Workspace data isolation: no impact. No new or changed runtime datum, so no global, workspace, session, or agent scope moves and no list, read, cache, SSE, or event path changes.
  • Official Compozy skill: no impact. skills/compozy/ carries no AppImage, FUSE, or packaging reference (verified by grep over the skill tree).

Decisions for review

  • The appimage toolset versions are still labelled betas upstream (1.0.2, 1.0.3). 1.0.3 is the only one that both builds on current distributions and drops the libfuse2 dependency, and it becomes the default in electron-builder v27, so the pin is a step toward that default rather than away from it.
  • The verification build was produced by calling desktop/scripts/build-runtime.ts directly, which skips the webBuild and webAssetsCheck hooks the release pipeline runs first. Mount, provisioning, and daemon start were verified on that binary; product-UI behavior was confirmed separately on a build whose web bundle matched this checkout.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AWAfQdnMPaiEBxraRxAdyA

Summary by CodeRabbit

  • Bug Fixes
    • Updated Linux desktop release smoke testing to support both mounted and extracted AppImage launch modes.
    • Added validation for unsupported Linux launch modes and clearer environment checks for mounted launches.
    • Preserved extracted launching as an optional behavior instead of applying it unconditionally.

electron-builder 26.15.3 leaves toolsets.appimage unset, which selects the
legacy toolset whose runtime links libfuse2 dynamically. Distributions that
ship only FUSE 3 — current Arch, Ubuntu 24.04 and later, recent Fedora —
refused to mount the image and reported "AppImages require FUSE to run".

Pin the toolset to 1.0.3 so packaging embeds the static AppImage/type2-runtime
(release 20251108). The host no longer needs libfuse2, and the extraction
fallback stops being the price of a modern distribution. 1.0.3 rather than
1.0.2 because that toolset fails the build with a GLIBC mismatch on recent
distributions.

The artifact keeps its AppImage type 2 magic, so the desktop still resolves
application/vnd.appimage, and the block map and latest-linux.yml are produced
unchanged, so the electron-updater feed keeps its shape.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01AWAfQdnMPaiEBxraRxAdyA
@vercel

vercel Bot commented Sep 4, 2026

Copy link
Copy Markdown

@GabrielKifer is attempting to deploy a commit to the Compozy Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: 750932e2-6e71-4666-88ff-17417f68c567

📥 Commits

Reviewing files that changed from the base of the PR and between b7667d8 and 9a8275a.

⛔ Files ignored due to path filters (7)
  • .github/workflows/release.yml is excluded by !**/*.yml
  • desktop/electron-builder.yml is excluded by !**/*.yml
  • docs/qa/reports/2026-09-03-appimage-static-runtime.md is excluded by !**/*.md
  • docs/qa/scenarios/APP-appimage-fuseless-launch.md is excluded by !**/*.md
  • docs/qa/scenarios/APP-install-first-run-provision.md is excluded by !**/*.md
  • packages/site/content/docs/getting-started/installation.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/operations/desktop-app.mdx is excluded by !**/*.mdx
📒 Files selected for processing (1)
  • scripts/smoke-desktop-release-artifact.sh

Included review availability: Your plan provides up to 8 included reviews per hour; 5 remain after this review.


Important

Approval pending

CodeRabbit has no unresolved comments, but it could not review the latest commit because the review limit was reached. Follow the review guidance in this comment to continue.

Walkthrough

The smoke script adds an optional Linux launch mode. It validates mount and extract, checks FUSE prerequisites for mount, and sets AppImage extraction behavior based on the selected mode.

Changes

Linux launch modes

Layer / File(s) Summary
Validate and execute Linux launch modes
scripts/smoke-desktop-release-artifact.sh
The script accepts linux_launch_mode, defaults to mount, validates Linux values, checks ldconfig and libfuse.so.2 for mount, and selects the corresponding AppImage launch environment.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 9a827

Linux AppImage smoke validation now supports explicit mount and extract launch modes, preserving extraction behavior while checking the static-runtime mount path. No current merge-blocking risk remains.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary change: shipping the AppImage with a static runtime to avoid the dynamic FUSE 2 dependency.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@GabrielKifer

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

No files to review.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Sep 4, 2026
@pedronauck
pedronauck marked this pull request as ready for review September 4, 2026 15:05
@pedronauck
pedronauck self-requested a review as a code owner September 4, 2026 15:05
@greptile-apps

greptile-apps Bot commented Sep 4, 2026 •

Copy link
Copy Markdown

Greptile Summary

The PR switches Linux AppImage packaging to electron-builder’s static runtime and updates release validation and documentation accordingly.

  • Pins the AppImage toolset to 1.0.3 so hosts do not require the dynamically linked FUSE 2 runtime.
  • Changes Linux release smoke environments to FUSE 3 without libfuse2.
  • Exercises both normal mounted launch and the extraction fallback.
  • Updates operator documentation and records the remaining QA verification gaps without claiming the scenarios passed.

Confidence Score: 5/5

The PR appears safe to merge, with no outstanding correctness, security, or repository-rule violations identified.

The static runtime is applied through the shared builder configuration, release smoke coverage checks both mounted and extracted launch paths, and the QA records now explicitly retain blocked status where evidence is incomplete. Both previous review threads were manually resolved and are not outstanding.

Important Files Changed

Filename Overview
desktop/electron-builder.yml Pins the Linux AppImage toolset to the static-runtime release.
.github/workflows/release.yml Creates a FUSE 3-only smoke environment and validates mounted and extracted launches.
scripts/smoke-desktop-release-artifact.sh Adds explicit Linux launch modes and rejects mount verification when libfuse2 remains available.
docs/qa/reports/2026-09-03-appimage-static-runtime.md Accurately records the local artifact caveats, blocked QA status, and missing canonical teardown evidence.
docs/qa/scenarios/APP-appimage-fuseless-launch.md Adds the FUSE 3-only AppImage scenario while retaining blocked verification status.
docs/qa/scenarios/APP-install-first-run-provision.md Resets Linux first-run verification because the packaging runtime changed.
packages/site/content/docs/getting-started/installation.mdx Removes obsolete libfuse2 installation guidance and preserves the extraction fallback.
packages/site/content/docs/operations/desktop-app.mdx Updates Linux launch troubleshooting for the static AppImage runtime.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    Config[desktop/electron-builder.yml<br/>AppImage toolset 1.0.3] --> Package[Static-runtime AppImage]
    Package --> MountSmoke[Mount smoke<br/>FUSE 3, no libfuse2]
    Package --> ExtractSmoke[Extraction fallback smoke]
    MountSmoke --> Release[Release artifact]
    ExtractSmoke --> Release
    Package --> Docs[Updated installation and operations guidance]
Loading

Reviews (5): Last reviewed commit: "Merge branch 'main' into fix/appimage-st..." | Re-trigger Greptile

Comment thread docs/qa/reports/2026-09-03-appimage-static-runtime.md
Comment thread docs/qa/reports/2026-09-03-appimage-static-runtime.md Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Sep 4, 2026
@pedronauck
pedronauck merged commit f89f252 into compozy:main Sep 4, 2026
43 of 44 checks passed
This was referenced Sep 15, 2026
This was referenced Sep 27, 2026
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