From 2a16a866ed28157f99bad08aa1ae15b93a4baee9 Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Thu, 10 Sep 2026 22:18:58 +0200 Subject: [PATCH] Fix: Build-Nummer-Ermittlung uebersah bereits veroeffentlichte RPM/Deb/Arch-Versionen Die bisherige Abfrage GET /api/v1/packages/{owner}?limit=50 listete alle Pakete des Owners ungefiltert (inkl. Docker-Image-Tags aus main.yaml/testing.yaml), ohne Pagination. Dadurch konnte die tatsaechlich relevante Paket-Version verdraengt werden, das Skript hielt eine bereits genutzte Build-Nummer faelschlich fuer frei, und der anschliessende Registry-Upload schlug mit 409 (Datei existiert bereits) fehl - beobachtet beim RPM-Upload. Fragt jetzt stattdessen gezielt pro Paket-Typ (debian/rpm/arch) die Latest-Version ab (GET .../{type}/{name}/-/latest, ein Request ohne Pagination). Alle drei Ergebnisse fliessen weiterhin in dasselbe Set ein, sodass die naechste Build-Nummer weiterhin als globales Maximum ueber alle Typen hinweg berechnet wird - deb/rpm/arch bleiben also mit einer gemeinsamen Nummer synchron, auch wenn ein frueherer Lauf nur bei einem der Typen erfolgreich hochgeladen hat. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Kh9v73QApBwJj96w6A8R55 --- scripts/get-build-number.py | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) 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"]