Files
MrBlake 20afd17ce7 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.
2026-08-22 10:22:29 +02:00

81 lines
2.6 KiB
Bash
Executable File
Raw Permalink 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
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