Files
yourpart3/update-frontend.sh
Torsten Schulz (local) 4e20111331
Some checks failed
Deploy to production / deploy (push) Failing after 1m27s
feat(deploy): retrieve Falukant models from Git LFS
2026-09-24 15:31:51 +02:00

116 lines
3.6 KiB
Bash
Executable File

#!/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! ==="