Connecteur GitHub
Connectez vos dépôts GitHub à Brevo pour le suivi de l’engagement développeur, les workflows de notification de release et la surveillance de l’activité communautaire via Tajo.
Vue d’ensemble
| Propriété | Valeur |
|---|---|
| Plateforme | GitHub |
| Catégorie | Custom |
| Complexité d’installation | Modérée |
| Intégration officielle | Non |
| Données synchronisées | Événements, utilisateurs, dépôts |
| Type d’API | API REST, API GraphQL |
| Authentification | GitHub App / Personal Access Token / OAuth 2.0 |
| URL de base | https://api.github.com |
| Version d’API | 2022-11-28 (versioning par en-tête) |
Fonctionnalités
- Suivi des issues et PR, Synchronisez les événements d’issues et de pull requests vers les timelines de contacts Brevo
- Notifications de release, Déclenchez des campagnes Brevo lors de nouvelles releases de dépôt
- Synchronisation des contributeurs, Mappez les contributeurs GitHub vers des contacts Brevo pour l’engagement communautaire
- Suivi des stars et forks, Surveillez les métriques de popularité de dépôt
- Transfert d’événements webhook, Transférez les événements GitHub vers les automatisations Brevo
- Catalogue de dépôts, Synchronisez les métadonnées de dépôts en tant qu’éléments de catalogue Brevo
Prérequis
Avant de commencer, assurez-vous de disposer de :
- Un compte GitHub avec accès aux dépôts cibles
- Une GitHub App ou un Personal Access Token (fine-grained recommandé)
- Un accès admin aux dépôts pour la configuration des webhooks
- Un compte Brevo avec accès API
- Un compte Tajo avec un abonnement actif
Authentification
GitHub prend en charge plusieurs méthodes d’authentification. Tajo recommande d’utiliser les GitHub Apps pour un accès au niveau de l’organisation.
Option 1 : GitHub App (recommandé)
- Allez dans Settings > Developer settings > GitHub Apps
- Cliquez sur New GitHub App
- Configurez l’app avec ces permissions :
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkOption 2 : Fine-Grained Personal Access Token
- Allez dans Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Cliquez sur Generate new token
- Sélectionnez les dépôts cibles
- Accordez ces permissions :
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlySécurité des tokens
Les tokens fine-grained ont des dates d’expiration. Mettez en place la rotation des tokens avant l’expiration. Les tokens d’installation de GitHub App se rafraîchissent automatiquement et sont préférables pour une utilisation en production.
Connexion à Tajo
# Avec GitHub Apptajo connectors install github \ --app-id $GITHUB_APP_ID \ --private-key-path ./github-app-key.pem \ --installation-id $GITHUB_INSTALLATION_ID
# Avec Personal Access Tokentajo connectors install github \ --token $GITHUB_TOKENConfiguration
Configuration de base
connectors: github: enabled: true auth_type: "github_app" # ou "token"
repositories: - owner/repo-1 - owner/repo-2
sync: issues: true pull_requests: true releases: true contributors: true stars: true
lists: contributors: 20 stargazers: 21Mappage des champs
Mappez les données utilisateur GitHub vers les attributs de contact Brevo :
field_mapping: # Champs standards login: GITHUB_USERNAME email: email name: FIRSTNAME
# Métriques développeur contributions: GITHUB_CONTRIBUTIONS repositories_count: GITHUB_REPOS followers: GITHUB_FOLLOWERS created_at: GITHUB_JOINED
# Attributs personnalisés company: COMPANY location: LOCATION bio: GITHUB_BIOEndpoints API
Tajo s’intègre avec les endpoints suivants de l’API REST GitHub :
| Endpoint | Méthode | Objet |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Lister les issues du dépôt |
/repos/{owner}/{repo}/pulls | GET | Lister les pull requests |
/repos/{owner}/{repo}/releases | GET | Lister les releases |
/repos/{owner}/{repo}/contributors | GET | Lister les contributeurs |
/repos/{owner}/{repo}/stargazers | GET | Lister les stargazers |
/repos/{owner}/{repo}/forks | GET | Lister les forks |
/repos/{owner}/{repo}/events | GET | Lister les événements de dépôt |
/users/{username} | GET | Obtenir le profil utilisateur |
/orgs/{org}/members | GET | Lister les membres d’une organisation |
/repos/{owner}/{repo}/hooks | POST | Créer un webhook |
Exemples de code
Initialiser le connecteur
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
await tajo.connectors.connect('github', { appId: process.env.GITHUB_APP_ID, privateKey: process.env.GITHUB_PRIVATE_KEY, installationId: process.env.GITHUB_INSTALLATION_ID});Synchroniser les contributeurs vers Brevo
await tajo.connectors.sync('github', { type: 'full', resources: ['contributors'], repositories: ['owner/repo-1', 'owner/repo-2']});
const status = await tajo.connectors.status('github');console.log(status);// {// connected: true,// lastSync: '2024-03-15T11:00:00Z',// contributorsCount: 245,// issuesTracked: 1890,// releasesTracked: 34// }Gérer les événements webhook
app.post('/webhooks/github', async (req, res) => { const signature = req.get('X-Hub-Signature-256'); const event = req.get('X-GitHub-Event');
// Vérifier la signature du webhook if (!verifyGitHubSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
await tajo.connectors.handleWebhook('github', { event, payload: req.body });
res.status(200).send('OK');});Déclencher une campagne de release
// Écouter les nouvelles releases et déclencher une campagne Brevotajo.connectors.on('github', 'release.published', async (event) => { await tajo.campaigns.trigger('release-announcement', { listId: 21, params: { version: event.release.tag_name, release_notes: event.release.body, download_url: event.release.html_url } });});Limites de débit
GitHub impose des limites de débit selon la méthode d’authentification :
| Authentification | Limite de débit primaire | API de recherche |
|---|---|---|
| Non authentifié | 60 requêtes/heure | 10 requêtes/minute |
| Personal Access Token | 5 000 requêtes/heure | 30 requêtes/minute |
| GitHub App (installation) | 5 000 requêtes/heure | 30 requêtes/minute |
| GitHub App (user-to-server) | 5 000 requêtes/heure | 30 requêtes/minute |
Requêtes conditionnelles
Tajo utilise les requêtes conditionnelles (en-têtes If-None-Match / If-Modified-Since) pour réduire la consommation d’API. Les réponses avec 304 Not Modified ne comptent pas dans les limites de débit.
Limites supplémentaires :
- Limites de débit secondaires : pas plus de 100 requêtes simultanées. Pas plus de 900 points par minute pour les endpoints de l’API REST.
- GraphQL : 5 000 points par heure (le coût de la requête varie selon la complexité).
Dépannage
Problèmes courants
| Problème | Cause | Solution |
|---|---|---|
| 401 Unauthorized | Token expiré ou identifiants incorrects | Régénérez le token ou réinstallez la GitHub App |
| 403 Forbidden | Permissions insuffisantes | Vérifiez les scopes du token ou les permissions de l’App |
| 404 Not Found | Dépôt privé sans accès | Accordez l’accès au dépôt au token ou à l’App |
| Limite de débit dépassée | Trop d’appels API | Activez les requêtes conditionnelles et réduisez la fréquence de synchronisation |
| Webhooks non reçus | URL incorrecte ou pare-feu | Vérifiez que l’URL du webhook est accessible publiquement |
Mode debug
connectors: github: debug: true log_level: verbose log_webhooks: trueTester la connexion
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Bonnes pratiques
- Préférez les GitHub Apps aux PAT, Les GitHub Apps offrent des permissions granulaires et des tokens auto-rafraîchis
- Activez les secrets de webhook, Vérifiez toujours les signatures de webhook avec HMAC-SHA256
- Utilisez les requêtes conditionnelles, Exploitez les ETags pour éviter de gaspiller votre quota de débit
- Paginez les grandes réponses, GitHub renvoie max 100 éléments par page ; itérez avec les en-têtes
Link - Synchronisez hors pic d’activité, Planifiez les synchronisations complètes en dehors des heures de dev
- Surveillez les en-têtes de limite de débit, Vérifiez
X-RateLimit-Remainingpour throttler de manière proactive
Sécurité
- Authentification GitHub App, JWT basé sur clé RSA avec tokens d’installation à courte durée de vie
- Signatures des webhooks, Vérification de signature HMAC-SHA256 sur toutes les charges utiles webhook
- Tokens fine-grained, Limités à des dépôts et permissions spécifiques
- HTTPS uniquement, Toutes les communications API chiffrées via TLS 1.2+
- Stockage chiffré, Clés privées et tokens chiffrés au repos dans Tajo
- Expiration des tokens, Les tokens fine-grained expirent automatiquement ; configurez des alertes de rotation