GitHub Connector
Poveži svoje repozitorije GitHub z Brevo za sledenje angažiranosti razvijalcev, delovne tokove obvestil o izdajah in spremljanje aktivnosti skupnosti prek Tajo.
Pregled
| Lastnost | Vrednost |
|---|---|
| Platforma | GitHub |
| Kategorija | Po meri |
| Zahtevnost nastavitve | Srednja |
| Uradna integracija | Ne |
| Sinhronizirani podatki | Dogodki, uporabniki, repozitoriji |
| Tip API | REST API, GraphQL API |
| Avtentikacija | GitHub App / Personal Access Token / OAuth 2.0 |
| Osnovni URL | https://api.github.com |
| Različica API | 2022-11-28 (različiranje na osnovi glave) |
Funkcionalnosti
- Sledenje težavam in PR – sinhronizacija событий težav in zahtevkov za potrditev na časovnice stikov Brevo
- Obvestila o izdajah – sproži kampanje Brevo ob novih izdajah repozitorija
- Sinhronizacija prispevnikov – preslikaj prispevnike GitHub v stike Brevo za angažiranje skupnosti
- Sledenje zvezdicam in vejam – spremljanje meritev priljubljenosti repozitorija
- Posredovanje webhook событий – posreduj вeventos GitHub v avtomatizacije Brevo
- Katalog repozitorijev – sinhronizacija metapodatkov repozitorija kot katalognih elementov Brevo
Predpogoji
Preden začneš, se prepričaj, da imaš:
- Račun GitHub z dostopom do ciljnih repozitorijev
- GitHub App ali Personal Access Token (priporočen podrobno določen)
- Administratorski dostop do repozitorijev za konfiguracijo webhookov
- Brevo račun z dostopom do API
- Tajo račun z aktivno naročnino
Avtentikacija
GitHub podpira več metod avtentikacije. Tajo priporoča uporabo GitHub Apps za dostop na ravni organizacije.
Možnost 1: GitHub App (priporočeno)
- Pojdi na Settings > Developer settings > GitHub Apps
- Klikni New GitHub App
- Nastavi aplikacijo s temi dovoljenji:
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žnost 2: Fine-Grained Personal Access Token
- Pojdi na Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klikni Generate new token
- Izberi ciljne repozitorije
- Dodeli ta dovoljenja:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyVarnost žetonov
Podrobno določeni žetoni imajo datume poteka. Nastavi rotacijo žetonov pred potekom. Žetoni za namestitev GitHub App se samodejno osvežijo in so za produkcijsko rabo primernejši.
Povezava s 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
Osnovna nastavitev
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: 21Preslikava polj
Preslikaj podatke o uporabniku GitHub v atribute stikov 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_BIOKončne točke API
Tajo se integrira z naslednjimi končnimi točkami GitHub REST API:
| Končna točka | Metoda | Namen |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Seznam težav repozitorija |
/repos/{owner}/{repo}/pulls | GET | Seznam zahtevkov za potrditev |
/repos/{owner}/{repo}/releases | GET | Seznam izdaj |
/repos/{owner}/{repo}/contributors | GET | Seznam prispevnikov |
/repos/{owner}/{repo}/stargazers | GET | Seznam oboževalcev |
/repos/{owner}/{repo}/forks | GET | Seznam vej |
/repos/{owner}/{repo}/events | GET | Seznam событий repozitorija |
/users/{username} | GET | Pridobi profil uporabnika |
/orgs/{org}/members | GET | Seznam članov organizacije |
/repos/{owner}/{repo}/hooks | POST | Ustvari webhook |
Primeri kode
Inicializacija konektorja
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 prispevnikov z 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// }Obravnava webhook событий
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');});Sprožanje kampanje ob izdaji
// 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 } });});Omejitve hitrosti
GitHub uveljavi omejitve hitrosti glede na metodo avtentikacije:
| Avtentikacija | Primarna omejitev hitrosti | Search API |
|---|---|---|
| Brez avtentikacije | 60 zahtevkov/uro | 10 zahtevkov/min |
| Personal Access Token | 5.000 zahtevkov/uro | 30 zahtevkov/min |
| GitHub App (namestitev) | 5.000 zahtevkov/uro | 30 zahtevkov/min |
| GitHub App (uporabnik-strežnik) | 5.000 zahtevkov/uro | 30 zahtevkov/min |
Pogojni zahtevki
Tajo za zmanjšanje porabe API uporablja pogojne zahtevke (glave If-None-Match / If-Modified-Since). Odgovori s 304 Not Modified se ne štejejo pri omejitvah hitrosti.
Dodatne omejitve:
- Sekundarne omejitve hitrosti: Največ 100 sočasnih zahtevkov. Največ 900 točk na minuto za končne točke REST API.
- GraphQL: 5.000 točk na uro (stroški poizvedbe se razlikujejo glede na kompleksnost).
Odpravljanje težav
Pogoste težave
| Težava | Vzrok | Rešitev |
|---|---|---|
| 401 Unauthorized | Potekel žeton ali napačne poverilnice | Obnovi žeton ali znova namesti GitHub App |
| 403 Forbidden | Nezadostna dovoljenja | Preveri obsege žetona ali dovoljenja aplikacije |
| 404 Not Found | Zasebni repozitorij brez dostopa | Dodeli dostop do repozitorija žetonu ali aplikaciji |
| Prekoračena omejitev hitrosti | Preveč klicev API | Omogoči pogojne zahtevke in zmanjšaj pogostost sinhronizacije |
| Webhooks niso prejeti | Napačen URL ali požarni zid | Preveri, da je URL webhookov javno dostopen |
Način odpravljanja napak
connectors: github: debug: true log_level: verbose log_webhooks: truePreizkus povezave
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Najboljše prakse
- Uporabi GitHub Apps namesto PAT – GitHub Apps zagotavljajo natančna dovoljenja in samodejno osvežujoče žetone
- Omogoči skrivnosti webhookov – vedno preverjaj podpise webhookov z HMAC-SHA256
- Uporabi pogojne zahtevke – izkoristi ETag-e, da ne zapravljaš kvote omejitve hitrosti
- Paginiraj velike odgovore – GitHub vrne največ 100 elementov na stran; iteriraj z glavami
Link - Sinhronizacija med nizko aktivnostjo – uredi polne sinhronizacije izven koničnih ur razvoja
- Spremljaj glave omejitve hitrosti – preveri
X-RateLimit-Remainingza proaktivno omejevanje
Varnost
- Avtentikacija GitHub App – JWT na osnovi ključa RSA s kratkotrajnimi žetoni namestitve
- Podpisi webhookov – preverjanje podpisa HMAC-SHA256 za vse vsebine webhookov
- Podrobno določeni žetoni – omejeni na določene repozitorije in dovoljenja
- Samo HTTPS – vsa komunikacija API šifrirana prek TLS 1.2+
- Šifrirano shranjevanje – zasebni ključi in žetoni šifrirani v mirovanju v Tajo
- Potek žetonov – podrobno določeni žetoni samodejno potečejo; nastavi opozorila za rotacijo