#!/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 as a Gitea release attachment rather than Git # objects, keeping routine clones and deployments small. # shellcheck disable=SC1090 source "$MODELS_MANIFEST" : "${FALUKANT_MODELS_URL:?Falukant model URL is missing}" : "${FALUKANT_MODELS_SHA256:?Falukant model checksum is missing}" MODELS_ARCHIVE="$(mktemp /tmp/falukant-models-XXXXXX.tar.gz)" trap 'rm -f "$TEMP_ENV" "$MODELS_ARCHIVE"' EXIT echo "Lade Falukant-3D-Modelle (${FALUKANT_MODELS_URL})..." curl --fail --location --retry 3 --retry-delay 2 \ --output "$MODELS_ARCHIVE" "$FALUKANT_MODELS_URL" echo "${FALUKANT_MODELS_SHA256} ${MODELS_ARCHIVE}" | sha256sum --check --status echo "Entpacke Falukant-3D-Modelle..." rm -rf "$FRONTEND_DIR/models-src/3d/falukant" tar -xzf "$MODELS_ARCHIVE" -C "$TARGET_DIR" 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! ==="