#!/usr/bin/env bash set -euo pipefail TARGET_DIR="${1:?target dir required}" FRONTEND_DIR="$TARGET_DIR/frontend" CURRENT_LINK="/opt/yourpart" CURRENT_FRONTEND="$CURRENT_LINK/frontend" CURRENT_ROOT_ENV="$CURRENT_LINK/.env" MODELS_MANIFEST="$TARGET_DIR/falukant-models.env" echo "=== YourPart Frontend Update ===" echo "Ziel: $FRONTEND_DIR" echo "NOTE: .env files will NOT be overwritten" cd "$FRONTEND_DIR" if [ -d "dist" ]; then echo "Korrigiere Berechtigungen für dist-Verzeichnis..." sudo -n chown -R "$USER:$USER" dist/ 2>/dev/null || true fi echo "Lösche alle generierten Verzeichnisse..." rm -rf dist/ rm -rf node_modules/.vite/ rm -rf node_modules/.cache/ TEMP_ENV="/tmp/yourpart-frontend-env-$$" if [ -f "$CURRENT_ROOT_ENV" ]; then echo "Nutze bestehende .env-Datei vom Live-System (Root) für Build..." cp "$CURRENT_ROOT_ENV" "$TEMP_ENV" cp "$TEMP_ENV" .env elif [ -f "$CURRENT_FRONTEND/.env" ]; then echo "Nutze bestehende .env-Datei vom Live-System (Frontend) für Build..." cp "$CURRENT_FRONTEND/.env" "$TEMP_ENV" cp "$TEMP_ENV" .env elif [ -f .env.production ]; then echo "Nutze .env.production für Build..." cp .env.production .env elif [ -f .env.server ]; then echo "Nutze .env.server für Build..." cp .env.server .env fi echo "Baue Frontend neu..." export VITE_API_BASE_URL="${VITE_API_BASE_URL:-https://www.your-part.de}" export VITE_DAEMON_SOCKET="${VITE_DAEMON_SOCKET:-wss://www.your-part.de:4551}" export VITE_CHAT_WS_URL="${VITE_CHAT_WS_URL:-wss://www.your-part.de:1235}" echo "VITE_API_BASE_URL=$VITE_API_BASE_URL" echo "VITE_DAEMON_SOCKET=$VITE_DAEMON_SOCKET" echo "VITE_CHAT_WS_URL=$VITE_CHAT_WS_URL" echo "Installiere Dependencies..." npm install if [ ! -f "$MODELS_MANIFEST" ]; then echo "ERROR: Falukant model manifest missing: $MODELS_MANIFEST" >&2 exit 1 fi # Source GLBs are versioned in their own Git-LFS repository. Keep them outside # the application worktree, because update.sh removes untracked files there. # shellcheck disable=SC1090 source "$MODELS_MANIFEST" : "${FALUKANT_MODELS_REPOSITORY:?Falukant models repository is missing}" : "${FALUKANT_MODELS_REF:?Falukant models ref is missing}" ASSETS_DIR="$TARGET_DIR/.yourpart-assets" trap 'rm -f "$TEMP_ENV"' EXIT if ! git lfs version >/dev/null 2>&1; then echo "ERROR: git-lfs is required to retrieve Falukant models" >&2 exit 1 fi echo "Lade Falukant-3D-Modelle aus ${FALUKANT_MODELS_REPOSITORY}@${FALUKANT_MODELS_REF}..." rm -rf "$ASSETS_DIR" GIT_LFS_SKIP_SMUDGE=1 git clone --depth 1 --branch "$FALUKANT_MODELS_REF" \ "$FALUKANT_MODELS_REPOSITORY" "$ASSETS_DIR" git -C "$ASSETS_DIR" lfs pull ASSET_MODELS_DIR="$ASSETS_DIR/models-src/3d/falukant" if [ ! -d "$ASSET_MODELS_DIR/characters" ]; then echo "ERROR: Falukant models are missing from ${FALUKANT_MODELS_REPOSITORY}@${FALUKANT_MODELS_REF}" >&2 exit 1 fi echo "Übernehme Falukant-3D-Quellmodelle..." rm -rf "$FRONTEND_DIR/models-src/3d/falukant" mkdir -p "$FRONTEND_DIR/models-src/3d" cp -a "$ASSET_MODELS_DIR" "$FRONTEND_DIR/models-src/3d/" echo "Optimiere Falukant-3D-Modelle..." npm run optimize-models echo "Baue Frontend..." npm run build if [ -f "$FRONTEND_DIR/.env" ]; then echo "✓ Bestehende .env-Datei wurde beibehalten" else echo "⚠ Keine .env-Datei im Zielverzeichnis gefunden" fi echo "Setze Berechtigungen..." sudo -n chown -R www-data:www-data "$FRONTEND_DIR/dist" if [ -f "$FRONTEND_DIR/.env" ]; then sudo -n chown www-data:www-data "$FRONTEND_DIR/.env" sudo -n chmod 644 "$FRONTEND_DIR/.env" fi sudo -n chmod -R 755 "$FRONTEND_DIR/dist" echo "=== Frontend Update abgeschlossen! ==="