Conector GitHub
Starea conectorului: Planificat Încă neconstruit. Tajo nu rulează astăzi acest conector.
Ilustrație · date de exemplu
Exemplu de sincronizare
Sursă
GitHub
Starea conectorului: Planificat
Destinație
Celălalt instrument al tău
Starea conectorului: Instrument personalizat
Maparea câmpurilor
| Câmp sursă | Câmp destinație | Valoare exemplu |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Ciornă
- Verifică o înregistrare
- Aprobă această versiune
Stările se referă la fiecare conector și nu garantează că această sincronizare este pregătită. Câmpurile sunt ilustrative. Verifică schema și permisiunile reale înainte de sincronizare.
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