#!/bin/bash #============================================================================== # pre-commit hook (모노레포: Frontend + Backend) # Frontend: TypeScript 컴파일 + 린트 검증 # Backend: Maven 컴파일 검증 # 실패 시 커밋 차단 #============================================================================== FAILED=0 #------------------------------------------------------------------------------ # Frontend 검증 #------------------------------------------------------------------------------ if [ -d "frontend" ]; then echo "pre-commit: [Frontend] TypeScript 타입 체크 중..." if ! command -v npx &>/dev/null; then echo "경고: npx가 설치되지 않았습니다. Frontend 검증을 건너뜁니다." elif [ ! -d "frontend/node_modules" ]; then echo "경고: frontend/node_modules가 없습니다. 'cd frontend && npm install' 실행 후 다시 시도하세요." FAILED=1 else (cd frontend && npx tsc --noEmit --pretty 2>&1) TSC_RESULT=$? if [ $TSC_RESULT -ne 0 ]; then echo "" echo "╔══════════════════════════════════════════════════════════╗" echo "║ [Frontend] TypeScript 타입 에러! 커밋이 차단되었습니다.║" echo "╚══════════════════════════════════════════════════════════╝" FAILED=1 else echo "pre-commit: [Frontend] 타입 체크 성공" fi # ESLint 검증 if [ -f "frontend/eslint.config.js" ] || [ -f "frontend/eslint.config.mjs" ] || [ -f "frontend/.eslintrc.js" ] || [ -f "frontend/.eslintrc.json" ]; then echo "pre-commit: [Frontend] ESLint 검증 중..." (cd frontend && npx eslint src/ --ext .ts,.tsx --quiet 2>&1) LINT_RESULT=$? if [ $LINT_RESULT -ne 0 ]; then echo "" echo "╔══════════════════════════════════════════════════════════╗" echo "║ [Frontend] ESLint 에러! 커밋이 차단되었습니다. ║" echo "╚══════════════════════════════════════════════════════════╝" FAILED=1 else echo "pre-commit: [Frontend] ESLint 통과" fi fi fi fi #------------------------------------------------------------------------------ # Backend 검증 #------------------------------------------------------------------------------ if [ -d "backend" ] && [ -f "backend/pom.xml" ]; then echo "pre-commit: [Backend] Maven 컴파일 검증 중..." if ! command -v mvn &>/dev/null; then echo "경고: mvn이 설치되지 않았습니다. Backend 검증을 건너뜁니다." else (cd backend && mvn compile -q 2>&1) MVN_RESULT=$? if [ $MVN_RESULT -ne 0 ]; then echo "" echo "╔══════════════════════════════════════════════════════════╗" echo "║ [Backend] Maven 컴파일 에러! 커밋이 차단되었습니다. ║" echo "╚══════════════════════════════════════════════════════════╝" FAILED=1 else echo "pre-commit: [Backend] 컴파일 성공" fi fi fi #------------------------------------------------------------------------------ # 결과 #------------------------------------------------------------------------------ if [ $FAILED -ne 0 ]; then echo "" echo "pre-commit: 검증 실패! 에러를 수정한 후 다시 커밋해주세요." exit 1 fi echo "pre-commit: 모든 검증 통과"