feat(infra): Unified Build Script fuer alle Komponenten #206
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.
Blocks
#212 feat(infra): Gitea Actions CI/CD-Pipelines, Container Registry und Branch-Protection
WompSchmiede/FamilienFeierPlaner
Reference
WompSchmiede/FamilienFeierPlaner#206
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
Den Build-Prozess fuer Backend, Frontend, Keycloak und E2E-Tests vereinheitlichen. Jede Komponente baut in ihrem eigenen Build-Context — externe Abhaengigkeiten (
shared/) werden vom Build-Script vorab ins Component-Verzeichnis kopiert.Scope:
build.mjsist fuer die Entwicklung (lokale Images). Produktions-Images kommen via CI/CD in eine Registry und werden von dort gepullt.Hintergrund
Drei Komponenten benoetigen
shared/design-tokens/tokens.cssausserhalb ihres Verzeichnisses:frontend/src/app.cssimportiert../../shared/design-tokens/tokens.csstokens.csswird aktuell via Volume-Mount eingebundenStatt den Build-Context aufzuweiten, kopiert
scripts/prepare-tokens.mjsvor dem Docker-Build die benoetigten Dateien in jedes Component-Verzeichnis. Die Kopien liegen in.gitignore.Image-Tags
Jeder Service bekommt einen eindeutigen lokalen Image-Namen:
postgres:latest(Remote, unveraendert)mailhog/mailhog:v1.0.1(Remote, unveraendert)familienfeierplaner-backend(lokal)familienfeierplaner-frontend(lokal, NEU)familienfeierplaner-keycloak(lokal, NEU)familienfeierplaner-e2e(lokal, NEU)Dadurch entfernt
docker compose down --rmi localausschliesslich die 4 selbst gebauten Images —postgres:latestundmailhog/mailhogbleiben erhalten.Podman/Docker-Erkennung
build.mjsunddocker-test.mjsnutzen eine gemeinsame Helper-Funktion ausscripts/container.mjs:Alle Scripts (
build.mjs,docker-test.mjs) importieren von dort — kein Code-Duplikat.Umsetzung
1.
scripts/container.mjs(neu)Gemeinsame Helper:
detectContainerCmd(),CMD,COMPOSE.2.
scripts/prepare-tokens.mjs(neu)Kopiert
shared/design-tokens/tokens.cssan drei Zielorte:frontend/shared/design-tokens/tokens.css../shared/...)keycloak/themes/.../login/resources/css/tokens.csskeycloak/themes/.../account/resources/css/tokens.cssWird sowohl von
build.mjsals auch vompredev-Hook aufgerufen.3.
frontend/src/app.css(geaendert)Import-Pfad anpassen:
4.
keycloak/Dockerfile(neu)Build-Context:
./keycloak5.
e2e/Dockerfile(neu)Build-Context:
./e2e6.
.gitignore(geaendert)7.
frontend/package.json(geaendert)8.
docker-compose.yml(Aenderungen)image: familienfeierplaner-backend)image: familienfeierplaner-frontendhinzugefuegtimage: keycloak/keycloak:latestaufbuild:,image: familienfeierplaner-keycloak, Volume-Mounts fuer tokens.css entferntimage: mcr.microsoft.com/playwright:...aufbuild:,image: familienfeierplaner-e2e9.
scripts/build.mjs(neu)Unified Build Orchestrator:
Optionen:
--no-cache,--tag,--push(fuer CI/CD)Podman-Unterstützung: via
import { CMD, COMPOSE } from './container.mjs'10.
package.json(Root) — Scriptsnpm run devmacht:prepare-tokens.mjs→ Backend + Keycloak lokal bauendocker compose down -v --rmi local --remove-orphans— Container, Volumes, lokale Images entfernendocker compose up postgres mailhog keycloak backend-api— Stack sauber starten11.
scripts/docker-test.mjs(angepasst)detectContainerCmd()ausdocker-test.mjsentfernen, auscontainer.mjsimportierenbuild.mjs allstattdocker compose up --builddocker compose --profile integration-test up -d(nur Start, ohne Build)Workflow-Uebersicht
npm run build:backendnpm run devnpm run build && docker compose --profile integration-test up -dnpm run dev:resetdocker compose downnode scripts/build.mjs all --pushBuild-Reihenfolge
Voraussetzung
#204 (Frontend-Docker-Build) ist closed.
Dateien (neu/geaendert)
Ergaenzung: Builder-Intermediate-Image wird nicht aufgeraeumt
Beobachtung: Nach jedem
docker compose down -v --rmi localbleibt ein unbenannter Intermediate-Image derbuilder-Stage aus dem Multi-Stage-Dockerfile (backend/Dockerfile) zurueck.Ursache:
--rmi localentfernt nur Images, die direkt einem Compose-Service zugeordnet sind (viaimage:-Feld). Derbuilder-Stage ist ein anonymer Build-Cache-Eintrag des Classic Builders — kein Service-Image.Loesung: Nach dem Build den Builder-Cache explizit praegen via
docker builder prune -f(podman builder prune -f).Dateiaenderungen
scripts/container.mjspruneBuildCache()exportieren (ruftCMD builder prune -f)scripts/build.mjs--prune-Flag: ruftpruneBuildCache()nach allen Buildspackage.jsondev-Script:docker builder prune -fvordocker compose uppruneBuildCache()inscripts/container.mjs--pruneinscripts/build.mjsHinweis: In CI/CD-Umgebungen (Issue #212) wird
docker builder prune -fseparat im Cleanup-Step aufgerufen.