docs/ci: implement yay 13 SIGSEGV workaround and update docs
This commit is contained in:
@@ -172,6 +172,36 @@ chmod 440 /etc/sudoers.d/99-ii-builder
|
||||
# so the tree must be owned by the account that runs it.
|
||||
chown -R "${BUILD_USER}:${BUILD_USER}" "${DOTS_REPO}"
|
||||
|
||||
# yay 13 (libalpm via purego/dyalpm) can SIGSEGV in alpm_release() at exit,
|
||||
# *after* the transaction and its hooks completed (failed CI run: crash in
|
||||
# dyalpm handle.Release). end-4 sees exit 2 and aborts. This shim, put first
|
||||
# on PATH for the install-deps run only, turns a failed plain `yay -S <pkgs>`
|
||||
# into success when every target is installed afterwards (pacman -T); any
|
||||
# other failure keeps yay's exit code. It lives in /tmp and is removed after.
|
||||
YAY_SHIM_DIR="$(mktemp -d /tmp/ii-yay-shim.XXXXXX)"
|
||||
cat > "${YAY_SHIM_DIR}/yay" <<'EOF'
|
||||
#!/bin/bash
|
||||
"${YAY_SHIM_REAL:-/usr/bin/yay}" "$@"
|
||||
rc=$?
|
||||
(( rc == 0 )) && exit 0
|
||||
sync=0
|
||||
targets=()
|
||||
for a in "$@"; do
|
||||
case "$a" in
|
||||
-S|--sync) sync=1 ;;
|
||||
-S*) exit "$rc" ;; # -Ss/-Si/-Syu/...: not a plain install
|
||||
-*) ;;
|
||||
*) targets+=("$a") ;;
|
||||
esac
|
||||
done
|
||||
if (( sync && ${#targets[@]} )) && pacman -T -- "${targets[@]}" >/dev/null; then
|
||||
echo "[yay-shim] yay exited ${rc}, but all ${#targets[@]} targets are installed - continuing" >&2
|
||||
exit 0
|
||||
fi
|
||||
exit "$rc"
|
||||
EOF
|
||||
chmod 755 "${YAY_SHIM_DIR}" "${YAY_SHIM_DIR}/yay"
|
||||
|
||||
# -f: never prompt (ask=false); -s: skip "pacman -Syu";
|
||||
# --skip-plasmaintg: optional Firefox widget that pulls 410 pkgs / 526 MiB of
|
||||
# KDE packages onto a non-KDE system;
|
||||
@@ -180,11 +210,14 @@ chown -R "${BUILD_USER}:${BUILD_USER}" "${DOTS_REPO}"
|
||||
# shellcheck disable=SC2024 # the redirect is meant for the child, not sudo
|
||||
if ! sudo -u "${BUILD_USER}" env HOME="/home/${BUILD_USER}" \
|
||||
GIT_TERMINAL_PROMPT=0 \
|
||||
PATH="${YAY_SHIM_DIR}:/usr/local/sbin:/usr/local/bin:/usr/bin" \
|
||||
bash -c "cd ${DOTS_REPO} && ./setup install-deps -f -s --skip-plasmaintg" \
|
||||
< <(yes e); then
|
||||
rm -rf "${YAY_SHIM_DIR}"
|
||||
echo "[customize] end-4 ./setup install-deps failed" >&2
|
||||
exit 1
|
||||
fi
|
||||
rm -rf "${YAY_SHIM_DIR}"
|
||||
|
||||
# ── Harvest the packages install-deps just built into the in-image local repo ─
|
||||
# The live /etc/pacman.conf points [local-aur] at /opt/localrepo; without the
|
||||
|
||||
Reference in New Issue
Block a user