GitHub-connector
Verbind je GitHub-repositories met Brevo voor developer-engagementtracking, release-notificatieworkflows en monitoring van community-activiteit via Tajo.
Overzicht
| Eigenschap | Waarde |
|---|---|
| Platform | GitHub |
| Categorie | Custom |
| Setupcomplexiteit | Gemiddeld |
| Officiële integratie | Nee |
| Gesynchroniseerde data | Events, Gebruikers, Repositories |
| API-type | REST API, GraphQL API |
| Authenticatie | GitHub App / Personal Access Token / OAuth 2.0 |
| Base URL | https://api.github.com |
| API-versie | 2022-11-28 (header-gebaseerde versionering) |
Functies
- Issue- en PR-tracking - Synchroniseer issue- en pull request-events naar Brevo-contacttimelines
- Release-notificaties - Trigger Brevo-campagnes bij nieuwe repository-releases
- Contributor-sync - Map GitHub-contributors naar Brevo-contacten voor community-engagement
- Star- en fork-tracking - Monitor populariteitsstatistieken van repositories
- Webhook event forwarding - Stuur GitHub-events door naar Brevo-automatiseringen
- Repositorycatalogus - Synchroniseer repository-metadata als Brevo-catalogusitems
Vereisten
Voordat je begint, zorg dat je beschikt over:
- Een GitHub-account met toegang tot de doel-repositories
- Een GitHub App of Personal Access Token (fine-grained aanbevolen)
- Admin-toegang tot repositories voor webhook-configuratie
- Een Brevo-account met API-toegang
- Een Tajo-account met een actief abonnement
Authenticatie
GitHub ondersteunt meerdere authenticatiemethoden. Tajo beveelt GitHub Apps aan voor toegang op organisatieniveau.
Optie 1: GitHub App (aanbevolen)
- Navigeer naar Settings > Developer settings > GitHub Apps
- Klik op New GitHub App
- Configureer de app met deze permissies:
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkOptie 2: Fine-Grained Personal Access Token
- Ga naar Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klik op Generate new token
- Selecteer de doel-repositories
- Geef deze permissies:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyTokenbeveiliging
Fine-grained tokens hebben een verloopdatum. Zet tokenrotatie op voordat ze verlopen. GitHub App-installation tokens vernieuwen automatisch en hebben de voorkeur voor productiegebruik.
Verbinden met Tajo
# 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_TOKENConfiguratie
Basisinstelling
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: 21Veldmapping
Map GitHub-gebruikersdata naar Brevo-contactattributen:
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-endpoints
Tajo integreert met de volgende GitHub REST API-endpoints:
| Endpoint | Method | Doel |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Lijst repository-issues |
/repos/{owner}/{repo}/pulls | GET | Lijst pull requests |
/repos/{owner}/{repo}/releases | GET | Lijst releases |
/repos/{owner}/{repo}/contributors | GET | Lijst contributors |
/repos/{owner}/{repo}/stargazers | GET | Lijst stargazers |
/repos/{owner}/{repo}/forks | GET | Lijst forks |
/repos/{owner}/{repo}/events | GET | Lijst repository-events |
/users/{username} | GET | Haal gebruikersprofiel op |
/orgs/{org}/members | GET | Lijst organisatieleden |
/repos/{owner}/{repo}/hooks | POST | Maak webhook aan |
Codevoorbeelden
Connector initialiseren
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});Contributors synchroniseren naar 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// }Webhook-events afhandelen
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-campagne triggeren
// 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 } });});Rate limits
GitHub hanteert rate limits afhankelijk van de authenticatiemethode:
| Authenticatie | Primaire rate limit | Search API |
|---|---|---|
| Unauthenticated | 60 requests/uur | 10 requests/minuut |
| Personal Access Token | 5.000 requests/uur | 30 requests/minuut |
| GitHub App (installation) | 5.000 requests/uur | 30 requests/minuut |
| GitHub App (user-to-server) | 5.000 requests/uur | 30 requests/minuut |
Conditional Requests
Tajo gebruikt conditional requests (If-None-Match- / If-Modified-Since-headers) om het API-verbruik te verlagen. Responses met 304 Not Modified tellen niet mee voor rate limits.
Aanvullende limieten:
- Secondary rate limits: Niet meer dan 100 gelijktijdige requests. Niet meer dan 900 punten per minuut voor REST API-endpoints.
- GraphQL: 5.000 punten per uur (querycost varieert per complexiteit).
Probleemoplossing
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| 401 Unauthorized | Verlopen token of verkeerde credentials | Regenereer token of herinstalleer GitHub App |
| 403 Forbidden | Onvoldoende rechten | Controleer tokenscopes of app-permissies |
| 404 Not Found | Private repo zonder toegang | Geef repository-toegang aan token of app |
| Rate limit exceeded | Te veel API-calls | Zet conditional requests aan en verlaag syncfrequentie |
| Webhooks niet ontvangen | Verkeerde URL of firewall | Controleer of de webhook-URL publiek bereikbaar is |
Debugmodus
connectors: github: debug: true log_level: verbose log_webhooks: trueVerbinding 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
- Gebruik GitHub Apps in plaats van PATs - GitHub Apps bieden granulaire permissies en tokens die automatisch verversen
- Zet webhook secrets aan - Verifieer altijd webhook-signatures met HMAC-SHA256
- Gebruik conditional requests - Benut ETags om geen rate limit-quota te verspillen
- Pagineer grote responses - GitHub retourneert max. 100 items per pagina; itereer met
Link-headers - Synchroniseer tijdens laagactieve uren - Plan full syncs buiten piek-developmenturen
- Monitor rate limit-headers - Controleer
X-RateLimit-Remainingom proactief te throttlen
Beveiliging
- GitHub App-authenticatie - RSA-key-gebaseerde JWT met kortlevende installation tokens
- Webhook-signatures - HMAC-SHA256-signature-verificatie op alle webhook-payloads
- Fine-Grained Tokens - Gescoped tot specifieke repositories en permissies
- Alleen HTTPS - Alle API-communicatie is versleuteld via TLS 1.2+
- Encrypted storage - Private keys en tokens versleuteld opgeslagen bij Tajo
- Tokenverloop - Fine-grained tokens verlopen automatisch; zet rotatie-alerts op