#!/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"