feat(infra): Gitea Actions CI/CD-Pipelines, Container Registry und Branch-Protection #212
Labels
No labels
component/backend
component/docs
component/e2e
component/frontend
component/infra
component/keycloak
prio/high
prio/low
prio/medium
type/bug
type/chore
type/feature
type/refactor
type/test
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Depends on
#205 feat(e2e): E2E-Integrationstests mit Playwright einfuehren
WompSchmiede/FamilienFeierPlaner
#206 feat(infra): Unified Build Script fuer alle Komponenten
WompSchmiede/FamilienFeierPlaner
Reference
WompSchmiede/FamilienFeierPlaner#212
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Automatisierte CI/CD-Pipelines via Gitea Actions, Bereitstellung der Images in der Gitea-Container-Registry (nur bei Versions-Tags) und Schutz des main-Branches.
Wichtig: Kein automatischer Close
Dieser Issue enthaelt Aufgaben (Branch-Protection, Secrets, Actions-Runner), die manuell in den Gitea-Einstellungen gesetzt werden muessen. Er wird nicht durch einen Commit geschlossen (
closes #212ist untersagt). Schliessung erfolgt manuell nach Erledigung aller Tasks.Voraussetzung
build.mjsmuss fuer--registry/--version/--pushbereit seinTrigger-Strategie
ci.ymlci.yml+e2e.ymlv*cd.ymlTeil 1: CI-Pipeline (Code-Qualitaet)
Datei:
.gitea/workflows/ci.ymlTrigger: Push auf main + PR gegen main
Teil 2: E2E-Pipeline (Integrationstests via #205)
Datei:
.gitea/workflows/e2e.ymlTrigger: Nur bei PRs gegen main
Nutzt die Features aus #205:
e2e/specs/phase-1/unde2e/specs/phase-2/e2e/fixtures/auth.ts) fuer Keycloak-Logine2e/helpers/mailhog.ts) fuer E-Mail-Pruefungprepare-tokens.mjsstellt sicher dassshared/design-tokens/tokens.cssin frontend/ + keycloak/ verfuegbar istHinweis: Der
frontend- undkeycloak-Service in docker-compose.yml muessen vor dem Start viabuild.mjsgebaut sein (passiert in Schritt "Build all images"). Dere2e-runner-Container laeuft dauerhaft viaentrypoint: ["sleep", "infinity"]— die Tests werden viadocker compose execgestartet.Teil 3: CD-Pipeline (Build + Registry)
Datei:
.gitea/workflows/cd.ymlTrigger: Nur bei Versions-Tags (
v1.0.0,v0.2.0,v2026.07.0etc.)Registry-Login: Token-Setup (manuell)
Der Workflow loggt sich via
docker loginin die Gitea Container Registry ein. Dafuer wird ein Repository-Secret benoetigt:Persoenliches Access Token erzeugen:
Settings→Applications→Generate New Tokenwrite:packages(ausreichend zum Pushen von Images)Als Repository-Secret anlegen:
FamilienFeierPlaner→Settings→Actions→Secrets→Add SecretREGISTRY_TOKENIm Workflow verwenden:
Resultierende Images in der Registry:
git.gs-woa.hopto.org/niboer/familienfeierplaner-backendv1.0.0,latestgit.gs-woa.hopto.org/niboer/familienfeierplaner-frontendv1.0.0,latestgit.gs-woa.hopto.org/niboer/familienfeierplaner-keycloakv1.0.0,latestTeil 4: Build.mjs --registry / --version / --push
scripts/build.mjsbekommt neue Optionen fuer den CD-Workflow:Ablauf je Komponente:
Teil 5: Branch-Protection fuer main
Manuell in Gitea Settings → Branches → Branch Protection → main:
CI / lint-backendCI / lint-frontendCI / test-backendCI / test-frontendCI / conventional-commitE2E / e2eHinweis: Branch-Protection muss manuell via Gitea-Oberflaeche gesetzt werden. Der Agent hat keinen Admin-Zugriff auf die Repository-Einstellungen.
Tasks
Settings → Applications, Scope:write:packages)REGISTRY_TOKEN-Secret im Repository anlegen (Settings → Actions → Secrets).gitea/workflows/ci.ymlanlegen (Lint + Tests + Conventional Commit).gitea/workflows/e2e.ymlanlegen (E2E-Tests via #205, nur bei PRs).gitea/workflows/cd.ymlanlegen (Build + Push bei Tags)scripts/build.mjsum--registry,--version,--pusherweiternDateien (neu)
Geaenderte Dateien
Ergaenzung: Builder-Cache auch im CI/CD-Cleanup praegen
Das Multi-Stage-Dockerfile (
backend/Dockerfile) produziert Intermediate-Images derbuilder-Stage, die von--rmi localnicht erfasst werden (siehe #206, Kommentar zur Analyse).Massnahme: In den Cleanup-Schritten von
e2e.ymlundcd.ymlnachdocker compose down -v --rmi localzusaetzlichdocker builder prune -fausfuehren:.gitea/workflows/e2e.yml.gitea/workflows/cd.ymlBegruendung:
docker builder prune -fentfernt gezielt nur den Build-Cache (intermediate Stages), ohne benannte/getaggte Images anzutasten.docker image prune -fwaere zu aggressiv und koennte noch benoetigte Cache-Images entfernen.Automatisierte Tasks abgeschlossen (Commit
264993b):.gitea/workflows/ci.yml— Lint + Tests + Conventional Commit.gitea/workflows/e2e.yml— Playwright-Tests (nur PR).gitea/workflows/cd.yml— Build + Push Backend/Frontend/Keycloak (Tags v*)scripts/build.mjs—--registry,--version,--pushCLI-Optionendocs/design/06-betrieb-entwicklung.md— CI/CD-Sektion ergaenztManuell noch ausstehend:
write:packages)REGISTRY_TOKEN-Secret im Repository anlegen (Settings → Actions → Secrets)maineinrichten (Settings → Branches): Block regular commits, 1 Approval, Required checks: CI/*, E2E/e2e