Image bauen und veröffentlichen / image (push) Canceled after 0s
Gitea verteilt Arbeit nur, es baut nicht selbst. Der Workflow ist auf dem Server und hat einen Lauf angelegt — der bleibt liegen, weil niemand ihn ausführt. Das ist keine Eigenheit dieser Installation, sondern wie Gitea Actions arbeitet. `server/docker-compose.runner.yml` ist der fehlende Teil, und er gehört **auf das NAS**: dort läuft Docker ohnehin, und damit braucht ein neues Image nie wieder einen Arbeitsrechner. Zwei Dinge darin sind nicht offensichtlich und stehen deshalb als Kommentar daneben: der Docker-Socket ist der Kern — der Runner baut nicht selbst, sondern lässt den Docker des NAS bauen, und wer in diesen Container kommt, kann Docker auf dem NAS steuern. Und `GITEA_RUNNER_LABELS` muss `ubuntu-latest` nennen, weil der Flaro-Workflow genau das in `runs-on` verlangt; ohne die Zeile meldet sich der Runner mit anderen Marken an und der Lauf findet ihn nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
65 lines
2.1 KiB
Bash
Executable File
65 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Baut das Flaro-Image für beide Architekturen und legt es in die Registry.
|
|
#
|
|
# **Der Weg von Hand** — für den Fall, dass kein Gitea-Runner läuft. Sonst
|
|
# macht das `.gitea/workflows/image.yml` bei jedem Push von selbst.
|
|
#
|
|
# Tools/image-veroeffentlichen.sh → :latest
|
|
# Tools/image-veroeffentlichen.sh 0.2.0 → :latest und :0.2.0
|
|
#
|
|
# Nur eine Architektur — deutlich schneller, weil die fremde sonst unter
|
|
# Emulation läuft:
|
|
#
|
|
# FLARO_PLATTFORMEN=linux/amd64 Tools/image-veroeffentlichen.sh
|
|
#
|
|
# Vorher einmalig anmelden — das Passwort tippst du selbst ein:
|
|
#
|
|
# docker login git.scarriffle.com
|
|
|
|
set -euo pipefail
|
|
|
|
REGISTRY="${FLARO_REGISTRY:-git.scarriffle.com}"
|
|
PFAD="${FLARO_IMAGE_PATH:-scarriffle/flaro}"
|
|
BILD="$REGISTRY/$PFAD"
|
|
FASSUNG="${1:-}"
|
|
PLATTFORMEN="${FLARO_PLATTFORMEN:-linux/amd64,linux/arm64}"
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
command -v docker >/dev/null || { echo "docker fehlt."; exit 1; }
|
|
|
|
# **Ohne Anmeldung bricht der Push erst nach dem ganzen Bau ab.** Zwei
|
|
# Minuten Arbeit für eine Fehlermeldung, die am Anfang gestanden hätte.
|
|
# Kein `docker info | grep -q`: `grep -q` beendet die Pipe beim ersten
|
|
# Treffer, Docker bekommt SIGPIPE, und mit `set -o pipefail` gilt das als
|
|
# Fehlschlag. Die Prüfung meldete dann „Docker läuft nicht", während es lief.
|
|
if ! docker info >/dev/null 2>&1; then
|
|
echo "Docker läuft nicht."; exit 1
|
|
fi
|
|
if ! grep -q "$REGISTRY" ~/.docker/config.json 2>/dev/null; then
|
|
echo "Nicht an $REGISTRY angemeldet. Erst:"
|
|
echo
|
|
echo " docker login $REGISTRY"
|
|
exit 1
|
|
fi
|
|
|
|
MARKEN=(-t "$BILD:latest")
|
|
[ -n "$FASSUNG" ] && MARKEN+=(-t "$BILD:$FASSUNG")
|
|
|
|
# **Ein eigener Builder.** Der Vorgabe-Builder von Docker Desktop kann kein
|
|
# Manifest mit zwei Architekturen bauen; `docker buildx create` schon.
|
|
docker buildx inspect flaro-bauer >/dev/null 2>&1 \
|
|
|| docker buildx create --name flaro-bauer --use >/dev/null
|
|
|
|
echo "Baue $BILD für $PLATTFORMEN."
|
|
docker buildx build \
|
|
--builder flaro-bauer \
|
|
--platform "$PLATTFORMEN" \
|
|
-f server/Dockerfile \
|
|
"${MARKEN[@]}" \
|
|
--push .
|
|
|
|
echo
|
|
echo "Fertig. Auf dem NAS:"
|
|
echo " image: $BILD:${FASSUNG:-latest}"
|