feat(packaging): add complete AUR package set
cx
This commit is contained in:
10 files changed
+662
-197
No files matched your search
Executable
+152
@@ -0,0 +1,152 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build and smoke all four AUR recipes in separate, clean Arch containers.
|
||||
# The source packages consume the exact complete vendor archive emitted by the
|
||||
# release workflow, so Cargo remains offline during both builds.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "usage: $0 PATH_TO_CARGO_VENDOR_ARCHIVE" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
vendor_archive="$(realpath "$1")"
|
||||
version="$(sed -n 's/^version = "\([^"]*\)"/\1/p' crates/Cargo.toml | head -1)"
|
||||
qbz_test_bin="$(realpath "${QBZ_TEST_BIN:-crates/target/release/qbz}")"
|
||||
qbzd_test_bin="$(realpath "${QBZD_TEST_BIN:-crates/target/release/qbzd}")"
|
||||
if [[ -n "${AUR_TEST_WORK_DIR:-}" ]]; then
|
||||
mkdir -p "$AUR_TEST_WORK_DIR"
|
||||
test_root="$(realpath "$AUR_TEST_WORK_DIR")"
|
||||
echo "Preserving Arch build workspace at $test_root"
|
||||
else
|
||||
test_root="$(mktemp -d)"
|
||||
trap 'rm -rf "$test_root"' EXIT
|
||||
fi
|
||||
|
||||
read -r -a selected_packages <<< \
|
||||
"${AUR_TEST_PACKAGES:-qbz-bin qbz qbzd-bin qbzd}"
|
||||
for package in "${selected_packages[@]}"; do
|
||||
case "$package" in
|
||||
qbz-bin|qbz|qbzd-bin|qbzd) ;;
|
||||
*)
|
||||
echo "unsupported AUR test package: $package" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "${AUR_TEST_REUSE_BUILD:-0}" == 1 ]]; then
|
||||
makepkg_cleanbuild=""
|
||||
else
|
||||
makepkg_cleanbuild="--cleanbuild"
|
||||
fi
|
||||
|
||||
sources="$test_root/sources"
|
||||
packages="$test_root/packages"
|
||||
pacman_cache="$test_root/pacman-cache"
|
||||
pacman_cache="${AUR_PACMAN_CACHE:-$pacman_cache}"
|
||||
mkdir -p "$sources" "$packages" "$pacman_cache"
|
||||
|
||||
git archive --format=tar.gz --prefix="qbz-${version}/" \
|
||||
-o "$sources/qbz-${version}.tar.gz" HEAD
|
||||
cp "$vendor_archive" "$sources/qbz-${version}-cargo-vendor.tar.xz"
|
||||
|
||||
qbz_dir="$test_root/qbz_${version}_amd64"
|
||||
mkdir -p "$qbz_dir/icons/hicolor"/{32x32,48x48,64x64,128x128,256x256,512x512}/apps
|
||||
install -m755 "$qbz_test_bin" "$qbz_dir/qbz"
|
||||
install -m644 packaging/linux/qbz.desktop "$qbz_dir/qbz.desktop"
|
||||
install -m644 packaging/flatpak/com.blitzfc.qbz.metainfo.xml \
|
||||
"$qbz_dir/com.blitzfc.qbz.metainfo.xml"
|
||||
install -m644 LICENSE "$qbz_dir/LICENSE"
|
||||
for size in 32 48 64 128 256 512; do
|
||||
install -m644 "packaging/icons/${size}x${size}.png" \
|
||||
"$qbz_dir/icons/hicolor/${size}x${size}/apps/qbz.png"
|
||||
done
|
||||
tar -C "$test_root" -czf "$sources/qbz-bin-${version}-x86_64.tar.gz" \
|
||||
"qbz_${version}_amd64"
|
||||
|
||||
qbzd_dir="$test_root/qbzd-${version}-linux-amd64"
|
||||
mkdir -p "$qbzd_dir/completions"
|
||||
install -m755 "$qbzd_test_bin" "$qbzd_dir/qbzd"
|
||||
install -m644 crates/qbzd/service/qbzd.service "$qbzd_dir/qbzd.service"
|
||||
install -m644 packaging/linux/qbzd-standalone-README.md "$qbzd_dir/README.md"
|
||||
install -m644 LICENSE "$qbzd_dir/LICENSE"
|
||||
"$qbzd_test_bin" completions bash > "$qbzd_dir/completions/qbzd.bash"
|
||||
"$qbzd_test_bin" completions zsh > "$qbzd_dir/completions/qbzd.zsh"
|
||||
"$qbzd_test_bin" completions fish > "$qbzd_dir/completions/qbzd.fish"
|
||||
tar -C "$test_root" -czf "$sources/qbzd-bin-${version}-x86_64.tar.gz" \
|
||||
"qbzd-${version}-linux-amd64"
|
||||
|
||||
for package in qbz-bin qbz qbzd-bin qbzd; do
|
||||
mkdir -p "$packages/$package"
|
||||
cp "packaging/aur/${package}/"* "$packages/$package/"
|
||||
sed -i "s/^pkgver=.*/pkgver=${version}/" "$packages/$package/PKGBUILD"
|
||||
done
|
||||
|
||||
for package in "${selected_packages[@]}"; do
|
||||
echo "==> Clean Arch build: ${package}"
|
||||
docker run --rm \
|
||||
-e PACKAGE="$package" \
|
||||
-e VERSION="$version" \
|
||||
-e MAKEPKG_CLEANBUILD="$makepkg_cleanbuild" \
|
||||
-v "$packages/$package:/pkg" \
|
||||
-v "$sources:/sources" \
|
||||
-v "$pacman_cache:/var/cache/pacman/pkg" \
|
||||
archlinux:latest bash -euc '
|
||||
pacman -Syu --noconfirm --needed base-devel sudo
|
||||
useradd -m builder
|
||||
printf "builder ALL=(ALL) NOPASSWD: ALL\n" > /etc/sudoers.d/builder
|
||||
chown -R builder:builder /pkg
|
||||
if ! runuser -u builder -- env SRCDEST=/sources CARGO_NET_OFFLINE=true \
|
||||
MAKEPKG_CLEANBUILD="$MAKEPKG_CLEANBUILD" \
|
||||
bash -c '\''cd /pkg && makepkg -s --noconfirm --force $MAKEPKG_CLEANBUILD >makepkg.log 2>&1'\''; then
|
||||
echo "makepkg failed; last 160 log lines:" >&2
|
||||
tail -n 160 /pkg/makepkg.log >&2
|
||||
exit 1
|
||||
fi
|
||||
tail -n 20 /pkg/makepkg.log
|
||||
package_file="$(find /pkg -maxdepth 1 -type f -name "*.pkg.tar.zst" -print -quit)"
|
||||
test -n "$package_file"
|
||||
pacman -U --noconfirm "$package_file"
|
||||
case "$PACKAGE" in
|
||||
qbz|qbz-bin)
|
||||
grep -aFq "QBZ/${VERSION}" /usr/bin/qbz
|
||||
set +e
|
||||
QT_QPA_PLATFORM=offscreen timeout 20 qbz >/tmp/qbz-smoke.log 2>&1
|
||||
status=$?
|
||||
set -e
|
||||
if [[ $status -ne 124 ]]; then
|
||||
cat /tmp/qbz-smoke.log
|
||||
echo "qbz exited during offscreen smoke: $status" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
qbzd|qbzd-bin)
|
||||
qbzd version | grep -F "qbzd ${VERSION} "
|
||||
qbzd completions bash >/dev/null
|
||||
test -f /usr/lib/systemd/user/qbzd.service
|
||||
qbzd service systemd --user builder --bin /usr/bin/qbzd \
|
||||
>/tmp/qbzd-systemd.service
|
||||
qbzd service openrc --user builder --bin /usr/bin/qbzd \
|
||||
>/tmp/qbzd-openrc
|
||||
qbzd service runit --user builder --bin /usr/bin/qbzd \
|
||||
>/tmp/qbzd-runit
|
||||
grep -Fq "ExecStart=/usr/bin/qbzd run" /tmp/qbzd-systemd.service
|
||||
grep -Fq "#!/sbin/openrc-run" /tmp/qbzd-openrc
|
||||
grep -Fq "command=\"/usr/bin/qbzd\"" /tmp/qbzd-openrc
|
||||
grep -Fq "exec chpst -u builder:builder /usr/bin/qbzd run" /tmp/qbzd-runit
|
||||
;;
|
||||
esac
|
||||
'
|
||||
find "$packages/$package" -maxdepth 1 -type f -name '*.pkg.tar.zst' \
|
||||
-exec cp {} "$test_root/" \;
|
||||
done
|
||||
|
||||
cp "$test_root"/*.pkg.tar.zst "$packages/"
|
||||
echo "All AUR package builds passed."
|
||||
# Preserve the products when requested by CI; the default local run cleans its
|
||||
# temporary directory on exit after the proof above.
|
||||
if [[ -n "${AUR_TEST_OUTPUT_DIR:-}" ]]; then
|
||||
mkdir -p "$AUR_TEST_OUTPUT_DIR"
|
||||
cp "$packages"/*.pkg.tar.zst "$AUR_TEST_OUTPUT_DIR/"
|
||||
fi
|
||||
Reference in new issue
Block a user