danielnagel-site/deploy.sh

60 lines
1.5 KiB
Bash
Raw Normal View History

2026-05-08 21:53:28 +02:00
#!/usr/bin/env bash
set -euo pipefail
# --- Farben ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1" >&2; }
# --- Konfiguration ---
PROJECT_DIR="/srv/danielnagel-site"
VENV_DIR="${PROJECT_DIR}/.venv"
PUBLISH_CONF="publishconf.py"
OUTPUT_DIR="${PROJECT_DIR}/output"
# --- Sicherheits-Check: richtiges Verzeichnis ---
cd "$PROJECT_DIR"
if [ ! -f "$PUBLISH_CONF" ]; then
error "publishconf.py nicht gefunden. Falsches Verzeichnis?"
exit 1
fi
if [ ! -d "$VENV_DIR" ]; then
error "venv fehlt. Bitte erst setup.sh ausführen."
exit 1
fi
# --- 1. Git-Update ---
info "Hole aktuellen Stand vom Repo..."
git fetch --all --prune
git reset --hard origin/main
git submodule update --init --recursive --force
# --- 2. Dependencies refreshen ---
info "Aktualisiere Python-Dependencies..."
"${VENV_DIR}/bin/pip" install --quiet --upgrade pip
"${VENV_DIR}/bin/pip" install --quiet -r requirements.txt
# --- 3. Pelican bauen ---
info "Baue Site mit Pelican (Production-Config)..."
"${VENV_DIR}/bin/pelican" content \
-s "$PUBLISH_CONF" \
--delete-output-directory
info "Build fertig. Output liegt in: ${OUTPUT_DIR}"
# --- 4. Sanity-Check ---
if [ ! -f "${OUTPUT_DIR}/index.html" ]; then
error "index.html fehlt im Output! Build evtl. fehlgeschlagen."
exit 1
fi
# --- Done ---
info "Deploy erfolgreich. Caddy serviert die neuen Files automatisch. 🚀"