Politur: Release-Radar-Parse repariert (Pipe+Heredoc-stdin-Kollision) + ehrlicher Blind-Pfad bei unbrauchbarer API-Antwort

This commit is contained in:
Hitonabi
2026-07-10 10:33:51 +02:00
parent 73f593b1a1
commit 6e093ed163
+22 -3
View File
@@ -62,17 +62,29 @@ fi
# Neue getaggte Releases seit BASELINE (Drafts/Prereleases raus, max. 6, Bodies gekuerzt). # 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. # 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 import json, sys
baseline = sys.argv[1] baseline = sys.argv[1]
try: 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: except Exception:
rels = [] rels = []
rels.sort(key=lambda r: r.get("published_at") or "", reverse=True) 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) 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] 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)) print(len(new))
for r in new: for r in new:
body = (r.get("body") or "").strip() body = (r.get("body") or "").strip()
@@ -82,10 +94,17 @@ for r in new:
print(body) print(body)
PY PY
)" )"
rm -f "$TMPJSON"
NEWEST="$(printf '%s\n' "$PARSED" | sed -n 1p)" NEWEST="$(printf '%s\n' "$PARSED" | sed -n 1p)"
COUNT="$(printf '%s\n' "$PARSED" | sed -n 2p)" COUNT="$(printf '%s\n' "$PARSED" | sed -n 2p)"
NOTES="$(printf '%s\n' "$PARSED" | tail -n +3)" 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 "## RADAR-BEFUND (erhoben am $(date '+%d.%m.%Y %H:%M'))"
echo "Box installiert: ${INSTALLED_LINE:-unbekannt}" echo "Box installiert: ${INSTALLED_LINE:-unbekannt}"
echo "Zuletzt gemeldet: ${BASELINE:-unbekannt} · neuestes Release: $NEWEST · neue Releases: ${COUNT:-0}" echo "Zuletzt gemeldet: ${BASELINE:-unbekannt} · neuestes Release: $NEWEST · neue Releases: ${COUNT:-0}"