대상: builds.sr.ht 웹훅으로 MacPull 원격 Mac에서 의존성을 미리 받고 lockfile·OpenClaw 헬스를 CI로 돌리려는 팀.
핵심: curl·npm 설치, Node 24, gateway status+doctor 연쇄 검증, 동시성·Git·디스크 매트릭스.
연관: 웹훅 예시,
status 게이트,
고객 지원.
웹훅
HMAC 검증 후 러너로 전달.
프리페치
npm·pnpm 캐시를 NVMe에 붙임.
회송
jq 요약을 태스크에 실음.
웹훅만 붙였을 때 터지는 세 가지 함정
- 콜드 캐시: 곧바로 본빌드만 돌리면 RTT에 걸려 타임아웃이 먼저 터집니다.
- 락 표류: 프리페치가
package-lock.json을 바꾸면 재현성이 깨집니다. - 착시:
gateway status만으로는 HTTP 리스너 장애를 못 잡으니 doctor를 같이 실으세요.
Node 24·설치기·격리 변수 표
잡마다 OPENCLAW_HOME을 나누고 로그 맨 앞에 node -v·which openclaw를 남깁니다.
| 항목 | 역할 | 메모 |
|---|---|---|
NODE_MAJOR=24 | 최소 런타임 | 미만이면 doctor 경고. |
| curl 설치 | 공식 원라이너 | 아래 블록. |
npm -g openclaw@^2026.5.0 | 핀 | launchd PATH와 동일. |
| 연쇄 검증 | 한 번에 판정 | doctor 후 gateway status --json을 jq로 합침. |
curl -fsSL https://openclaw.ai/install.sh | bash
npm install -g openclaw@^2026.5.0
node -v
openclaw doctor
openclaw gateway status --json | jq -c '{ok:.healthy,ver:.version}'
sr.ht 동시성·Git·디스크 매트릭스
한 행만 문서에 고정하세요.
| 런북 | 이미지 동시성 | Git 재시도 | 디스크 |
|---|---|---|---|
| 경량 JS | 동시 둘 | 이·사·팔초 백오프 세 번 | 루트 여유 십오 기가 미만이면 중단 |
| 모노레포 | 동시 하나 | 깊은 클론 실패 시 얕은 클론 한 번 | 팔십 퍼센트 이상 알림 |
| 게이트웨이 스모크 | 웹훅과 큐 분리 | fetch만 재시도 | 임계 이하면 doctor 생략 후 정리 |
for i in 1 2 3; do git fetch --prune origin "$REF" && break || sleep $((i*i)); done
디스크는 df로 루트 볼륨을 보고 사용률이 팔십 퍼센트를 넘기면 프리페치 대신 정리 단계로 넘어가게 하세요.
builds.sr.ht에서 CI까지 여섯 단계 체크리스트
- 웹훅: 시크릿으로 HMAC 검증 후 커밋 SHA를 환경 변수로 넘깁니다.
- 프리페치:
npm ci --dry-run또는pnpm fetch로 캐시를 데웁니다. - lockfile:
git diff --exit-code package-lock.json pnpm-lock.yaml로 표류를 잡습니다. - 연쇄:
openclaw doctor후openclaw gateway status --json | jq -c '{ok:.healthy}'. - 병합: stderr 상단·lockfile·JSON을 한 파일로
printf합칩니다. - 회송:
hutAPI나 태스크 노트에curl로 붙이고 HTTP 이백번대를 확인합니다.
요약 블록에 실을 관측값과 18789 주의
127.0.0.1:18789를 쓰면 웹훅 워커와 스모크 잡이 포트를 가로채지 않게 큐를 나누세요.
요약에는 짧은 SHA·lockfile 통과·doctor 경고 수·healthy를 넣으면 온콜이 바로 읽습니다.
인용 가능한 숫자와 정책
- Node 24 미만은 게이트에서 즉시 실패.
- Git fetch 백오프 최대 세 번.
- 디스크 팔십 퍼센트 이상이면 프리페치 생략 후 정리.
자주 묻는 질문
| 질문 | 답 |
|---|---|
| 웹훅 토큰 위치 | 환경·Keychain만, echo 금지. |
| TLS 종료 | 공인은 프록시, Mac은 루프백·mTLS. |
| 18789 충돌 | lsof 후 launchd 라벨·OPENCLAW_HOME 분리. |
| curl vs npm | 한 파이프라인은 한 경로, which 첨부. |
공개 페이지로 이어지는 다음 행동
프리페치·lockfile·헬스를 한 블록에 묶으면 태스크가 준비 상태를 봅니다.