feat(void): add package smoke gate across all templates

Ticket xavierk/voculinux#28, needs #27. One documented command
(packaging/void/smoke.sh, just void-smoke) lints, builds, installs
and smoke-tests every template under packaging/void/srcpkgs in
dependency order in the pinned Void container via podman, failing
fast naming the package with the harness echoing each stage.

The gate caught three latent breaks in the per-package harness and
the app template, fixed here:
- container-main.sh scoped the libggml scan to python3-pywhispercpp
  and gave the leaf packages their own import smokes (pynput by
  presence: no display in the container), failing loudly for
  packages without a smoke recipe;
- voculinux template drops the deprecated wrksrc override (xbps-src
  renames the single-top-dir archive itself; xlint rejects wrksrc)
  and builds the PEP 517 wheel (the sdist ships no setup.py);
- post_install promotes the pre-rename sdist names (desktop entry
  content, icons, /usr/bin launchers) to the renamed identity, and
  the payload smoke rejects pre-rename leftovers in OS-visible paths.

Offline policy tests (tests/test_void_smoke_gate.py) pin the gate to
the template set, the app-last order, podman-only pinned inputs and
per-package failure identity; the #27 policy tests and the rename
sweep cover the harness and template contracts.
This commit is contained in:
soubarnak
2026-11-06 05:57:37 +05:30
parent edaa3a57d3
commit bd7b624f50
8 changed files with 330 additions and 27 deletions
+25 -10
View File
@@ -2,7 +2,9 @@
pkgname=voculinux
version=0.18.5
revision=1
build_style=python3-module
# The release sdist ships no setup.py (setuptools pyproject-only), so the
# build goes through the PEP 517 wheel (cf. Solaar, PhotoCollage).
build_style=python3-pep517
hostmakedepends="python3-setuptools"
makedepends="python3-devel"
depends="python3 python3-gobject python3-cairo gtk+3 libayatana-appindicator ibus gobject-introspection python3-numpy python3-requests python3-pysocks python3-psutil python3-evdev python3-xlib python3-tqdm python3-platformdirs python3-PyAudio python3-pynput python3-pywhispercpp"
@@ -12,21 +14,34 @@ license="AGPL-3.0-only"
homepage="https://github.com/VocaHQ/vocalinux"
distfiles="https://github.com/VocaHQ/vocalinux/releases/download/v${version}/vocalinux-${version}.tar.gz"
checksum=1def4d8f0f14f2df2f2fee64ca29e6865e3d82e551f7d465c2a78ec6d4d72b1d
# The 0.18.5 release asset still carries the pre-rename archive root, so
# build under that directory. The first release cut after the rename ships
# the archive under the new name; that bump drops this override and points
# distfiles at the renamed asset with its published digest.
wrksrc="vocalinux-${version}"
# The 0.18.5 release asset still carries the pre-rename archive root.
# xbps-src moves a single-top-dir archive to pkgname-version itself, so no
# wrksrc override is needed (wrksrc is deprecated and xlint rejects it).
# The first release cut after the rename ships the archive under the new
# name; that bump points distfiles at the renamed asset with its digest.
post_install() {
# Entry points land on PATH through the module build; install the
# renamed desktop entry, the full icon set, and the marker the app
# reads to present package-manager updates (see INSTALL.msg).
# The 0.18.5 sdist predates the rename: the entry and icons still
# carry the old names. Promote them at install time — the entry lands
# as voculinux.desktop with rewritten Name/Exec/Icon, old-prefixed
# icons land renamed (vinstall takes the installed name, as vman
# uses it). The first release cut after the rename ships the new
# names; that bump drops the renames. Entry points land on PATH
# through the wheel build; the marker is what the app reads to
# present package-manager updates (see INSTALL.msg).
vlicense LICENSE
sed -e 's/vocalinux/voculinux/g' -e 's/Vocalinux/Voculinux/g' \
vocalinux.desktop > voculinux.desktop
vinstall voculinux.desktop 644 usr/share/applications
for icon in resources/icons/scalable/*.svg; do
vinstall "$icon" 644 usr/share/icons/hicolor/scalable/apps
vinstall "$icon" 644 usr/share/icons/hicolor/scalable/apps \
"$(basename "$icon" | sed 's/^vocalinux/voculinux/')"
done
# The wheel's entry points still carry the old names: promote the
# launchers (this runs before the provides hooks, so cmd:voculinux
# is what the package provides).
mv "${DESTDIR}/usr/bin/vocalinux" "${DESTDIR}/usr/bin/voculinux"
mv "${DESTDIR}/usr/bin/vocalinux-gui" "${DESTDIR}/usr/bin/voculinux-gui"
vmkdir usr/share/voculinux
touch "${DESTDIR}/usr/share/voculinux/packaged"
}