#!/usr/bin/env sh # Each step runs in a subshell so the cd does not leak across steps. # Pre-commit runs from the repo root; every cd below is relative to that. # Drift guard: ensure apps/web/src/services/generated/ (orval) matches # veza-backend-api/openapi.yaml. Regenerates locally then fails if the # committed types don't match the freshly-regenerated output. # Skip with SKIP_TYPES=1 for emergency commits (documented in CLAUDE.md). if [ -z "$SKIP_TYPES" ]; then (cd apps/web && bash scripts/check-types-sync.sh) || { echo "❌ OpenAPI types are out of sync with veza-backend-api/openapi.yaml." echo "💡 Run: make openapi && cd apps/web && bash scripts/generate-types.sh" echo "💡 Then stage the updated src/services/generated/ and retry." echo "💡 Tip: SKIP_TYPES=1 bypasses (not recommended)." exit 1 } fi # Implicit 10.1: Type checking # Prevent commits with TypeScript errors (warnings are allowed) (cd apps/web && npm run typecheck 2>&1 | grep -q "error TS") && { echo "❌ Type checking failed. Please fix TypeScript errors before committing." echo "💡 Run 'npm run typecheck' to see all errors." exit 1 } || true # Implicit 10.2: Linting # Prevent commits with linting errors (warnings are allowed). # Pattern matches "(N error" with N>=1 in ESLint's summary line — # avoids false positive on "(0 errors, K warnings)". (cd apps/web && npm run lint 2>&1 | grep -qE "\([1-9][0-9]* error") && { echo "❌ Linting failed. Please fix linting errors before committing." echo "💡 Tip: Run 'npm run lint:fix' to automatically fix some issues." exit 1 } || true # Implicit 10.3: Test checking (optional, fast unit tests only) # Skip if SKIP_TESTS environment variable is set (for quick commits) # Only runs unit tests (not E2E) to keep it fast if [ -z "$SKIP_TESTS" ]; then (cd apps/web && npm test -- --run 2>&1 | grep -q "FAIL") && { echo "❌ Tests failed. Please fix failing tests before committing." echo "💡 Tip: Run 'npm test' to see all test failures." echo "💡 Tip: Set SKIP_TESTS=1 to skip tests for this commit (not recommended)." exit 1 } || true fi