#!/bin/bash # Preflight checks - draait voor elke deploy om veelvoorkomende fouten te vangen # # Checks: # 1. ESLint # 2. Vite build (syntax errors, missing imports) # 3. Hardcoded asset paden die BASE_URL missen # 4. Gerefereerde public/ bestanden bestaan daadwerkelijk set -e ERRORS=0 echo "=== Preflight Checks ===" echo "" # 1. Lint check echo "[1/4] ESLint..." if npm run lint --silent 2>&1; then echo " OK" else echo " WAARSCHUWING: lint errors gevonden (niet-blokkerend)" fi echo "" # 2. Build check echo "[2/4] Vite build..." npm run build --silent echo " OK" echo "" # 3. Check voor hardcoded asset paden zonder BASE_URL # Zoekt naar src= of avatar: paden die beginnen met "/" gevolgd door een bestandsnaam # maar NIET import.meta.env.BASE_URL gebruiken echo "[3/4] Asset paden check (BASE_URL)..." BAD_PATHS=$(grep -rn 'src=\s*"\/[a-zA-Z0-9]' src/ --include="*.jsx" --include="*.js" 2>/dev/null || true) BAD_AVATAR=$(grep -rn "avatar:\s*[\"']/[a-zA-Z0-9]" src/ --include="*.jsx" --include="*.js" 2>/dev/null || true) if [ -n "$BAD_PATHS" ] || [ -n "$BAD_AVATAR" ]; then echo " FOUT: Hardcoded asset paden gevonden zonder BASE_URL prefix!" echo " Deze werken lokaal maar breken op productie (/workshopclaudecode/)." echo "" [ -n "$BAD_PATHS" ] && echo "$BAD_PATHS" | sed 's/^/ /' [ -n "$BAD_AVATAR" ] && echo "$BAD_AVATAR" | sed 's/^/ /' echo "" echo " Fix: gebruik \${import.meta.env.BASE_URL}bestandsnaam.jpg" ERRORS=$((ERRORS + 1)) else echo " OK" fi echo "" # 4. Check dat gerefereerde bestanden in public/ bestaan echo "[4/4] Public assets bestaan..." MISSING=0 for file in public/*; do [ -f "$file" ] || continue done # Zoek alle BASE_URL referenties en check of het bestand bestaat in public/ # Matcht alleen bestandsnamen (letters, cijfers, punt, streepje, underscore) REFS=$(grep -roh 'BASE_URL}[a-zA-Z0-9._/~-]*' src/ --include="*.jsx" --include="*.js" 2>/dev/null | sed 's/BASE_URL}//' | grep -v '^$' || true) for ref in $REFS; do if [ ! -f "public/$ref" ]; then echo " FOUT: public/$ref bestaat niet (gerefereerd in code)" MISSING=$((MISSING + 1)) fi done if [ "$MISSING" -eq 0 ]; then echo " OK" else ERRORS=$((ERRORS + MISSING)) fi echo "" # Resultaat echo "=== Resultaat ===" if [ "$ERRORS" -gt 0 ]; then echo "GEFAALD: $ERRORS fout(en) gevonden. Fix deze voor deploy." exit 1 else echo "ALLES OK - klaar voor deploy." exit 0 fi