Image bauen und veröffentlichen / image (push) Canceled after 0s
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>
81 lines
3.1 KiB
YAML
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
|