# 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' }}" # Gitea verlangt Kleinbuchstaben im Pfad; der Besitzername kann # gross geschrieben sein. PFAD=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]') BILD="$REGISTRY/$PFAD" 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