1) 브랜치 보호(main): CI 두 개 초록불 + 승인 1 없이는 merge 불가, 학생 직접 push 차단(PR 워크플로), 관리자만 운영·배포용 직접 push (Gitea 설정) 2) 커버리지 측정: - 백엔드 JaCoCo — 현재 라인 36.7%, 바닥 30% ratchet(테스트 지우며 후퇴하면 빌드 실패) - 프론트 vitest 커버리지 — 채점 로직 runSql.js 라인 40% 바닥 3) 린트/포맷 CI 강제: - 프론트 ESLint 9(flat) 신규 — 버그류 에러, 훅 오용 검출 (현재 위반 0) - 백엔드 Spotless — 안 쓰는 import·줄끝 공백·파일끝 개행 (기존 코드 이미 clean, 재정렬 없음) - ci.yml에 포맷검사·린트·커버리지 단계 추가 백엔드 37개 테스트 + 커버리지 게이트 통과, 프론트 ESLint·커버리지 통과 확인. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
import { defineConfig } from 'vite'
|
|
import react from '@vitejs/plugin-react'
|
|
|
|
// 학습 포인트: 개발 중엔 프론트(5173)가 /api 요청을 백엔드(8080)로 넘겨줍니다(프록시).
|
|
// 운영에선 nginx/Caddy가 같은 역할을 합니다.
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
server: {
|
|
proxy: {
|
|
'/api': {
|
|
target: 'http://localhost:8080',
|
|
changeOrigin: true,
|
|
},
|
|
},
|
|
},
|
|
// 학습 포인트: 테스트가 "로직 계층(src/lib)"의 몇 %를 실행하는지 측정한다.
|
|
// UI 컴포넌트가 아니라, 채점·검증 같은 순수 로직에 안전망이 있는지가 중요.
|
|
// npm run coverage → 터미널 표 + coverage/index.html.
|
|
test: {
|
|
coverage: {
|
|
provider: 'v8',
|
|
include: ['src/lib/**'],
|
|
exclude: ['src/lib/**/*.test.js'],
|
|
reporter: ['text', 'html'],
|
|
// 채점 로직(runSql.js)엔 바닥을 건다 — 이 안전망을 지우면 CI 빨간불.
|
|
// glossary(데이터)·postcode/runJs(브라우저 연동)는 순수 유닛테스트 대상이 아니라 게이트 제외.
|
|
// 학생이 다른 로직에 테스트를 붙이면 여기에 파일을 추가해 바닥을 넓히는 게 목표.
|
|
thresholds: {
|
|
'src/lib/runSql.js': { lines: 40 },
|
|
},
|
|
},
|
|
},
|
|
})
|