workshopclaudecode/preflight.sh

86 lines
2.4 KiB
Bash
Raw Normal View History

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