GitHub-koppling
Anslut dina GitHub-lager till Brevo för uppföljning av utvecklarengagemang, arbetsflöden för releasemeddelanden och övervakning av communityaktivitet via Tajo.
Översikt
| Egenskap | Värde |
|---|---|
| Plattform | GitHub |
| Kategori | Anpassad |
| Installationskomplexitet | Måttlig |
| Officiell integration | Nej |
| Data som synkas | Händelser, användare, lager |
| API-typ | REST API, GraphQL API |
| Autentisering | GitHub App / Personal Access Token / OAuth 2.0 |
| Bas-URL | https://api.github.com |
| API-version | 2022-11-28 (header-baserad versionering) |
Funktioner
- Uppföljning av issues och PR:er - Synka issue- och pull request-händelser till tidslinjer för Brevo-kontakter
- Releasemeddelanden - Utlös Brevo-kampanjer vid nya lagerreleaser
- Bidragsgivarsynk - Mappa GitHub-bidragsgivare till Brevo-kontakter för community-engagemang
- Stjärn- och fork-spårning - Övervaka lagrens popularitetsmått
- Vidarebefordran av webhook-händelser - Vidarebefordra GitHub-händelser till Brevo-automationer
- Lagerkatalog - Synka lagermetadata som Brevo-katalogposter
Förutsättningar
Innan du börjar, se till att du har:
- Ett GitHub-konto med åtkomst till målrepo
- En GitHub-app eller Personal Access Token (fine-grained rekommenderas)
- Administratörsåtkomst till lager för webhook-konfiguration
- Ett Brevo-konto med API-åtkomst
- Ett Tajo-konto med aktivt abonnemang
Autentisering
GitHub stöder flera autentiseringsmetoder. Tajo rekommenderar att använda GitHub Apps för åtkomst på organisationsnivå.
Alternativ 1: GitHub App (rekommenderas)
- Navigera till Settings > Developer settings > GitHub Apps
- Klicka på New GitHub App
- Konfigurera appen med dessa behörigheter:
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å till Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klicka på Generate new token
- Välj mål-lager
- Bevilja dessa behörigheter:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyTokensäkerhet
Fine-grained tokens har utgångsdatum. Sätt upp tokenrotation före utgång. GitHub App-installationstokens uppdateras automatiskt och föredras för produktionsbruk.
Ansluta till 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_TOKENKonfiguration
Grundinställning
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: 21Fältmappning
Mappa GitHub-användardata till Brevo-kontaktattribut:
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-endpoints
Tajo integrerar med följande endpoints i GitHubs REST API:
| Endpoint | Metod | Syfte |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Lista lagrets issues |
/repos/{owner}/{repo}/pulls | GET | Lista pull requests |
/repos/{owner}/{repo}/releases | GET | Lista releaser |
/repos/{owner}/{repo}/contributors | GET | Lista bidragsgivare |
/repos/{owner}/{repo}/stargazers | GET | Lista stargazers |
/repos/{owner}/{repo}/forks | GET | Lista forks |
/repos/{owner}/{repo}/events | GET | Lista lagerhändelser |
/users/{username} | GET | Hämta användarprofil |
/orgs/{org}/members | GET | Lista organisationsmedlemmar |
/repos/{owner}/{repo}/hooks | POST | Skapa webhook |
Kodexempel
Initiera kopplingen
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});Synka bidragsgivare till 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// }Hantera webhook-händelser
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 releasekampanj
// 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 } });});Hastighetsbegränsningar
GitHub tillämpar hastighetsbegränsningar baserat på autentiseringsmetod:
| Autentisering | Primär hastighetsbegränsning | Search API |
|---|---|---|
| Oautentiserad | 60 förfrågningar/timme | 10 förfrågningar/minut |
| Personal Access Token | 5 000 förfrågningar/timme | 30 förfrågningar/minut |
| GitHub App (installation) | 5 000 förfrågningar/timme | 30 förfrågningar/minut |
| GitHub App (user-to-server) | 5 000 förfrågningar/timme | 30 förfrågningar/minut |
Villkorliga förfrågningar
Tajo använder villkorliga förfrågningar (If-None-Match / If-Modified-Since-headers) för att minska API-konsumtionen. Svar med 304 Not Modified räknas inte mot hastighetsbegränsningen.
Ytterligare gränser:
- Sekundära hastighetsbegränsningar: Inte mer än 100 samtidiga förfrågningar. Inte mer än 900 poäng per minut för REST API-endpoints.
- GraphQL: 5 000 poäng per timme (frågekostnad varierar beroende på komplexitet).
Felsökning
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
| 401 Unauthorized | Utgången token eller fel uppgifter | Återgenerera token eller installera om GitHub-appen |
| 403 Forbidden | Otillräckliga behörigheter | Kontrollera tokens scopes eller appens behörigheter |
| 404 Not Found | Privat repo utan åtkomst | Bevilja lageråtkomst till token eller app |
| Hastighetsbegränsning överskriden | För många API-anrop | Aktivera villkorliga förfrågningar och minska synkfrekvensen |
| Webhooks tas inte emot | Fel URL eller brandvägg | Verifiera att webhook-URL:en är offentligt tillgänglig |
Felsökningsläge
connectors: github: debug: true log_level: verbose log_webhooks: trueTesta anslutning
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Bästa praxis
- Använd GitHub Apps framför PAT:er - GitHub Apps ger granulära behörigheter och automatiskt uppdaterande tokens
- Aktivera webhook-hemligheter - Verifiera alltid webhook-signaturer med HMAC-SHA256
- Använd villkorliga förfrågningar - Utnyttja ETags för att undvika att slösa hastighetsbegränsningskvot
- Paginera stora svar - GitHub returnerar max 100 objekt per sida; iterera med
Link-headers - Synka under låg aktivitet - Schemalägg fullständiga synkar utanför högaktiva utvecklingstimmar
- Övervaka rate limit-headers - Kontrollera
X-RateLimit-Remainingför att proaktivt strypa
Säkerhet
- GitHub App-autentisering - RSA-nyckelbaserad JWT med kortlivade installationstokens
- Webhook-signaturer - HMAC-SHA256-signaturverifiering på alla webhook-nyttolaster
- Fine-Grained Tokens - Scopade till specifika lager och behörigheter
- Endast HTTPS - All API-kommunikation krypterad via TLS 1.2+
- Krypterad lagring - Privata nycklar och tokens krypterade i vila i Tajo
- Token-utgång - Fine-grained tokens går automatiskt ut; sätt upp rotationsvarningar