GitHub Konektor

Povežite svoje GitHub repozitorije s Brevom za praćenje angažmana developera, tijekove rada obavijesti o izdanjima i praćenje aktivnosti zajednice putem Taja.

Pregled

SvojstvoVrijednost
PlatformaGitHub
KategorijaPrilagođeno
Složenost postavljanjaSrednje
Službena integracijaNe
Sinkronizirani podaciDogađaji, Korisnici, Repozitoriji
Vrsta API-jaREST API, GraphQL API
AutentifikacijaGitHub App / Personal Access Token / OAuth 2.0
Osnovni URLhttps://api.github.com
Verzija API-ja2022-11-28 (verzioniranje putem zaglavlja)

Značajke

  • Praćenje problema i PR-ova - Sinkronizirajte događaje problema i pull zahtjeva s Brevo vremenskim linijama kontakata
  • Obavijesti o izdanjima - Pokrećite Brevo kampanje za nova izdanja repozitorija
  • Sinkronizacija suradnika - Mapirajte GitHub suradnike na Brevo kontakte za angažman zajednice
  • Praćenje zvjezdica i forkova - Pratite metrike popularnosti repozitorija
  • Prosljeđivanje Webhook događaja - Prosljeđujte GitHub događaje Brevo automatizacijama
  • Katalog repozitorija - Sinkronizirajte metapodatke repozitorija kao Brevo stavke kataloga

Preduvjeti

Prije nego što počnete, osigurajte da imate:

  1. GitHub račun s pristupom ciljnim repozitorijima
  2. GitHub App ili Personal Access Token (preporučuju se granularni)
  3. Administratorski pristup repozitorijima za konfiguraciju webhookova
  4. Brevo račun s API pristupom
  5. Tajo račun s aktivnom pretplatom

Autentifikacija

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

Opcija 1: GitHub App (Preporučeno)

  1. Idite na Postavke > Developer settings > GitHub Apps
  2. Kliknite New GitHub App
  3. Konfigurirajte aplikaciju s ovim dozvolama:
Dozvole repozitorija:
Issues: Čitanje
Pull requests: Čitanje
Contents: Čitanje
Metadata: Čitanje
Dozvole organizacije:
Members: Čitanje
Pretplata na događaje:
Issues
Pull request
Push
Release
Star
Fork

Opcija 2: Granularni Personal Access Token

  1. Idite na Postavke > Developer settings > Personal access tokens > Fine-grained tokens
  2. Kliknite Generate new token
  3. Odaberite ciljne repozitorije
  4. Dodijelite ove dozvole:
Pristup repozitoriju: Odabrani repozitoriji
Dozvole:
Issues: Samo čitanje
Pull requests: Samo čitanje
Contents: Samo čitanje
Metadata: Samo čitanje

Sigurnost tokena

Granularni tokeni imaju datume isteka. Postavite rotaciju tokena prije isteka. GitHub App instalacijski tokeni se automatski obnavljaju i preferirani su za produkcijsku upotrebu.

Povezivanje s Tajom

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

Konfiguracija

Osnovna konfiguracija

connectors:
github:
enabled: true
auth_type: "github_app" # ili "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

Mapirajte GitHub korisničke podatke na Brevo atribute kontakata:

field_mapping:
# Standardna polja
login: GITHUB_USERNAME
email: email
name: FIRSTNAME
# Metrike developera
contributions: GITHUB_CONTRIBUTIONS
repositories_count: GITHUB_REPOS
followers: GITHUB_FOLLOWERS
created_at: GITHUB_JOINED
# Prilagođeni atributi
company: COMPANY
location: LOCATION
bio: GITHUB_BIO

API krajnje točke

Tajo se integrira sa sljedećim GitHub REST API krajnjim točkama:

Krajnja točkaMetodaNamjena
/repos/{owner}/{repo}/issuesGETPopis problema repozitorija
/repos/{owner}/{repo}/pullsGETPopis pull zahtjeva
/repos/{owner}/{repo}/releasesGETPopis izdanja
/repos/{owner}/{repo}/contributorsGETPopis suradnika
/repos/{owner}/{repo}/stargazersGETPopis korisnika koji su dodali zvjezdicu
/repos/{owner}/{repo}/forksGETPopis forkova
/repos/{owner}/{repo}/eventsGETPopis događaja repozitorija
/users/{username}GETDohvaćanje korisničkog profila
/orgs/{org}/membersGETPopis članova organizacije
/repos/{owner}/{repo}/hooksPOSTStvaranje webhookova

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

