Make the AppImage Linux row actually extract, and hold Linux to the macOS preflight bar

The appimage row invoked the extractor by bare filename, and a command word
with no slash is resolved through PATH rather than the working directory, so
the extraction exited 127 and the bundled-installer assertion below it never
ran. Prefix it with ./ so the row exercises what it claims to.

The Linux log step also asserted nothing: it skipped a missing log with
continue and discarded the grep with || true. The launch step only proves the
process stayed alive for 90 seconds, and the bundled-installer checks do not
exercise the Rust preflight path, so an app that hung before preflight
completed passed both required Linux rows. Require the same
desktop_preflight completed disposition= record the macOS rows already do.
This commit is contained in:
Daniel Han 2026-07-28 22:02:47 +00:00
commit 9a8a749d07

View file

@ -318,7 +318,9 @@ jobs:
if [ "${{ matrix.kind }}" = "deb" ]; then
SH="$(dpkg -L "$(dpkg-deb -f dl/*.deb Package)" | grep -E '/install\.sh$' | head -1)"
else
(cd dl && "$(ls *.AppImage | head -1)" --appimage-extract >/dev/null)
# ls returns a bare filename here, and a command word with no slash is
# resolved through PATH, not the cwd, so this needs the ./ prefix.
(cd dl && "./$(ls *.AppImage | head -1)" --appimage-extract >/dev/null)
SH="$(find dl/squashfs-root -name install.sh -type f | head -1)"
fi
[ -n "$SH" ] && [ -f "$SH" ] || { echo "::error::the bundle ships no install.sh resource"; exit 1; }
@ -362,7 +364,18 @@ jobs:
[ -f "$f" ] || continue
echo "=== $f ==="; cp "$f" logs/ 2>/dev/null || true; tail -60 "$f"
grep -E "disposition=|can_auto_repair=|ModuleNotFoundError" "$f" || true
found=1
if grep -qE "desktop_preflight completed disposition=" "$f"; then disposition=1; fi
done
# Same acceptance criterion the macOS rows already enforce. Everything
# above is `|| true` and the loop skips a missing log outright, so
# without these two lines the step could not fail. setup_logging
# (src-tauri/src/main.rs:50-67) opens tauri.log unconditionally at
# process start, so no log at all means the binary never got that far,
# and the launch step only proves the process stayed alive: an app that
# hangs before preflight completes would otherwise pass both Linux rows.
[ "${found:-0}" = "1" ] || { echo "::error::the app wrote no tauri.log; it never reached setup_logging"; exit 1; }
[ "${disposition:-0}" = "1" ] || { echo "::error::tauri.log records no desktop_preflight disposition; the app never completed preflight"; exit 1; }
- name: Upload logs
if: always()