kcg-monitoring/.githooks/pre-commit
htlee fea77361d8 chore: CI/CD 파이프라인 + 배포 설정 + 루트 정리
- .gitea/workflows/deploy.yml: main merge 시 frontend/backend 자동 빌드·배포
- deploy/kcg-backend.service: systemd 서비스 (JDK 17, 2~4GB 힙)
- deploy/nginx-kcg.conf: SSL + SPA 서빙 + API 프록시 + 외부 API CORS 프록시
- .githooks/pre-commit: 모노레포 대응 (frontend tsc+eslint, backend mvn compile)
- .gitignore: frontend/backend/prediction 각각 빌드 산출물 추가
- CLAUDE.md: 모노레포 구조 반영

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 13:55:21 +09:00

89 lines
4.2 KiB
Bash
Executable File

#!/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: 모든 검증 통과"