GitHub konektor

Prepoj svoje GitHub repozitáre s Brevo pre sledovanie zapojenia vývojárov, workflowy notifikácií o vydaniach a monitorovanie aktivity komunity cez Tajo.

Prehľad

VlastnosťHodnota
PlatformaGitHub
KategóriaVlastná
Zložitosť nastaveniaStredná
Oficiálna integráciaNie
Synchronizované dátaUdalosti, Používatelia, Repozitáre
Typ APIREST API, GraphQL API
AutentifikáciaGitHub App / Personal Access Token / OAuth 2.0
Base URLhttps://api.github.com
Verzia API2022-11-28 (verzovanie cez hlavičky)

Funkcie

  • Sledovanie issues a PR - Synchronizuj udalosti issues a pull requestov do časových osí kontaktov v Brevo
  • Notifikácie o vydaniach - Spúšťaj kampane Brevo pri nových vydaniach repozitárov
  • Synchronizácia prispievateľov - Namapuj GitHub prispievateľov na kontakty Brevo pre zapojenie komunity
  • Sledovanie hviezdičiek a forkov - Sleduj metriky obľúbenosti repozitárov
  • Preposielanie webhook udalostí - Preposielaj GitHub udalosti do automatizácií Brevo
  • Katalóg repozitárov - Synchronizuj metadáta repozitárov ako položky katalógu Brevo

Predpoklady

Predtým, než začneš, uisti sa, že máš:

  1. GitHub účet s prístupom k cieľovým repozitárom
  2. GitHub App alebo Personal Access Token (odporúča sa jemno-zrnitý)
  3. Admin prístup k repozitárom pre konfiguráciu webhookov
  4. Brevo účet s API prístupom
  5. Tajo účet s aktívnym predplatným

Autentifikácia

GitHub podporuje viacero metód autentifikácie. Tajo odporúča použitie GitHub Apps pre prístup na úrovni organizácie.

Možnosť 1: GitHub App (odporúčané)

  1. Prejdi na Settings > Developer settings > GitHub Apps
  2. Klikni na New GitHub App
  3. Nakonfiguruj aplikáciu s týmito oprávneniami:
Repository permissions:
Issues: Read
Pull requests: Read
Contents: Read
Metadata: Read
Organization permissions:
Members: Read
Subscribe to events:
Issues
Pull request
Push
Release
Star
Fork

Možnosť 2: Jemno-zrnitý Personal Access Token

  1. Choď na Settings > Developer settings > Personal access tokens > Fine-grained tokens
  2. Klikni na Generate new token
  3. Vyber cieľové repozitáre
  4. Udeľ tieto oprávnenia:
Repository access: Selected repositories
Permissions:
Issues: Read-only
Pull requests: Read-only
Contents: Read-only
Metadata: Read-only

Bezpečnosť tokenu

Jemno-zrnitý tokeny majú dátum vypršania. Nastav rotáciu tokenov pred vypršaním. Inštalačné tokeny GitHub App sa automaticky obnovujú a sú preferované pre produkčné použitie.

Pripojenie k Tajo

Terminal window
# Using GitHub App
tajo connectors install github \
--app-id $GITHUB_APP_ID \
--private-key-path ./github-app-key.pem \
--installation-id $GITHUB_INSTALLATION_ID
# Using Personal Access Token
tajo connectors install github \
--token $GITHUB_TOKEN

Konfigurácia

Základné nastavenie

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: 21

Mapovanie polí

Namapuj dáta používateľov GitHub na atribúty kontaktov v 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_BIO

API endpointy

Tajo sa integruje s nasledujúcimi endpointmi GitHub REST API:

EndpointMetódaÚčel
/repos/{owner}/{repo}/issuesGETZoznam issues repozitára
/repos/{owner}/{repo}/pullsGETZoznam pull requestov
/repos/{owner}/{repo}/releasesGETZoznam vydaní
/repos/{owner}/{repo}/contributorsGETZoznam prispievateľov
/repos/{owner}/{repo}/stargazersGETZoznam používateľov hviezdičiek
/repos/{owner}/{repo}/forksGETZoznam forkov
/repos/{owner}/{repo}/eventsGETZoznam udalostí repozitára
/users/{username}GETProfil používateľa
/orgs/{org}/membersGETZoznam členov organizácie
/repos/{owner}/{repo}/hooksPOSTVytvorenie webhooku

