forked from Mirrors/OmniNX
Track pack download lifetime across release asset swaps.
Increment lifetime when API zip totals rise; preserve lifetime when totals drop after asset replacement. README badge reads release_zip_downloads_lifetime.
This commit is contained in:
parent
dc6a20d957
commit
fe697f0aed
4 changed files with 56 additions and 8 deletions
2
.github/badges/data.json
vendored
2
.github/badges/data.json
vendored
|
|
@ -1,5 +1,7 @@
|
|||
{
|
||||
"switch_firmware": "22.1.0",
|
||||
"release_zip_downloads_snapshot": 2318,
|
||||
"release_zip_downloads_lifetime": 2318,
|
||||
"release_zip_downloads_total": 2318,
|
||||
"omninx_pack_version": "1.0.0-b12"
|
||||
}
|
||||
|
|
|
|||
2
.github/workflows/update-badge-data.yml
vendored
2
.github/workflows/update-badge-data.yml
vendored
|
|
@ -1,4 +1,4 @@
|
|||
# Aktualisiert täglich .github/badges/data.json (Download-Summe, OmniNX-Version, kompatible FW = Tag des letzten Releases in OmniNX/NX_Firmware).
|
||||
# Aktualisiert täglich .github/badges/data.json (Download-Lifetime mit Asset-Swap-Erkennung, OmniNX-Version, FW-Tag).
|
||||
# Läuft auf Gitea Actions wie die übrigen Workflows (.github/workflows); github.api_url = Gitea-API.
|
||||
|
||||
name: Update badge-data
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
[](https://git.niklascfw.de/OmniNX/OmniNX/releases/latest)
|
||||
[](https://github.com/THZoria/NX_Firmware/releases/tag/22.1.0)
|
||||
[](https://git.niklascfw.de/OmniNX/OmniNX/releases)
|
||||
[](https://git.niklascfw.de/OmniNX/OmniNX/releases)
|
||||
|
||||
OmniNX ist ein vollständiges Custom-Firmware-Setup für die Nintendo Switch, verfügbar in drei Varianten mit Fokus auf Flexibilität und Modularität.
|
||||
|
||||
|
|
@ -121,7 +121,7 @@ Orientierung an den [NiklasCFW Docs](https://docs.niklascfw.de/switch/omninx/ein
|
|||
OmniNX/
|
||||
├── .github/
|
||||
│ ├── badges/
|
||||
│ │ └── data.json # README-Shields (Version, Downloads, FW); täglich per CI scripts/update-badge-data.py
|
||||
│ │ └── data.json # README-Shields (Version, FW, Download-Lifetime); täglich per CI scripts/update-badge-data.py
|
||||
│ └── workflows/
|
||||
├── staging/ # Gemeinsame Install-Stage-Dateien (Bootloader, Payloads, Nyx, etc.)
|
||||
├── variants/ # Varianten-Inhalt
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Schreibt .github/badges/data.json aus der Releases-API (OmniNX-Pack + NX_Firmware-Tag, Gitea/GitHub-kompatibel)."""
|
||||
"""Schreibt .github/badges/data.json aus der Releases-API (OmniNX-Pack + NX_Firmware-Tag, Gitea/GitHub-kompatibel).
|
||||
|
||||
Download-Zähler: Summe aller *.zip-Assets (API). lifetime steigt nur bei current >= snapshot;
|
||||
bei Asset-Tausch (current < snapshot) wird lifetime nicht reduziert.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
|
|
@ -90,14 +94,50 @@ def first_non_draft_tag(releases: list) -> str | None:
|
|||
return None
|
||||
|
||||
|
||||
def load_existing_firmware() -> str | None:
|
||||
def load_existing_badge_data() -> dict:
|
||||
if not os.path.isfile(BADGE_PATH):
|
||||
return None
|
||||
return {}
|
||||
try:
|
||||
with open(BADGE_PATH, encoding="utf-8") as f:
|
||||
return json.load(f).get("switch_firmware")
|
||||
data = json.load(f)
|
||||
return data if isinstance(data, dict) else {}
|
||||
except (OSError, json.JSONDecodeError, TypeError):
|
||||
return {}
|
||||
|
||||
|
||||
def load_existing_firmware() -> str | None:
|
||||
fw = load_existing_badge_data().get("switch_firmware")
|
||||
return str(fw).strip() if fw else None
|
||||
|
||||
|
||||
def _int_or_none(value: object) -> int | None:
|
||||
if value is None:
|
||||
return None
|
||||
try:
|
||||
return int(value)
|
||||
except (TypeError, ValueError):
|
||||
return None
|
||||
|
||||
|
||||
def load_existing_download_counters() -> tuple[int | None, int | None]:
|
||||
"""Liest snapshot und lifetime; migriert alte release_zip_downloads_total."""
|
||||
data = load_existing_badge_data()
|
||||
snapshot = _int_or_none(data.get("release_zip_downloads_snapshot"))
|
||||
if snapshot is None:
|
||||
snapshot = _int_or_none(data.get("release_zip_downloads_total"))
|
||||
lifetime = _int_or_none(data.get("release_zip_downloads_lifetime"))
|
||||
if lifetime is None:
|
||||
lifetime = _int_or_none(data.get("release_zip_downloads_total"))
|
||||
return snapshot, lifetime
|
||||
|
||||
|
||||
def update_download_lifetime(current: int, snapshot: int | None, lifetime: int | None) -> tuple[int, int]:
|
||||
"""Gibt (neuer_snapshot, neue_lifetime) zurück."""
|
||||
if snapshot is None or lifetime is None:
|
||||
return current, current
|
||||
if current >= snapshot:
|
||||
lifetime += current - snapshot
|
||||
return current, lifetime
|
||||
|
||||
|
||||
def main() -> int:
|
||||
|
|
@ -135,9 +175,15 @@ def main() -> int:
|
|||
if not fw:
|
||||
fw = load_existing_firmware() or "unknown"
|
||||
|
||||
current = sum_zip_downloads(omninx_releases)
|
||||
prev_snapshot, prev_lifetime = load_existing_download_counters()
|
||||
snapshot, lifetime = update_download_lifetime(current, prev_snapshot, prev_lifetime)
|
||||
|
||||
data = {
|
||||
"switch_firmware": fw,
|
||||
"release_zip_downloads_total": sum_zip_downloads(omninx_releases),
|
||||
"release_zip_downloads_snapshot": snapshot,
|
||||
"release_zip_downloads_lifetime": lifetime,
|
||||
"release_zip_downloads_total": current,
|
||||
"omninx_pack_version": omninx_tag,
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue