🔒 Repository is read-only – file editing is disabled.

pagan-web/stabilize.sh main

46 linii Raw ← Powrót
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"