-
Notifications
You must be signed in to change notification settings - Fork 0
57 lines (47 loc) · 1.96 KB
/
Copy pathci.yml
File metadata and controls
57 lines (47 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
name: CI
on:
pull_request:
push:
branches: [main]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
# package.json 의 engines 하한(^22.22.2 || >=24.15.0)을 만족해야 한다.
# Node 20 에서는 jsdom 30 이 쓰는 undici 가 markAsUncloneable 을 찾지 못해
# 테스트가 한 건도 돌지 않고 죽는다.
node-version: 24
cache: npm
- run: npm ci
# 단계를 나눠 두면 어디서 깨졌는지 로그를 뒤지지 않아도 보인다.
# 앞 단계가 실패해도 뒤 단계 결과를 함께 보려면 `if: always()` 를 쓴다 —
# PR 한 번에 고칠 거리를 모두 알려 주는 편이 왕복을 줄인다.
- name: Typecheck
run: npm run typecheck
- name: Lint
if: always()
run: npm run lint
- name: Test
if: always()
run: npm test
# 스키마 계약 테스트가 통과해도 빌드가 깨질 수 있다(서버 컴포넌트 경계 등).
- name: Build (web)
run: npm run build
env:
NEXT_PUBLIC_API_URL: http://localhost:8080
# 웹 빌드가 통과해도 앱 빌드는 깨질 수 있다.
# 동적 라우트(`[id]`)를 새로 만들면 정적 export 가 "미리 그릴 값을 모른다" 며 멈추는데,
# 웹 빌드는 그런 라우트를 아무 문제 없이 받아들인다. 여기서만 드러난다.
- name: Build (app)
if: always()
run: npm run build:app
env:
NEXT_PUBLIC_API_URL: http://localhost:8080
# 앱 빌드는 웹 전용 파일을 잠시 비켜 뒀다가 되돌린다(scripts/build-app.mjs).
# 되돌리지 못한 채 끝났다면 작업 트리가 더럽다 — 조용히 지나가면 안 된다.
- name: 앱 빌드가 작업 트리를 건드리지 않았는지
if: always()
run: git diff --exit-code