Ampel-Waechter: Status-Luegen-Wache (Job-Log = Wahrheit)

Alter Runner (0.2.13) meldete Abschluesse nicht -> Gitea zombie-markierte
gruene Jobs als failure. Waechter prueft jetzt vor Alarm das Job-Log auf
"Job succeeded". Runner auf 0.6.1 gehoben (eigentlicher Fix).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-22 22:27:05 +02:00
parent 59b09e4a9a
commit 8a90b7507e
+14 -1
View File
@@ -49,7 +49,20 @@ for repo in repos:
kennung = f"{full}#{t.get('id')}" kennung = f"{full}#{t.get('id')}"
status = t.get("status") status = t.get("status")
if status == "failure" and kennung not in gesehen: if status == "failure" and kennung not in gesehen:
neu.append((full, t.get("head_sha", "")[:7], t.get("name", ""))) # Status-Lügen-Wache (Fund 22.07.): alter Runner meldete Abschluss nicht,
# Gitea zombie-markierte GRÜNE Jobs als failure. Das Job-LOG ist die
# Wahrheit — steht dort „Job succeeded", ist es KEIN Alarm.
try:
req = urllib.request.Request(
f"{BASE}/repos/{full}/actions/jobs/{t.get('id')}/logs",
headers={"Authorization": "token " + token})
with urllib.request.urlopen(req, timeout=20) as r:
log_ende = r.read().decode(errors="replace")[-4000:]
wirklich_rot = "Job succeeded" not in log_ende
except Exception:
wirklich_rot = True
if wirklich_rot:
neu.append((full, t.get("head_sha", "")[:7], t.get("name", "")))
# Nur ABGESCHLOSSENE Läufe merken — ein 'running', das später rot wird, # Nur ABGESCHLOSSENE Läufe merken — ein 'running', das später rot wird,
# darf nicht schon als gesehen gelten. # darf nicht schon als gesehen gelten.
if status in ("failure", "success", "cancelled", "skipped"): if status in ("failure", "success", "cancelled", "skipped"):