update.sh: 'latest' zuverlaessig ueber die Gitea-API aufloesen

Identischer Bug/Fix wie im TESM-Hauptrepo (siehe dortiger Commit fuer
Details): /releases/download/latest/tesm-license-latest.tar.gz liefert
HTTP 200, aber Giteas automatisch generiertes Quellcode-Archiv des
aktuellen Default-Branch-Stands statt des echten Release-Assets.
'latest' wird jetzt zuerst per Gitea-API auf den echten Tag aufgeloest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-23 10:48:27 +02:00
co-authored by Claude Sonnet 5
parent a9fc56ff47
commit 5fa60ec3ef
+43 -7
View File
@@ -24,11 +24,8 @@ REPO_NAME="${TESM_REPO_NAME:-tesm-license}"
RELEASE_TAG="${TESM_RELEASE_TAG:-latest}" RELEASE_TAG="${TESM_RELEASE_TAG:-latest}"
GITEA_USER="${TESM_GITEA_USER:-}" GITEA_USER="${TESM_GITEA_USER:-}"
GITEA_TOKEN="${TESM_GITEA_TOKEN:-}" GITEA_TOKEN="${TESM_GITEA_TOKEN:-}"
PACKAGE_NAME="tesm-license-${RELEASE_TAG}.tar.gz"
DOWNLOAD_URL="${GITEA_BASE}/${REPO_OWNER}/${REPO_NAME}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}"
WORK_DIR="/tmp/tesm-license-update-$(date +%s)" WORK_DIR="/tmp/tesm-license-update-$(date +%s)"
PACKAGE_FILE="$WORK_DIR/${PACKAGE_NAME}"
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
@@ -40,6 +37,39 @@ if [ "$(id -u)" -ne 0 ]; then
exit 1 exit 1
fi fi
CURL_AUTH=()
if [ -n "$GITEA_USER" ] && [ -n "$GITEA_TOKEN" ]; then
CURL_AUTH=(-u "${GITEA_USER}:${GITEA_TOKEN}")
fi
# ---- "latest" IMMER über die Gitea-API auflösen, nie als Literal in die
# Download-URL einsetzen ----
# Live reproduziert (im Schwester-Repo tesm, identisches Verhalten hier):
# /releases/download/latest/tesm-license-latest.tar.gz liefert HTTP 200 --
# aber keinen echten Release-Asset, sondern (weil kein Asset exakt so
# heißt) Giteas automatisch generiertes Quellcode-Archiv des AKTUELLEN
# Default-Branch-Stands, kommentarlos und ohne Fehlermeldung. Ohne diesen
# Auflösungsschritt würde ein einfaches "sudo ./update.sh" (ohne
# explizites TESM_RELEASE_TAG) also lautlos einen unversionierten,
# potenziell halbfertigen Zwischenstand installieren statt des
# tatsächlich neuesten Releases.
if [ "$RELEASE_TAG" == "latest" ]; then
echo -e "${RED}${NC} Ermittle aktuellsten Release-Tag von ${GITEA_BASE}/${REPO_OWNER}/${REPO_NAME}..."
RESOLVED_TAG="$(curl -fsSL "${CURL_AUTH[@]}" "${GITEA_BASE}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/releases/latest" \
| python3 -c "import json,sys; print(json.load(sys.stdin).get('tag_name',''))" 2>/dev/null)"
if [ -z "$RESOLVED_TAG" ]; then
echo "✖ Konnte den aktuellsten Release-Tag nicht über die Gitea-API ermitteln -- Abbruch." >&2
echo " (Alternative: TESM_RELEASE_TAG=vX.Y.Z explizit setzen.)" >&2
exit 1
fi
RELEASE_TAG="$RESOLVED_TAG"
echo -e "${GREEN}${NC} Aktuellster Release ist ${RELEASE_TAG}."
fi
PACKAGE_NAME="tesm-license-${RELEASE_TAG}.tar.gz"
DOWNLOAD_URL="${GITEA_BASE}/${REPO_OWNER}/${REPO_NAME}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}"
PACKAGE_FILE="$WORK_DIR/${PACKAGE_NAME}"
echo -e "${YELLOW}============================================================================${NC}" echo -e "${YELLOW}============================================================================${NC}"
echo -e "${YELLOW} TESM-Lizenzserver Update/Reinstall — Release \"${RELEASE_TAG}\"${NC}" echo -e "${YELLOW} TESM-Lizenzserver Update/Reinstall — Release \"${RELEASE_TAG}\"${NC}"
echo -e "${YELLOW}============================================================================${NC}" echo -e "${YELLOW}============================================================================${NC}"
@@ -58,16 +88,22 @@ fi
echo -e "${RED}${NC} Lade Paket von ${DOWNLOAD_URL}..." echo -e "${RED}${NC} Lade Paket von ${DOWNLOAD_URL}..."
mkdir -p "$WORK_DIR" mkdir -p "$WORK_DIR"
CURL_AUTH=()
if [ -n "$GITEA_USER" ] && [ -n "$GITEA_TOKEN" ]; then
CURL_AUTH=(-u "${GITEA_USER}:${GITEA_TOKEN}")
fi
curl -fsSL "${CURL_AUTH[@]}" -o "$PACKAGE_FILE" "$DOWNLOAD_URL" curl -fsSL "${CURL_AUTH[@]}" -o "$PACKAGE_FILE" "$DOWNLOAD_URL"
echo -e "${GREEN}${NC} Paket heruntergeladen ($(du -h "$PACKAGE_FILE" | cut -f1))." echo -e "${GREEN}${NC} Paket heruntergeladen ($(du -h "$PACKAGE_FILE" | cut -f1))."
echo -e "${RED}${NC} Entpacke Paket..." echo -e "${RED}${NC} Entpacke Paket..."
mkdir -p "$WORK_DIR/pkg" mkdir -p "$WORK_DIR/pkg"
tar xzf "$PACKAGE_FILE" -C "$WORK_DIR/pkg" --strip-components=1 tar xzf "$PACKAGE_FILE" -C "$WORK_DIR/pkg" --strip-components=1
# Absicherung gegen genau das oben beschriebene Fallback-Verhalten: statt
# eines späten, kryptischen "No such file or directory" beim Aufruf von
# install.sh hier klar benennen, WENN das heruntergeladene Paket nicht das
# erwartete ist (z.B. weil sich Giteas Verhalten wieder ändert).
if [ ! -f "$WORK_DIR/pkg/install.sh" ]; then
echo "✖ Entpacktes Paket enthält kein install.sh -- vermutlich wurde nicht das" >&2
echo " erwartete Release-Asset heruntergeladen (siehe ${DOWNLOAD_URL})." >&2
exit 1
fi
echo -e "${GREEN}${NC} Paket entpackt." echo -e "${GREEN}${NC} Paket entpackt."
echo -e "${RED}${NC} Starte install.sh aus dem Paket..." echo -e "${RED}${NC} Starte install.sh aus dem Paket..."