kcg-ai-monitoring/.githooks/pre-commit
htlee e6319a571c refactor: 모노레포 구조로 전환 (frontend/ + backend/ + database/)
Phase 1: 모노레포 디렉토리 구조 구축

- 기존 React 프로젝트를 frontend/ 디렉토리로 이동 (git mv)
- backend/ 디렉토리 생성 (Phase 2에서 Spring Boot 초기화)
- database/migration/ 디렉토리 생성 (Phase 2에서 Flyway 마이그레이션)
- 루트 .gitignore에 frontend/, backend/ 경로 반영
- 루트 CLAUDE.md를 모노레포 가이드로 갱신
- Makefile 추가 (dev/build/lint 통합 명령)
- frontend/vite.config.ts에 /api → :8080 백엔드 proxy 설정
- .githooks/pre-commit을 모노레포 구조에 맞게 갱신
  (frontend/ 변경 시 frontend/ 내부에서 검증)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 08:47:24 +09:00

74 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
#==============================================================================
# pre-commit hook (Monorepo: frontend + backend)
# 변경된 영역만 선택적으로 검증
#==============================================================================
# 스테이징된 파일 목록
STAGED=$(git diff --cached --name-only --diff-filter=ACM)
# frontend 변경 확인
FRONTEND_CHANGED=$(echo "$STAGED" | grep -E '^frontend/' || true)
# backend 변경 확인
BACKEND_CHANGED=$(echo "$STAGED" | grep -E '^backend/' || true)
# === Frontend 검증 ===
if [ -n "$FRONTEND_CHANGED" ] && [ -d "frontend" ]; then
echo "pre-commit: frontend TypeScript 타입 체크 중..."
if ! command -v npx &>/dev/null; then
echo "경고: npx가 설치되지 않았습니다. 검증을 건너뜁니다."
elif [ ! -d "frontend/node_modules" ]; then
echo "경고: frontend/node_modules가 없습니다. 'cd frontend && npm install' 후 다시 시도하세요."
exit 1
else
(cd frontend && npx tsc --noEmit --pretty 2>&1)
TSC_RESULT=$?
if [ $TSC_RESULT -ne 0 ]; then
echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ TypeScript 타입 에러! 커밋이 차단되었습니다. ║"
echo "╚══════════════════════════════════════════════════════════╝"
exit 1
fi
echo "pre-commit: 타입 체크 성공"
# ESLint
if [ -f "frontend/eslint.config.js" ] || [ -f "frontend/eslint.config.mjs" ]; then
echo "pre-commit: frontend ESLint 검증 중..."
(cd frontend && npx eslint src/ --quiet 2>&1)
LINT_RESULT=$?
if [ $LINT_RESULT -ne 0 ]; then
echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ ESLint 에러! 커밋이 차단되었습니다. ║"
echo "║ 'cd frontend && npm run lint:fix'로 자동 수정 시도. ║"
echo "╚══════════════════════════════════════════════════════════╝"
exit 1
fi
echo "pre-commit: ESLint 통과"
fi
fi
fi
# === Backend 검증 ===
if [ -n "$BACKEND_CHANGED" ] && [ -d "backend" ] && [ -f "backend/pom.xml" ]; then
echo "pre-commit: backend 컴파일 체크 중..."
(cd backend && ./mvnw compile -q 2>&1)
MVN_RESULT=$?
if [ $MVN_RESULT -ne 0 ]; then
echo ""
echo "╔══════════════════════════════════════════════════════════╗"
echo "║ Backend 컴파일 에러! 커밋이 차단되었습니다. ║"
echo "╚══════════════════════════════════════════════════════════╝"
exit 1
fi
echo "pre-commit: backend 컴파일 성공"
fi
exit 0