Ukážky kódu

Inicializácia konektora

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
});

Synchronizácia prispievateľov do 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
// }

Spracovanie webhook udalostí

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');
});

Spustenie kampane pri vydaní

// Listen for new releases and trigger Brevo campaign
tajo.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
}
});
});

Obmedzenia rýchlosti

GitHub uplatňuje obmedzenia rýchlosti podľa metódy autentifikácie:

AutentifikáciaPrimárny limitSearch API
Bez autentifikácie60 požiadaviek/hodinu10 požiadaviek/minútu
Personal Access Token5 000 požiadaviek/hodinu30 požiadaviek/minútu
GitHub App (inštalácia)5 000 požiadaviek/hodinu30 požiadaviek/minútu
GitHub App (user-to-server)5 000 požiadaviek/hodinu30 požiadaviek/minútu

Podmienené požiadavky

Tajo používa podmienené požiadavky (hlavičky If-None-Match / If-Modified-Since) na zníženie spotreby API. Odpovede s 304 Not Modified sa nepočítajú do limitov.

Ďalšie limity:

  • Sekundárne rate limity: Nie viac ako 100 súbežných požiadaviek. Nie viac ako 900 bodov za minútu pre REST API endpointy.
  • GraphQL: 5 000 bodov za hodinu (cena dopytu sa líši podľa zložitosti).

Riešenie problémov

Bežné problémy

ProblémPríčinaRiešenie
401 UnauthorizedVypršaný token alebo nesprávne prihlasovacie údajeZnovu vygeneruj token alebo preinštaluj GitHub App
403 ForbiddenNedostatočné oprávneniaSkontroluj scopes tokenu alebo oprávnenia App
404 Not FoundSúkromný repozitár bez prístupuUdeľ prístup k repozitáru tokenu alebo App
Prekročenie limituPríliš veľa API volaníPovol podmienené požiadavky a zredukuj frekvenciu synchronizácie
Webhooky nie sú prijímanéNesprávna URL alebo firewallOverte, že URL webhookov je verejne dostupná

Debug režim

connectors:
github:
debug: true
log_level: verbose
log_webhooks: true

Test pripojenia

Terminal window
tajo connectors test github
# ✓ API authentication successful
# ✓ Repository access verified
# ✓ Issue data readable
# ✓ Webhook delivery active
# ✓ Rate limit healthy (4,850/5,000 remaining)

Odporúčané postupy

  1. Použi GitHub Apps namiesto PAT - GitHub Apps poskytujú jemné oprávnenia a automaticky sa obnovujúce tokeny
  2. Povol tajomstvá webhookov - Vždy overuj podpisy webhookov pomocou HMAC-SHA256
  3. Použi podmienené požiadavky - Využi ETags na vyhnutie sa plytvania kvótou rate limitu
  4. Stránkuj veľké odpovede - GitHub vracia max 100 položiek na stránku; iteruj pomocou hlavičiek Link
  5. Synchronizuj v čase nízkej aktivity - Plánuj plné synchronizácie mimo špičkových hodín vývoja
  6. Sleduj hlavičky rate limitu - Kontroluj X-RateLimit-Remaining na proaktívne throttlovanie

Bezpečnosť

  • GitHub App autentifikácia - JWT na základe RSA kľúčov s krátkodobo platiacimi inštalačnými tokenmi
  • Podpisy webhookov - Overenie podpisu HMAC-SHA256 na všetkých webhook payloadoch
  • Jemno-zrnitý tokeny - Obmedzené na konkrétne repozitáre a oprávnenia
  • Iba HTTPS - Všetka API komunikácia šifrovaná cez TLS 1.2+
  • Šifrované úložisko - Súkromné kľúče a tokeny šifrované v pokoji v Tajo
  • Vypršanie tokenov - Jemno-zrnitý tokeny automaticky vypršavajú; nastav upozornenia na rotáciu

Súvisiace zdroje

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI asistent

Ahoj! Opýtajte sa ma na dokumentáciu.