AWESOMEDEV 7788509651
All checks were successful
CI / backend-test (push) Successful in 1m5s
CI / frontend-build (push) Successful in 17s
test(QA-05): 프론트 테스트 하네스(Vitest) + gradeSql 단위테스트 9개 + CI 연결
- Vitest 도입(devDep) + 'npm test' 스크립트
- src/lib/runSql.test.js: SQL 채점 순수함수 gradeSql 검증 9케이스 —
  행수 불일치·값 일치·orderMatters(순서 채점)·컬럼별칭 무시·타입 구분·빈결과
  (gradeSql은 학생 통과/실패를 결정하고 서버가 그 판정을 믿으므로 값어치 큼)
- CI(.gitea/workflows/ci.yml)에 'npm test' 단계 추가 — 회귀 시 배포 전 빨간불
- runSql/runJs는 Worker·WASM 의존이라 이번 범위 밖(후속 티켓)

로컬 검증: vitest 9 passed, 빌드 정상.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 17:15:20 +09:00

60 lines
2.2 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"
- 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
- name: 프론트 테스트 (vitest)
run: cd frontend && npm test
- name: 프론트 빌드 (JSX 오류·깨진 import 검출)
run: cd frontend && npm run build