.github/workflows/pages.yml (2138B)
1 name: Deploy docs
2
3 on:
4 push:
5 branches: [main]
6 workflow_dispatch:
7
8 permissions:
9 contents: read
10 pages: write
11 id-token: write
12
13 # 배포는 직렬로. 진행 중인 배포를 취소하면 사이트가 반쯤 갱신된 상태로 남을 수 있다.
14 concurrency:
15 group: pages
16 cancel-in-progress: false
17
18 env:
19 CARGO_TERM_COLOR: always
20
21 jobs:
22 build:
23 runs-on: ubuntu-latest
24 steps:
25 - uses: actions/checkout@v7
26
27 - uses: dtolnay/rust-toolchain@stable
28
29 - uses: Swatinem/rust-cache@v2
30
31 - uses: actions/configure-pages@v6
32
33 - name: Build the site
34 run: cargo run --quiet -- build -i docs
35
36 # docs/static/ 아래 파일은 sqzass가 직접 출력에 넣는다. CNAME은 이름이 곧
37 # 계약이므로 콘텐츠 해시를 붙이지 않는다.
38 - name: Check the custom domain made it into the output
39 run: test -f docs/public/CNAME && cat docs/public/CNAME
40
41 - uses: actions/upload-pages-artifact@v5
42 with:
43 path: docs/public
44
45 deploy:
46 needs: build
47 runs-on: ubuntu-latest
48 environment:
49 name: github-pages
50 url: ${{ steps.deployment.outputs.page_url || steps.retry.outputs.page_url }}
51 steps:
52 # 위의 concurrency는 **워크플로 실행**을 직렬화한다. Pages 배포는 그보다 오래
53 # 산다 — 앞선 실행이 끝난 뒤에도 GitHub 쪽에서 처리 중일 수 있고, 그 창에
54 # 들어가면 400 "due to in progress deployment"로 죽는다. 커밋을 연달아 밀면
55 # 실제로 걸린다.
56 #
57 # 앞선 배포는 어차피 곧 끝나므로, 기다렸다 한 번 더 시도하면 된다. 배포가
58 # 상태를 바꾸기 전에 실패하는 것이라 재시도가 사이트를 반쯤 갱신된 상태로
59 # 만들지 않는다.
60 - id: deployment
61 uses: actions/deploy-pages@v5
62 continue-on-error: true
63
64 - name: Wait for the previous deployment to settle
65 if: steps.deployment.outcome == 'failure'
66 run: sleep 90
67
68 - id: retry
69 if: steps.deployment.outcome == 'failure'
70 uses: actions/deploy-pages@v5