Sinkronizacija suradnika s Brevom

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

Rukovanje Webhook događajima

app.post('/webhooks/github', async (req, res) => {
const signature = req.get('X-Hub-Signature-256');
const event = req.get('X-GitHub-Event');
// Provjera webhook potpisa
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

// Slušanje novih izdanja i pokretanje Brevo kampanje
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 primjenjuje ograničenja brzine ovisno o metodi autentifikacije:

AutentifikacijaPrimarno ograničenje brzineSearch API
Neautentificirano60 zahtjeva/sat10 zahtjeva/minuti
Personal Access Token5.000 zahtjeva/sat30 zahtjeva/minuti
GitHub App (instalacija)5.000 zahtjeva/sat30 zahtjeva/minuti
GitHub App (user-to-server)5.000 zahtjeva/sat30 zahtjeva/minuti

Uvjetni zahtjevi

Tajo koristi uvjetne zahtjeve (zaglavlja If-None-Match / If-Modified-Since) za smanjenje potrošnje API-ja. Odgovori s 304 Not Modified ne računaju se u ograničenja brzine.

Dodatna ograničenja:

  • Sekundarna ograničenja brzine: Najviše 100 istovremenih zahtjeva. Najviše 900 bodova po minuti za REST API krajnje točke.
  • GraphQL: 5.000 bodova po satu (trošak upita varira po složenosti).

Rješavanje problema

Uobičajeni problemi

ProblemUzrokRješenje
401 UnauthorizedIstekli token ili pogrešne vjerodajniceRegenerirajte token ili ponovo instalirajte GitHub App
403 ForbiddenNedostatne dozvoleProvjerite opsege tokena ili dozvole App-a
404 Not FoundPrivatni repozitorij bez pristupaDodijelite pristup repozitoriju tokenu ili App-u
Prekoračeno ograničenje brzinePreviše API pozivaOmogućite uvjetne zahtjeve i smanjite učestalost sinkronizacije
Webhooks se ne primajuNetočan URL ili vatrozidProvjerite da je webhook URL javno dostupan

Način otklanjanja grešaka

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

Testiranje veze

Terminal window
tajo connectors test github
# ✓ API autentifikacija uspješna
# ✓ Pristup repozitoriju potvrđen
# ✓ Podaci o problemima čitljivi
# ✓ Isporuka webhookova aktivna
# ✓ Ograničenje brzine zdravo (4.850/5.000 preostalo)

Preporučene prakse

  1. Koristite GitHub Apps umjesto PAT-ova - GitHub Apps pružaju granularne dozvole i tokene koji se automatski obnavljaju
  2. Omogućite tajne webhookova - Uvijek verificirajte webhook potpise s HMAC-SHA256
  3. Koristite uvjetne zahtjeve - Iskoristite ETagove kako biste izbjegli trošenje kvote ograničenja brzine
  4. Paginirajte velike odgovore - GitHub vraća maks. 100 stavki po stranici; iterirajte s Link zaglavljima
  5. Sinkronizirajte za vrijeme niske aktivnosti - Zakazujte pune sinkronizacije izvan vršnih razvojnih sati
  6. Pratite zaglavlja ograničenja brzine - Provjerite X-RateLimit-Remaining za proaktivno usporavanje

Sigurnost

  • Autentifikacija GitHub App-om - JWT temeljen na RSA ključu s kratkoročnim instalacijskim tokenima
  • Webhook potpisi - HMAC-SHA256 verifikacija potpisa na svim webhook sadržajima
  • Granularni tokeni - Ograničeni na određene repozitorije i dozvole
  • Samo HTTPS - Sva API komunikacija šifrirana putem TLS 1.2+
  • Šifrirano pohranjivanje - Privatni ključevi i tokeni šifrirani u mirovanju u Taju
  • Istek tokena - Granularni tokeni automatski ističu; postavite alarme 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 asistent

Bok! Pitajte me o dokumentaciji.