GitHub konektor
Prepoj svoje GitHub repozitáre s Brevo pre sledovanie zapojenia vývojárov, workflowy notifikácií o vydaniach a monitorovanie aktivity komunity cez Tajo.
Prehľad
| Vlastnosť | Hodnota |
|---|---|
| Platforma | GitHub |
| Kategória | Vlastná |
| Zložitosť nastavenia | Stredná |
| Oficiálna integrácia | Nie |
| Synchronizované dáta | Udalosti, Používatelia, Repozitáre |
| Typ API | REST API, GraphQL API |
| Autentifikácia | GitHub App / Personal Access Token / OAuth 2.0 |
| Base URL | https://api.github.com |
| Verzia API | 2022-11-28 (verzovanie cez hlavičky) |
Funkcie
- Sledovanie issues a PR - Synchronizuj udalosti issues a pull requestov do časových osí kontaktov v Brevo
- Notifikácie o vydaniach - Spúšťaj kampane Brevo pri nových vydaniach repozitárov
- Synchronizácia prispievateľov - Namapuj GitHub prispievateľov na kontakty Brevo pre zapojenie komunity
- Sledovanie hviezdičiek a forkov - Sleduj metriky obľúbenosti repozitárov
- Preposielanie webhook udalostí - Preposielaj GitHub udalosti do automatizácií Brevo
- Katalóg repozitárov - Synchronizuj metadáta repozitárov ako položky katalógu Brevo
Predpoklady
Predtým, než začneš, uisti sa, že máš:
- GitHub účet s prístupom k cieľovým repozitárom
- GitHub App alebo Personal Access Token (odporúča sa jemno-zrnitý)
- Admin prístup k repozitárom pre konfiguráciu webhookov
- Brevo účet s API prístupom
- Tajo účet s aktívnym predplatným
Autentifikácia
GitHub podporuje viacero metód autentifikácie. Tajo odporúča použitie GitHub Apps pre prístup na úrovni organizácie.
Možnosť 1: GitHub App (odporúčané)
- Prejdi na Settings > Developer settings > GitHub Apps
- Klikni na New GitHub App
- Nakonfiguruj aplikáciu s týmito oprávneniami:
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkMožnosť 2: Jemno-zrnitý Personal Access Token
- Choď na Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klikni na Generate new token
- Vyber cieľové repozitáre
- Udeľ tieto oprávnenia:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyBezpečnosť tokenu
Jemno-zrnitý tokeny majú dátum vypršania. Nastav rotáciu tokenov pred vypršaním. Inštalačné tokeny GitHub App sa automaticky obnovujú a sú preferované pre produkčné použitie.
Pripojenie k 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_TOKENKonfigurácia
Základné nastavenie
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: 21Mapovanie polí
Namapuj dáta používateľov GitHub na atribúty kontaktov v Brevo:
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 endpointy
Tajo sa integruje s nasledujúcimi endpointmi GitHub REST API:
| Endpoint | Metóda | Účel |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Zoznam issues repozitára |
/repos/{owner}/{repo}/pulls | GET | Zoznam pull requestov |
/repos/{owner}/{repo}/releases | GET | Zoznam vydaní |
/repos/{owner}/{repo}/contributors | GET | Zoznam prispievateľov |
/repos/{owner}/{repo}/stargazers | GET | Zoznam používateľov hviezdičiek |
/repos/{owner}/{repo}/forks | GET | Zoznam forkov |
/repos/{owner}/{repo}/events | GET | Zoznam udalostí repozitára |
/users/{username} | GET | Profil používateľa |
/orgs/{org}/members | GET | Zoznam členov organizácie |
/repos/{owner}/{repo}/hooks | POST | Vytvorenie webhooku |
Ukážky kódu
Inicializácia konektora
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});Synchronizácia prispievateľov do 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// }Spracovanie webhook udalostí
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');});Spustenie kampane pri vydaní
// 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 } });});Obmedzenia rýchlosti
GitHub uplatňuje obmedzenia rýchlosti podľa metódy autentifikácie:
| Autentifikácia | Primárny limit | Search API |
|---|---|---|
| Bez autentifikácie | 60 požiadaviek/hodinu | 10 požiadaviek/minútu |
| Personal Access Token | 5 000 požiadaviek/hodinu | 30 požiadaviek/minútu |
| GitHub App (inštalácia) | 5 000 požiadaviek/hodinu | 30 požiadaviek/minútu |
| GitHub App (user-to-server) | 5 000 požiadaviek/hodinu | 30 požiadaviek/minútu |
Podmienené požiadavky
Tajo používa podmienené požiadavky (hlavičky If-None-Match / If-Modified-Since) na zníženie spotreby API. Odpovede s 304 Not Modified sa nepočítajú do limitov.
Ďalšie limity:
- Sekundárne rate limity: Nie viac ako 100 súbežných požiadaviek. Nie viac ako 900 bodov za minútu pre REST API endpointy.
- GraphQL: 5 000 bodov za hodinu (cena dopytu sa líši podľa zložitosti).
Riešenie problémov
Bežné problémy
| Problém | Príčina | Riešenie |
|---|---|---|
| 401 Unauthorized | Vypršaný token alebo nesprávne prihlasovacie údaje | Znovu vygeneruj token alebo preinštaluj GitHub App |
| 403 Forbidden | Nedostatočné oprávnenia | Skontroluj scopes tokenu alebo oprávnenia App |
| 404 Not Found | Súkromný repozitár bez prístupu | Udeľ prístup k repozitáru tokenu alebo App |
| Prekročenie limitu | Príliš veľa API volaní | Povol podmienené požiadavky a zredukuj frekvenciu synchronizácie |
| Webhooky nie sú prijímané | Nesprávna URL alebo firewall | Overte, že URL webhookov je verejne dostupná |
Debug režim
connectors: github: debug: true log_level: verbose log_webhooks: trueTest pripojenia
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Odporúčané postupy
- Použi GitHub Apps namiesto PAT - GitHub Apps poskytujú jemné oprávnenia a automaticky sa obnovujúce tokeny
- Povol tajomstvá webhookov - Vždy overuj podpisy webhookov pomocou HMAC-SHA256
- Použi podmienené požiadavky - Využi ETags na vyhnutie sa plytvania kvótou rate limitu
- Stránkuj veľké odpovede - GitHub vracia max 100 položiek na stránku; iteruj pomocou hlavičiek
Link - Synchronizuj v čase nízkej aktivity - Plánuj plné synchronizácie mimo špičkových hodín vývoja
- Sleduj hlavičky rate limitu - Kontroluj
X-RateLimit-Remainingna proaktívne throttlovanie
Bezpečnosť
- GitHub App autentifikácia - JWT na základe RSA kľúčov s krátkodobo platiacimi inštalačnými tokenmi
- Podpisy webhookov - Overenie podpisu HMAC-SHA256 na všetkých webhook payloadoch
- Jemno-zrnitý tokeny - Obmedzené na konkrétne repozitáre a oprávnenia
- Iba HTTPS - Všetka API komunikácia šifrovaná cez TLS 1.2+
- Šifrované úložisko - Súkromné kľúče a tokeny šifrované v pokoji v Tajo
- Vypršanie tokenov - Jemno-zrnitý tokeny automaticky vypršavajú; nastav upozornenia na rotáciu