47 lines
1.8 KiB
Bash
Executable File
47 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# =============================================================================
|
||
# deploy.sh – LOKAL ausführen: Server aus dem Repo aktualisieren
|
||
#
|
||
# Usage:
|
||
# ./deploy.sh dev|prod [--frontend] [--no-migrate]
|
||
#
|
||
# Ablauf: prüft, dass alles gepusht ist → ssh <host> './server-update.sh'
|
||
# (Server zieht aus dem Git-Remote, migriert, übernimmt Unit/sudoers aus dem Repo,
|
||
# startet neu) → optional Frontend bauen + hochladen (push-frontend.sh).
|
||
# Hosts stehen in deploy.local.env (gitignored, Vorlage: deploy.local.env.example).
|
||
# =============================================================================
|
||
set -euo pipefail
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
[[ -f "$SCRIPT_DIR/deploy.local.env" ]] && source "$SCRIPT_DIR/deploy.local.env"
|
||
|
||
die() { echo "[FEHLER] $*" >&2; exit 1; }
|
||
|
||
TARGET="${1:-}"; shift || true
|
||
case "$TARGET" in
|
||
dev) HOST="${TM_DEV_HOST:-}" ;;
|
||
prod) HOST="${TM_PROD_HOST:-}" ;;
|
||
*) die "Usage: ./deploy.sh dev|prod [--frontend] [--no-migrate]" ;;
|
||
esac
|
||
[[ -n "$HOST" ]] || die "Host für '$TARGET' nicht gesetzt (deploy.local.env)."
|
||
|
||
FRONTEND=false; UPDATE_ARGS=()
|
||
for a in "$@"; do
|
||
case "$a" in
|
||
--frontend) FRONTEND=true ;;
|
||
--no-migrate) UPDATE_ARGS+=("$a") ;;
|
||
*) die "Unbekannte Option: $a" ;;
|
||
esac
|
||
done
|
||
|
||
cd "$SCRIPT_DIR"
|
||
git fetch -q origin main
|
||
[[ -z "$(git status --porcelain --untracked-files=no)" ]] || echo "[!] Uncommittete Änderungen – der Server bekommt nur gepushte Commits."
|
||
[[ "$(git rev-parse HEAD)" == "$(git rev-parse origin/main)" ]] || die "Lokaler HEAD ist nicht gepusht (git push origin main)."
|
||
|
||
echo "==> Update $TARGET (${TM_SSH_USER:-root}@$HOST)"
|
||
ssh "${TM_SSH_USER:-root}@$HOST" "cd /opt/timemaster && ./server-update.sh ${UPDATE_ARGS[*]:-}"
|
||
|
||
if $FRONTEND; then
|
||
"$SCRIPT_DIR/push-frontend.sh" "$TARGET"
|
||
fi
|