#!/usr/bin/env bash # ============================================================================= # Bootstrapper: laedt ein Release herunter und ruft dessen install.sh auf. # Enthaelt selbst keinerlei Installationslogik. # # Zwei Fallen des Vorgaengers sind hier bewusst vermieden: # * Der Tag "latest" wird ueber die API aufgeloest, nie direkt in die # Download-URL geschrieben. Gitea liefert sonst mit HTTP 200 ein # automatisch erzeugtes Quell-Snapshot statt des echten Release-Assets. # * Nach dem Entpacken wird geprueft, dass ein install.sh existiert -- faengt # denselben Fehler ein zweites Mal ab. # ============================================================================= set -euo pipefail APP="${1:-}" TAG="${2:-latest}" BASE="${TESM_RELEASE_BASE:-https://gitea.example.invalid}" OWNER="${TESM_RELEASE_OWNER:-wis}" REPO="${TESM_RELEASE_REPO:-tesm}" [[ "$APP" == "tesm" || "$APP" == "tesm-license" ]] || { echo "Verwendung: update.sh [tag]" >&2 exit 2 } WORK="$(mktemp -d /tmp/tesm-update-XXXXXX)" trap 'rm -rf "$WORK"' EXIT # anders als im Vorgaenger wird aufgeraeumt if [[ "$TAG" == "latest" ]]; then echo "==> Ermittle aktuellen Release-Tag ..." TAG="$(curl -fsS "$BASE/api/v1/repos/$OWNER/$REPO/releases/latest" \ | python3 -c 'import json,sys; print(json.load(sys.stdin)["tag_name"])')" echo " $TAG" fi ASSET="$REPO-$TAG.tar.gz" echo "==> Lade $ASSET ..." curl -fsSL -o "$WORK/$ASSET" "$BASE/$OWNER/$REPO/releases/download/$TAG/$ASSET" echo "==> Entpacke ..." tar -xzf "$WORK/$ASSET" -C "$WORK" SRC="$(find "$WORK" -maxdepth 2 -name install.sh -path '*/deploy/*' -printf '%h/..\n' | head -1)" [[ -n "$SRC" ]] || { echo "Im Paket fehlt deploy/install.sh -- Download unbrauchbar." >&2; exit 1; } SRC="$(cd "$SRC" && pwd)" echo "==> Pruefe auf CRLF (Windows-Buildmaschinen) ..." if file "$SRC/deploy/install.sh" | grep -q CRLF; then echo "Das Paket enthaelt CRLF-Zeilenenden. Beim Paketieren fehlte" >&2 echo "'git -c core.autocrlf=false archive'." >&2 exit 1 fi read -r -p "Version $TAG fuer $APP installieren? [j/N] " answer [[ "$answer" =~ ^[jJyY]$ ]] || exit 0 exec sudo bash "$SRC/deploy/install.sh" --app "$APP" --yes