veza/.husky/pre-commit

48 lines
2.1 KiB
Text
Raw Normal View History

#!/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.
chore(web): drop legacy openapi-generator-cli — orval is the single source (v1.0.8 B9) Closes Phase 3 of the v1.0.8 OpenAPI typegen migration. With the four feature-service migrations (B2 dashboard, B3 profile, B4 playlist, B5 track, B6 partial auth) landed, the four remaining importers of the legacy typescript-axios output were all consuming pure model types — easily portable to the equivalent orval-generated models under src/services/generated/model/. Type imports re-pointed (4 sites): - src/types/index.ts — VezaBackendApiInternalModelsUser / Track / TrackStatus / Playlist - src/types/api.ts — same trio (Track / TrackStatus / User) - src/features/auth/types/index.ts — TokenResponse + ResendVerificationRequest - src/features/tracks/types/track.ts — Track / TrackStatus Same shapes, sourced from openapi.yaml — orval and the legacy generator were emitting structurally-identical interfaces because swaggo's spec is the common source. Verified by `npm run typecheck` clean and 1187/1188 tests green (1 skipped is the long-standing ResetPasswordPage flake). Cleanup performed: 1. `git rm -rf apps/web/src/types/generated/` — 198 files / ~23k LOC of auto-generated typescript-axios output gone. 2. `npm uninstall @openapitools/openapi-generator-cli` — drops the ~150 MB Java-bundled dependency tree from node_modules. 3. `apps/web/scripts/generate-types.sh` — collapsed from a two-step "[1/2] legacy / [2/2] orval" pipeline to a single orval call. 4. `apps/web/scripts/check-types-sync.sh` — now diffs only `src/services/generated/`. The "regenerate two trees" complexity is gone. 5. `.husky/pre-commit` — message updated to point at the new tree. Knock-on: the pre-commit hook should run noticeably faster (no Java JVM spin-up to invoke openapi-generator-cli on every commit), and a fresh `npm install` is leaner. Not yet removed (still active under hand-written services): - services/api/{auth,users,tracks,playlists,queue,search,social}.ts — these wrap features/<feature>/api/* services and remain in use by 2-15 callers each. They live in the orval-driven world (their underlying calls go through orval mutator) and don't import the legacy types, so they're safe parallel surfaces. Consolidation punted to v1.0.9 once all auth/queue endpoints are annotated and the remaining authService 5/9 functions ship. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 22:02:58 +00:00
# Drift guard: ensure apps/web/src/services/generated/ (orval) matches
2026-04-23 18:33:13 +00:00
# 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"
chore(web): drop legacy openapi-generator-cli — orval is the single source (v1.0.8 B9) Closes Phase 3 of the v1.0.8 OpenAPI typegen migration. With the four feature-service migrations (B2 dashboard, B3 profile, B4 playlist, B5 track, B6 partial auth) landed, the four remaining importers of the legacy typescript-axios output were all consuming pure model types — easily portable to the equivalent orval-generated models under src/services/generated/model/. Type imports re-pointed (4 sites): - src/types/index.ts — VezaBackendApiInternalModelsUser / Track / TrackStatus / Playlist - src/types/api.ts — same trio (Track / TrackStatus / User) - src/features/auth/types/index.ts — TokenResponse + ResendVerificationRequest - src/features/tracks/types/track.ts — Track / TrackStatus Same shapes, sourced from openapi.yaml — orval and the legacy generator were emitting structurally-identical interfaces because swaggo's spec is the common source. Verified by `npm run typecheck` clean and 1187/1188 tests green (1 skipped is the long-standing ResetPasswordPage flake). Cleanup performed: 1. `git rm -rf apps/web/src/types/generated/` — 198 files / ~23k LOC of auto-generated typescript-axios output gone. 2. `npm uninstall @openapitools/openapi-generator-cli` — drops the ~150 MB Java-bundled dependency tree from node_modules. 3. `apps/web/scripts/generate-types.sh` — collapsed from a two-step "[1/2] legacy / [2/2] orval" pipeline to a single orval call. 4. `apps/web/scripts/check-types-sync.sh` — now diffs only `src/services/generated/`. The "regenerate two trees" complexity is gone. 5. `.husky/pre-commit` — message updated to point at the new tree. Knock-on: the pre-commit hook should run noticeably faster (no Java JVM spin-up to invoke openapi-generator-cli on every commit), and a fresh `npm install` is leaner. Not yet removed (still active under hand-written services): - services/api/{auth,users,tracks,playlists,queue,search,social}.ts — these wrap features/<feature>/api/* services and remain in use by 2-15 callers each. They live in the orval-driven world (their underlying calls go through orval mutator) and don't import the legacy types, so they're safe parallel surfaces. Consolidation punted to v1.0.9 once all auth/queue endpoints are annotated and the remaining authService 5/9 functions ship. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 22:02:58 +00:00
echo "💡 Then stage the updated src/services/generated/ and retry."
2026-04-23 18:33:13 +00:00
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