GitHub konektor
Poveži svoje GitHub repozitorijume sa Brevo za praćenje angažovanja programera, tokove obaveštavanja o izdanjima i praćenje aktivnosti zajednice putem Tajo.
Pregled
| Svojstvo | Vrednost |
|---|---|
| Platforma | GitHub |
| Kategorija | Prilagođeno |
| Složenost podešavanja | Srednje |
| Zvanična integracija | Ne |
| Sinhronizovani podaci | Događaji, Korisnici, Repozitorijumi |
| Tip API-ja | REST API, GraphQL API |
| Autentifikacija | GitHub App / Personal Access Token / OAuth 2.0 |
| Osnovni URL | https://api.github.com |
| Verzija API-ja | 2022-11-28 (verzionisanje zasnovano na headeru) |
Karakteristike
- Praćenje problema i PR - Sinhronizuj događaje problema i pull zahteva sa Brevo vremenskim linijama kontakata
- Obaveštenja o izdanjima - Pokretanje Brevo kampanja pri novim izdanjima repozitorijuma
- Sinhronizacija saradnika - Mapiranje GitHub saradnika na Brevo kontakte za angažovanje zajednice
- Praćenje zvezdica i forkova - Praćenje metrika popularnosti repozitorijuma
- Prosleđivanje webhook događaja - Prosleđivanje GitHub događaja Brevo automatizacijama
- Katalog repozitorijuma - Sinhronizacija metapodataka repozitorijuma kao Brevo katalog stavki
Preduslovi
Pre nego što započneš, proveri da imaš:
- GitHub nalog sa pristupom ciljnim repozitorijumima
- GitHub App ili Personal Access Token (fine-grained preporučeno)
- Admin pristup repozitorijumima za konfiguraciju webhook-ova
- Brevo nalog sa API pristupom
- Tajo nalog sa aktivnom pretplatom
Autentifikacija
GitHub podržava više metoda autentifikacije. Tajo preporučuje korišćenje GitHub Apps za pristup na nivou organizacije.
Opcija 1: GitHub App (preporučeno)
- Idi na Settings > Developer settings > GitHub Apps
- Klikni New GitHub App
- Konfiguriši aplikaciju sa ovim dozvolama:
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkOpcija 2: Fine-Grained Personal Access Token
- Idi na Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klikni Generate new token
- Izaberi ciljne repozitorijume
- Dodeli ove dozvole:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyBezbednost tokena
Fine-grained tokeni imaju datume isteka. Postavi rotaciju tokena pre isteka. GitHub App instalacioni tokeni se automatski osvežavaju i preferiraju se za produkcijsku upotrebu.
Povezivanje sa 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_TOKENKonfiguracija
Osnovno podešavanje
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: 21Mapiranje polja
Mapiranje GitHub korisničkih podataka na Brevo atribute kontakta:
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 endpointi
Tajo se integriše sa sledećim GitHub REST API endpointima:
| Endpoint | Metoda | Svrha |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Listanje problema u repozitorijumu |
/repos/{owner}/{repo}/pulls | GET | Listanje pull zahteva |
/repos/{owner}/{repo}/releases | GET | Listanje izdanja |
/repos/{owner}/{repo}/contributors | GET | Listanje saradnika |
/repos/{owner}/{repo}/stargazers | GET | Listanje posmatrača zvezdica |
/repos/{owner}/{repo}/forks | GET | Listanje forkova |
/repos/{owner}/{repo}/events | GET | Listanje događaja repozitorijuma |
/users/{username} | GET | Dohvatanje profila korisnika |
/orgs/{org}/members | GET | Listanje članova organizacije |
/repos/{owner}/{repo}/hooks | POST | Kreiranje webhook-a |
Primeri koda
Inicijalizacija 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});Sinhronizacija saradnika sa 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// }Obrada webhook događaja
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');});Pokretanje kampanje za izdanje
// 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 } });});Ograničenja brzine
GitHub primenjuje ograničenja brzine zasnovana na metodu autentifikacije:
| Autentifikacija | Primarno ograničenje | Search API |
|---|---|---|
| Neautentifikovano | 60 zahteva/sat | 10 zahteva/minut |
| Personal Access Token | 5.000 zahteva/sat | 30 zahteva/minut |
| GitHub App (instalacija) | 5.000 zahteva/sat | 30 zahteva/minut |
| GitHub App (user-to-server) | 5.000 zahteva/sat | 30 zahteva/minut |
Uslovni zahtevi
Tajo koristi uslovne zahteve (If-None-Match / If-Modified-Since headeri) za smanjenje API potrošnje. Odgovori sa 304 Not Modified ne računaju se u ograničenja brzine.
Dodatna ograničenja:
- Sekundarna ograničenja brzine: Ne više od 100 istovremenih zahteva. Ne više od 900 poena po minuti za REST API endpointe.
- GraphQL: 5.000 poena po satu (cena upita varira prema složenosti).
Rešavanje problema
Česti problemi
| Problem | Uzrok | Rešenje |
|---|---|---|
| 401 Unauthorized | Istekao token ili pogrešni akreditivi | Regeneriši token ili ponovo instaliraj GitHub App |
| 403 Forbidden | Nedovoljne dozvole | Proveri skopove tokena ili dozvole aplikacije |
| 404 Not Found | Privatni repozitorijum bez pristupa | Dodeli pristup repozitorijumu tokenu ili aplikaciji |
| Prekoračen limit brzine | Previše API poziva | Omogući uslovne zahteve i smanji učestalost sinhronizacije |
| Webhook-ovi nisu primljeni | Pogrešan URL ili firewall | Proveri da je URL webhook-a javno dostupan |
Debug režim
connectors: github: debug: true log_level: verbose log_webhooks: trueTestiraj vezu
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Najbolje prakse
- Koristi GitHub Apps umesto PAT-ova - GitHub Apps pružaju granularne dozvole i automatski osvežavajuće tokene
- Omogući webhook secrets - Uvek verifikuj webhook potpise sa HMAC-SHA256
- Koristi uslovne zahteve - Koristi ETags da izbjegneš trošenje kvote ograničenja brzine
- Paginiraj velike odgovore - GitHub vraća maksimalno 100 stavki po stranici; iteriraj sa
Linkheaderima - Sinhronizuj tokom male aktivnosti - Zakaži pune sinhronizacije van vršnih sati razvoja
- Prati headere ograničenja brzine - Proveri
X-RateLimit-Remainingda proaktivno ograničiš
Bezbednost
- GitHub App autentifikacija - JWT zasnovan na RSA ključu sa kratkoročnim instalacionim tokenima
- Webhook potpisi - HMAC-SHA256 verifikacija potpisa na svim webhook payload-ima
- Fine-Grained tokeni - Skopovani na specifične repozitorijume i dozvole
- Samo HTTPS - Sva API komunikacija enkriptovana putem TLS 1.2+
- Enkriptovano skladištenje - Privatni ključevi i tokeni enkriptovani u mirovanju u Tajo
- Isticanje tokena - Fine-grained tokeni automatski ističu; postavi upozorenja za rotaciju