GitHub Konektor
Povežite svoje GitHub repozitorije s Brevom za praćenje angažmana developera, tijekove rada obavijesti o izdanjima i praćenje aktivnosti zajednice putem Taja.
Pregled
| Svojstvo | Vrijednost |
|---|---|
| Platforma | GitHub |
| Kategorija | Prilagođeno |
| Složenost postavljanja | Srednje |
| Službena integracija | Ne |
| Sinkronizirani podaci | Događaji, Korisnici, Repozitoriji |
| Vrsta 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 (verzioniranje putem zaglavlja) |
Značajke
- Praćenje problema i PR-ova - Sinkronizirajte događaje problema i pull zahtjeva s Brevo vremenskim linijama kontakata
- Obavijesti o izdanjima - Pokrećite Brevo kampanje za nova izdanja repozitorija
- Sinkronizacija suradnika - Mapirajte GitHub suradnike na Brevo kontakte za angažman zajednice
- Praćenje zvjezdica i forkova - Pratite metrike popularnosti repozitorija
- Prosljeđivanje Webhook događaja - Prosljeđujte GitHub događaje Brevo automatizacijama
- Katalog repozitorija - Sinkronizirajte metapodatke repozitorija kao Brevo stavke kataloga
Preduvjeti
Prije nego što počnete, osigurajte da imate:
- GitHub račun s pristupom ciljnim repozitorijima
- GitHub App ili Personal Access Token (preporučuju se granularni)
- Administratorski pristup repozitorijima za konfiguraciju webhookova
- Brevo račun s API pristupom
- Tajo račun s aktivnom pretplatom
Autentifikacija
GitHub podržava više metoda autentifikacije. Tajo preporučuje korištenje GitHub Apps za pristup na razini organizacije.
Opcija 1: GitHub App (Preporučeno)
- Idite na Postavke > Developer settings > GitHub Apps
- Kliknite New GitHub App
- Konfigurirajte aplikaciju s ovim dozvolama:
Dozvole repozitorija: Issues: Čitanje Pull requests: Čitanje Contents: Čitanje Metadata: Čitanje
Dozvole organizacije: Members: Čitanje
Pretplata na događaje: Issues Pull request Push Release Star ForkOpcija 2: Granularni Personal Access Token
- Idite na Postavke > Developer settings > Personal access tokens > Fine-grained tokens
- Kliknite Generate new token
- Odaberite ciljne repozitorije
- Dodijelite ove dozvole:
Pristup repozitoriju: Odabrani repozitorijiDozvole: Issues: Samo čitanje Pull requests: Samo čitanje Contents: Samo čitanje Metadata: Samo čitanjeSigurnost tokena
Granularni tokeni imaju datume isteka. Postavite rotaciju tokena prije isteka. GitHub App instalacijski tokeni se automatski obnavljaju i preferirani su za produkcijsku upotrebu.
Povezivanje s Tajom
# Korištenjem GitHub Apptajo connectors install github \ --app-id $GITHUB_APP_ID \ --private-key-path ./github-app-key.pem \ --installation-id $GITHUB_INSTALLATION_ID
# Korištenjem Personal Access Tokenatajo connectors install github \ --token $GITHUB_TOKENKonfiguracija
Osnovna konfiguracija
connectors: github: enabled: true auth_type: "github_app" # ili "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
Mapirajte GitHub korisničke podatke na Brevo atribute kontakata:
field_mapping: # Standardna polja login: GITHUB_USERNAME email: email name: FIRSTNAME
# Metrike developera contributions: GITHUB_CONTRIBUTIONS repositories_count: GITHUB_REPOS followers: GITHUB_FOLLOWERS created_at: GITHUB_JOINED
# Prilagođeni atributi company: COMPANY location: LOCATION bio: GITHUB_BIOAPI krajnje točke
Tajo se integrira sa sljedećim GitHub REST API krajnjim točkama:
| Krajnja točka | Metoda | Namjena |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Popis problema repozitorija |
/repos/{owner}/{repo}/pulls | GET | Popis pull zahtjeva |
/repos/{owner}/{repo}/releases | GET | Popis izdanja |
/repos/{owner}/{repo}/contributors | GET | Popis suradnika |
/repos/{owner}/{repo}/stargazers | GET | Popis korisnika koji su dodali zvjezdicu |
/repos/{owner}/{repo}/forks | GET | Popis forkova |
/repos/{owner}/{repo}/events | GET | Popis događaja repozitorija |
/users/{username} | GET | Dohvaćanje korisničkog profila |
/orgs/{org}/members | GET | Popis članova organizacije |
/repos/{owner}/{repo}/hooks | POST | Stvaranje webhookova |
Primjeri 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});Sinkronizacija suradnika s Brevom
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// }Rukovanje Webhook događajima
app.post('/webhooks/github', async (req, res) => { const signature = req.get('X-Hub-Signature-256'); const event = req.get('X-GitHub-Event');
// Provjera webhook potpisa 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
// Slušanje novih izdanja i pokretanje Brevo kampanjetajo.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 primjenjuje ograničenja brzine ovisno o metodi autentifikacije:
| Autentifikacija | Primarno ograničenje brzine | Search API |
|---|---|---|
| Neautentificirano | 60 zahtjeva/sat | 10 zahtjeva/minuti |
| Personal Access Token | 5.000 zahtjeva/sat | 30 zahtjeva/minuti |
| GitHub App (instalacija) | 5.000 zahtjeva/sat | 30 zahtjeva/minuti |
| GitHub App (user-to-server) | 5.000 zahtjeva/sat | 30 zahtjeva/minuti |
Uvjetni zahtjevi
Tajo koristi uvjetne zahtjeve (zaglavlja If-None-Match / If-Modified-Since) za smanjenje potrošnje API-ja. Odgovori s 304 Not Modified ne računaju se u ograničenja brzine.
Dodatna ograničenja:
- Sekundarna ograničenja brzine: Najviše 100 istovremenih zahtjeva. Najviše 900 bodova po minuti za REST API krajnje točke.
- GraphQL: 5.000 bodova po satu (trošak upita varira po složenosti).
Rješavanje problema
Uobičajeni problemi
| Problem | Uzrok | Rješenje |
|---|---|---|
| 401 Unauthorized | Istekli token ili pogrešne vjerodajnice | Regenerirajte token ili ponovo instalirajte GitHub App |
| 403 Forbidden | Nedostatne dozvole | Provjerite opsege tokena ili dozvole App-a |
| 404 Not Found | Privatni repozitorij bez pristupa | Dodijelite pristup repozitoriju tokenu ili App-u |
| Prekoračeno ograničenje brzine | Previše API poziva | Omogućite uvjetne zahtjeve i smanjite učestalost sinkronizacije |
| Webhooks se ne primaju | Netočan URL ili vatrozid | Provjerite da je webhook URL javno dostupan |
Način otklanjanja grešaka
connectors: github: debug: true log_level: verbose log_webhooks: trueTestiranje veze
tajo connectors test github# ✓ API autentifikacija uspješna# ✓ Pristup repozitoriju potvrđen# ✓ Podaci o problemima čitljivi# ✓ Isporuka webhookova aktivna# ✓ Ograničenje brzine zdravo (4.850/5.000 preostalo)Preporučene prakse
- Koristite GitHub Apps umjesto PAT-ova - GitHub Apps pružaju granularne dozvole i tokene koji se automatski obnavljaju
- Omogućite tajne webhookova - Uvijek verificirajte webhook potpise s HMAC-SHA256
- Koristite uvjetne zahtjeve - Iskoristite ETagove kako biste izbjegli trošenje kvote ograničenja brzine
- Paginirajte velike odgovore - GitHub vraća maks. 100 stavki po stranici; iterirajte s
Linkzaglavljima - Sinkronizirajte za vrijeme niske aktivnosti - Zakazujte pune sinkronizacije izvan vršnih razvojnih sati
- Pratite zaglavlja ograničenja brzine - Provjerite
X-RateLimit-Remainingza proaktivno usporavanje
Sigurnost
- Autentifikacija GitHub App-om - JWT temeljen na RSA ključu s kratkoročnim instalacijskim tokenima
- Webhook potpisi - HMAC-SHA256 verifikacija potpisa na svim webhook sadržajima
- Granularni tokeni - Ograničeni na određene repozitorije i dozvole
- Samo HTTPS - Sva API komunikacija šifrirana putem TLS 1.2+
- Šifrirano pohranjivanje - Privatni ključevi i tokeni šifrirani u mirovanju u Taju
- Istek tokena - Granularni tokeni automatski ističu; postavite alarme za rotaciju