www.git

www

~ Personal site — projects, posts, about. Built with sqzass.
git clone https://github.com/debuman/www.git

.github/workflows/pages.yml (3829B)

      1 name: Deploy
      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 # 배포를 직렬화한다. cancel-in-progress 를 켜면 절반쯤 올라간 배포가 취소되어
     14 # 사이트가 부분적으로만 갱신된 상태로 남는데, 그건 기다리는 것보다 나쁘다.
     15 concurrency:
     16   group: pages
     17   cancel-in-progress: false
     18 
     19 jobs:
     20   build:
     21     runs-on: ubuntu-latest
     22     steps:
     23       - uses: actions/checkout@v7
     24 
     25       # 빌드보다 먼저 돈다. 셋 다 sqzass 가 확인해 주지 않는 것들이라,
     26       # 여기서 안 잡으면 조용히 배포된다.
     27       #
     28       # check.py 의 죽은 링크 검사만은 public/ 이 있어야 돌기 때문에 빌드 뒤에
     29       # 한 번 더 부른다. 여기서는 조용히 건너뛴다.
     30       - name: Check content integrity
     31         run: python3 tools/check.py
     32 
     33       # 폰트는 실제로 쓰는 글자만 담고 있다. 새 한글이 콘텐츠에 들어왔는데
     34       # 서브셋을 다시 안 만들었으면 그 글자만 시스템 폰트로 떨어진다.
     35       - name: Check font coverage
     36         run: |
     37           python3 -m pip install --quiet fonttools brotli
     38           python3 tools/fonts.py --check
     39 
     40       # 별 개수는 front matter 에 구워져 있다. repo 를 추가하고 숫자를 안
     41       # 채웠으면 그 항목만 빈칸이 된다.
     42       - name: Check star counts
     43         run: python3 tools/stars.py --check
     44 
     45       - uses: dtolnay/rust-toolchain@stable
     46 
     47       # Swatinem/rust-cache 는 여기서 쓰지 않는다. 이 레포에는 Cargo.toml 이
     48       # 없어서 워크스페이스를 못 찾고 매번 에러를 남긴다 — 캐시할 크레이트는
     49       # 이 레포가 아니라 sqzass 쪽에 있다.
     50 
     51       # TODO: sqzer-x/sqzass#1 이 머지되면 --branch 를 지운다.
     52       # 목록에 날짜를 실어 오는 PageRefCtx.date 가 그 PR 에 있고, Posts 원장이
     53       # 그걸 쓴다.
     54       - name: Install sqzass
     55         run: cargo install --git https://github.com/sqzer-x/sqzass --branch feat/pageref-date --locked
     56 
     57       - uses: actions/configure-pages@v6
     58 
     59       - name: Build
     60         run: sqzass build -i .
     61 
     62       # 이번에는 죽은 링크 검사까지 돈다. 템플릿이 조립한 주소는 sqzass 가
     63       # 확인해 주지 않는다 — 한국어 홈을 없앤 날 로고 링크가 열한 장에서
     64       # 없는 페이지를 가리킨 채로 배포됐다.
     65       - name: Check built links
     66         run: python3 tools/check.py
     67 
     68       # 재현성은 sqzass 가 내세우는 것이므로 이 사이트에서도 확인한다.
     69       # 같은 입력을 두 번 빌드해서 바이트가 다르면 배포하지 않는다.
     70       - name: Build again and compare
     71         run: |
     72           mv public /tmp/first
     73           sqzass build -i .
     74           diff -r /tmp/first public
     75 
     76       - uses: actions/upload-pages-artifact@v5
     77         with:
     78           path: public
     79 
     80   deploy:
     81     needs: build
     82     runs-on: ubuntu-latest
     83     environment:
     84       name: github-pages
     85       url: ${{ steps.deployment.outputs.page_url || steps.retry.outputs.page_url }}
     86     steps:
     87       - id: deployment
     88         uses: actions/deploy-pages@v5
     89         continue-on-error: true
     90 
     91       # concurrency 는 워크플로 실행을 직렬화하지만 Pages 배포는 자기를 띄운
     92       # 실행보다 오래 산다. 커밋 두 개를 붙여서 밀면 두 번째가 그 틈에 들어가
     93       # "due to in progress deployment" 로 400 을 받는다. 한 번 더 시도하면
     94       # 되고, 안전하다 — 배포는 아무것도 바꾸기 전에 실패한다.
     95       - name: Wait for the previous deployment to settle
     96         if: steps.deployment.outcome == 'failure'
     97         run: sleep 90
     98 
     99       - id: retry
    100         if: steps.deployment.outcome == 'failure'
    101         uses: actions/deploy-pages@v5