GitHub konektor

Poveži svoje GitHub repozitorijume sa Brevo za praćenje angažovanja programera, tokove obaveštavanja o izdanjima i praćenje aktivnosti zajednice putem Tajo.

Pregled

SvojstvoVrednost
PlatformaGitHub
KategorijaPrilagođeno
Složenost podešavanjaSrednje
Zvanična integracijaNe
Sinhronizovani podaciDogađaji, Korisnici, Repozitorijumi
Tip API-jaREST API, GraphQL API
AutentifikacijaGitHub App / Personal Access Token / OAuth 2.0
Osnovni URLhttps://api.github.com
Verzija API-ja2022-11-28 (verzionisanje zasnovano na headeru)

Karakteristike

  • Praćenje problema i PR - Sinhronizuj događaje problema i pull zahteva sa Brevo vremenskim linijama kontakata
  • Obaveštenja o izdanjima - Pokretanje Brevo kampanja pri novim izdanjima repozitorijuma
  • Sinhronizacija saradnika - Mapiranje GitHub saradnika na Brevo kontakte za angažovanje zajednice
  • Praćenje zvezdica i forkova - Praćenje metrika popularnosti repozitorijuma
  • Prosleđivanje webhook događaja - Prosleđivanje GitHub događaja Brevo automatizacijama
  • Katalog repozitorijuma - Sinhronizacija metapodataka repozitorijuma kao Brevo katalog stavki

Preduslovi

Pre nego što započneš, proveri da imaš:

  1. GitHub nalog sa pristupom ciljnim repozitorijumima
  2. GitHub App ili Personal Access Token (fine-grained preporučeno)
  3. Admin pristup repozitorijumima za konfiguraciju webhook-ova
  4. Brevo nalog sa API pristupom
  5. Tajo nalog sa aktivnom pretplatom

Autentifikacija

GitHub podržava više metoda autentifikacije. Tajo preporučuje korišćenje GitHub Apps za pristup na nivou organizacije.

Opcija 1: GitHub App (preporučeno)

  1. Idi na Settings > Developer settings > GitHub Apps
  2. Klikni New GitHub App
  3. Konfiguriši aplikaciju sa ovim dozvolama:
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

Opcija 2: Fine-Grained Personal Access Token

  1. Idi na Settings > Developer settings > Personal access tokens > Fine-grained tokens
  2. Klikni Generate new token
  3. Izaberi ciljne repozitorijume
  4. Dodeli ove dozvole:
Repository access: Selected repositories
Permissions:
Issues: Read-only
Pull requests: Read-only
Contents: Read-only
Metadata: Read-only

Bezbednost tokena

Fine-grained tokeni imaju datume isteka. Postavi rotaciju tokena pre isteka. GitHub App instalacioni tokeni se automatski osvežavaju i preferiraju se za produkcijsku upotrebu.

Povezivanje sa 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

Konfiguracija

Osnovno podešavanje

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

Mapiranje polja

Mapiranje GitHub korisničkih podataka na Brevo atribute kontakta:

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 endpointi

Tajo se integriše sa sledećim GitHub REST API endpointima:

EndpointMetodaSvrha
/repos/{owner}/{repo}/issuesGETListanje problema u repozitorijumu
/repos/{owner}/{repo}/pullsGETListanje pull zahteva
/repos/{owner}/{repo}/releasesGETListanje izdanja
/repos/{owner}/{repo}/contributorsGETListanje saradnika
/repos/{owner}/{repo}/stargazersGETListanje posmatrača zvezdica
/repos/{owner}/{repo}/forksGETListanje forkova
/repos/{owner}/{repo}/eventsGETListanje događaja repozitorijuma
/users/{username}GETDohvatanje profila korisnika
/orgs/{org}/membersGETListanje članova organizacije
/repos/{owner}/{repo}/hooksPOSTKreiranje webhook-a

Primeri koda

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

Sinhronizacija saradnika sa 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
// }

Obrada webhook događaja

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

Pokretanje kampanje za izdanje

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

Ograničenja brzine

GitHub primenjuje ograničenja brzine zasnovana na metodu autentifikacije:

AutentifikacijaPrimarno ograničenjeSearch API
Neautentifikovano60 zahteva/sat10 zahteva/minut
Personal Access Token5.000 zahteva/sat30 zahteva/minut
GitHub App (instalacija)5.000 zahteva/sat30 zahteva/minut
GitHub App (user-to-server)5.000 zahteva/sat30 zahteva/minut

Uslovni zahtevi

Tajo koristi uslovne zahteve (If-None-Match / If-Modified-Since headeri) za smanjenje API potrošnje. Odgovori sa 304 Not Modified ne računaju se u ograničenja brzine.

Dodatna ograničenja:

  • Sekundarna ograničenja brzine: Ne više od 100 istovremenih zahteva. Ne više od 900 poena po minuti za REST API endpointe.
  • GraphQL: 5.000 poena po satu (cena upita varira prema složenosti).

Rešavanje problema

Česti problemi

ProblemUzrokRešenje
401 UnauthorizedIstekao token ili pogrešni akreditiviRegeneriši token ili ponovo instaliraj GitHub App
403 ForbiddenNedovoljne dozvoleProveri skopove tokena ili dozvole aplikacije
404 Not FoundPrivatni repozitorijum bez pristupaDodeli pristup repozitorijumu tokenu ili aplikaciji
Prekoračen limit brzinePreviše API pozivaOmogući uslovne zahteve i smanji učestalost sinhronizacije
Webhook-ovi nisu primljeniPogrešan URL ili firewallProveri da je URL webhook-a javno dostupan

Debug režim

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

Testiraj vezu

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)

Najbolje prakse

  1. Koristi GitHub Apps umesto PAT-ova - GitHub Apps pružaju granularne dozvole i automatski osvežavajuće tokene
  2. Omogući webhook secrets - Uvek verifikuj webhook potpise sa HMAC-SHA256
  3. Koristi uslovne zahteve - Koristi ETags da izbjegneš trošenje kvote ograničenja brzine
  4. Paginiraj velike odgovore - GitHub vraća maksimalno 100 stavki po stranici; iteriraj sa Link headerima
  5. Sinhronizuj tokom male aktivnosti - Zakaži pune sinhronizacije van vršnih sati razvoja
  6. Prati headere ograničenja brzine - Proveri X-RateLimit-Remaining da proaktivno ograničiš

Bezbednost

  • GitHub App autentifikacija - JWT zasnovan na RSA ključu sa kratkoročnim instalacionim tokenima
  • Webhook potpisi - HMAC-SHA256 verifikacija potpisa na svim webhook payload-ima
  • Fine-Grained tokeni - Skopovani na specifične repozitorijume i dozvole
  • Samo HTTPS - Sva API komunikacija enkriptovana putem TLS 1.2+
  • Enkriptovano skladištenje - Privatni ključevi i tokeni enkriptovani u mirovanju u Tajo
  • Isticanje tokena - Fine-grained tokeni automatski ističu; postavi upozorenja za rotaciju

Povezani resursi

Subscribe to updates

developer-docs

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

auto-detect
AI асистент

Здраво! Питајте ме о документацији.