Files
yourpart3/update-frontend.sh
Torsten Schulz (local) b2591da428
Some checks failed
Deploy to production / deploy (push) Failing after 1m46s
refactor(update scripts): enhance directory handling and error management
- Updated update-backend.sh and update-frontend.sh to accept a target directory as a parameter, improving flexibility.
- Refactored paths to use the target directory for all operations, ensuring consistency and reducing hardcoded values.
- Added error handling with 'set -euo pipefail' for better script reliability.
- Improved user feedback by displaying the target directory during updates.
2026-03-30 13:19:11 +02:00

123 lines
3.7 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.
#!/bin/bash
set -euo pipefail
TARGET_DIR="${1:?Zielverzeichnis fehlt: ./update-frontend.sh <z. B. /opt/yourpart-green>}"
FRONTEND_TARGET="$TARGET_DIR/frontend"
echo "=== YourPart Frontend Update ==="
echo "Ziel: $FRONTEND_TARGET"
echo "NOTE: .env files will NOT be overwritten"
# 1. Zum Frontend-Verzeichnis wechseln
cd frontend
# 2. Berechtigungen für dist-Verzeichnis korrigieren (falls vorhanden)
if [ -d "dist" ]; then
echo "Korrigiere Berechtigungen für dist-Verzeichnis..."
sudo chown -R $USER:$USER dist/ 2>/dev/null || true
fi
# 3. Alle generierten Verzeichnisse löschen
echo "Lösche alle generierten Verzeichnisse..."
rm -rf dist/
rm -rf node_modules/.vite/
rm -rf node_modules/.cache/
# 4. Verwende bestehende .env-Dateien im Zielverzeichnis für Build
# Kopiere temporär die bestehende .env vom Ziel, falls vorhanden
TEMP_ENV="/tmp/yourpart-frontend-env-$$"
if [ -f "$FRONTEND_TARGET/.env" ]; then
echo "Nutze bestehende .env-Datei vom Zielverzeichnis für Build..."
sudo cp "$FRONTEND_TARGET/.env" "$TEMP_ENV"
sudo chown $USER:$USER "$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
# 5. Frontend neu bauen VITE_* aus Environment übernehmen oder Defaults setzen
echo "Baue Frontend neu..."
export VITE_API_BASE_URL=${VITE_API_BASE_URL:-https://www.your-part.de}
# Standard: Daemon direkt auf Port 4551, nicht über Apache-Proxy
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"
# 5a. Dependencies installieren
echo "Installiere Dependencies..."
npm install
if [ $? -ne 0 ]; then
echo "❌ npm install fehlgeschlagen!"
# Temporäre .env-Datei aufräumen
rm -f "$TEMP_ENV"
exit 1
fi
# 5b. Frontend neu bauen
npm run build
if [ $? -ne 0 ]; then
echo "❌ Build fehlgeschlagen!"
# Temporäre .env-Datei aufräumen
rm -f "$TEMP_ENV"
exit 1
fi
echo "✅ Build erfolgreich!"
# Temporäre .env-Datei aufräumen
rm -f "$TEMP_ENV"
# 6. Zielverzeichnis erstellen (falls nicht vorhanden)
echo "Erstelle Zielverzeichnis..."
sudo mkdir -p "$FRONTEND_TARGET/dist"
# 7. Altes Frontend löschen (außer .env-Dateien)
echo "Lösche altes Frontend (außer .env-Dateien)..."
sudo find "$FRONTEND_TARGET/dist" -mindepth 1 -exec rm -rf {} + 2>/dev/null || true
# 8. Neues Frontend kopieren
echo "Kopiere neues Frontend..."
sudo cp -r dist/* "$FRONTEND_TARGET/dist/"
# 9. .env-Dateien NICHT überschreiben - bestehende beibehalten
if [ -f "$FRONTEND_TARGET/.env" ]; then
echo "✓ Bestehende .env-Datei wurde beibehalten (nicht überschrieben)"
else
echo "⚠ Keine .env-Datei im Zielverzeichnis gefunden"
# Falls .env im Quellverzeichnis existiert, kopiere sie nur wenn sie im Ziel nicht existiert
if [ -f .env ]; then
echo "Kopiere .env-Datei (nur wenn nicht vorhanden)..."
sudo cp .env "$FRONTEND_TARGET/"
fi
fi
# 10. Berechtigungen setzen
echo "Setze Berechtigungen..."
sudo chown -R www-data:www-data "$FRONTEND_TARGET/dist"
if [ -f "$FRONTEND_TARGET/.env" ]; then
sudo chown www-data:www-data "$FRONTEND_TARGET/.env"
sudo chmod 644 "$FRONTEND_TARGET/.env"
fi
sudo chmod -R 755 "$FRONTEND_TARGET/dist"
# 11. Apache neu laden
echo "Lade Apache neu..."
sudo systemctl reload apache2
echo ""
echo "=== Frontend Update abgeschlossen! ==="
echo "✅ Frontend neu gebaut"
echo "✅ Frontend aktualisiert"
echo "✅ .env-Dateien wurden NICHT überschrieben"
echo "✅ Apache neu geladen"
echo ""