CI / pruefen (push) Has been cancelled
Die Shell-Skripte lagen als 100644 im Index. Nach einem frischen Clone auf dem Server scheiterte damit jedes "./scripts/setup.sh" und "./scripts/update.sh" an fehlender Berechtigung; wer sich mit chmod +x behalf, hatte danach ein schmutziges Arbeitsverzeichnis, und genau daran brach update.sh ab. Unter Windows faellt das nicht auf, weil core.filemode dort auf false steht -- das Bit muss deshalb mit "git update-index --chmod=+x" gesetzt werden. Auch docker/entrypoint.sh bekommt es; der Dockerfile-Aufruf chmod +x bleibt als zweiter Riegel bestehen. Ausserdem sagt update.sh jetzt, welche Dateien geaendert sind, statt nur zu melden, dass etwas nicht sauber ist. Wer die Meldung liest, soll nicht erst "git status" nachschlagen muessen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
58 lines
2.1 KiB
Bash
Executable File
58 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# ─────────────────────────────────────────────────────────────
|
|
# Spielt eine mit backup.sh erzeugte Sicherung zurueck.
|
|
#
|
|
# ACHTUNG: Der aktuelle Inhalt der Datenbank wird ersetzt.
|
|
#
|
|
# Aufruf: ./scripts/restore.sh <datei.sql> [--force]
|
|
#
|
|
# Zieldatenbank ueberschreiben mit NEBULA_DB_NAME. Damit laesst sich eine
|
|
# Sicherung pruefen, ohne die echte Datenbank anzufassen:
|
|
#
|
|
# docker exec nebula-db psql -U nebula -d postgres -c "CREATE DATABASE nebula_test"
|
|
# NEBULA_DB_NAME=nebula_test ./scripts/restore.sh backups/... --force
|
|
# ─────────────────────────────────────────────────────────────
|
|
set -eu
|
|
|
|
root="$(cd "$(dirname "$0")/.." && pwd)"
|
|
file="${1:-}"
|
|
force="${2:-}"
|
|
container="${NEBULA_DB_CONTAINER:-nebula-db}"
|
|
|
|
if [ -z "$file" ]; then
|
|
echo "Aufruf: ./scripts/restore.sh <datei.sql> [--force]" >&2
|
|
exit 1
|
|
fi
|
|
if [ ! -f "$file" ]; then
|
|
echo "Datei nicht gefunden: $file" >&2
|
|
exit 1
|
|
fi
|
|
|
|
user="nebula"
|
|
database="nebula"
|
|
if [ -f "$root/.env" ]; then
|
|
value_of() {
|
|
sed -n "s/^[[:space:]]*$1[[:space:]]*=[[:space:]]*\"\{0,1\}\([^\"#]*\)\"\{0,1\}[[:space:]]*$/\1/p" \
|
|
"$root/.env" | tail -n 1
|
|
}
|
|
[ -n "$(value_of POSTGRES_USER)" ] && user="$(value_of POSTGRES_USER)"
|
|
[ -n "$(value_of POSTGRES_DB)" ] && database="$(value_of POSTGRES_DB)"
|
|
fi
|
|
database="${NEBULA_DB_NAME:-$database}"
|
|
|
|
if [ "$force" != "--force" ]; then
|
|
printf "Der gesamte Inhalt der Datenbank '%s' wird ersetzt.\nWirklich fortfahren? (ja/nein) " "$database"
|
|
read -r answer
|
|
[ "$answer" = "ja" ] || { echo "Abgebrochen."; exit 0; }
|
|
fi
|
|
|
|
if ! docker ps --filter "name=$container" --format '{{.Names}}' | grep -qx "$container"; then
|
|
echo "Container '$container' laeuft nicht." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Spiele '$file' ein..."
|
|
docker exec -i "$container" psql -U "$user" -d "$database" -v ON_ERROR_STOP=1 < "$file"
|
|
|
|
echo "Fertig. Anwendung neu starten, damit sie eine frische Verbindung aufbaut."
|