Ergänze sichere WebP-Bestandsmigration

Zeigt bei älteren Upload-Bildern automatisch einen geschützten Migrationsbutton im Adminbereich an und aktualisiert die JSON-Verweise transaktionssicher. Ergänzt außerdem einen Server-Updater, der Datenbank, Uploads und Konfiguration beim Wechsel von älteren Versionen sichert und wiederherstellt.
This commit is contained in:
2026-08-22 10:22:29 +02:00
parent 71df09a261
commit 20afd17ce7
4 changed files with 404 additions and 29 deletions
+80
View File
@@ -0,0 +1,80 @@
#!/usr/bin/env bash
set -Eeuo pipefail
# Das Skript außerhalb des Checkouts weiterführen, damit ein Pull seine laufende
# Version nicht verändern kann.
if [[ "${KULTOUR_UPDATE_REEXEC:-0}" != "1" ]]; then
stable_script="$(mktemp "${TMPDIR:-/tmp}/kultour-update.XXXXXX")"
cp -- "$0" "$stable_script"
chmod 700 "$stable_script"
export KULTOUR_UPDATE_REEXEC=1
export KULTOUR_UPDATE_TEMP_SCRIPT="$stable_script"
exec bash "$stable_script" "$@"
fi
repository_input="${1:-.}"
cd "$repository_input"
repository_root="$(git rev-parse --show-toplevel)"
cd "$repository_root"
repository_parent="$(dirname "$repository_root")"
update_backup="$(mktemp -d "${repository_parent}/kultour-update-backup.XXXXXX")"
restore_required=0
cleanup_temp_script() {
if [[ -n "${KULTOUR_UPDATE_TEMP_SCRIPT:-}" && -f "$KULTOUR_UPDATE_TEMP_SCRIPT" ]]; then
rm -f -- "$KULTOUR_UPDATE_TEMP_SCRIPT"
fi
}
restore_persistence() {
mkdir -p "$repository_root/data" "$repository_root/uploads"
cp -a -- "$update_backup/data/." "$repository_root/data/"
cp -a -- "$update_backup/uploads/." "$repository_root/uploads/"
cp -a -- "$update_backup/config.php" "$repository_root/config.php"
}
handle_failure() {
status=$?
trap - ERR INT TERM
if [[ "$restore_required" == "1" ]]; then
echo "Update fehlgeschlagen stelle Persistenz aus dem Backup wieder her ..." >&2
restore_persistence || true
fi
echo "Backup bleibt erhalten: $update_backup" >&2
cleanup_temp_script
exit "$status"
}
trap handle_failure ERR INT TERM
for required_path in data uploads config.php; do
if [[ ! -e "$repository_root/$required_path" ]]; then
echo "Erforderlicher Pfad fehlt: $repository_root/$required_path" >&2
exit 1
fi
done
cp -a -- "$repository_root/data" "$update_backup/data"
cp -a -- "$repository_root/uploads" "$update_backup/uploads"
cp -a -- "$repository_root/config.php" "$update_backup/config.php"
restore_required=1
echo "Persistenz gesichert: $update_backup"
echo "Aktueller Arbeitsstand:"
git status --short
# In älteren Versionen waren Datenbank und Bilder noch getrackt. Nur diese
# Pfade sowie die lokale Konfiguration werden für den Pull auf HEAD gesetzt.
git restore --source=HEAD --staged --worktree -- data uploads config.php
git fetch origin main
git merge --ff-only origin/main
restore_persistence
restore_required=0
trap - ERR INT TERM
cleanup_temp_script
echo "Update abgeschlossen. Datenbank, Uploads und config.php wurden wiederhergestellt."
echo "Sicherheits-Backup bleibt erhalten: $update_backup"
git status --short --branch