diff --git a/scripts/sync_state.py b/scripts/sync_state.py index 9c7e6b08..2058ae03 100755 --- a/scripts/sync_state.py +++ b/scripts/sync_state.py @@ -404,18 +404,29 @@ def git_commit_and_push(cfg: config.HomelabConfig, forgejo_url: str): capture_output=True, timeout=15, ) - r = subprocess.run( - ["git", "-C", str(REPO), "push", forgejo_url, "main", "--quiet"], - capture_output=True, text=True, timeout=30, - ) - if r.returncode == 0: - log("Push erfolgreich") - (DEBOUNCE_DIR / "git_push.lock").unlink(missing_ok=True) - else: - err = r.stderr.split("\n")[0] if r.stderr else "unbekannt" - log(f"Push FEHLER: {err}") - tg_alert(cfg, "git_push", - f"*Homelab Git-Sync fehlgeschlagen*%0A%0AFehler: {err}%0AZeit: {DATE}") + for _push_attempt in range(3): + r = subprocess.run( + ["git", "-C", str(REPO), "push", forgejo_url, "main", "--quiet"], + capture_output=True, text=True, timeout=30, + ) + if r.returncode == 0: + log("Push erfolgreich") + (DEBOUNCE_DIR / "git_push.lock").unlink(missing_ok=True) + return + log(f"Push Retry {_push_attempt + 1}/3 — re-sync...") + subprocess.run( + ["git", "-C", str(REPO), "fetch", forgejo_url, "main", "--quiet"], + capture_output=True, timeout=30, + ) + subprocess.run( + ["git", "-C", str(REPO), "rebase", "FETCH_HEAD"], + capture_output=True, timeout=15, + ) + + err = r.stderr.split("\n")[0] if r.stderr else "unbekannt" + log(f"Push FEHLER nach 3 Versuchen: {err}") + tg_alert(cfg, "git_push", + f"*Homelab Git-Sync fehlgeschlagen*%0A%0AFehler: {err}%0AZeit: {DATE}") # ── Main ──────────────────────────────────────────────