fix(ci): Release-Anhaenge nie ueber die oeffentliche Gitea-Adresse hochladen
Tessera CI/CD / Lint & Type Check (push) Successful in 49s
Tessera CI/CD / Tests (push) Successful in 1m8s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 4m57s
Tessera CI/CD / Build & Publish Images (push) Successful in 3m9s

publish-release.sh ignoriert GITHUB_API_URL/GITHUB_SERVER_URL (git.vicolab.de
hinter dem Proxy bricht grosse Uploads ab -- Release 1.2.0 blieb dadurch
zunaechst ohne Anhaenge). Im CI wird das Host-Gateway des Job-Containers aus
/proc/net/route ermittelt und Gitea direkt auf Port 3002 angesprochen, lokal
localhost:3002; GITEA_API bleibt als Override. Gateway-Weg aus Job-Netz
gegen die Gitea-API verifiziert; Anhaenge fuer v1.2.0 vom Host nachgetragen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-17 13:48:17 +02:00
parent f7f406a5b6
commit 507556f158
2 changed files with 43 additions and 16 deletions
+25 -4
View File
@@ -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"
+18 -12
View File
@@ -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://<gateway>: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=<Ordner mit manifest.json> sh .gitea/scripts/publish-release.sh --tag vX.Y.Z`
(die Pakete liegen im API-Abbild unter `/app/desktop-dist`).