.github/workflows/ci.yml (2896B)
1 name: CI
2
3 on:
4 push:
5 branches: [main]
6 pull_request:
7
8 env:
9 CARGO_TERM_COLOR: always
10
11 jobs:
12 check:
13 runs-on: ubuntu-latest
14 steps:
15 - uses: actions/checkout@v7
16
17 - uses: dtolnay/rust-toolchain@stable
18 with:
19 components: rustfmt, clippy
20
21 - uses: Swatinem/rust-cache@v2
22
23 - name: Format
24 run: cargo fmt --check
25
26 - name: Clippy
27 run: cargo clippy --all-targets -- -D warnings
28
29 - name: Test
30 run: cargo test
31
32 # sqzass가 자기 문서 사이트를 빌드할 수 있어야 한다. 이게 회귀 테스트다 —
33 # 단위 테스트가 놓치는 통합 문제를 실제 사이트가 잡는다.
34 - name: Build the docs site
35 run: cargo run --quiet -- build -i docs
36
37 # doctor는 빌드가 통과시키는 것들을 본다 — 미번역 페이지, 빈 섹션, 자리표시자
38 # base_url. 지금 문서 사이트는 깨끗하고, 그 상태를 유지하는 게 이 검사의 목적이다.
39 # 동시에 doctor 자체가 실제 사이트에서 도는지 확인하는 자리이기도 하다.
40 - name: Doctor
41 run: cargo run --quiet -- doctor -i docs
42
43 # 같은 입력이면 같은 바이트가 나와야 한다. 두 페이지가 같은 출력 URL을
44 # 주장할 때 파일 순회 순서에 따라 결과가 달라지는 종류의 버그를 잡는다.
45 - name: Build is reproducible
46 run: |
47 cargo run --quiet -- build -i docs -o "$RUNNER_TEMP/a"
48 cargo run --quiet -- build -i docs -o "$RUNNER_TEMP/b"
49 diff -r "$RUNNER_TEMP/a" "$RUNNER_TEMP/b"
50
51 # musl 릴리스 아티팩트가 쓰는 pure-rust 엔진 조합이 썩지 않게 지킨다.
52 # 크로스 엔진 바이트 비교는 하지 않는다 — fancy 덤프에는 문법 7개
53 # (PowerShell·JS(Babel)·Salt State·ARM Assembly 등)가 통째로 없어서 해당
54 # 펜스가 평문 폴백이 되고 js 토큰 해석도 갈린다. 아티팩트 간 차이는 버그가
55 # 아니라 문서화된 계약이다(docs/content/start/installation.md). 결정성은
56 # 엔진별로 지킨다.
57 pure-rust:
58 runs-on: ubuntu-latest
59 steps:
60 - uses: actions/checkout@v7
61
62 - uses: dtolnay/rust-toolchain@stable
63 with:
64 components: clippy
65
66 - uses: Swatinem/rust-cache@v2
67 with:
68 key: pure-rust
69
70 - name: Clippy
71 run: cargo clippy --all-targets --no-default-features --features pure-rust -- -D warnings
72
73 - name: Test
74 run: cargo test --no-default-features --features pure-rust
75
76 - name: Build is reproducible
77 run: |
78 cargo run --quiet --no-default-features --features pure-rust -- build -i docs -o "$RUNNER_TEMP/a"
79 cargo run --quiet --no-default-features --features pure-rust -- build -i docs -o "$RUNNER_TEMP/b"
80 diff -r "$RUNNER_TEMP/a" "$RUNNER_TEMP/b"