#!/bin/bash #============================================================================== # pre-commit hook (모노레포 React TypeScript) # apps/web TypeScript 컴파일 + 린트 검증 — 실패 시 커밋 차단 #============================================================================== REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) echo "pre-commit: TypeScript 타입 체크 중..." # npm 확인 if ! command -v npx &>/dev/null; then echo "경고: npx가 설치되지 않았습니다. 검증을 건너뜁니다." exit 0 fi # node_modules 확인 if [ ! -d "${REPO_ROOT}/node_modules" ]; then echo "경고: node_modules가 없습니다. 'npm install' 실행 후 다시 시도하세요." exit 1 fi # apps/web TypeScript 타입 체크 if [ -d "${REPO_ROOT}/apps/web" ]; then cd "${REPO_ROOT}/apps/web" npx tsc --noEmit --pretty 2>&1 TSC_RESULT=$? if [ $TSC_RESULT -ne 0 ]; then echo "" echo "╔══════════════════════════════════════════════════════════╗" echo "║ TypeScript 타입 에러! 커밋이 차단되었습니다. ║" echo "║ 타입 에러를 수정한 후 다시 커밋해주세요. ║" echo "╚══════════════════════════════════════════════════════════╝" echo "" exit 1 fi echo "pre-commit: apps/web 타입 체크 성공" # ESLint 검증 (설정 파일이 있는 경우만) if [ -f "eslint.config.js" ] || [ -f "eslint.config.mjs" ] || [ -f ".eslintrc.js" ] || [ -f ".eslintrc.json" ] || [ -f ".eslintrc.cjs" ]; then echo "pre-commit: ESLint 검증 중..." npx eslint src/ --quiet 2>&1 LINT_RESULT=$? if [ $LINT_RESULT -ne 0 ]; then echo "" echo "╔══════════════════════════════════════════════════════════╗" echo "║ ESLint 에러! 커밋이 차단되었습니다. ║" echo "║ 'npm run lint -- --fix'로 자동 수정을 시도해보세요. ║" echo "╚══════════════════════════════════════════════════════════╝" echo "" exit 1 fi echo "pre-commit: ESLint 통과" fi fi cd "${REPO_ROOT}"