Files
backup-configs/root/backup-config/run-backup-and-push.sh
2026-03-28 18:13:57 +01:00

87 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
BASE_DIR="/root/backup-config"
BACKUP_DIR="$BASE_DIR/backup"
BACKUP_SCRIPT="$BASE_DIR/backup-config.sh"
LOGFILE="/var/log/backup-config-run.log"
BRANCH="DockerDMZ_Configfiles"
log() {
printf '%s %s\n' "$(date '+%F %T')" "$1" | tee -a "$LOGFILE"
}
main() {
if [[ ! -x "$BACKUP_SCRIPT" ]]; then
echo "Backup-Skript nicht gefunden oder nicht ausführbar: $BACKUP_SCRIPT" >&2
exit 1
fi
mkdir -p "$BACKUP_DIR"
log "INFO: Starte Backup"
"$BACKUP_SCRIPT"
log "INFO: Backup beendet"
cd "$BACKUP_DIR"
if ! command -v git >/dev/null 2>&1; then
log "ERROR: Git ist nicht installiert"
exit 1
fi
if [[ ! -d .git ]]; then
log "INFO: Git-Repository wird initialisiert"
git init
fi
# Branch aktivieren oder anlegen
if git show-ref --verify --quiet "refs/heads/$BRANCH"; then
git checkout "$BRANCH" >/dev/null 2>&1
log "INFO: Git-Branch aktiviert: $BRANCH"
else
if git rev-parse --verify HEAD >/dev/null 2>&1; then
git checkout -b "$BRANCH" >/dev/null 2>&1
else
git checkout --orphan "$BRANCH" >/dev/null 2>&1
fi
log "INFO: Git-Branch erstellt: $BRANCH"
fi
git add -A
if git diff --cached --quiet; then
log "INFO: Keine neuen Dateiinhalte für Commit"
else
git commit -m "Config-Backup $(hostname) $(date '+%F %T')"
log "INFO: Commit erstellt"
fi
if ! git remote get-url origin >/dev/null 2>&1; then
log "WARN: Kein Remote 'origin' konfiguriert, Push übersprungen"
exit 0
fi
# Remote-Infos aktualisieren
git fetch origin "$BRANCH" >/dev/null 2>&1 || true
# Falls der Remote-Branch noch nicht existiert
if ! git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then
git push -u origin "$BRANCH"
log "INFO: Initialer Push des Branches erfolgreich"
exit 0
fi
# Prüfen, ob lokale Commits noch nicht gepusht wurden
AHEAD_COUNT="$(git rev-list --count "origin/$BRANCH..$BRANCH" 2>/dev/null || echo 0)"
if [[ "$AHEAD_COUNT" -gt 0 ]]; then
git push origin "$BRANCH"
log "INFO: Push erfolgreich ($AHEAD_COUNT lokale Commits übertragen)"
else
log "INFO: Kein Push nötig, Remote ist aktuell"
fi
}
main