Files
voculinux/tests/test_appimage_packaging.py
T
Jatin K MalikandGitHub 279d99fea0 fix(whisper): honor bundled GPU libs and skip software Vulkan devices (#674)
* fix(whisper): use bundled GPU libs and skip software Vulkan devices

AppImage 0.15.0 shipped a CPU-only pywhispercpp wheel, so the Settings
GPU picker and host vulkaninfo never moved inference off the CPU. Rebuild
pywhispercpp with Vulkan in the AppImage, log the libraries that actually
load, skip llvmpipe in auto-select, and document how to verify.

Fixes #604

* fix(appimage): pin gcc/g++ for Vulkan pywhispercpp rebuild

Hosts that default cc/c++ to clang fail CMAKE's C++ test because clang
does not search gcc's libstdc++ path. Default the rebuild to gcc/g++.
2026-08-16 18:29:07 -07:00

70 lines
2.2 KiB
Python

"""Regression guards for AppImage packaging."""
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
BUILD_SH = REPO_ROOT / "packaging" / "appimage" / "build.sh"
# Typelibs that must ship in the AppImage. xlib/Dbusmenu/GModule/fontconfig are
# transitive GIR deps — pruning them broke Gtk on openSUSE (#585).
REQUIRED_TYPELIBS = (
"Gtk-3.0",
"Gdk-3.0",
"xlib-2.0",
"GModule-2.0",
"Dbusmenu-0.4",
"fontconfig-2.0",
"Notify-0.7",
)
# Tray stacks are alternates (same order as tray_indicator.py).
INDICATOR_TYPELIBS = (
"AyatanaAppIndicator3-0.1",
"AyatanaAppindicator3-0.1",
"AppIndicator3-0.1",
)
def test_appimage_build_ships_transitive_typelibs():
text = BUILD_SH.read_text()
assert "TYPELIBS=(" in text
# Must not wipe linuxdeploy's typelib set down to a partial allowlist.
assert 'rm -rf "$APPDIR/usr/lib/girepository-1.0"' not in text
assert "keeping linuxdeploy extras" in text or "Ensuring required typelibs" in text
for typelib in REQUIRED_TYPELIBS:
assert typelib in text, f"missing typelib seed {typelib} in {BUILD_SH}"
for typelib in INDICATOR_TYPELIBS:
assert typelib in text, f"missing indicator typelib seed {typelib}"
assert "INDICATOR_TYPELIBS=" in text
assert "indicator_found" in text
assert "Need at least one of:" in text
def test_appimage_build_bundles_gi_runtime_libs():
text = BUILD_SH.read_text()
for lib in (
"libappindicator3.so.1",
"libayatana-appindicator3.so.1",
"libdbusmenu-glib.so.4",
"libdbusmenu-gtk3.so.4",
"libnotify.so.4",
):
assert lib in text, f"missing GI runtime lib {lib} in {BUILD_SH}"
def test_appimage_build_smokes_gi_without_host_typelibs():
text = BUILD_SH.read_text()
assert "smoke_gi_imports" in text
assert "unshare --user --mount" in text
def test_appimage_build_rebuilds_pywhispercpp_with_vulkan():
text = BUILD_SH.read_text()
assert "GGML_VULKAN=1" in text
assert "libggml-vulkan" in text
assert "VOCALINUX_APPIMAGE_REQUIRE_VULKAN" in text
assert "VOCALINUX_APPIMAGE_SKIP_VULKAN" in text
assert "rebuild_pywhispercpp_vulkan" in text
assert 'CC="${CC:-gcc}"' in text
assert 'CXX="${CXX:-g++}"' in text