2026 OpenClaw フロント実戦:
Netlify Deploy Hook → リモート Mac でスモーク・死リンク・ビルド要約
想定読者:Netlify 運用のフロント向け。Deploy Hook → 同一スクリプト連鎖で、リモート Mac 上に URL ウォームアップ、スモーク、死リンク巡回、build_summary コールバックを再現します。slug 例:2026-openclaw-netlify-deploy-hook-smoke-test-remote-mac.html。併読:デプロイ前スモーク、Lighthouse/リンク/a11y、ビルド要約(数値)。
01 ビルド成功のあとに残るギャップ
ビルド成功後もルーティング・キャッシュ・WebKit 差分は遅れて顕在化します。Deploy Hook を 7×24 のリモート Mac に流すと、ノートの蓋に依存せず Safari 相当の実機で Playwright を常時回せます。
OpenClaw は curl・Node・ブラウザ自動化を一ホストに束ねます。Ingress は速やかに 202 Accepted、重処理はキュー/screen へ退避し、再送に強くしてください。
02 アーキテクチャ:Ingress から三フェーズ
Hook は共有秘密付き Ingress(ゲートウェイ/Worker/nginx)へ POST。OPENCLAW_RUN_ID を発行し ~/runners/netlify-post-deploy.sh 等へ渡します。
ランナーは DEPLOY_URL を JSON または API で解決し、(A)ウォームアップ(B)スモーク+リンク(C)要約 POST の順実行。ログは .openclaw/reports/deploy_hook.ndjson に 1 行 JSON で追記します。
03 Deploy Hook → スクリプト連鎖(ローカル検証と本番で同一ファイル)
scripts/netlify/openclaw-post-deploy.sh をリポジトリに置き、ローカルと SSH 先のリモート Mac で同一パスを叩きます。
- 環境:
GIT_SHA、NETLIFY_DEPLOY_ID、DEPLOY_URLをエクスポート。 - ウォームアップ:
curl -fsSで 200/マーカーまで指数バックオフ(スリープ上限例 30s、429 回避)。 - スモーク:
playwright test tests/smoke --project=webkit --project=chromium(10 分以内の薄いセット)。 - 死リンク: sitemap またはルート表から内部のみ。
final_status等を記録し 404 は失敗。 - 要約:
build_summary/v1を.openclaw/reports/build_summary.jsonに保存。 - POST:
Idempotency-Key: ${GIT_SHA}:${NETLIFY_DEPLOY_ID}:summaryで PR/チャットへ。Bearer はログに出さない。
04 NDJSON の共通キーと再試行方針
NDJSON 1 行に ts、level、openclaw_run_id、git_sha、netlify_deploy_id、phase、attempt、http_status/curl_exit、duration_ms、マスク済み url、error_class、必要なら playwright_project と trace_path。
再試行: 冪等 GET は 429/502/503 とリセットで指数バックオフ+ジッタ(例:初回 2s・係数 1.8・最大 6 回)。スモーク全再実行はデプロイ ID 確認のあとに限定。
05 代表的な HTTP 4xx/5xx と切り分け
| ステータス | 意味の例 | 確認すること |
|---|---|---|
| 400 | コールバック JSON のスキーマ不一致・必須欠落。 | CI で JSON Schema 検証。warn で本文をマスクログ。 |
| 401/403 | Hook HMAC/Bearer の不一致、GitHub PAT の scope 不足。 | トークンローテーション、pull_requests:write 等の最小権限、JWT 時は時刻ずれ。 |
| 404 | 古い Hook URL、削除済みサイト、ブランチスラッグ誤り。 | 再発行とボルト更新、README の grep。 |
| 409 | 冪等キー衝突による重複デプロイの抑制。 | 要約が一致すれば成功扱い。違うならキー空間を分離。 |
| 429 | GitHub 二次レートや API のバースト。 | バックオフ、環境別フック、メタデータ短時間キャッシュ。 |
| 502/504 | エッジのコールドスタート、Functions 起床、TLS 中継。 | ウォームアップ締切延長、DNS が正しいブランチ preview か、リモート Mac とローカルで curl -v 比較。 |
補足: 長時間テストはフック受信スレッドに直列させずキュー+202。Safari 差分は WebKit アサートに出るため --project=webkit は Apple 実機で。