Files
Flaro/.gitea/workflows/image.yml
T
ScarriffleandClaude Opus 5 fbf4a29461
Image bauen und veröffentlichen / image (push) Canceled after 0s
Der Bildname kommt nicht mehr vom Repositoriumsnamen
Das Repo heisst auf Gitea noch „halo", das Programm aber Flaro. Der
Workflow leitete den Bildnamen aus `gitea.repository` ab — das Image hiesse
`git.scarriffle.com/scarriffle/halo` und wäre die eine Stelle, an der der
alte Name überlebt. Das Skript daneben schreibt `flaro`; beides zusammen
ergäbe zwei Images für dieselbe Sache.

Gitea legt Pakete am **Besitzer** ab, nicht am Repository — sie dürfen
deshalb anders heissen als das Repo. Jetzt nehmen beide Wege
`<besitzer>/flaro`, überschreibbar über die Variable `IMAGE_NAME`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-04 08:10:41 +02:00

81 lines
3.1 KiB
YAML

# 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