Fix n.n.: update.sh zieht aus dem Fork und läuft auch bei unverändertem Code weiter
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 <noreply@anthropic.com>
This commit is contained in:
parent
822458ee0f
commit
9ae2dfea40
5 changed files with 43 additions and 18 deletions
10
CLAUDE.md
10
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
|
- **Keine lokale Installation ohne Rückfrage.** Kein PHP, kein Composer, kein MariaDB
|
||||||
auf dem Host – alles läuft in Containern.
|
auf dem Host – alles läuft in Containern.
|
||||||
- Lokal erreichbar unter **http://localhost:8000**.
|
- Lokal erreichbar unter **http://localhost:8000**.
|
||||||
- Der **Produktionsserver zieht den Code aus dem Upstream-Repository** und läuft
|
- Es gibt derzeit **nur die Entwicklungsumgebung**, keinen getrennten Produktionsserver.
|
||||||
isoliert: kein Zugriff von außen, kein Zugriff durch Claude Code. Deployment dort
|
`scripts/update.sh` zieht deshalb aus dem **Fork** (`origin`, Branch `main`); der
|
||||||
ausschließlich über `scripts/update.sh`.
|
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
|
```bash
|
||||||
docker compose up -d # starten
|
docker compose up -d # starten
|
||||||
docker compose exec -u www-data php php tests/run.php # Tests
|
docker compose exec -u www-data php php tests/run.php # Tests
|
||||||
./scripts/run-tests.sh # dasselbe, kürzer
|
./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
|
./scripts/backup.sh # Backup mit Rotation
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
10
Changes.md
10
Changes.md
|
|
@ -1,5 +1,15 @@
|
||||||
# Änderungen
|
# Ä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)
|
## Echtzeitüberweisung im Zahlungsverkehr (25.09.2026)
|
||||||
|
|
||||||
Der Überweisungsdialog bietet jetzt das Häkchen **Echtzeitüberweisung**: Das Geld ist binnen
|
Der Überweisungsdialog bietet jetzt das Häkchen **Echtzeitüberweisung**: Das Geld ist binnen
|
||||||
|
|
|
||||||
8
PLAN.md
8
PLAN.md
|
|
@ -104,9 +104,11 @@ aber mit **nginx statt Apache**.
|
||||||
* **Keine lokale Installation ohne Rückfrage.** Alles läuft und wird getestet in
|
* **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.
|
Docker-Compose-Containern — kein PHP, kein Composer, kein MariaDB auf dem Host.
|
||||||
* **Erreichbarkeit lokal: `http://localhost:8000`** (nginx-Port-Mapping `8000:80`).
|
* **Erreichbarkeit lokal: `http://localhost:8000`** (nginx-Port-Mapping `8000:80`).
|
||||||
* **Produktionsserver zieht den Code aus dem Upstream-Repository.** Er läuft isoliert,
|
* **Solange es nur die Entwicklungsumgebung gibt, zieht `update.sh` aus dem Fork**
|
||||||
ohne Zugriff von außen und ohne Zugriff durch Claude Code. Deployment ist dort
|
(`origin/main`); der Upstream dient als Backup und zur Veröffentlichung. Eine spätere,
|
||||||
ausschließlich `git pull` + Update-Skript, niemals ein direkter Eingriff von hier.
|
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 →
|
* **Update-Prozess wie in `Steuerkram`**: `scripts/update.sh` (git pull → Backup →
|
||||||
Composer → Image-Rebuild bei Bedarf → Migrationen → Rechte → optionale Tests) plus
|
Composer → Image-Rebuild bei Bedarf → Migrationen → Rechte → optionale Tests) plus
|
||||||
`scripts/backup.sh` mit Rotation (7 Tage / 4 Wochen / 12 Monate).
|
`scripts/backup.sh` mit Rotation (7 Tage / 4 Wochen / 12 Monate).
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ Ersteinrichtung und legt den ersten Benutzer an.
|
||||||
```bash
|
```bash
|
||||||
./scripts/run-tests.sh # Tests
|
./scripts/run-tests.sh # Tests
|
||||||
./scripts/backup.sh # Backup mit Rotation
|
./scripts/backup.sh # Backup mit Rotation
|
||||||
./scripts/update.sh # Update (auf dem Produktionsserver)
|
./scripts/update.sh # Update aus dem Fork (origin/main)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Verzeichnisse
|
## Verzeichnisse
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,14 @@
|
||||||
#!/usr/bin/env bash
|
#!/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.
|
# 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]
|
# ./scripts/update.sh [--no-backup] [--no-tests] [--force-rebuild]
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
@ -39,17 +43,24 @@ if [[ "$OHNE_BACKUP" == false ]]; then
|
||||||
./scripts/backup.sh
|
./scripts/backup.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── Stand aus dem Upstream holen ────────────────────────────────────────────
|
# ── Stand aus dem Fork holen ────────────────────────────────────────────────
|
||||||
melde "Code aktualisieren"
|
melde "Code aktualisieren"
|
||||||
VORHER="$(git rev-parse HEAD)"
|
QUELLE="${UPDATE_REMOTE:-origin}"
|
||||||
git pull --ff-only
|
BRANCH="main"
|
||||||
NACHHER="$(git rev-parse HEAD)"
|
if ! git remote get-url "$QUELLE" >/dev/null 2>&1; then
|
||||||
|
echo "Remote „$QUELLE“ existiert nicht." >&2
|
||||||
if [[ "$VORHER" == "$NACHHER" && "$NEUBAU_ERZWINGEN" == false ]]; then
|
exit 1
|
||||||
echo "Bereits aktuell – nichts zu tun."
|
|
||||||
exit 0
|
|
||||||
fi
|
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)"
|
GEAENDERT="$(git diff --name-only "$VORHER" "$NACHHER" || true)"
|
||||||
|
|
||||||
# ── Image neu bauen, wenn sich die Grundlage geändert hat ───────────────────
|
# ── Image neu bauen, wenn sich die Grundlage geändert hat ───────────────────
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue