diff --git a/.gitea/scripts/publish-release.sh b/.gitea/scripts/publish-release.sh index eee9710..c5c13bf 100755 --- a/.gitea/scripts/publish-release.sh +++ b/.gitea/scripts/publish-release.sh @@ -17,8 +17,13 @@ # GITEA_TOKEN Zugriffstoken (Pflicht im echten Lauf; im CI aus secrets.REGISTRY_TOKEN # ueber `env`). Wird nie ausgegeben und nie als Argument uebergeben -- # der Authorization-Header kommt aus einer temporaeren Datei. -# GITEA_API API-Basis; sonst GITHUB_API_URL, sonst GITHUB_SERVER_URL/api/v1, -# sonst http://localhost:3002/api/v1 (nur lokal erreichbar). +# GITEA_API API-Basis (expliziter Override). Ohne Angabe NIE die oeffentliche +# Adresse (GITHUB_API_URL / GITHUB_SERVER_URL zeigen auf +# git.vicolab.de hinter dem Proxy, der grosse Uploads abbricht -- +# Release 1.2.0 hatte deshalb zunaechst keine Anhaenge): im CI wird +# das Host-Gateway des Job-Containers aus /proc/net/route ermittelt +# und Gitea direkt auf Port 3002 angesprochen (derselbe Weg wie der +# Registry-Push), lokal http://localhost:3002/api/v1. # GITEA_REPO owner/repo; sonst GITHUB_REPOSITORY, sonst schalli/tessera-ctl. # CHANGELOG_FILE Pfad zur Aenderungsliste; Vorgabe CHANGELOG.md. # DESKTOP_DIST Ordner mit den Desktop-Paketen und manifest.json (Phase 18, @@ -74,8 +79,24 @@ if ! echo "$TAG" | grep -Eq '^v[0-9]+\.[0-9]+\.[0-9]+$'; then fi VERSION="${TAG#v}" -API="${GITEA_API:-${GITHUB_API_URL:-${GITHUB_SERVER_URL:+${GITHUB_SERVER_URL}/api/v1}}}" -API="${API:-http://localhost:3002/api/v1}" +# Host-Gateway des Containers: Default-Route in /proc/net/route, Gateway als +# Hex in Little-Endian (z. B. 010011AC = 172.17.0.1). Reines POSIX sh. +host_gateway() { + [ -r /proc/net/route ] || return 1 + gw=$(awk '$2 == "00000000" { print $3; exit }' /proc/net/route) + [ -n "$gw" ] || return 1 + printf '%d.%d.%d.%d\n' \ + "0x$(printf '%s' "$gw" | cut -c7-8)" "0x$(printf '%s' "$gw" | cut -c5-6)" \ + "0x$(printf '%s' "$gw" | cut -c3-4)" "0x$(printf '%s' "$gw" | cut -c1-2)" +} + +if [ -n "${GITEA_API:-}" ]; then + API="$GITEA_API" +elif [ -n "${GITHUB_ACTIONS:-}${CI:-}" ] && GW=$(host_gateway); then + API="http://$GW:3002/api/v1" +else + API="http://localhost:3002/api/v1" +fi API="${API%/}" REPO="${GITEA_REPO:-${GITHUB_REPOSITORY:-schalli/tessera-ctl}}" echo "Gitea-API: $API Repo: $REPO Tag: $TAG" diff --git a/docs/ci-cd-setup.md b/docs/ci-cd-setup.md index a44c2c6..82d3bff 100644 --- a/docs/ci-cd-setup.md +++ b/docs/ci-cd-setup.md @@ -175,11 +175,15 @@ laeuft deshalb bewusst ueber `actions/cache/save` und `actions/cache/restore` mit `fail-on-cache-miss: true`, nicht ueber Artefakt-Uploads. -Das Release-Skript spricht die Gitea-API ueber `GITHUB_API_URL` bzw. -`GITHUB_SERVER_URL/api/v1` an -- im Job-Container ist das -`https://git.vicolab.de`; `localhost:3002` ist von dort NICHT erreichbar (nur der -Docker-Daemon des Hosts erreicht die Registry so). Lokal laesst sich das Skript -mit `--dry-run --tag vX.Y.Z` pruefen, ohne Netzaufruf und ohne Token. +Das Release-Skript spricht die Gitea-API NIE ueber die oeffentliche Adresse +(`GITHUB_API_URL`/`GITHUB_SERVER_URL` = `https://git.vicolab.de` hinter dem +Proxy, der grosse Uploads abbricht -- so blieb Release 1.2.0 am 2026-09-17 +zunaechst ohne Anhaenge). Im Job-Container ist `localhost:3002` nicht der +Host; das Skript ermittelt deshalb das Host-Gateway aus `/proc/net/route` +(z. B. `172.17.0.1`) und ruft `http://:3002/api/v1` auf -- derselbe +Weg wie der Registry-Push. Lokal nimmt es `http://localhost:3002/api/v1`; +`GITEA_API` bleibt als expliziter Override. Mit `--dry-run --tag vX.Y.Z` +laesst sich die gewaehlte Adresse ohne Netzaufruf und ohne Token pruefen. ### Zwei Kanaele: Etiketten je Anlass @@ -336,10 +340,12 @@ und einen Branch-Schutz fuer `live` anlegen (T-KU1-04). ### Release-Upload 413 -Schlaegt der Datei-Upload in `publish-release.sh` mit HTTP 413 (Datei zu -gross) fehl, blockt vermutlich der vorgeschaltete Proxy vor `git.vicolab.de` -den grossen Installer-Upload -- dasselbe bekannte Verhalten wie beim -Image-Push (Abschnitt 3). Abhilfe: `GITEA_API` auf die Host-Adresse -`http://172.18.0.1:3002/api/v1` setzen, damit der Release-Upload denselben -Weg wie der Registry-Push nimmt und den Proxy umgeht -- nur noetig, wenn der -Proxy die Groesse tatsaechlich abweist. +Bricht der Datei-Upload in `publish-release.sh` mit HTTP 413 oder +`curl: (92) HTTP/2 ... PROTOCOL_ERROR` ab, laeuft er ueber den Proxy vor +`git.vicolab.de` -- genau das ist am 2026-09-17 bei Release 1.2.0 passiert +(AppImage, 82 MB). Seitdem geht das Skript von selbst ueber das Host-Gateway +(siehe Abschnitt 4); der Fehler kann nur noch auftreten, wenn `GITEA_API` +ausdruecklich auf die oeffentliche Adresse gesetzt wird. Fehlende Anhaenge +lassen sich jederzeit vom Host nachtragen: +`GITEA_TOKEN=... DESKTOP_DIST= sh .gitea/scripts/publish-release.sh --tag vX.Y.Z` +(die Pakete liegen im API-Abbild unter `/app/desktop-dist`).