Conector GitHub
Conectați depozitele GitHub la Brevo pentru urmărirea implicării dezvoltatorilor, fluxuri de notificare pentru lansări și monitorizarea activității comunității prin Tajo.
Prezentare generală
| Proprietate | Valoare |
|---|---|
| Platformă | GitHub |
| Categorie | Personalizat |
| Complexitate configurare | Moderată |
| Integrare oficială | Nu |
| Date sincronizate | Evenimente, Utilizatori, Depozite |
| Tip API | REST API, GraphQL API |
| Autentificare | GitHub App / Token de acces personal / OAuth 2.0 |
| URL de bază | https://api.github.com |
| Versiune API | 2022-11-28 (versionare bazată pe antet) |
Funcționalități
- Urmărire probleme și PR-uri - Sincronizați evenimentele de probleme și cereri de pull în cronologiile de contact Brevo
- Notificări lansări - Declanșați campanii Brevo la lansări noi de depozite
- Sincronizare contributori - Mapați contributorii GitHub la contactele Brevo pentru implicarea comunității
- Urmărire stele și fork-uri - Monitorizați valorile de popularitate ale depozitelor
- Redirecționare evenimente webhook - Transmiteți evenimentele GitHub la automatizările Brevo
- Catalog depozite - Sincronizați metadatele depozitelor ca elemente din catalogul Brevo
Cerințe preliminare
Înainte de a începe, asigurați-vă că aveți:
- Un cont GitHub cu acces la depozitele țintă
- O aplicație GitHub sau Token de acces personal (recomandat fin-granulat)
- Acces de administrator la depozite pentru configurarea webhook-urilor
- Un cont Brevo cu acces API
- Un cont Tajo cu abonament activ
Autentificare
GitHub suportă mai multe metode de autentificare. Tajo recomandă utilizarea GitHub Apps pentru acces la nivel de organizație.
Opțiunea 1: GitHub App (Recomandat)
- Navigați la Settings > Developer settings > GitHub Apps
- Faceți clic pe New GitHub App
- Configurați aplicația cu aceste permisiuni:
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkOpțiunea 2: Token de acces personal fin-granulat
- Accesați Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Faceți clic pe Generate new token
- Selectați depozitele țintă
- Acordați aceste permisiuni:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlySecuritate token
Tokenii fin-granulați au date de expirare. Configurați rotația tokenului înainte de expirare. Tokenii de instalare GitHub App se reîmprospătează automat și sunt preferați pentru utilizarea în producție.
Conectare la 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_TOKENConfigurare
Configurare de bază
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: 21Mapare câmpuri
Mapați datele utilizatorilor GitHub la atributele de contact 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_BIOPuncte finale API
Tajo se integrează cu următoarele puncte finale ale API-ului REST GitHub:
| Punct final | Metodă | Scop |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Listează problemele depozitului |
/repos/{owner}/{repo}/pulls | GET | Listează cererile de pull |
/repos/{owner}/{repo}/releases | GET | Listează lansările |
/repos/{owner}/{repo}/contributors | GET | Listează contributorii |
/repos/{owner}/{repo}/stargazers | GET | Listează cei care au dat stea |
/repos/{owner}/{repo}/forks | GET | Listează fork-urile |
/repos/{owner}/{repo}/events | GET | Listează evenimentele depozitului |
/users/{username} | GET | Obține profilul utilizatorului |
/orgs/{org}/members | GET | Listează membrii organizației |
/repos/{owner}/{repo}/hooks | POST | Creează webhook |
Exemple de cod
Inițializare conector
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});Sincronizare contributori cu 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// }Gestionare evenimente 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');});Declanșare campanie de lansare
// 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 } });});Limite de rată
GitHub aplică limite de rată bazate pe metoda de autentificare:
| Autentificare | Limită de rată principală | API Căutare |
|---|---|---|
| Neautentificat | 60 cereri/oră | 10 cereri/minut |
| Token de acces personal | 5.000 cereri/oră | 30 cereri/minut |
| GitHub App (instalare) | 5.000 cereri/oră | 30 cereri/minut |
| GitHub App (utilizator-la-server) | 5.000 cereri/oră | 30 cereri/minut |
Cereri condiționale
Tajo utilizează cereri condiționale (anteturi If-None-Match / If-Modified-Since) pentru a reduce consumul de API. Răspunsurile cu 304 Not Modified nu sunt contabilizate în limitele de rată.
Limite suplimentare:
- Limite de rată secundare: Nu mai mult de 100 cereri concurente. Nu mai mult de 900 puncte pe minut pentru punctele finale REST API.
- GraphQL: 5.000 puncte pe oră (costul interogării variază în funcție de complexitate).
Depanare
Probleme frecvente
| Problemă | Cauză | Soluție |
|---|---|---|
| 401 Neautorizat | Token expirat sau credențiale greșite | Regenerați tokenul sau reinstalați GitHub App |
| 403 Interzis | Permisiuni insuficiente | Verificați scopurile tokenului sau permisiunile aplicației |
| 404 Negăsit | Depozit privat fără acces | Acordați acces la depozit tokenului sau aplicației |
| Limită de rată depășită | Prea multe apeluri API | Activați cererile condiționale și reduceți frecvența sincronizării |
| Webhook-uri nereceptionate | URL incorect sau firewall | Verificați că URL-ul webhook este accesibil public |
Modul de depanare
connectors: github: debug: true log_level: verbose log_webhooks: trueTestare conexiune
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Bune practici
- Utilizați GitHub Apps față de PAT-uri - GitHub Apps oferă permisiuni granulare și tokeni cu auto-reîmprospătare
- Activați secretele webhook - Verificați întotdeauna semnăturile webhook cu HMAC-SHA256
- Utilizați cereri condiționale - Valorificați ETag-urile pentru a evita risipirea cotei de limite de rată
- Paginați răspunsurile mari - GitHub returnează maxim 100 elemente pe pagină; iterați cu anteturile
Link - Sincronizați în perioade de activitate redusă - Programați sincronizări complete în afara orelor de vârf de dezvoltare
- Monitorizați anteturile limitei de rată - Verificați
X-RateLimit-Remainingpentru a limita proactiv
Securitate
- Autentificare GitHub App - JWT bazat pe cheie RSA cu tokeni de instalare de scurtă durată
- Semnături webhook - Verificare semnătură HMAC-SHA256 pe toate payload-urile webhook
- Tokeni fin-granulați - Limitați la depozite și permisiuni specifice
- Numai HTTPS - Toată comunicarea API criptată prin TLS 1.2+
- Stocare criptată - Chei private și tokeni criptați în repaus în Tajo
- Expirare token - Tokenii fin-granulați expiră automat; configurați alerte de rotație