🔒 Repository is read-only – file editing is disabled.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546
#!/bin/bash
# =============================================================================
# stabilize.sh – pętla stabilizacji (odpowiednik „buduj aż będzie zielono”)
# Po zakończeniu głównego przebiegu powtarza `pagsync --rebuild-failed`, aż
# liczba FAILów przestanie spadać (każda iteracja używa poprawionych receptur).
#
# Użycie: /opt/pagan-web-v2/stabilize.sh [max_iteracji] (domyślnie 5)
# UWAGA: rootfs musi być wolne (nie uruchamiać podczas innego builda).
# =============================================================================
set -u
MAX="${1:-5}"
PS=/opt/pagan-web-v2/pagsync
LOG=/var/log/pagan-stabilize.log
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. /etc/pagan/build.conf 2>/dev/null
export PAGAN_DO_SIGN PAGAN_GPG_KEY
state_fails() {
python3 - <<'EOF'
import json
try:
d = json.load(open("/var/lib/pagan-sync/state.json"))
print(sum(1 for b in d.get("builds", []) if b.get("status") == "failed"))
except Exception:
print("-1")
EOF
}
echo "===== STABILIZE $(date '+%F %T') =====" >> "$LOG"
prev=999999
for i in $(seq 1 "$MAX"); do
echo "── iteracja $i/$MAX ──" >> "$LOG"
"$PS" --rebuild-failed >> "$LOG" 2>&1
now=$(state_fails)
echo "FAILy po iteracji $i: $now" >> "$LOG"
if [[ "$now" == "-1" || "$now" -eq 0 ]]; then
echo "✅ Stabilne (0 FAIL) lub brak danych." >> "$LOG"
break
fi
if [[ "$now" -ge "$prev" ]]; then
echo "⏹ Liczba FAILów nie spada ($prev -> $now) – przerywam." >> "$LOG"
break
fi
prev="$now"
done
echo "===== KONIEC STABILIZE $(date '+%F %T') =====" >> "$LOG"