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:
@@ -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"):
|
||||||
|
|||||||
Reference in New Issue
Block a user