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:
Executable
+80
@@ -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
|
||||
Reference in New Issue
Block a user