From 9ae2dfea400bd4c2c8eddbb8cfdbfbdd15f247d3 Mon Sep 17 00:00:00 2001 From: fds2610-bot Date: Fri, 25 Sep 2026 15:44:08 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20n.n.:=20update.sh=20zieht=20aus=20dem=20F?= =?UTF-8?q?ork=20und=20l=C3=A4uft=20auch=20bei=20unver=C3=A4ndertem=20Code?= =?UTF-8?q?=20weiter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Pull nennt Remote und Branch ausdrücklich (origin main, HTTP/1.1), damit kein Tracking-Branch nötig ist. Quelle ist der Fork, solange es nur die Entwicklungsumgebung gibt; für eine spätere Produktion gibt es UPDATE_REMOTE=upstream. Das Skript bricht bei unverändertem Code nicht mehr ab, sodass Migrationen eines von Hand gezogenen Stands nachgeholt werden. Doku (CLAUDE.md, PLAN.md, README.md, Changes.md) angepasst. Co-Authored-By: Claude Sonnet 5 --- CLAUDE.md | 10 ++++++---- Changes.md | 10 ++++++++++ PLAN.md | 8 +++++--- README.md | 2 +- scripts/update.sh | 31 +++++++++++++++++++++---------- 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index ad05951..632ecc3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,15 +10,17 @@ Webserver: **nginx + php-fpm**, alles in Docker Compose. - **Keine lokale Installation ohne Rückfrage.** Kein PHP, kein Composer, kein MariaDB auf dem Host – alles läuft in Containern. - Lokal erreichbar unter **http://localhost:8000**. -- Der **Produktionsserver zieht den Code aus dem Upstream-Repository** und läuft - isoliert: kein Zugriff von außen, kein Zugriff durch Claude Code. Deployment dort - ausschließlich über `scripts/update.sh`. +- Es gibt derzeit **nur die Entwicklungsumgebung**, keinen getrennten Produktionsserver. + `scripts/update.sh` zieht deshalb aus dem **Fork** (`origin`, Branch `main`); der + Upstream dient als Backup und zur Veröffentlichung. Kommt später eine isolierte + Produktion (kein Zugriff von außen, kein Zugriff durch Claude Code), zieht sie aus dem + Upstream: `UPDATE_REMOTE=upstream ./scripts/update.sh`. ```bash docker compose up -d # starten docker compose exec -u www-data php php tests/run.php # Tests ./scripts/run-tests.sh # dasselbe, kürzer -./scripts/update.sh # Update (Produktion) +./scripts/update.sh # Update aus dem Fork ./scripts/backup.sh # Backup mit Rotation ``` diff --git a/Changes.md b/Changes.md index b4bfa59..c67a256 100644 --- a/Changes.md +++ b/Changes.md @@ -1,5 +1,15 @@ # Änderungen +## `update.sh` zieht aus dem Fork (25.09.2026) + +- Das Update-Skript holt den Code ausdrücklich per `git pull --ff-only origin main`. Vorher + brach es ohne Tracking-Branch mit „Es gibt keine Tracking-Informationen“ ab. +- Quelle ist der Fork, weil es derzeit nur die Entwicklungsumgebung gibt; der Upstream ist + Backup und Veröffentlichung. Für eine spätere Produktion: `UPDATE_REMOTE=upstream`. +- Das Skript bricht bei unverändertem Code nicht mehr ab: Container starten und Migrationen + laufen immer, damit ein von Hand gezogener Stand nicht ohne Migration bleibt. +- Der Pull läuft mit HTTP/1.1 (Codeberg liefert bei HTTP/2 sonst 504). + ## Echtzeitüberweisung im Zahlungsverkehr (25.09.2026) Der Überweisungsdialog bietet jetzt das Häkchen **Echtzeitüberweisung**: Das Geld ist binnen diff --git a/PLAN.md b/PLAN.md index 0857f6c..7cbed9d 100644 --- a/PLAN.md +++ b/PLAN.md @@ -104,9 +104,11 @@ aber mit **nginx statt Apache**. * **Keine lokale Installation ohne Rückfrage.** Alles läuft und wird getestet in Docker-Compose-Containern — kein PHP, kein Composer, kein MariaDB auf dem Host. * **Erreichbarkeit lokal: `http://localhost:8000`** (nginx-Port-Mapping `8000:80`). -* **Produktionsserver zieht den Code aus dem Upstream-Repository.** Er läuft isoliert, - ohne Zugriff von außen und ohne Zugriff durch Claude Code. Deployment ist dort - ausschließlich `git pull` + Update-Skript, niemals ein direkter Eingriff von hier. +* **Solange es nur die Entwicklungsumgebung gibt, zieht `update.sh` aus dem Fork** + (`origin/main`); der Upstream dient als Backup und zur Veröffentlichung. Eine spätere, + isolierte Produktion (ohne Zugriff von außen und durch Claude Code) zieht aus dem + Upstream (`UPDATE_REMOTE=upstream`); Deployment dort ausschließlich `git pull` + + Update-Skript, niemals ein direkter Eingriff von hier. * **Update-Prozess wie in `Steuerkram`**: `scripts/update.sh` (git pull → Backup → Composer → Image-Rebuild bei Bedarf → Migrationen → Rechte → optionale Tests) plus `scripts/backup.sh` mit Rotation (7 Tage / 4 Wochen / 12 Monate). diff --git a/README.md b/README.md index 8450fb3..46e6d66 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Ersteinrichtung und legt den ersten Benutzer an. ```bash ./scripts/run-tests.sh # Tests ./scripts/backup.sh # Backup mit Rotation -./scripts/update.sh # Update (auf dem Produktionsserver) +./scripts/update.sh # Update aus dem Fork (origin/main) ``` ## Verzeichnisse diff --git a/scripts/update.sh b/scripts/update.sh index 893f85a..4267698 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -1,10 +1,14 @@ #!/usr/bin/env bash # -# Update-Skript für den Produktionsserver. +# Update-Skript. # -# Holt den Stand aus dem Upstream-Repository und spielt alles ein, was dazu +# Holt den Stand aus dem Fork (Remote „origin“) und spielt alles ein, was dazu # nötig ist: Backup, Abhängigkeiten, Image-Neubau bei Bedarf, Migrationen. # +# Es gibt derzeit nur die Entwicklungsumgebung und keinen getrennten Produktions- +# server; deshalb ist der Fork die Quelle. Der Upstream dient als Backup und zur +# Veröffentlichung. Für eine spätere Produktion: UPDATE_REMOTE=upstream setzen. +# # ./scripts/update.sh [--no-backup] [--no-tests] [--force-rebuild] set -euo pipefail @@ -39,17 +43,24 @@ if [[ "$OHNE_BACKUP" == false ]]; then ./scripts/backup.sh fi -# ── Stand aus dem Upstream holen ──────────────────────────────────────────── +# ── Stand aus dem Fork holen ──────────────────────────────────────────────── melde "Code aktualisieren" -VORHER="$(git rev-parse HEAD)" -git pull --ff-only -NACHHER="$(git rev-parse HEAD)" - -if [[ "$VORHER" == "$NACHHER" && "$NEUBAU_ERZWINGEN" == false ]]; then - echo "Bereits aktuell – nichts zu tun." - exit 0 +QUELLE="${UPDATE_REMOTE:-origin}" +BRANCH="main" +if ! git remote get-url "$QUELLE" >/dev/null 2>&1; then + echo "Remote „$QUELLE“ existiert nicht." >&2 + exit 1 fi +VORHER="$(git rev-parse HEAD)" +# Remote und Branch stehen ausdrücklich da, damit kein Tracking nötig ist. +# HTTP/1.1, weil Codeberg bei HTTP/2 mit 504 hängen bleibt. +git -c http.version=HTTP/1.1 pull --ff-only "$QUELLE" "$BRANCH" +NACHHER="$(git rev-parse HEAD)" + +# Kein vorzeitiger Abbruch bei unverändertem Code: Er kann schon von Hand gezogen worden +# sein, dann fehlen den Containern noch die Migrationen (idempotent). Ein Image-Neubau +# nach einem von Hand gezogenen Stand muss mit --force-rebuild erzwungen werden. GEAENDERT="$(git diff --name-only "$VORHER" "$NACHHER" || true)" # ── Image neu bauen, wenn sich die Grundlage geändert hat ───────────────────