GitHub Connector
Verbinde deine GitHub-Repositories über Tajo mit Brevo für Developer-Engagement-Tracking, Release-Benachrichtigungs-Workflows und Community-Aktivitätsmonitoring.
Überblick
| Eigenschaft | Wert |
|---|---|
| Plattform | GitHub |
| Kategorie | Custom |
| Einrichtungsaufwand | Mittel |
| Offizielle Integration | Nein |
| Synchronisierte Daten | Events, Nutzer:innen, Repositories |
| API-Typ | REST API, GraphQL API |
| Authentifizierung | GitHub App / Personal Access Token / OAuth 2.0 |
| Basis-URL | https://api.github.com |
| API-Version | 2022-11-28 (header-basierte Versionierung) |
Funktionen
- Issue- und PR-Tracking - Synchronisiere Issue- und Pull-Request-Events in Brevo-Kontaktverläufe
- Release-Benachrichtigungen - Löse Brevo-Kampagnen bei neuen Repository-Releases aus
- Contributor-Synchronisierung - Ordne GitHub-Contributor:innen Brevo-Kontakten zu, um Community-Engagement zu fördern
- Star- und Fork-Tracking - Überwache Popularitätsmetriken von Repositories
- Webhook-Event-Weiterleitung - Leite GitHub-Events an Brevo-Automatisierungen weiter
- Repository-Katalog - Synchronisiere Repository-Metadaten als Brevo-Katalogeinträge
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- Ein GitHub-Konto mit Zugriff auf die Ziel-Repositories
- Eine GitHub-App oder ein Personal Access Token (Fine-Grained empfohlen)
- Admin-Zugriff auf Repositories für die Webhook-Konfiguration
- Ein Brevo-Konto mit API-Zugriff
- Ein Tajo-Konto mit aktivem Abonnement
Authentifizierung
GitHub unterstützt mehrere Authentifizierungsmethoden. Tajo empfiehlt die Verwendung von GitHub Apps für Zugriff auf Organisationsebene.
Option 1: GitHub-App (Empfohlen)
- Navigiere zu Settings > Developer settings > GitHub Apps
- Klicke auf New GitHub App
- Konfiguriere die App mit diesen Berechtigungen:
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
- Gehe zu Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klicke auf Generate new token
- Wähle die Ziel-Repositories aus
- Gewähre diese Berechtigungen:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyToken-Sicherheit
Fine-Grained-Tokens haben Ablaufdaten. Richte eine Token-Rotation vor Ablauf ein. GitHub-App-Installationstokens werden automatisch erneuert und sind für den produktiven Einsatz zu bevorzugen.
Verbindung zu Tajo herstellen
# Using GitHub Apptajo connectors install github \ --app-id $GITHUB_APP_ID \ --private-key-path ./github-app-key.pem \ --installation-id $GITHUB_INSTALLATION_ID
# Using Personal Access Tokentajo connectors install github \ --token $GITHUB_TOKENKonfiguration
Grundeinrichtung
connectors: github: enabled: true auth_type: "github_app" # or "token"
repositories: - owner/repo-1 - owner/repo-2
sync: issues: true pull_requests: true releases: true contributors: true stars: true
lists: contributors: 20 stargazers: 21Feldzuordnung
Ordne GitHub-Nutzer:innen-Daten Brevo-Kontaktattributen zu:
field_mapping: # Standard fields login: GITHUB_USERNAME email: email name: FIRSTNAME
# Developer metrics contributions: GITHUB_CONTRIBUTIONS repositories_count: GITHUB_REPOS followers: GITHUB_FOLLOWERS created_at: GITHUB_JOINED
# Custom attributes company: COMPANY location: LOCATION bio: GITHUB_BIOAPI-Endpunkte
Tajo integriert die folgenden Endpunkte der GitHub REST API:
| Endpunkt | Methode | Zweck |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Repository-Issues auflisten |
/repos/{owner}/{repo}/pulls | GET | Pull Requests auflisten |
/repos/{owner}/{repo}/releases | GET | Releases auflisten |
/repos/{owner}/{repo}/contributors | GET | Contributor:innen auflisten |
/repos/{owner}/{repo}/stargazers | GET | Stargazer auflisten |
/repos/{owner}/{repo}/forks | GET | Forks auflisten |
/repos/{owner}/{repo}/events | GET | Repository-Events auflisten |
/users/{username} | GET | Nutzer:innen-Profil abrufen |
/orgs/{org}/members | GET | Mitglieder der Organisation auflisten |
/repos/{owner}/{repo}/hooks | POST | Webhook anlegen |
Code-Beispiele
Connector initialisieren
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});Contributor:innen mit Brevo synchronisieren
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// }Webhook-Events verarbeiten
app.post('/webhooks/github', async (req, res) => { const signature = req.get('X-Hub-Signature-256'); const event = req.get('X-GitHub-Event');
// Verify webhook signature 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');});Release-Kampagne auslösen
// Listen for new releases and trigger Brevo campaigntajo.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 } });});Ratenbegrenzungen
GitHub erzwingt Ratenbegrenzungen je nach Authentifizierungsmethode:
| Authentifizierung | Primäres Rate-Limit | Search API |
|---|---|---|
| Nicht authentifiziert | 60 Anfragen/Stunde | 10 Anfragen/Minute |
| Personal Access Token | 5.000 Anfragen/Stunde | 30 Anfragen/Minute |
| GitHub App (Installation) | 5.000 Anfragen/Stunde | 30 Anfragen/Minute |
| GitHub App (User-to-Server) | 5.000 Anfragen/Stunde | 30 Anfragen/Minute |
Conditional Requests
Tajo verwendet Conditional Requests (If-None-Match/If-Modified-Since-Header), um den API-Verbrauch zu reduzieren. Antworten mit 304 Not Modified werden nicht auf das Rate-Limit angerechnet.
Weitere Begrenzungen:
- Sekundäre Ratenbegrenzungen: Maximal 100 gleichzeitige Anfragen. Maximal 900 Punkte pro Minute für REST-API-Endpunkte.
- GraphQL: 5.000 Punkte pro Stunde (Abfragekosten variieren je nach Komplexität).
Fehlerbehebung
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| 401 Unauthorized | Abgelaufenes Token oder falsche Zugangsdaten | Token erneuern oder GitHub-App neu installieren |
| 403 Forbidden | Unzureichende Berechtigungen | Token-Scopes oder App-Berechtigungen prüfen |
| 404 Not Found | Privates Repo ohne Zugriff | Repository-Zugriff dem Token oder der App erteilen |
| Rate Limit überschritten | Zu viele API-Aufrufe | Conditional Requests aktivieren und Synchronisationsfrequenz reduzieren |
| Webhooks werden nicht empfangen | Falsche URL oder Firewall | Prüfe, ob die Webhook-URL öffentlich erreichbar ist |
Debug-Modus
connectors: github: debug: true log_level: verbose log_webhooks: trueVerbindung testen
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Best Practices
- GitHub Apps statt PATs verwenden - GitHub Apps bieten granulare Berechtigungen und automatisch erneuerte Tokens
- Webhook-Secrets aktivieren - Verifiziere Webhook-Signaturen stets mit HMAC-SHA256
- Conditional Requests nutzen - Verwende ETags, um Rate-Limit-Kontingente zu schonen
- Große Antworten paginieren - GitHub liefert maximal 100 Einträge pro Seite; iteriere über
Link-Header - Vollständige Syncs zu Niedriglastzeiten planen - Führe Full-Syncs außerhalb der Hauptentwicklungszeiten aus
- Rate-Limit-Header überwachen - Prüfe
X-RateLimit-Remaining, um proaktiv zu drosseln
Sicherheit
- GitHub-App-Authentifizierung - RSA-Key-basierte JWTs mit kurzlebigen Installationstokens
- Webhook-Signaturen - HMAC-SHA256-Signaturprüfung für alle Webhook-Payloads
- Fine-Grained Tokens - Auf bestimmte Repositories und Berechtigungen beschränkt
- Nur HTTPS - Die gesamte API-Kommunikation ist per TLS 1.2+ verschlüsselt
- Verschlüsselte Speicherung - Private Keys und Tokens werden in Tajo verschlüsselt gespeichert
- Token-Ablauf - Fine-Grained-Tokens laufen automatisch ab; richte Rotationsalarme ein