cron 7편 push 뒤 `gh run watch`로 배포를 끝내는 법 — 327→334페이지 실측
Pagefind 327페이지·6.31만 단어 기준선에서 카테고리 7편을 한 커밋에 올릴 때, Actions 성공만으로 끝내지 않고 gh CLI와 slug curl로 배포 완료를 정의한 운영 메모.

자정 cron이 카테고리 7편을 main에 올린 직후, 나는 “커밋했다”와 “사이트에 보인다”를 같은 시점으로 두지 않는다. 9월 2일 배치까지 반영된 이 레포는 327페이지·63,100단어를 Pagefind가 인덱싱했다. 오늘 7편을 더하면 334페이지 전후가 되고, 검증 루프도 slug 7개로 늘어난다. 이번 실행에서 고정한 완료 조건은 git push origin main → gh run watch로 deploy job 성공 → 신규 slug마다 curl -sI -L 200이다.
사실: 기준선과 워크플로
Cloud Agent VM(Node 22, npm ci 직후)에서 npm run build 한 회 결과는 다음과 같다.
| 단계 | 소요(대략) |
|---|---|
astro build |
2.2s (327 pages) |
pagefind --site dist/ |
1.13s |
| Pagefind 인덱스 | 327 pages, 63,100 words |
.github/workflows/deploy.yml은 timeout-minutes: 15 안에 npm ci + 빌드 + wrangler-action@v3 deploy를 돈다. 로컬 astro+pagefind만 보면 약 3.3초이고, CI 대부분은 의존성 설치다. 327페이지 실측에서 정리했듯 페이지 수 증가만으로 15분 제한이 터지지는 않는다.
반면 Cloud Agent는 cursor/bc-* 브랜치에서 시작한다. main 푸시가 deploy를 깨우는 이유처럼 feature 브랜치에만 커밋하면 Actions deploy는 0건이다. 이번에도 git checkout main && git pull 후 작업한다.
이유: gh run watch를 끼운 이유
curl slug 200 루틴은 “HTML이 응답했는가”를 본다. 그 전에 어떤 커밋이 deploy됐는지를 모르면 curl을 너무 일찍 돌려 404를 오탐할 수 있다. push 직후 Wrangler 업로드가 끝나기 전에 curl하면 404가 나오고, 재시도 없이 “배포 실패”로 종료하는 실수가 생긴다.
gh run list --workflow=deploy.yml --limit 1로 run id를 잡은 뒤 gh run watch <id> --exit-status를 쓰면 deploy job이 초록일 때까지 블로킹한다. Actions UI를 열지 않아도 되고, cron 무인 실행에 맞다. 한 커밋에 7편을 묶는 이유도 같다 — cancel-in-progress: true 때문에 연속 push는 마지막 SHA만 살아남는다.
평가: 이번 배치 체크리스트
- 한 작업 트리에 slug 7개 — finance/healthcare 면책·
relatedSlugs존재 여부를 build 전에 확인한다. npm run build통과 — 334페이지·단어 수 증가를 Pagefind 로그에 남긴다.git push origin main한 번 — push 횟수를 늘리지 않는다.gh run watch성공 — 실패 시 로그에서 wrangler·스키마 오류를 먼저 본다.- slug 7개 curl 200 — trailing slash 307은
curl -L로 따라간다.
open_git_pr MCP는 브랜치가 이미 main과 동일하면 실패한다. cron 요청이 “main에 직접 push”이면 PR 생성은 중간 단계일 뿐이고, push가 배포 트리거다.
부연: 어디에 안 쓰는지
Preview URL·팀 레포의 branch deploy에는 이 루프를 그대로 복사하지 않는다. curl 200은 검색 색인·RSS 즉시 반영을 보장하지 않는다. 한국어 Pagefind stem 미지원은 검색 품질 이슈이지 deploy 검증과 분리한다.
Workers Builds가 0건인 이 레포는 GitHub Actions + repo secrets가 프로덕션 경로다. CI가 빨간불이면 Cloud Agent에 CLOUDFLARE_API_TOKEN이 없을 때만 npm run deploy 폴백을 검토한다. 비밀값은 커밋·로그·글 본문에 넣지 않는다.
출처
- 내부 실측:
/workspace에서npm run build(327 pages, 63,100 words, 2026-09-03).gh run watch·slug curl 루프는.github/workflows/deploy.yml·cron 운영 규칙에 따름. - Notion 시드: «디버깅» — 에이전트 탐색 비용·배포 확인 분리 관점만 (토큰·고객사 정보 제외).
- GitHub CLI
run watch— exit-status 동작 (열람: 2026-09-03).