Group A: source upstream binaries instead of self-built artifacts
The AUR does not allow packages to ship a binary tarball built by the maintainer - a -bin package must repackage a deliverable published by upstream. These six packages now do that: snapx-bin upstream's self-contained Linux tar.zst zapzap-bin upstream's pure-Python wheel faugus-launcher-bin upstream's arch-independent .deb wiiudownloader-bin upstream's AppImage waydroid-helper-bin upstream's AppImage chiaki-ng-bin upstream's AppImage All six drop build_artifact() and switch to refresh_checksums(), so CI no longer builds or hosts anything - it only tracks upstream's assets. Where the asset name carries build metadata that does not follow from pkgver (snapx, faugus-launcher), refresh_checksums() resolves it via the GitHub API and syncs an _asset variable in the PKGBUILD. Dependency lists are re-derived from what the bundles actually resolve outside themselves; the AppImage payloads land in /opt with wrappers in /usr/bin, because their entry points resolve paths relative to argv[0].
This commit is contained in:
1 parent
c25c2790e8
commit
fa1c190d17
19 files changed
+428
-379
No files matched your search
+17
-54
@@ -1,65 +1,28 @@
|
||||
# zapzap-bin - prebuilt package of https://github.com/rafatosta/zapzap
|
||||
# (WhatsApp desktop client written in PyQt6 + PyQt6-WebEngine).
|
||||
# zapzap-bin - ZapZap (https://github.com/rafatosta/zapzap), WhatsApp desktop
|
||||
# client written in PyQt6 + PyQt6-WebEngine.
|
||||
#
|
||||
# Upstream ships deb/AppImage bundles that vendor all of Qt; instead we build
|
||||
# the (pure-Python) wheel and install it against the system PyQt6 packages,
|
||||
# like the AUR source package does.
|
||||
# Upstream publishes a pure-Python wheel per release, which the PKGBUILD
|
||||
# installs against the system PyQt6 packages - unlike upstream's deb/AppImage
|
||||
# bundles, which vendor all of Qt. Icon, desktop file and metainfo are not
|
||||
# part of the wheel and come from the matching source tag.
|
||||
#
|
||||
# Upstream tags carry no "v" prefix.
|
||||
|
||||
UPSTREAM_REPO="rafatosta/zapzap"
|
||||
|
||||
# Installed in CI (pacman) before build_artifact runs.
|
||||
BUILD_DEPS=(python python-build python-installer python-setuptools python-wheel)
|
||||
|
||||
latest_version() {
|
||||
gh api "repos/$UPSTREAM_REPO/releases/latest" --jq '.tag_name' | sed 's/^v//'
|
||||
}
|
||||
|
||||
# build_artifact <version> <output-file>
|
||||
build_artifact() {
|
||||
local ver="$1" outfile="$2"
|
||||
local workdir destdir srctree staging sitedir entry
|
||||
workdir="$(mktemp -d)"
|
||||
destdir="$(mktemp -d)"
|
||||
staging="$(mktemp -d)"
|
||||
# refresh_checksums <version> <pkgbuild-path>
|
||||
refresh_checksums() {
|
||||
local ver="$1" pkgbuild="$2"
|
||||
local sha_whl sha_src
|
||||
|
||||
curl -sfL "https://github.com/$UPSTREAM_REPO/archive/refs/tags/$ver.tar.gz" | tar -xz -C "$workdir"
|
||||
srctree="$workdir/zapzap-$ver"
|
||||
sha_whl="$(curl -sfL "https://github.com/$UPSTREAM_REPO/releases/download/$ver/zapzap-$ver-py3-none-any.whl" \
|
||||
| sha256sum | cut -d' ' -f1)"
|
||||
sha_src="$(curl -sfL "https://github.com/$UPSTREAM_REPO/archive/refs/tags/$ver.tar.gz" \
|
||||
| sha256sum | cut -d' ' -f1)"
|
||||
|
||||
(cd "$srctree" && python -m build --wheel --no-isolation)
|
||||
python -m installer --destdir="$staging" "$srctree"/dist/*.whl
|
||||
|
||||
# The wheel installs into site-packages, whose path changes with every
|
||||
# Python minor bump and would silently break a prebuilt package. Relocate
|
||||
# to a fixed dir and use our own launcher instead of the generated console
|
||||
# script (entry point parsed from pyproject.toml).
|
||||
sitedir="$(find "$staging/usr/lib" -maxdepth 2 -type d -name site-packages)"
|
||||
[[ -d "$sitedir/zapzap" ]] || { echo "zapzap module not found in $sitedir" >&2; return 1; }
|
||||
mkdir -p "$destdir/usr/lib/zapzap"
|
||||
mv "$sitedir/zapzap" "$sitedir"/zapzap-*.dist-info "$destdir/usr/lib/zapzap/"
|
||||
|
||||
entry="$(python -c "import tomllib; print(tomllib.load(open('$srctree/pyproject.toml','rb'))['project']['scripts']['zapzap'])")"
|
||||
mkdir -p "$destdir/usr/bin"
|
||||
cat > "$destdir/usr/bin/zapzap" << EOF
|
||||
#!/usr/bin/python3
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, "/usr/lib/zapzap")
|
||||
from ${entry%%:*} import ${entry#*:}
|
||||
|
||||
sys.exit(${entry#*:}())
|
||||
EOF
|
||||
chmod 755 "$destdir/usr/bin/zapzap"
|
||||
|
||||
# Icon, desktop file and metainfo are not part of the wheel.
|
||||
install -Dm644 "$srctree/share/icons/com.rtosta.zapzap.svg" \
|
||||
"$destdir/usr/share/icons/hicolor/scalable/apps/com.rtosta.zapzap.svg"
|
||||
install -Dm644 "$srctree/share/applications/com.rtosta.zapzap.desktop" \
|
||||
"$destdir/usr/share/applications/com.rtosta.zapzap.desktop"
|
||||
install -Dm644 "$srctree/share/metainfo/com.rtosta.zapzap.appdata.xml" \
|
||||
"$destdir/usr/share/metainfo/com.rtosta.zapzap.appdata.xml"
|
||||
|
||||
tar --zstd --sort=name --owner=0 --group=0 --numeric-owner --mtime='@0' \
|
||||
-cf "$outfile" -C "$destdir" usr
|
||||
|
||||
rm -rf "$workdir" "$destdir" "$staging"
|
||||
sed -i "s|^sha256sums=.*|sha256sums=('$sha_whl' '$sha_src')|" "$pkgbuild"
|
||||
}
|
||||
Reference in new issue
Block a user