GitHub Connector
Forbind dine GitHub-repositories med Brevo til sporing af udvikler-engagement, workflows til udgivelsesnotifikationer og overvågning af fællesskabsaktivitet gennem Tajo.
Oversigt
| Egenskab | Værdi |
|---|---|
| Platform | GitHub |
| Kategori | Brugerdefineret |
| Opsætningskompleksitet | Moderat |
| Officiel integration | Nej |
| Synkroniserede data | Hændelser, brugere, repositories |
| API-type | REST API, GraphQL API |
| Autentifikation | GitHub App / Personal Access Token / OAuth 2.0 |
| Base-URL | https://api.github.com |
| API-version | 2022-11-28 (header-baseret versionering) |
Funktioner
- Sporing af issues og PR’er - Synkronisér issue- og pull request-hændelser til Brevo-kontakttidslinjer
- Udgivelsesnotifikationer - Udløs Brevo-kampagner ved nye repository-udgivelser
- Synkronisering af bidragydere - Kortlæg GitHub-bidragydere til Brevo-kontakter til fællesskabs-engagement
- Sporing af stars og forks - Overvåg repository-popularitetsmetrikker
- Videresendelse af webhook-hændelser - Videresend GitHub-hændelser til Brevo-automatiseringer
- Repository-katalog - Synkronisér repository-metadata som Brevo-katalogelementer
Forudsætninger
Før du begynder, skal du sikre dig, at du har:
- En GitHub-konto med adgang til målrepositories
- En GitHub App eller et Personal Access Token (fine-grained anbefales)
- Admin-adgang til repositories til webhook-konfiguration
- En Brevo-konto med API-adgang
- En Tajo-konto med aktivt abonnement
Autentifikation
GitHub understøtter flere autentifikationsmetoder. Tajo anbefaler at bruge GitHub Apps til adgang på organisationsniveau.
Mulighed 1: GitHub App (anbefalet)
- Gå til Settings > Developer settings > GitHub Apps
- Klik på New GitHub App
- Konfigurér appen med disse tilladelser:
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkMulighed 2: Fine-Grained Personal Access Token
- Gå til Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klik på Generate new token
- Vælg målrepositories
- Tildel disse tilladelser:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyToken-sikkerhed
Fine-grained tokens har udløbsdatoer. Opsæt token-rotation før udløb. GitHub App-installationstokens opdateres automatisk og foretrækkes til produktionsbrug.
Forbind til 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_TOKENKonfiguration
Grundlæggende opsætning
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: 21Feltmapping
Kortlæg GitHub-brugerdata til Brevo-kontaktattributter:
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 integrerer med følgende GitHub REST API-endpoints:
| Endpoint | Metode | Formål |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Vis repository-issues |
/repos/{owner}/{repo}/pulls | GET | Vis pull requests |
/repos/{owner}/{repo}/releases | GET | Vis udgivelser |
/repos/{owner}/{repo}/contributors | GET | Vis bidragydere |
/repos/{owner}/{repo}/stargazers | GET | Vis stargazers |
/repos/{owner}/{repo}/forks | GET | Vis forks |
/repos/{owner}/{repo}/events | GET | Vis repository-hændelser |
/users/{username} | GET | Hent brugerprofil |
/orgs/{org}/members | GET | Vis organisationsmedlemmer |
/repos/{owner}/{repo}/hooks | POST | Opret webhook |
Kodeeksempler
Initialisér connector
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});Synkronisér bidragydere til 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// }Håndtér webhook-hændelser
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');});Udløs udgivelseskampagne
// 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 håndhæver rate limits baseret på autentifikationsmetode:
| Autentifikation | Primær rate limit | Search API |
|---|---|---|
| Uautentificeret | 60 anmodninger/time | 10 anmodninger/minut |
| Personal Access Token | 5.000 anmodninger/time | 30 anmodninger/minut |
| GitHub App (installation) | 5.000 anmodninger/time | 30 anmodninger/minut |
| GitHub App (user-to-server) | 5.000 anmodninger/time | 30 anmodninger/minut |
Betingede anmodninger
Tajo bruger betingede anmodninger (If-None-Match / If-Modified-Since-headers) for at reducere API-forbruget. Svar med 304 Not Modified tæller ikke med i rate limits.
Yderligere grænser:
- Sekundære rate limits: Ikke mere end 100 samtidige anmodninger. Ikke mere end 900 point pr. minut for REST API-endpoints.
- GraphQL: 5.000 point pr. time (forespørgselsomkostninger varierer efter kompleksitet).
Fejlfinding
Almindelige problemer
| Problem | Årsag | Løsning |
|---|---|---|
| 401 Unauthorized | Udløbet token eller forkerte legitimationsoplysninger | Regenerér token eller geninstallér GitHub App |
| 403 Forbidden | Utilstrækkelige tilladelser | Tjek token-scopes eller app-tilladelser |
| 404 Not Found | Privat repo uden adgang | Giv repository-adgang til token eller app |
| Rate limit overskredet | For mange API-kald | Aktivér betingede anmodninger og reducér synkroniseringsfrekvens |
| Webhooks ikke modtaget | Forkert URL eller firewall | Verificér, at webhook-URL er offentligt tilgængelig |
Debug-tilstand
connectors: github: debug: true log_level: verbose log_webhooks: trueTestforbindelse
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Bedste praksis
- Brug GitHub Apps frem for PAT’er - GitHub Apps giver granulære tilladelser og automatisk opdaterende tokens
- Aktivér webhook-secrets - Verificér altid webhook-signaturer med HMAC-SHA256
- Brug betingede anmodninger - Udnyt ETags for at undgå at spilde rate limit-kvote
- Paginér store svar - GitHub returnerer maks. 100 elementer pr. side; itérér med
Link-headers - Synkronisér uden for spidsbelastning - Planlæg fulde synkroniseringer uden for peak-udviklingstider
- Overvåg rate limit-headers - Tjek
X-RateLimit-Remainingfor proaktivt at throttle
Sikkerhed
- GitHub App-autentifikation - RSA-nøglebaseret JWT med kortvarige installationstokens
- Webhook-signaturer - HMAC-SHA256-signaturverifikation på alle webhook-payloads
- Fine-Grained tokens - Scoped til specifikke repositories og tilladelser
- Kun HTTPS - Al API-kommunikation krypteres via TLS 1.2+
- Krypteret opbevaring - Private nøgler og tokens krypteres i hvile i Tajo
- Token-udløb - Fine-grained tokens udløber automatisk; opsæt rotationsalarmer