Finanzmanager/scripts/update.sh
fds2610-bot b1712bb7ea Phase 0: Projektgerüst mit nginx, php-fpm und MariaDB
Docker Compose mit drei Services (nginx auf Port 8000), Migrationsmechanik,
Update- und Backup-Skript. Anwendung: Router mit CSRF-Prüfung, Anmeldung und
Ersteinrichtung, zentraler Einstellungsdialog mit Reitern, ein- und
ausschaltbares Debug-Log mit Maskierung von Zugangsdaten.

Layout nach Vorbild des FinanzManagers: feste Navigation links,
Werkzeugleiste oben, Tab-Leiste; Farbschema hell/dunkel/System.

Tests: 51 PHP-Prüfungen und 7 Playwright-Tests, alle grün.
2026-08-09 20:21:42 +02:00

81 lines
3 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
#
# Update-Skript für den Produktionsserver.
#
# Holt den Stand aus dem Upstream-Repository und spielt alles ein, was dazu
# nötig ist: Backup, Abhängigkeiten, Image-Neubau bei Bedarf, Migrationen.
#
# ./scripts/update.sh [--no-backup] [--no-tests] [--force-rebuild]
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
OHNE_BACKUP=false
OHNE_TESTS=false
NEUBAU_ERZWINGEN=false
for arg in "$@"; do
case "$arg" in
--no-backup) OHNE_BACKUP=true ;;
--no-tests) OHNE_TESTS=true ;;
--force-rebuild) NEUBAU_ERZWINGEN=true ;;
--help|-h)
echo "Aufruf: $0 [--no-backup] [--no-tests] [--force-rebuild]"
exit 0
;;
*)
echo "Unbekannte Option: $arg" >&2
exit 1
;;
esac
done
melde() { printf '\n\033[1m▸ %s\033[0m\n' "$1"; }
# ── Backup vor jeder Änderung ───────────────────────────────────────────────
if [[ "$OHNE_BACKUP" == false ]]; then
melde "Backup"
./scripts/backup.sh
fi
# ── Stand aus dem Upstream 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
fi
GEAENDERT="$(git diff --name-only "$VORHER" "$NACHHER" || true)"
# ── Image neu bauen, wenn sich die Grundlage geändert hat ───────────────────
if [[ "$NEUBAU_ERZWINGEN" == true ]] \
|| grep -qE '^(Dockerfile|composer\.(json|lock)|php/|nginx/)' <<<"$GEAENDERT"; then
melde "Container-Image neu bauen"
docker compose build --pull
fi
melde "Container starten"
docker compose up -d
# ── Migrationen ─────────────────────────────────────────────────────────────
# Der Entrypoint spielt sie beim Start bereits ein; der zweite Lauf ist
# idempotent und macht sichtbar, ob etwas fehlgeschlagen ist.
melde "Migrationen"
docker compose exec -T php php scripts/migrate.php
# ── Berechtigungen ──────────────────────────────────────────────────────────
melde "Berechtigungen"
docker compose exec -T php chown -R www-data:www-data /var/www/html/data
# ── Tests ───────────────────────────────────────────────────────────────────
if [[ "$OHNE_TESTS" == false ]]; then
melde "Tests"
docker compose exec -u www-data -T php php tests/run.php
fi
melde "Update abgeschlossen ($(git rev-parse --short HEAD))"