Some checks failed
Mark stable commit / test-unit (push) Has been cancelled
Mark stable commit / test-integration (push) Has been cancelled
Mark stable commit / test-container (push) Has been cancelled
Mark stable commit / test-e2e (push) Has been cancelled
Mark stable commit / test-virgin-user (push) Has been cancelled
Mark stable commit / test-virgin-root (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
Implemented a robust retry mechanism for cloning the yay AUR helper during Arch dependency installation. The new logic retries the git clone operation for up to 5 minutes with a 20-second pause between attempts, allowing the build to proceed even when GitHub intermittently returns HTTP 504 errors. This improves the stability of Arch container builds, especially under network pressure or transient upstream outages. The yay build process now only starts once the clone step completes successfully. https://chatgpt.com/share/693b102b-fdb0-800f-9f2e-d4840f14d329
89 lines
2.5 KiB
Bash
Executable File
89 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# ------------------------------------------------------------
|
||
# aur-builder-setup.sh
|
||
#
|
||
# Setup helper for an 'aur_builder' user and yay on Arch-based
|
||
# systems. Intended for host usage and can also be used in
|
||
# containers if desired.
|
||
# ------------------------------------------------------------
|
||
|
||
echo "[aur-builder-setup] Checking for pacman..."
|
||
if ! command -v pacman >/dev/null 2>&1; then
|
||
echo "[aur-builder-setup] pacman not found – this is not an Arch-based system. Skipping."
|
||
exit 0
|
||
fi
|
||
|
||
if [[ "${EUID:-0}" -ne 0 ]]; then
|
||
ROOT_CMD="sudo"
|
||
else
|
||
ROOT_CMD=""
|
||
fi
|
||
|
||
echo "[aur-builder-setup] Installing base-devel, git, sudo..."
|
||
${ROOT_CMD} pacman -Syu --noconfirm
|
||
${ROOT_CMD} pacman -S --needed --noconfirm base-devel git sudo
|
||
|
||
echo "[aur-builder-setup] Ensuring aur_builder group/user..."
|
||
if ! getent group aur_builder >/dev/null 2>&1; then
|
||
${ROOT_CMD} groupadd -r aur_builder
|
||
fi
|
||
|
||
if ! id -u aur_builder >/dev/null 2>&1; then
|
||
${ROOT_CMD} useradd -m -r -g aur_builder -s /bin/bash aur_builder
|
||
fi
|
||
|
||
echo "[aur-builder-setup] Configuring sudoers for aur_builder..."
|
||
${ROOT_CMD} bash -c "echo '%aur_builder ALL=(ALL) NOPASSWD: /usr/bin/pacman' > /etc/sudoers.d/aur_builder"
|
||
${ROOT_CMD} chmod 0440 /etc/sudoers.d/aur_builder
|
||
|
||
if command -v sudo >/dev/null 2>&1; then
|
||
RUN_AS_AUR=(sudo -u aur_builder bash -lc)
|
||
else
|
||
RUN_AS_AUR=(su - aur_builder -c)
|
||
fi
|
||
|
||
echo "[aur-builder-setup] Ensuring yay is installed for aur_builder..."
|
||
|
||
if ! "${RUN_AS_AUR[@]}" 'command -v yay >/dev/null 2>&1'; then
|
||
echo "[aur-builder-setup] yay not found – starting retry sequence for download..."
|
||
|
||
MAX_TIME=300 # 5 minutes
|
||
SLEEP_INTERVAL=20 # 20 seconds
|
||
ELAPSED=0
|
||
|
||
while true; do
|
||
if "${RUN_AS_AUR[@]}" '
|
||
set -euo pipefail
|
||
cd ~
|
||
rm -rf yay || true
|
||
git clone https://aur.archlinux.org/yay.git yay
|
||
'; then
|
||
echo "[aur-builder-setup] yay repository cloned successfully."
|
||
break
|
||
fi
|
||
|
||
echo "[aur-builder-setup] git clone failed (likely 504). Retrying in ${SLEEP_INTERVAL}s..."
|
||
sleep "${SLEEP_INTERVAL}"
|
||
ELAPSED=$((ELAPSED + SLEEP_INTERVAL))
|
||
|
||
if (( ELAPSED >= MAX_TIME )); then
|
||
echo "[aur-builder-setup] ERROR: Aborted after 5 minutes of retry attempts."
|
||
exit 1
|
||
fi
|
||
done
|
||
|
||
# Now build yay after successful clone
|
||
"${RUN_AS_AUR[@]}" '
|
||
set -euo pipefail
|
||
cd ~/yay
|
||
makepkg -si --noconfirm
|
||
'
|
||
|
||
else
|
||
echo "[aur-builder-setup] yay already installed."
|
||
fi
|
||
|
||
echo "[aur-builder-setup] Done."
|