Sommaire
Installation de la passerelle et vérification de santé
Seule la passerelle doit accepter les webhooks Linear en POST. Les builders rejoignent ou quittent le maillage sans faire tourner les URL ni les secrets ; le champ mesh_node_id identifie les exécuteurs, pas des entrées réseau supplémentaires. Suivez le guide de déploiement multi-nœuds MeshMac pour les rôles, et concentrez les appels API Linear ainsi que les webhooks de chat sur la passerelle afin de conserver un périmètre d’audit lisible lorsque le pool grandit.
- Étape 1. Installez OpenClaw sur la passerelle, définissez
OPENCLAW_CONFIG_ROOT, et exécutez le service sous LaunchDaemon (ou équivalent) pour survivre aux redémarrages pendant que les Mac du pool mettent à jour Xcode. - Étape 2. Publiez
https://…sur le nom d’hôte de passerelle que vous collerez dans Linear ; isolez le chemin webhook derrière unlocationreverse-proxy avec une taille maximale de corps raisonnable (rappels TLS dans la matrice Nginx vs Caddy). - Étape 3. Validez la disponibilité avec
openclaw doctor, les journaux applicatifs, et unGET /health(ou une sonde fusionnée issue du guide préchauffage skills et sonde de santé) afin que le répartiteur retire le trafic des instances dégradées pendant les déploiements. - Étape 4. Journalisez
correlation_id, route et latence de file ; dimensionnez la concurrence des webhooks avec le how-to rate limit et sessions passerelle. Pour des motifs voisins, voir aussi webhooks de notification de build partagé et le hub OpenClaw.
Chemins et journaux par dépôt : configuration et logs par projet.
Vérification de signature Linear
Vérifier d’abord, analyser ensuite. Linear signe le corps brut exact ; un middleware qui parse le JSON trop tôt casse le contrôle HMAC dès que le cadre réécrit les espaces ou l’ordre des champs.
- Étape 1. Créez le webhook dans Linear, copiez le secret de signature une fois, stockez-le en
0440selon secrets et moindre privilège (par exemple/etc/openclaw/secrets.d/linear/webhook.secret). - Étape 2. Mettez le corps en tampon octet par octet, calculez HMAC-SHA256 conformément à la documentation Linear, et comparez l’en-tête
Linear-Signatureen temps constant ; rejetez les rejeux avec une fenêtre d’horodatage serrée lorsque la plateforme l’expose. - Étape 3. Répondez
401si la signature est invalide ; ne journalisez que des métadonnées redactées (même hygiène que pour Teams webhook et état de build). - Étape 4. Ne renvoyez
200qu’après persistance durable de l’enqueue, sinon les retries Linear multiplient les jobs. Indices d’ordonnancement dans déploiement unifié et synchronisation de file. Option : encapsuler la logique dans unLinearWebhookClientcôté passerelle uniquement.
Enchaînement avec les scripts de build partagés
Normalisez chaque charge utile vérifiée en une tâche exécutable par n’importe quel Mac du pool : dépôt, référence, identifiant d’issue, acteur, libellés, plus une idempotency_key dérivée des métadonnées de livraison Linear. Le nœud A peut être saturé pendant que le nœud B exécute le même script — sans second webhook public ni second secret Linear.
- Étape 1. Listez blanc les transitions qui doivent déclencher un build (colonne cible ou libellé
ci). Répondez200rapidement pour les événements ignorés afin de ne pas saturer la file. - Étape 2. Poussez la tâche vers votre file partagée (Redis, RabbitMQ, tâches OpenClaw — voir file de tâches et étapes de retry) avec
linear_issue_id, équipe, demandeur et clé d’idempotence. - Étape 3. Exécutez un point d’entrée verrouillé en version partout (verrou de version de skill ; worktrees et verrous lorsque plusieurs pipelines touchent le même dépôt).
- Étape 4. Émettez « build terminé » avec
mesh_node_id, durée, extrait de journal, artefacts. La passerelle diffuse vers le chat via vos connecteurs existants : Slack, Google Chat, Teams. - Étape 5. Publiez le commentaire de résumé via GraphQL Linear depuis la passerelle (clé API à périmètre restreint, rotation selon canaux d’alerte et rotation des jetons) : emoji d’état, SHA court, nœud, lien de run, résumé OpenClaw en deux lignes.
Si Linear déclenche aussi GitHub Actions, séparez les couloirs avec la matrice routage runner GHA et files pour éviter que deux orchestrateurs se disputent le disque partagé.
Nouvelles tentatives en cas d’échec et notifications
Un maillage multiplie les défaillances transitoires ; gardez une seule narration de notification. Séparez clairement l’entrant (Linear → vous) de l’sortant (vous → chat / API Linear).
- Étape 1. Accusez réception vite après enqueue durable ; laissez Linear retenter son bord. Gardez les timeouts du handler dans les enveloppes de concurrence passerelle.
- Étape 2. Webhooks chat : backoff exponentiel + jitter sur
429/5xx, plafonnez les tentatives, dédupliquez suridempotency_key + état(~72 h) comme pour Teams et déduplication. - Étape 3. GraphQL Linear : journalisez
errors[], backoff sur limitation de débit, ne bouclez pas sur401— corrigez la clé d’abord. - Étape 4. Si chat et Linear échouent tous deux, déclenchez une alerte opérateur via les canaux IM. Prévoyez la bascule passerelle avec équilibrage de charge et failover.
FAQ
- Les signatures passent en curl mais échouent en production
- Vous n’envoyez probablement pas les mêmes octets que le framework reçoit — reproduisez la chaîne de tampon brut depuis la préproduction, désactivez la recompression gzip en bordure, vérifiez qu’aucun WAF ne supprime les en-têtes. Rejouez la vérification sur des corps capturés côté passerelle (redactés).
- Des builds en double partent quand je déplace vite une carte entre colonnes
- Anti-rebond sur les transitions dans votre mappeur, ou exigez un libellé stable « prêt pour build ». Combinez identifiant d’issue, colonne et court créneau temporel dans la clé d’idempotence pour absorber le jitter humain.
- Les commentaires n’apparaissent pas sur l’issue malgré un build vert
- Vérifiez que la clé API conserve le droit de commenter pour cette équipe, que vous ciblez le bon
issueIdissu du webhook, et inspectez les erreurs GraphQL après une mise à jour du schéma Linear. - Un seul Mac doit parler à Linear — vraiment ?
- Oui pour les secrets et l’audit. Les builders restent simples, rapides et remplaçables ; la passerelle détient vérification, jetons API et URL de chat. C’est ce découplage qui fait qu’ajouter un quatrième ou cinquième nœud MeshMac est un choix de capacité, pas un nouvel audit de sécurité complet.
Résumé
Installez OpenClaw sur une passerelle unique, prouvez sa santé, vérifiez les signatures Linear sur corps brut, mettez en file des tâches normalisées pour tout le maillage, diffusez l’état de build via vos hooks chat existants, et postez des résumés via l’API Linear avec retries et déduplication. L’accueil, l’index du blog, la page forfaits publics et le centre d’aide restent consultables sans compte.
Étendre le Mesh sans recâbler Linear
Quand vous ajoutez des builders, vous ajoutez du CPU et du disque, pas de nouveaux secrets webhook. Ouvrez les forfaits MeshMac publics sans connexion pour louer de la capacité Mac mutualisée, parcourez le blog pour les checklists cluster, et le centre d’aide pour SSH, VNC et accès passerelle. L’accueil et le hub OpenClaw restent lisibles sans inscription — idéal pour dimensionner passerelle et nombre de nœuds avant commande.