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>
73 lines
2.9 KiB
YAML
73 lines
2.9 KiB
YAML
# 이 파일이 하는 일: push/PR 때마다 자동으로 백엔드 테스트 + 프론트 빌드를 돌리는 CI.
|
|
# 학습 포인트 — CI(지속적 통합)는 "사람이 깜빡해도 기계가 대신 검사하는 안전망"이다.
|
|
# 누가 코드를 밀 때마다 Gitea Actions 러너가 이 순서를 실행하고, 하나라도 실패하면
|
|
# 빨간 X로 알려 준다. 실제로 있었던 회귀(보안헤더로 문서 깨짐 등)를 조기에 잡는 그물이다.
|
|
# Gitea Actions는 GitHub Actions와 문법이 거의 같다 — 배운 걸 GitHub에서도 그대로 쓴다.
|
|
name: CI
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
|
|
jobs:
|
|
# ── 백엔드: 단위 테스트 (규칙이 깨지면 여기서 빨간불) ──
|
|
backend-test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: 코드 받기
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Java 21 준비
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
distribution: temurin
|
|
java-version: "21"
|
|
|
|
# mvnw 래퍼가 없어서 Maven을 내려받아 쓴다(작고 빠르다).
|
|
# ⚠️ dlcdn(미러)은 최신 몇 버전만 두고 옛 버전을 지운다 — 3.9.9가 404로 사라져 CI가 깨졌었다.
|
|
# archive.apache.org는 모든 버전을 영구 보관하므로 미래에도 안 깨진다. (-fSL은 실패 시 즉시 에러)
|
|
- name: Maven 설치
|
|
run: |
|
|
curl -fsSL https://archive.apache.org/dist/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz -o /tmp/mvn.tgz
|
|
tar xzf /tmp/mvn.tgz -C /opt
|
|
echo "/opt/apache-maven-3.9.9/bin" >> "$GITHUB_PATH"
|
|
|
|
# 포맷·위생 검사 (안 쓰는 import·줄끝 공백·파일끝 개행) — 어긋나면 여기서 빨간불.
|
|
# 로컬에서 mvn spotless:apply 로 자동 교정 후 다시 밀면 통과.
|
|
- name: 포맷 검사 (Spotless)
|
|
run: |
|
|
cd backend
|
|
mvn -B -q spotless:check
|
|
|
|
# 테스트 실행 + JaCoCo 커버리지 게이트(라인 30% 미만이면 실패 — 후퇴 방지 바닥).
|
|
- name: 백엔드 테스트 + 커버리지
|
|
run: |
|
|
cd backend
|
|
mvn -B -q test
|
|
|
|
# ── 프론트: 빌드 (JSX 문법 오류·깨진 import를 잡는다) ──
|
|
frontend-build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: 코드 받기
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Node 22 준비
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: "22"
|
|
|
|
- name: 의존성 설치
|
|
run: cd frontend && npm ci
|
|
|
|
# 린트: 안 쓰는 변수·존재하지 않는 전역·React 훅 오용 등 버그류 검출.
|
|
- name: 린트 (ESLint)
|
|
run: cd frontend && npm run lint
|
|
|
|
# 테스트 + 커버리지 게이트(채점 로직 runSql.js 라인 40% 미만이면 실패).
|
|
- name: 프론트 테스트 + 커버리지
|
|
run: cd frontend && npm run coverage
|
|
|
|
- name: 프론트 빌드 (JSX 오류·깨진 import 검출)
|
|
run: cd frontend && npm run build
|