feat: add guarded GitHub Pages deployment
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# GitHub Pages 배포
|
||||
|
||||
원본 저장소와 전체 게임 데이터는 개인 Git 서버에만 보관합니다. GitHub의 `DD4SN/DD4SN.github.io` 비공개 저장소에는 공개 데이터 검증을 통과한 `pages-dist` 산출물과 Pages 배포 워크플로만 전송합니다.
|
||||
|
||||
## 공개 데이터 게이트
|
||||
|
||||
`pages/publication-policy.json`은 Pages에 공개해도 되는 HolodoriDB 마스터 데이터 버전과 최초 공개 가능 시각을 고정합니다.
|
||||
|
||||
- 카드, 보드, 메모리 데이터 버전이 승인 버전과 다르면 빌드를 중단합니다.
|
||||
- 공개 시각이 지나지 않았거나 공개 시각이 없는 악곡 채보가 있으면 빌드를 중단합니다.
|
||||
- 시작 시각이 지나지 않았거나 시작 시각이 없는 이벤트가 있으면 빌드를 중단합니다.
|
||||
- Pages 빌드는 서버 시간 API를 호출하지 않고 브라우저 시각을 사용합니다.
|
||||
|
||||
새 마스터 데이터를 수집한 뒤에는 포함된 카드, 보드와 메모리 정보가 모두 공개 가능한지 검토한 후에만 정책의 `approvedMasterDataVersion`과 `approvedNotBefore`를 갱신합니다. 한 마스터 버전에 서로 다른 공개 시각의 데이터가 함께 있으면 가장 늦은 공개 시각까지 전체 Pages 빌드가 차단됩니다.
|
||||
|
||||
검증과 정적 빌드:
|
||||
|
||||
```powershell
|
||||
npm run check:pages-data
|
||||
npm run build:pages
|
||||
```
|
||||
|
||||
테스트에서만 `PAGES_PUBLICATION_TIME`에 ISO-8601 시각을 지정할 수 있습니다. 실제 배포에서는 설정하지 않아 신뢰할 수 있는 CI 실행 시각을 사용합니다.
|
||||
|
||||
## 배포
|
||||
|
||||
```powershell
|
||||
npm run deploy:pages
|
||||
```
|
||||
|
||||
배포 스크립트는 다음 순서로 동작합니다.
|
||||
|
||||
1. 공개 데이터 검증과 `pages-dist` 빌드
|
||||
2. 임시 디렉터리에 `DD4SN/DD4SN.github.io` 저장소 복제
|
||||
3. `site/`에 정적 산출물 복사
|
||||
4. `.github/workflows/deploy.yml` 갱신
|
||||
5. 배포 저장소의 `main` 브랜치에 산출물 커밋과 푸시
|
||||
|
||||
개인 Git 서버의 예약 작업에서 실행할 때는 GitHub 저장소에만 쓰기 가능한 최소 권한 자격증명을 사용합니다. 원본 저장소를 GitHub 원격으로 추가하거나 원본 Git 이력을 Pages 저장소로 푸시하지 않습니다.
|
||||
Reference in New Issue
Block a user