# Baut das Flaro-Image und legt es in die Registry dieses Gitea. # # **Warum hier und nicht auf dem Arbeitsrechner.** Ein Bau von Hand heisst: # jemand muss daran denken, muss die richtige Architektur angeben und muss # angemeldet sein. Hier passiert es bei jedem Push von selbst, immer für # beide Architekturen, und die Anmeldung besorgt Gitea. # # **Voraussetzung ist ein Runner.** Ohne einen registrierten Act-Runner # läuft diese Datei nie an — dann bleibt der Weg von Hand aus # `Tools/image-veroeffentlichen.sh`. name: Image bauen und veröffentlichen on: push: branches: [main] tags: ['v*'] workflow_dispatch: jobs: image: runs-on: ubuntu-latest steps: - name: Quelltext holen uses: actions/checkout@v4 # **buildx, nicht das eingebaute `docker build`.** Nur damit lassen # sich zwei Architekturen in einem Manifest ablegen; ohne das bekommt # ein Intel-NAS ein arm64-Image und meldet „exec format error". - name: buildx vorbereiten uses: docker/setup-buildx-action@v3 - name: QEMU für die fremde Architektur uses: docker/setup-qemu-action@v3 - name: An der Registry anmelden uses: docker/login-action@v3 with: registry: ${{ vars.REGISTRY || 'git.scarriffle.com' }} username: ${{ gitea.actor }} password: ${{ secrets.GITEA_TOKEN }} - name: Marken bestimmen id: marken run: | REGISTRY="${{ vars.REGISTRY || 'git.scarriffle.com' }}" # **Der Name des Pakets, nicht der des Repos.** Gitea legt Pakete # am Besitzer ab, nicht am Repository — sie dürfen deshalb anders # heissen. Hier ist das nötig: das Repo heisst noch „halo", das # Programm aber Flaro, und ein Image namens `halo` wäre die eine # Stelle, an der der alte Name überlebt. # # Kleinbuchstaben, weil die Registry nichts anderes annimmt. BESITZER=$(echo "${{ gitea.repository_owner }}" | tr '[:upper:]' '[:lower:]') BILD="$REGISTRY/$BESITZER/${{ vars.IMAGE_NAME || 'flaro' }}" MARKEN="$BILD:latest,$BILD:${GITHUB_SHA::7}" # Auf einem Git-Tag zusätzlich dessen Namen — damit sich eine # Fassung festnageln lässt, statt immer „latest" zu ziehen. if [ "${GITHUB_REF_TYPE}" = "tag" ]; then MARKEN="$MARKEN,$BILD:${GITHUB_REF_NAME#v}" fi echo "marken=$MARKEN" >> "$GITHUB_OUTPUT" echo "Gebaut wird: $MARKEN" - name: Bauen und hochladen uses: docker/build-push-action@v5 with: context: . file: server/Dockerfile # **Beide Architekturen.** amd64 für die Intel-NAS, arm64 für # ARM-Geräte und für den Apple-Rechner. platforms: linux/amd64,linux/arm64 push: true tags: ${{ steps.marken.outputs.marken }} # Zwischenergebnisse behalten: ohne das lädt jeder Lauf alle # Pakete neu, und ein Bau dauert statt zwei Minuten zwölf. cache-from: type=gha cache-to: type=gha,mode=max