fix(badge-data): read compatible FW from OmniNX/NX_Firmware release tag

- Resolve switch_firmware from latest non-draft tag on NX_Firmware (FIRMWARE_REPOSITORY).
- Drop OmniNX release-body regex parsing; keep fallback to existing badge-data on API miss.

Made-with: Cursor
This commit is contained in:
niklascfw 2026-04-09 23:26:55 +02:00
parent 698049c0de
commit 462cce5896
No known key found for this signature in database
2 changed files with 26 additions and 24 deletions

View file

@ -1,4 +1,4 @@
# Aktualisiert täglich badge-data.json (Download-Summe, Version aus letztem Release, Switch-FW aus Release-Body).
# Aktualisiert täglich badge-data.json (Download-Summe, OmniNX-Version, kompatible FW = Tag des letzten Releases in OmniNX/NX_Firmware).
# Läuft auf Gitea Actions wie die übrigen Workflows (.github/workflows); github.api_url = Gitea-API.
name: Update badge-data
@ -26,6 +26,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_API_URL: ${{ github.api_url }}
GITHUB_REPOSITORY: ${{ github.repository }}
FIRMWARE_REPOSITORY: OmniNX/NX_Firmware
run: python3 scripts/update-badge-data.py
- name: Commit and push if changed

View file

@ -1,11 +1,10 @@
#!/usr/bin/env python3
"""Schreibt badge-data.json aus der Releases-API (Gitea/GitHub-kompatibel)."""
"""Schreibt badge-data.json aus der Releases-API (OmniNX-Pack + NX_Firmware-Tag, Gitea/GitHub-kompatibel)."""
from __future__ import annotations
import json
import os
import re
import sys
import urllib.error
import urllib.request
@ -47,18 +46,13 @@ def sum_zip_downloads(releases: list) -> int:
return total
def parse_firmware_from_body(body: str) -> str | None:
if not body:
return None
patterns = (
r"Firmware\s+Version\s*\*\*(\d+\.\d+\.\d+)\*\*",
r"mit\s+Firmware\s+Version\s*\*\*(\d+\.\d+\.\d+)\*\*",
r"\*\*(\d+\.\d+\.\d+)\*\*\s+in\s+der\s+CFW",
)
for p in patterns:
m = re.search(p, body, re.I | re.MULTILINE)
if m:
return m.group(1)
def first_non_draft_tag(releases: list) -> str | None:
for rel in releases:
if rel.get("draft"):
continue
tag = str(rel.get("tag_name") or "").strip()
if tag:
return tag
return None
@ -75,6 +69,7 @@ def load_existing_firmware() -> str | None:
def main() -> int:
api_base = os.environ.get("GITHUB_API_URL", "").rstrip("/")
repo = os.environ.get("GITHUB_REPOSITORY", "")
fw_repo = os.environ.get("FIRMWARE_REPOSITORY", "OmniNX/NX_Firmware").strip()
token = os.environ.get("GITHUB_TOKEN", "")
if not api_base or not repo:
@ -82,28 +77,34 @@ def main() -> int:
return 1
try:
releases = fetch_releases(api_base, repo, token)
omninx_releases = fetch_releases(api_base, repo, token)
except urllib.error.HTTPError as e:
print(f"API: HTTP {e.code}{e.reason}", file=sys.stderr)
return 1
if not releases:
if not omninx_releases:
print("Keine Releases gefunden.", file=sys.stderr)
return 1
latest = next((r for r in releases if not r.get("draft")), None)
if not latest:
omninx_tag = first_non_draft_tag(omninx_releases)
if not omninx_tag:
print("Kein nicht-Draft-Release.", file=sys.stderr)
return 1
tag = str(latest.get("tag_name") or "").strip()
body = str(latest.get("body") or "")
fw = parse_firmware_from_body(body) or load_existing_firmware() or "unknown"
fw: str | None = None
try:
fw_releases = fetch_releases(api_base, fw_repo, token)
fw = first_non_draft_tag(fw_releases)
except urllib.error.HTTPError as e:
print(f"Firmware-Repo ({fw_repo}): HTTP {e.code}{e.reason}", file=sys.stderr)
if not fw:
fw = load_existing_firmware() or "unknown"
data = {
"switch_firmware": fw,
"release_zip_downloads_total": sum_zip_downloads(releases),
"omninx_pack_version": tag,
"release_zip_downloads_total": sum_zip_downloads(omninx_releases),
"omninx_pack_version": omninx_tag,
}
with open(BADGE_PATH, "w", encoding="utf-8") as f: