diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5a6f9493d..ac451d2f9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -152,8 +152,31 @@ docker_web: DOCKER_BUILDKIT: "1" script: - echo "$REGISTRY_PASSWORD" | docker login rohana.axion1337.de -u "$REGISTRY_USER" --password-stdin + # Ein veroeffentlichtes Release darf sich nicht rueckwirkend aendern. + # + # Am 2026-08-09 hat das Force-Push umgezogener Tags (History-Anonymisierung) + # drei Release-Pipelines neu gestartet - darunter v0.4.0. Ohne diese Sperre + # haette der Lauf das laengst veroeffentlichte Image aus altem Code mit + # heutigen Basis-Images und Abhaengigkeiten neu gebaut und ueberschrieben. + # Dass es damals nicht passierte, lag nur daran, dass die geschuetzten + # Registry-Variablen in dem Moment nicht verfuegbar waren - Glueck, nicht + # Absicht (ThreadNet-Web#14). + # + # Ein Tag ist hier kein Verwaltungseintrag, sondern ein Build-Ausloeser. Wer + # einen Tag verschiebt, loest einen Build aus, ob er will oder nicht. Deshalb + # Unveraenderlichkeit erzwingen statt auf Vorsicht zu hoffen. + - | + if docker manifest inspect "$IMAGE:$CI_COMMIT_TAG" >/dev/null 2>&1; then + echo "FEHLER: $IMAGE:$CI_COMMIT_TAG existiert in der Registry bereits." + echo "Ein veroeffentlichtes Release wird nicht ueberschrieben." + echo "Gewollt? Dann das Image bewusst aus der Registry entfernen oder eine" + echo "neue Version taggen - siehe ThreadNet-Web#14." + exit 1 + fi - docker build -f apps/web/Dockerfile -t "$IMAGE:$CI_COMMIT_TAG" -t "$IMAGE:latest-ci" . - docker push "$IMAGE:$CI_COMMIT_TAG" + # latest-ci bleibt bewusst ueberschreibbar - der Tag bezeichnet "der neueste + # Stand", nicht eine Version, und traegt deshalb kein Versprechen. - docker push "$IMAGE:latest-ci" # Einmalig/selten: Build-Image fuer den Desktop-Build (rust:bullseye + node + tcl/sqlcipher,