diff --git a/scripts/get-build-number.py b/scripts/get-build-number.py index e726e2f..4896194 100755 --- a/scripts/get-build-number.py +++ b/scripts/get-build-number.py @@ -9,9 +9,14 @@ import os import re import subprocess import sys +import urllib.error import urllib.parse import urllib.request +# Paket-Typen, unter denen dasselbe Release veroeffentlicht wird und die sich +# daher eine gemeinsame Build-Nummer teilen muessen. +PACKAGE_TYPES = ("debian", "rpm", "arch") + def get_cargo_pkg_info(): try: @@ -83,20 +88,29 @@ def query_existing_build_numbers(name, version, gitea_url, repo, owner, token=No except Exception as e: sys.stderr.write(f"[Hinweis] Konnte Gitea Releases nicht abfragen: {e}\n") - # 2. Gitea Packages API (falls Token vorhanden) - if gitea_url and owner and token: - try: - url = f"{gitea_url.rstrip('/')}/api/v1/packages/{owner}?limit=50" - req = urllib.request.Request(url, headers=headers) - with urllib.request.urlopen(req, timeout=10) as resp: - packages = json.loads(resp.read().decode()) - for pkg in packages: + # 2. Gitea Packages API (falls Token vorhanden): pro Paket-Typ gezielt nur die + # neueste Version abfragen (ein Request, keine Pagination noetig). Das haelt + # die Abfrage schnell unabhaengig von der Historie und ist unbeeinflusst von + # Docker-Tags/anderen Paket-Typen, die unter demselben Owner haengen. + if gitea_url and owner and token and name: + for pkg_type in PACKAGE_TYPES: + try: + url = ( + f"{gitea_url.rstrip('/')}/api/v1/packages/{owner}/" + f"{pkg_type}/{urllib.parse.quote(name, safe='')}/-/latest" + ) + req = urllib.request.Request(url, headers=headers) + with urllib.request.urlopen(req, timeout=10) as resp: + pkg = json.loads(resp.read().decode()) pkg_ver = pkg.get("version", "") m = pattern.search(pkg_ver) if m: build_nums.add(int(m.group(1))) - except Exception as e: - sys.stderr.write(f"[Hinweis] Konnte Gitea Packages nicht abfragen: {e}\n") + except urllib.error.HTTPError as e: + if e.code != 404: + sys.stderr.write(f"[Hinweis] Konnte neueste {pkg_type}-Paketversion nicht abfragen: {e}\n") + except Exception as e: + sys.stderr.write(f"[Hinweis] Konnte neueste {pkg_type}-Paketversion nicht abfragen: {e}\n") # 3. Lokales Target-Verzeichnis prüfen target_dirs = ["target/debian", "target/generate-rpm", "target/arch"]