Files
voculinux/docs/AUR.md
T
b4babcaeca feat(packaging): AUR -bin package publishing with per-arch digests (#879)
* feat(aur): add vocalinux-bin PKGBUILD shipping the AppImage

Closes #817

* fix(aur): hard-dep injection tools, pin real digests, gate the -bin package

* fix(aur): pin both-arch -bin digests and build the binpkg as builder

updpkgsums in the publish action only regenerates the x86_64 sum array, leaving aarch64 stale after every tag; release.yml now pins both AppImage digests itself and publishes with updpkgsums off. The AUR gate also created $WORKDIR/binpkg as root after handing WORKDIR to builder, so makepkg could not write there. AUR.md now matches the published -bin package.

* fix(ci): wait for aarch64 AppImage before publishing vocalinux-bin

publish-aur only needed build-and-release, so on a tag the digest-pinning
step could curl the aarch64 AppImage before build-appimage-arm64 attached
it — a 404 that failed the job between the source and -bin publishes.

Split the -bin bump/pin/publish steps into publish-aur-bin, which needs
[publish-aur, build-appimage-arm64]: the source package still ships as
early as before while the binary package only runs once both AppImages
exist on the release.

* fix(ci): ship -bin local sources and wait for the aarch64 asset on AUR publish

Split the -bin bump/pin/publish into publish-aur-bin needing
[publish-aur, build-appimage-arm64] so the digest-pinning step can no
longer curl a 404 for the not-yet-attached aarch64 AppImage mid-release,
and publish with asset_dir so the PKGBUILD's local sources
(vocalinux.desktop, vocalinux.svg, LICENSE) reach the AUR repo instead
of a lone PKGBUILD users cannot build.

* style(tests): apply black formatting to aur packaging test

---------

Co-authored-by: Jatin K Malik <jatinkrmalik@gmail.com>
2026-09-30 00:27:28 -07:00

3.1 KiB

Arch User Repository (AUR)

Users

yay -S vocalinux          # latest release tag
yay -S vocalinux-git      # community package; tracks main

vocalinux, vocalinux-bin and vocalinux-git conflict; install only one.

packaging/aur/vocalinux-bin/ builds a -bin variant that installs the prebuilt AppImage from the release — no Python, engine, or GPU dependency builds, since the bundle carries them (#817). The release workflow publishes it alongside the source package: it first pins the per-arch AppImage digests in the PKGBUILD, then pushes to AUR in the Publish AUR -bin package step.

Maintainers (one-time setup)

Release tags auto-push packaging/aur/vocalinux/PKGBUILD when these secrets exist:

Secret Value
AUR_SSH_PRIVATE_KEY Private key whose public half is on your AUR account
AUR_USERNAME AUR username (git author)
AUR_EMAIL AUR account email
# 1. AUR account + SSH pubkey: https://aur.archlinux.org/register
ssh-keygen -t ed25519 -C "vocalinux-aur" -f ./aur_ed25519 -N ""
# upload aur_ed25519.pub on AUR; put aur_ed25519 in AUR_SSH_PRIVATE_KEY

# 2. Create empty package once
git clone ssh://aur@aur.archlinux.org/vocalinux.git

# 3. Next v* tag runs Publish to AUR (skipped if secret missing)

Sources: packaging/aur/vocalinux/PKGBUILD. Community git package: https://aur.archlinux.org/packages/vocalinux-git

CI gate

Every PR that changes the Python source or packaging/aur/** builds the PKGBUILD on archlinux:latest — the Build AUR package (gate) job in unified-pipeline.yml. Run it locally with just aur-gate (needs docker).

The gate swaps the tag-archive source= for a git archive of the checkout, so it answers whether this commit builds on Arch — #757 reached users after the tag, when nothing could fail a build anymore (#736 reached Arch users too, but through install.sh; this package built fine). python-pywhispercpp (virtual, provided by the AUR backends) and python-pynput (AUR) cannot come from the repos, so the gate satisfies them with a stub for dependency resolution and pip-installs the pinned versions from requirements/runtime.txt for the import smoke. What AUR actually ships (python-pywhispercpp-cpu is still 1.4.x — see Troubleshooting) is a monitoring question, not the gate's.

Troubleshooting

ERROR Missing dependencies: setuptools<82

The AUR package builds with python -m build --wheel --no-isolation, so it uses Arch extra python-setuptools (currently 84). Vocalinux 0.16.1 drops the <82 cap in pyproject.toml. Rebuild 0.16.1 or later.

'_pywhispercpp.whisper_full_params' object has no attribute 'context_params'

AUR python-pywhispercpp-cpu / -cuda / -rocm are still 1.4.x. Those wheels accept context_params in Python and then crash in the native object. 0.16.1 skips that argument on pywhispercpp older than 1.5 and still loads the model (default GPU, no device picker). PyPI and install.sh already use 1.5.0.

There is no AUR python-pywhispercpp-vulkan package. GPU Vulkan 1.5 is the install.sh / AppImage path, not the AUR python backends.