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>
74 lines
3.5 KiB
Bash
Executable File
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
|