diff --git a/.github/workflows/update-badge-data.yml b/.github/workflows/update-badge-data.yml index 3a2b5b8..6be8e85 100644 --- a/.github/workflows/update-badge-data.yml +++ b/.github/workflows/update-badge-data.yml @@ -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 diff --git a/scripts/update-badge-data.py b/scripts/update-badge-data.py index beb4476..54cff84 100644 --- a/scripts/update-badge-data.py +++ b/scripts/update-badge-data.py @@ -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: