forked from Mirrors/OmniNX
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:
parent
698049c0de
commit
462cce5896
2 changed files with 26 additions and 24 deletions
3
.github/workflows/update-badge-data.yml
vendored
3
.github/workflows/update-badge-data.yml
vendored
|
|
@ -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.
|
# Läuft auf Gitea Actions wie die übrigen Workflows (.github/workflows); github.api_url = Gitea-API.
|
||||||
|
|
||||||
name: Update badge-data
|
name: Update badge-data
|
||||||
|
|
@ -26,6 +26,7 @@ jobs:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
GITHUB_API_URL: ${{ github.api_url }}
|
GITHUB_API_URL: ${{ github.api_url }}
|
||||||
GITHUB_REPOSITORY: ${{ github.repository }}
|
GITHUB_REPOSITORY: ${{ github.repository }}
|
||||||
|
FIRMWARE_REPOSITORY: OmniNX/NX_Firmware
|
||||||
run: python3 scripts/update-badge-data.py
|
run: python3 scripts/update-badge-data.py
|
||||||
|
|
||||||
- name: Commit and push if changed
|
- name: Commit and push if changed
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
#!/usr/bin/env python3
|
#!/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
|
from __future__ import annotations
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
import sys
|
import sys
|
||||||
import urllib.error
|
import urllib.error
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
@ -47,18 +46,13 @@ def sum_zip_downloads(releases: list) -> int:
|
||||||
return total
|
return total
|
||||||
|
|
||||||
|
|
||||||
def parse_firmware_from_body(body: str) -> str | None:
|
def first_non_draft_tag(releases: list) -> str | None:
|
||||||
if not body:
|
for rel in releases:
|
||||||
return None
|
if rel.get("draft"):
|
||||||
patterns = (
|
continue
|
||||||
r"Firmware\s+Version\s*\*\*(\d+\.\d+\.\d+)\*\*",
|
tag = str(rel.get("tag_name") or "").strip()
|
||||||
r"mit\s+Firmware\s+Version\s*\*\*(\d+\.\d+\.\d+)\*\*",
|
if tag:
|
||||||
r"\*\*(\d+\.\d+\.\d+)\*\*\s+in\s+der\s+CFW",
|
return tag
|
||||||
)
|
|
||||||
for p in patterns:
|
|
||||||
m = re.search(p, body, re.I | re.MULTILINE)
|
|
||||||
if m:
|
|
||||||
return m.group(1)
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -75,6 +69,7 @@ def load_existing_firmware() -> str | None:
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
api_base = os.environ.get("GITHUB_API_URL", "").rstrip("/")
|
api_base = os.environ.get("GITHUB_API_URL", "").rstrip("/")
|
||||||
repo = os.environ.get("GITHUB_REPOSITORY", "")
|
repo = os.environ.get("GITHUB_REPOSITORY", "")
|
||||||
|
fw_repo = os.environ.get("FIRMWARE_REPOSITORY", "OmniNX/NX_Firmware").strip()
|
||||||
token = os.environ.get("GITHUB_TOKEN", "")
|
token = os.environ.get("GITHUB_TOKEN", "")
|
||||||
|
|
||||||
if not api_base or not repo:
|
if not api_base or not repo:
|
||||||
|
|
@ -82,28 +77,34 @@ def main() -> int:
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
try:
|
try:
|
||||||
releases = fetch_releases(api_base, repo, token)
|
omninx_releases = fetch_releases(api_base, repo, token)
|
||||||
except urllib.error.HTTPError as e:
|
except urllib.error.HTTPError as e:
|
||||||
print(f"API: HTTP {e.code} — {e.reason}", file=sys.stderr)
|
print(f"API: HTTP {e.code} — {e.reason}", file=sys.stderr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
if not releases:
|
if not omninx_releases:
|
||||||
print("Keine Releases gefunden.", file=sys.stderr)
|
print("Keine Releases gefunden.", file=sys.stderr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
latest = next((r for r in releases if not r.get("draft")), None)
|
omninx_tag = first_non_draft_tag(omninx_releases)
|
||||||
if not latest:
|
if not omninx_tag:
|
||||||
print("Kein nicht-Draft-Release.", file=sys.stderr)
|
print("Kein nicht-Draft-Release.", file=sys.stderr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
tag = str(latest.get("tag_name") or "").strip()
|
fw: str | None = None
|
||||||
body = str(latest.get("body") or "")
|
try:
|
||||||
fw = parse_firmware_from_body(body) or load_existing_firmware() or "unknown"
|
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 = {
|
data = {
|
||||||
"switch_firmware": fw,
|
"switch_firmware": fw,
|
||||||
"release_zip_downloads_total": sum_zip_downloads(releases),
|
"release_zip_downloads_total": sum_zip_downloads(omninx_releases),
|
||||||
"omninx_pack_version": tag,
|
"omninx_pack_version": omninx_tag,
|
||||||
}
|
}
|
||||||
|
|
||||||
with open(BADGE_PATH, "w", encoding="utf-8") as f:
|
with open(BADGE_PATH, "w", encoding="utf-8") as f:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue