From 6e093ed16390a37b0c002e3b2d4415ee1a1010a2 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Fri, 10 Jul 2026 10:33:51 +0200 Subject: [PATCH] Politur: Release-Radar-Parse repariert (Pipe+Heredoc-stdin-Kollision) + ehrlicher Blind-Pfad bei unbrauchbarer API-Antwort --- deploy/hermes-release-radar-feed.sh | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/deploy/hermes-release-radar-feed.sh b/deploy/hermes-release-radar-feed.sh index a440396..d1ff126 100644 --- a/deploy/hermes-release-radar-feed.sh +++ b/deploy/hermes-release-radar-feed.sh @@ -62,17 +62,29 @@ fi # Neue getaggte Releases seit BASELINE (Drafts/Prereleases raus, max. 6, Bodies gekuerzt). # Baseline unbekannt (aelter als die letzten 10 oder Erstlauf ohne Version) -> juengste 6. -PARSED="$(printf '%s' "$RELEASES_JSON" | python3 - "$BASELINE" <<'PY' +# JSON via Temp-Datei, NICHT via Pipe: das Heredoc belegt stdin schon fuer den Python-Code +# selbst (Pipe+Heredoc gleichzeitig -> json.load(stdin) liest ins Leere; Probelauf 10.07.). +TMPJSON="$(mktemp /tmp/release-radar.XXXXXX.json)" +printf '%s' "$RELEASES_JSON" > "$TMPJSON" +PARSED="$(python3 - "$BASELINE" "$TMPJSON" <<'PY' import json, sys baseline = sys.argv[1] try: - rels = [r for r in json.load(sys.stdin) if not r.get("draft") and not r.get("prerelease")] + data = json.load(open(sys.argv[2])) + # Rate-Limit/Fehler antwortet als Dict statt Liste -> wie "keine Daten" behandeln. + rels = [r for r in data if not r.get("draft") and not r.get("prerelease")] if isinstance(data, list) else [] except Exception: rels = [] rels.sort(key=lambda r: r.get("published_at") or "", reverse=True) +if not rels: + # API hat geantwortet, aber unbrauchbar (Rate-Limit-Dict, kaputtes JSON, leere Liste): + # ehrlich als "blind" markieren statt faelschlich "kein neues Release" zu melden. + print(baseline) + print(-1) + raise SystemExit base = next((r.get("published_at") for r in rels if r.get("tag_name") == baseline), None) new = rels[:6] if base is None else [r for r in rels if (r.get("published_at") or "") > base][:6] -print((new or rels or [{"tag_name": baseline}])[0].get("tag_name") or baseline) +print((new or rels)[0].get("tag_name") or baseline) print(len(new)) for r in new: body = (r.get("body") or "").strip() @@ -82,10 +94,17 @@ for r in new: print(body) PY )" +rm -f "$TMPJSON" NEWEST="$(printf '%s\n' "$PARSED" | sed -n 1p)" COUNT="$(printf '%s\n' "$PARSED" | sed -n 2p)" NOTES="$(printf '%s\n' "$PARSED" | tail -n +3)" +if [ "${COUNT:-0}" = "-1" ]; then + echo "## RADAR-BEFUND: AUSGEFALLEN" + echo "GitHub-API hat geantwortet, aber unbrauchbar (Rate-Limit oder kaputtes JSON). Dem Commander EINEN ehrlichen Satz melden; State bleibt, naechste Woche neuer Versuch." + exit 0 +fi + echo "## RADAR-BEFUND (erhoben am $(date '+%d.%m.%Y %H:%M'))" echo "Box installiert: ${INSTALLED_LINE:-unbekannt}" echo "Zuletzt gemeldet: ${BASELINE:-unbekannt} · neuestes Release: $NEWEST · neue Releases: ${COUNT:-0}"