Netlify · Deploy Hook · OpenClaw · Mac distant · Smoke · Liens · 2026

2026 OpenClaw, front-end terrain :
Deploy Hook Netlify → Mac distant — fumée, patrouille de liens morts et rappel de résumé de build

14 avril 2026 Front-end / automatisation release 10 min de lecture

Public : front Netlify cherchant une assurance post-déploiement sans portable veillé. Deploy Hook → scripts sur Mac distant loué : chauffe URL, smoke + liens morts navigateurs réels, résumé de build vers PR/chat. Aller vers smoke pré-déploiement, Lighthouse + liens + a11y, métriques → résumé PR pour chiffrer le récit.

01 Pourquoi associer Deploy Hooks et OpenClaw sur un Mac distant

Netlify valide la compilation ; les utilisateurs voient encore des routages cassés, du cache de bord et des bugs WebKit minutes après. Le Deploy Hook est le signal minimal « build terminé ». Un Mac distant 7×24 offre Safari réel, sessions stables et bots qui survivent quand on ferme un portable.

OpenClaw orchestre Playwright, curl et Node sur un hôte POSIX : traitez le hook comme une file, pas comme quarante minutes inline — acquittez vite, exécutez en worker, journalisez par DEPLOY_ID.

02 Architecture : de Netlify aux callbacks

Le POST du Build hook frappe une entrée maîtrisée (passerelle OpenClaw, Worker, nginx+TLS) qui vérifie un secret, pose OPENCLAW_RUN_ID et lance ~/runners/netlify-post-deploy.sh (ou Node).

L’exécuteur résout DEPLOY_PRIME_URL (prod ou deploy preview via API + DEPLOY_ID), puis (A) chauffe, (B) smoke + liens, (C) callback résumé. Chaque phase append en NDJSON .openclaw/reports/deploy_hook.ndjson pour archiver ou greffer la CI sans exposer GitHub à Netlify.

03 Chaîne reproductible (local ou Mac distant)

Copiez le squelette ci-dessous dans le dépôt sous scripts/netlify/openclaw-post-deploy.sh, rendez-le exécutable, et pointez le hook Netlify (ou un curl GitHub Actions) vers l’entrée qui le déclenche. Le même fichier tourne sur le Mac développeur pour un dry-run et sur le Mac loué en production.

  1. Exporter le contexte : export GIT_SHA="${COMMIT_REF:-$(git rev-parse HEAD)}", export NETLIFY_DEPLOY_ID="${DEPLOY_ID:-unknown}", export OPENCLAW_RUN_ID="$(uuidgen)", et mappez DEPLOY_URL depuis le JSON du hook ou la sortie Netlify CLI.
  2. Chauffe avec retries : bouclez curl -fsS -o /dev/null -w '%{http_code}' "$DEPLOY_URL/healthz" (ou un document léger) jusqu’à 200 ou une échéance ; dormez avec backoff exponentiel plafonné à 30 secondes pour ne pas marteler le bord en cas de rafales 429.
  3. Tests de fumée : npx playwright test tests/smoke --project=webkit --project=chromium contre DEPLOY_URL ; gardez la suite sous dix minutes pour éviter les timeouts si le hook est invoqué par erreur en mode synchrone.
  4. Patrouille de liens : parcourez les ancres internes découvertes depuis /sitemap.xml ou une liste de routes ; enregistrez url, final_status, redirect_chain et content_type. Faites échouer l’étape si une route requise renvoie 404 ou boucle.
  5. JSON build_summary : fusionnez les durées Playwright et crawler dans .openclaw/reports/build_summary.json avec schema: "build_summary/v1", git_sha, netlify_deploy_id, smoke_ms, link_scan_ms, failed_cases[] et exit_code.
  6. Callback : POST du JSON vers votre webhook de commentaire PR ou point de terminaison compatible Slack avec les en-têtes Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN et Idempotency-Key: ${GIT_SHA}:${NETLIFY_DEPLOY_ID}:summary pour que les livraisons dupliquées du hook ne spamment pas les fils.

Pour des assertions UX plus lourdes, réutilisez la checklist Lighthouse + liens + a11y citée plus haut ; gardez ce hook focalisé sur des signaux rapides visibles client.

04 Champs de logs structurés, retries et hygiène opérateur

Chaque ligne NDJSON doit porter les mêmes clés pour que tableaux de bord et humains s’entendent :

  • ts ISO-8601, level, openclaw_run_id, git_sha, netlify_deploy_id, phase (warmup | smoke | links | callback).
  • attempt (base 1), http_status ou curl_exit, duration_ms, url (jetons masqués), error_class (dns, tls, timeout, assert).
  • playwright_project le cas échéant, plus des pointeurs trace_path au lieu de coller des secrets.

Retry : backoff jitterisé sur chauffes GET pour 429/502/503 et resets (ex. base 2s, facteur 1,8, six essais). Pas de retry aveugle des smokes mutantes : attendez un nouveau DEPLOY_ID ou purge cache.

Couplez au flux métriques → résumé PR (intro) pour durées et échecs dans un seul fil.

05 FAQ HTTP 4xx / 5xx pour hooks et callbacks

Statut Signification typique Que vérifier
400 JSON callback invalide ou champs manquants. Schéma build_summary/v1 en CI ; log corps d’erreur warn sans secrets.
401 / 403 Secret hook / bearer faux ; scopes PR insuffisants. Rotation OPENCLAW_GATEWAY_TOKEN ; PAT GitHub pull_requests: write ; skew horaire JWT.
404 Hook supprimé, site déplacé, mauvaise branche. Régénérez hook + coffre ; chassez les URL obsolètes dans la doc.
409 Idempotence : doublon ignoré. Succès si payload identique ; sinon changez le namespace de clé.
429 Limites Netlify/GitHub en rafale. Backoff ; hooks par env ; cache métadonnées déploiement ~5 min.
502 / 504 Froid edge, fonctions qui réveillent, TLS intermédiaire. Deadline chauffe plus longue ; DNS preview ; curl -v Mac distant vs local.

Le Deploy Hook doit-il invoquer les tests directement ?

Non pour les longues suites : filez le travail, répondez 202 Accepted tôt sur votre récepteur.

Où apparaissent les échecs spécifiques à Safari ?

Assertions WebKit et domaines d’actifs : --project=webkit sur Apple Silicon, pas seulement Linux.

Mac distant · 7×24 · Safari + Chromium automatisés

Alimentez vos hooks Netlify avec un runner Mac toujours allumé

Déclenchez des flux OpenClaw à chaque livraison Netlify, conservez les traces Playwright sur de vrais GPU Apple, et évitez les nuits perdues sur des portables instables. Parcourez les tarifs et le centre d’aide sans compte, puis passez par achat ou location lorsque votre équipe dépasse les minutes CI partagées.

Déclenchements 7×24 Smoke WebKit Automatisation navigateur

Pour poursuivre : index du blog, accueil MacWww, centre d’aide.

Louer un Mac — QA Deploy Hook