Replace APPIMAGE_EXTRACT_AND_RUN with pre-extracted linuxdeploy wrapper

Docker CI containers lack FUSE kernel module, and the env var approach
was unreliable when Tauri spawns linuxdeploy as a subprocess.

Instead: download linuxdeploy-x86_64.AppImage, extract its squashfs
content using squashfs-tools (no FUSE needed), then place a shell
wrapper at ~/.cache/tauri/linuxdeploy-x86_64.AppImage so Tauri uses
the extracted binary directly without AppImage runtime.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 10:40:01 -04:00
parent 768c286d4a
commit 6028a41d65
+15 -3
View File
@@ -135,7 +135,7 @@ jobs:
librsvg2-dev \
patchelf \
xdg-utils \
libfuse2
squashfs-tools
- uses: dtolnay/rust-toolchain@stable
@@ -152,18 +152,30 @@ jobs:
- name: Install Tauri deps
run: npm ci
- name: Stage AppRun for AppImage bundler
- name: Stage AppRun and linuxdeploy for AppImage bundler
run: |
mkdir -p ~/.cache/tauri
cp tools/AppRun-x86_64 ~/.cache/tauri/AppRun-x86_64
chmod +x ~/.cache/tauri/AppRun-x86_64
# Pre-extract linuxdeploy AppImage so it runs without FUSE in Docker
wget -q \
"https://github.com/tauri-apps/binary-releases/releases/download/linuxdeploy/linuxdeploy-x86_64.AppImage" \
-O /tmp/linuxdeploy.AppImage
OFFSET=$(python3 -c "
d=open('/tmp/linuxdeploy.AppImage','rb').read()
o=d.find(b'hsqs')
print(o if o!=-1 else d.find(b'sqsh'))
")
unsquashfs -d /tmp/linuxdeploy-root -offset "$OFFSET" /tmp/linuxdeploy.AppImage
printf '#!/bin/sh\nexec /tmp/linuxdeploy-root/AppRun "$@"\n' \
> ~/.cache/tauri/linuxdeploy-x86_64.AppImage
chmod +x ~/.cache/tauri/linuxdeploy-x86_64.AppImage
- name: Build
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ''
NODE_OPTIONS: '--max_old_space_size=4096'
APPIMAGE_EXTRACT_AND_RUN: '1'
run: npm run tauri -- build --bundles appimage,deb
- name: Upload to release