fix(ci): Release-Anhaenge nie ueber die oeffentliche Gitea-Adresse hochladen
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:
@@ -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
@@ -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`).
|
||||
|
||||
Reference in New Issue
Block a user