GitHub er utilgængeligt i ti dage. Koden ligger allerede begge steder; det, der manglede, var imaget og et sted at bygge det. **Imaget ligger i Gitea nu**, begge arkitekturer. Kopieret med `docker buildx imagetools create`, som flytter hele manifest-indekset mellem to registre uden at hente lagene ned — en `docker pull` på denne maskine ville have hentet arm64 og efterladt serveren uden en amd64 at køre. **Og det kan hentes uden legitimation, mens repoet bliver ved med at være privat.** Det var ikke givet: panelets `PullImage` sætter aldrig `RegistryAuth`, så et privat register er udelukket, og Gitea gør normalt en container-pakke privat sammen med det repo, den hører til. Men en pakke bindes kun til et repo, når den skubbes med et repo-link — og denne er ikke, så dens synlighed følger brugeren `kw`, som er offentlig. Bevist frem for antaget: `docker --config /tmp/tom pull` hentede den med samme digest som GHCR havde. En bar `curl` mod `/v2/…/manifests/…` svarer 401 også for et læsbart image, fordi registret uddeler et anonymt token først — så den er ikke prøven, og den kostede en runde at gennemskue. **Runen er bumpet til version 5.** Ikke fordi felterne ændrede sig, men fordi en rune ikke opdaterer sig selv: panelet skriver rune-rækken fra en UI-handling, så ændringen kræver **Runes → verdande → Update**, og katalog-listen caches ti minutter. **Et Actions-workflow til Gitea** ligger i `.gitea/workflows/`. Sin egen fil frem for en delt: `secrets.GITHUB_TOKEN` findes ikke der, registret er et andet, og der er ingen Releases-side at skrive til. En delt fil ville være fire betingede led, der hver kun gælder ét af de to steder. Den laver ingen release, fordi opdateringsnotitsen i appen læser GitHubs — skal den flyttes med, er det `internal/update`, der skal have en ny adresse. **Det virker ikke endnu:** der er ingen runner registreret på Gitea. Indtil der er, bygges og skubbes imaget i hånden herfra. Dokumentationen og landingssiden siger den nye adresse. Rune-siden er skrevet om, hvor den fortalte om GHCR-pakkeindstillinger, og siger nu, hvordan man prøver efter på den måde, der faktisk svarer på spørgsmålet. Co-Authored-By: Claude Opus 5 <[email protected]>
68 lines
2.8 KiB
YAML
68 lines
2.8 KiB
YAML
name: Release
|
|
|
|
# Samme udløser som GitHub-workflowet: et semver-tag, og ikke andet.
|
|
#
|
|
# Gitea Actions læser samme format som GitHub Actions og kan bruge handlinger
|
|
# derfra, men det er *ikke* det samme sted. Filen ligger derfor for sig i
|
|
# `.gitea/workflows/` frem for at være delt: `secrets.GITHUB_TOKEN` findes ikke
|
|
# her, registret er et andet, og der er ingen Releases-side at skrive til. En delt
|
|
# fil ville være fire betingede led, der hver kun gælder ét af de to steder.
|
|
on:
|
|
push:
|
|
tags: ["v[0-9]+.[0-9]+.[0-9]+*"]
|
|
|
|
jobs:
|
|
image:
|
|
name: Build and publish image
|
|
# `ubuntu-latest` betyder her det, runneren er sat op til at kalde det.
|
|
# Registreres runneren med en anden etiket, skal denne linje følge med.
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: docker/setup-qemu-action@v3
|
|
- uses: docker/setup-buildx-action@v3
|
|
|
|
# `GITEA_TOKEN` er automatisk til stede i et Actions-job og har lov at
|
|
# skrive pakker for den, der ejer repoet. Ingen hemmelighed at sætte op.
|
|
- uses: docker/login-action@v3
|
|
with:
|
|
registry: gitea.nolimit.dk
|
|
username: ${{ gitea.actor }}
|
|
password: ${{ secrets.GITEA_TOKEN }}
|
|
|
|
- id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: gitea.nolimit.dk/${{ gitea.repository }}
|
|
# v1.4.2 udgiver 1.4.2, 1.4 og 1 — så en rune, der er bundet til :1, får
|
|
# rettelser uden nogensinde at krydse et hovedversionsskifte.
|
|
tags: |
|
|
type=semver,pattern={{version}}
|
|
type=semver,pattern={{major}}.{{minor}}
|
|
type=semver,pattern={{major}}
|
|
type=raw,value=latest
|
|
|
|
# arm64 er ikke valgfrit: et hjemmelab er lige så tit en Raspberry Pi eller
|
|
# en Apple silicon-VM som en x86-kasse.
|
|
- uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
platforms: linux/amd64,linux/arm64
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
build-args: |
|
|
VERSION=${{ gitea.ref_name }}
|
|
# Ingen `cache-from: type=gha`. Den cache er GitHubs tjeneste, og den
|
|
# findes ikke her — bedt om den, fejler trinnet på noget, der ikke har
|
|
# med bygningen at gøre. Uden cache tager en kold bygning nogle minutter
|
|
# længere, og det er prisen, indtil runneren har en cache af sin egen.
|
|
# Ingen Release oprettes.
|
|
#
|
|
# GitHub-workflowet laver en Release, fordi opdateringsnotitsen i appen læser
|
|
# `releases/latest` derfra. Gitea har sit eget Releases-begreb, men notitsen
|
|
# peger på GitHub — så en release her ville ingen læse. Skal notitsen flyttes
|
|
# med, er det `internal/update`, der skal have en ny adresse, og det er en
|
|
# ændring for sig.
|