- .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>
89 lines
4.2 KiB
Bash
Executable File
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: 모든 검증 통과"
|