Files
timemaster/deploy.sh
T
patrickandClaude Sonnet 5.5 7e165d37b6
Security Audit / Python Dependency Audit (push) Canceled after 0s
Security Audit / Node.js Dependency Audit (push) Canceled after 0s
Security Audit / Frontend Build (tsc + vite) (push) Canceled after 0s
feat(deploy): deploy.sh + lokale Host-Konfig, server-update/setup_server übernehmen Unit und sudoers aus dem Repo
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 09:40:35 +01:00

47 lines
1.8 KiB
Bash
Executable File
Raw 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
# =============================================================================
# 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