2026 — webhooks GitHub vers une passerelle OpenClaw sur macOS

Lorsque vous reliez des webhooks de dépôt GitHub à une passerelle de type OpenClaw sur un Mac distant, la majorité des incidents relèvent de l'ingénierie réseau classique : l'URL publique n'est pas celle que vous croyez coller dans GitHub, le corps que vous hachez n'est pas exactement le flux octet signé par GitHub, ou votre processus démarre à froid pendant que le livreur GitHub classe déjà un timeout. Ce guide 2026 est un tutoriel reproductible pour l'entrée TLS, les en-têtes HMAC, une politique d'horloge compatible avec les contrôles temporels, et les deux symptômes les plus bruyants : boucles 401 et timeouts de livraison. Gardez l'écouteur sain avec 2026 — Manuel de stabilité launchd pour la passerelle OpenClaw : triade doctor/status/journaux, ports occupés et conflits de doubles LaunchAgent — procédures reproductibles sur Mac distant toujours allumé, puis alignez le comportement disque côté runners grâce à 2026 — Multi-runners Mac auto-hébergés & CI parallèle : cache GitHub Actions, disque persistant, concurrence, disques pleins et nettoyage d'artefacts — FAQ pool d'entreprise afin qu'un job déclenché par webhook ne reste pas bloqué sur les I/O avant même de répondre HTTP.

1. Verrouiller un chemin de callback public reproductible avant de toucher aux secrets

GitHub vous appelle toujours depuis l'Internet public. Que vous terminiez le TLS sur nginx, un équilibreur managé ou un tunnel du type Cloudflare Tunnel / ngrok, documentez le nom d'hôte, le préfixe de chemin et si la bordure retire ou ajoute des en-têtes. Reproduisez avec curl -v https://votre-hôte/votre-chemin depuis l'extérieur de votre LAN, pas depuis le Mac lui-même, car un succès en loopback masque un NAT en épingle à cheveux ou un mauvais SNI. Si un reverse proxy met en tampon le corps, votre application doit lire exactement les mêmes octets bruts que GitHub signe — sinon chaque contrôle de signature échoue alors même que le secret est correct. Conservez une URL canonique dans l'infra et collez la même chaîne dans GitHub.

Règle de fumée : si curl depuis Internet ne renvoie pas le chemin d'accusé rapide attendu de votre passerelle, corrigez l'entrée avant de faire tourner à nouveau les secrets de webhook.

2. Signature et contrôle d'horodatage alignés sur le contrat GitHub

GitHub signe le corps POST brut avec le secret du webhook via HMAC-SHA256 dans X-Hub-Signature-256. Hachez le flux d'octets identique après TLS, comparez avec une routine à temps constant et refusez les préfixes sha256= mal formés. Ajoutez une politique de dérive d'horloge ou de fenêtre temporelle : activez NTP sur le Mac pour que des signatures valides ne soient pas rejetées à côté de contrôles Bearer liés au temps, et traitez les identifiants de livraison comme clés d'idempotence afin que les relivraisons après timeout n'appliquent jamais deux fois le même effet de bord.

3. Réglages du dépôt GitHub qui doivent refléter votre passerelle

Utilisez application/json sauf si vous parsez volontairement des charges encodées en URL. Laissez la vérification SSL activée et corrigez les chaînes plutôt que de la désactiver. Dans Recent Deliveries, lisez la réponse capturée : c'est le moyen le plus rapide de trancher les débats de proxy. Faites tourner les secrets GitHub et passerelle dans la même fenêtre de maintenance, puis envoyez un ping ; les rotations partielles créent des 401 déterministes qui semblent aléatoires tant que vous n'ouvrez pas le panneau de détail de la livraison.

4. Lorsque le journal affiche 401 alors que « le secret est bon »

Superposez les causes. D'abord, vérifiez qu'aucun middleware global Authorization ne précède le chemin du webhook. Ensuite, repérez une Basic auth ou une liste d'autorisation CDN mal cadrée — des règles hors scope renvoient encore 401. Troisièmement, ne vérifiez jamais contre un JSON resérialisé ; utilisez les octets bruts de la requête. Quatrièmement, surveillez les routes à double préfixe où le proxy 401 avant que le trafic n'atteigne le processus que vous venez de patcher. Corrélez un ID de livraison défaillant avec les journaux d'accès de la passerelle dans la même fenêtre milliseconde.

5. Timeouts : GitHub n'attend pas votre démarrage à froid

Les livraisons supposent une réponse HTTP rapide même lorsque le travail réel est asynchrone. Si votre passerelle enchaîne des tâches lourdes en ligne, GitHub peut journaliser un timeout pendant que le Mac termine à peine son premier import. Mettez les longues tâches en file, renvoyez 202 vite lorsque votre API l'autorise, et alignez les timeouts lecture/écriture du proxy sur la réalité. Préchauffez les imports critiques sous launchd pour que le premier événement après reboot ne soit pas un chemin froid. Après tout timeout, supposez des livraisons dupliquées ; rendez les gestionnaires idempotents sur les identifiants d'événement.

6. Checklist de triage collable pour l'astreinte

  • Le curl extérieur-intérieur correspond caractère pour caractère à l'URL du webhook GitHub, barres obliques finales comprises.
  • Le corps utilisé pour le HMAC est le corps POST brut ; les proxys ne transforment ni ne décompressent de façon inattendue.
  • L'horloge du Mac reste à quelques secondes de NTP ; le TLS vers les plans de contrôle réussit sans bricolage manuel du temps.
  • Aucun middleware d'authentification globale n'intercepte le chemin du webhook ; l'auth optionnelle est isolée ailleurs.
  • Le gestionnaire répond vite ; le travail lourd est différé et idempotent face aux relivraisons.

Pourquoi une passerelle de classe Mac mini reste pertinente pour ces webhooks

Les webhooks punissent les horloges instables, les disques qui s'endorment et les hôtes qui vacillent sous une charge de fond légère. Les systèmes Mac mini sur Apple Silicon combinent une performance monothread solide avec une puissance idle très faible, ce qui rend les démons terminés TLS économiques comparés à laisser une tour allumée pour le même rôle toujours actif. Ils exécutent la même pile réseau Unix native, des dispositions compatibles Homebrew et le durcissement macOS — Gatekeeper, SIP, FileVault — qui rend l'automatisation exposée à Internet moins artisanale que sur des PC génériques. Si vous standardisez des passerelles de type OpenClaw en 2026, ancrez-vous sur du matériel silencieux et prévisible ; comparez les nœuds dédiés par région sur la page d'accueil Macstripe lorsque vous dépassez une seule machine de labo.

Si vous voulez exécuter ce chemin webhook sur le matériel le plus fluide pour démarrer, le Mac mini M4 reste le compromis le plus équilibré — compact, ultra silencieux et assez efficace pour tenir TLS, la vérification de signature et des déclencheurs CI voisins sans transformer votre bureau en radiateur. Lorsque vous êtes prêt à chiffrer un Mac cloud dédié à côté de votre pool auto-hébergé, ouvrez la page d'accueil Macstripe et cartographiez les régions sur le profil de latence de votre organisation GitHub.