Politur: Release-Radar-Parse repariert (Pipe+Heredoc-stdin-Kollision) + ehrlicher Blind-Pfad bei unbrauchbarer API-Antwort
This commit is contained in:
@@ -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}"
|
||||||
|
|||||||
Reference in New Issue
Block a user