GitHub-kobling
Koble GitHub-repositoriene dine til Brevo for sporing av utviklerengasjement, arbeidsflyter for release-varslinger og overvåking av samfunnsaktivitet gjennom Tajo.
Oversikt
| Egenskap | Verdi |
|---|---|
| Plattform | GitHub |
| Kategori | Custom |
| Oppsettskompleksitet | Moderat |
| Offisiell integrasjon | Nei |
| Synkroniserte data | Hendelser, brukere, repositorier |
| API-type | REST API, GraphQL API |
| Autentisering | GitHub App / Personal Access Token / OAuth 2.0 |
| Base URL | https://api.github.com |
| API-versjon | 2022-11-28 (header-basert versjonering) |
Funksjoner
- Sporing av issues og PR-er - Synkroniser issue- og pull request-hendelser til Brevo-kontakttidslinjer
- Release-varslinger - Utløs Brevo-kampanjer på nye repository-releases
- Synkronisering av bidragsytere - Mapp GitHub-bidragsytere til Brevo-kontakter for samfunnsengasjement
- Sporing av stjerner og forks - Overvåk metrikk for repository-popularitet
- Videresending av webhook-hendelser - Videresend GitHub-hendelser til Brevo-automatiseringer
- Repository-katalog - Synkroniser repository-metadata som Brevo-katalogelementer
Forutsetninger
Før du begynner, sørg for at du har:
- En GitHub-konto med tilgang til målrepositorier
- En GitHub App eller Personal Access Token (fine-grained anbefales)
- Admin-tilgang til repositorier for webhook-konfigurasjon
- En Brevo-konto med API-tilgang
- En Tajo-konto med aktivt abonnement
Autentisering
GitHub støtter flere autentiseringsmetoder. Tajo anbefaler å bruke GitHub Apps for tilgang på organisasjonsnivå.
Alternativ 1: GitHub App (anbefalt)
- Naviger til Settings > Developer settings > GitHub Apps
- Klikk New GitHub App
- Konfigurer appen med disse tillatelsene:
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkAlternativ 2: Fine-Grained Personal Access Token
- Gå til Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klikk Generate new token
- Velg målrepositorier
- Gi disse tillatelsene:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyTokensikkerhet
Fine-grained tokens har utløpsdatoer. Sett opp token-rotering før utløp. GitHub App installation-tokens oppdateres automatisk og foretrekkes for produksjonsbruk.
Koble til 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_TOKENKonfigurasjon
Grunnleggende oppsett
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: 21Feltmapping
Mapp GitHub-brukerdata til Brevo-kontaktattributter:
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-endepunkter
Tajo integreres med følgende GitHub REST API-endepunkter:
| Endepunkt | Metode | Formål |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | List repository-issues |
/repos/{owner}/{repo}/pulls | GET | List pull requests |
/repos/{owner}/{repo}/releases | GET | List releases |
/repos/{owner}/{repo}/contributors | GET | List bidragsytere |
/repos/{owner}/{repo}/stargazers | GET | List stargazers |
/repos/{owner}/{repo}/forks | GET | List forks |
/repos/{owner}/{repo}/events | GET | List repository-hendelser |
/users/{username} | GET | Hent brukerprofil |
/orgs/{org}/members | GET | List organisasjonsmedlemmer |
/repos/{owner}/{repo}/hooks | POST | Opprett webhook |
Kodeeksempler
Initialiser kobling
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});Synkroniser bidragsytere til 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// }Håndter webhook-hendelser
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');});Utløs release-kampanje
// 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 } });});Hastighetsgrenser
GitHub håndhever hastighetsgrenser basert på autentiseringsmetode:
| Autentisering | Primær hastighetsgrense | Search API |
|---|---|---|
| Uautentisert | 60 forespørsler/time | 10 forespørsler/minutt |
| Personal Access Token | 5 000 forespørsler/time | 30 forespørsler/minutt |
| GitHub App (installation) | 5 000 forespørsler/time | 30 forespørsler/minutt |
| GitHub App (user-to-server) | 5 000 forespørsler/time | 30 forespørsler/minutt |
Betingede forespørsler
Tajo bruker betingede forespørsler (If-None-Match / If-Modified-Since-headere) for å redusere API-forbruk. Responser med 304 Not Modified teller ikke mot hastighetsgrenser.
Ytterligere grenser:
- Sekundære hastighetsgrenser: Ikke mer enn 100 samtidige forespørsler. Ikke mer enn 900 poeng per minutt for REST API-endepunkter.
- GraphQL: 5 000 poeng per time (spørringskostnad varierer med kompleksitet).
Feilsøking
Vanlige problemer
| Problem | Årsak | Løsning |
|---|---|---|
| 401 Unauthorized | Utløpt token eller feil legitimasjon | Generer tokenet på nytt eller installer GitHub App på nytt |
| 403 Forbidden | Utilstrekkelige tillatelser | Sjekk tokenets scopes eller App-tillatelser |
| 404 Not Found | Privat repo uten tilgang | Gi repository-tilgang til token eller App |
| Hastighetsgrense overskredet | For mange API-kall | Aktiver betingede forespørsler og reduser synkroniseringsfrekvens |
| Webhooks ikke mottatt | Feil URL eller brannmur | Verifiser at webhook-URL er offentlig tilgjengelig |
Feilsøkingsmodus
connectors: github: debug: true log_level: verbose log_webhooks: trueTest tilkobling
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Beste praksis
- Bruk GitHub Apps fremfor PAT-er - GitHub Apps gir granulære tillatelser og selvoppdaterende tokens
- Aktiver webhook-hemmeligheter - Verifiser alltid webhook-signaturer med HMAC-SHA256
- Bruk betingede forespørsler - Utnytt ETags for å unngå å kaste bort hastighetsgrense-kvote
- Paginér store responser - GitHub returnerer maks 100 elementer per side; iterer med
Link-headere - Synkroniser i lavaktivitetsperioder - Planlegg fulle synkroniseringer utenfor utviklingsarbeidstid
- Overvåk hastighetsgrense-headere - Sjekk
X-RateLimit-Remainingfor å proaktivt strupe
Sikkerhet
- GitHub App-autentisering - RSA-nøkkelbasert JWT med kortlivede installation-tokens
- Webhook-signaturer - HMAC-SHA256-signaturverifisering på alle webhook-payloader
- Fine-Grained Tokens - Begrenset til spesifikke repositorier og tillatelser
- Kun HTTPS - All API-kommunikasjon kryptert via TLS 1.2+
- Kryptert lagring - Private nøkler og tokens kryptert i ro i Tajo
- Token-utløp - Fine-grained tokens utløper automatisk; sett opp rotasjonsvarsler