GitHub Connector

Poveži svoje repozitorije GitHub z Brevo za sledenje angažiranosti razvijalcev, delovne tokove obvestil o izdajah in spremljanje aktivnosti skupnosti prek Tajo.

Pregled

LastnostVrednost
PlatformaGitHub
KategorijaPo meri
Zahtevnost nastavitveSrednja
Uradna integracijaNe
Sinhronizirani podatkiDogodki, uporabniki, repozitoriji
Tip APIREST API, GraphQL API
AvtentikacijaGitHub App / Personal Access Token / OAuth 2.0
Osnovni URLhttps://api.github.com
Različica API2022-11-28 (različiranje na osnovi glave)

Funkcionalnosti

  • Sledenje težavam in PR – sinhronizacija событий težav in zahtevkov za potrditev na časovnice stikov Brevo
  • Obvestila o izdajah – sproži kampanje Brevo ob novih izdajah repozitorija
  • Sinhronizacija prispevnikov – preslikaj prispevnike GitHub v stike Brevo za angažiranje skupnosti
  • Sledenje zvezdicam in vejam – spremljanje meritev priljubljenosti repozitorija
  • Posredovanje webhook событий – posreduj вeventos GitHub v avtomatizacije Brevo
  • Katalog repozitorijev – sinhronizacija metapodatkov repozitorija kot katalognih elementov Brevo

Predpogoji

Preden začneš, se prepričaj, da imaš:

  1. Račun GitHub z dostopom do ciljnih repozitorijev
  2. GitHub App ali Personal Access Token (priporočen podrobno določen)
  3. Administratorski dostop do repozitorijev za konfiguracijo webhookov
  4. Brevo račun z dostopom do API
  5. Tajo račun z aktivno naročnino

Avtentikacija

GitHub podpira več metod avtentikacije. Tajo priporoča uporabo GitHub Apps za dostop na ravni organizacije.

Možnost 1: GitHub App (priporočeno)

  1. Pojdi na Settings > Developer settings > GitHub Apps
  2. Klikni New GitHub App
  3. Nastavi aplikacijo s temi dovoljenji:
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žnost 2: Fine-Grained Personal Access Token

  1. Pojdi na Settings > Developer settings > Personal access tokens > Fine-grained tokens
  2. Klikni Generate new token
  3. Izberi ciljne repozitorije
  4. Dodeli ta dovoljenja:
Repository access: Selected repositories
Permissions:
Issues: Read-only
Pull requests: Read-only
Contents: Read-only
Metadata: Read-only

Varnost žetonov

Podrobno določeni žetoni imajo datume poteka. Nastavi rotacijo žetonov pred potekom. Žetoni za namestitev GitHub App se samodejno osvežijo in so za produkcijsko rabo primernejši.

Povezava s 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

Osnovna nastavitev

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

Preslikava polj

Preslikaj podatke o uporabniku GitHub v atribute stikov 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

Končne točke API

Tajo se integrira z naslednjimi končnimi točkami GitHub REST API:

Končna točkaMetodaNamen
/repos/{owner}/{repo}/issuesGETSeznam težav repozitorija
/repos/{owner}/{repo}/pullsGETSeznam zahtevkov za potrditev
/repos/{owner}/{repo}/releasesGETSeznam izdaj
/repos/{owner}/{repo}/contributorsGETSeznam prispevnikov
/repos/{owner}/{repo}/stargazersGETSeznam oboževalcev
/repos/{owner}/{repo}/forksGETSeznam vej
/repos/{owner}/{repo}/eventsGETSeznam событий repozitorija
/users/{username}GETPridobi profil uporabnika
/orgs/{org}/membersGETSeznam članov organizacije
/repos/{owner}/{repo}/hooksPOSTUstvari webhook

Primeri kode

Inicializacija konektorja

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

Obravnava webhook событий

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

Sprožanje kampanje ob izdaji

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

Omejitve hitrosti

GitHub uveljavi omejitve hitrosti glede na metodo avtentikacije:

AvtentikacijaPrimarna omejitev hitrostiSearch API
Brez avtentikacije60 zahtevkov/uro10 zahtevkov/min
Personal Access Token5.000 zahtevkov/uro30 zahtevkov/min
GitHub App (namestitev)5.000 zahtevkov/uro30 zahtevkov/min
GitHub App (uporabnik-strežnik)5.000 zahtevkov/uro30 zahtevkov/min

Pogojni zahtevki

Tajo za zmanjšanje porabe API uporablja pogojne zahtevke (glave If-None-Match / If-Modified-Since). Odgovori s 304 Not Modified se ne štejejo pri omejitvah hitrosti.

Dodatne omejitve:

  • Sekundarne omejitve hitrosti: Največ 100 sočasnih zahtevkov. Največ 900 točk na minuto za končne točke REST API.
  • GraphQL: 5.000 točk na uro (stroški poizvedbe se razlikujejo glede na kompleksnost).

Odpravljanje težav

Pogoste težave

TežavaVzrokRešitev
401 UnauthorizedPotekel žeton ali napačne poverilniceObnovi žeton ali znova namesti GitHub App
403 ForbiddenNezadostna dovoljenjaPreveri obsege žetona ali dovoljenja aplikacije
404 Not FoundZasebni repozitorij brez dostopaDodeli dostop do repozitorija žetonu ali aplikaciji
Prekoračena omejitev hitrostiPreveč klicev APIOmogoči pogojne zahtevke in zmanjšaj pogostost sinhronizacije
Webhooks niso prejetiNapačen URL ali požarni zidPreveri, da je URL webhookov javno dostopen

Način odpravljanja napak

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

Preizkus povezave

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)

Najboljše prakse

  1. Uporabi GitHub Apps namesto PAT – GitHub Apps zagotavljajo natančna dovoljenja in samodejno osvežujoče žetone
  2. Omogoči skrivnosti webhookov – vedno preverjaj podpise webhookov z HMAC-SHA256
  3. Uporabi pogojne zahtevke – izkoristi ETag-e, da ne zapravljaš kvote omejitve hitrosti
  4. Paginiraj velike odgovore – GitHub vrne največ 100 elementov na stran; iteriraj z glavami Link
  5. Sinhronizacija med nizko aktivnostjo – uredi polne sinhronizacije izven koničnih ur razvoja
  6. Spremljaj glave omejitve hitrosti – preveri X-RateLimit-Remaining za proaktivno omejevanje

Varnost

  • Avtentikacija GitHub App – JWT na osnovi ključa RSA s kratkotrajnimi žetoni namestitve
  • Podpisi webhookov – preverjanje podpisa HMAC-SHA256 za vse vsebine webhookov
  • Podrobno določeni žetoni – omejeni na določene repozitorije in dovoljenja
  • Samo HTTPS – vsa komunikacija API šifrirana prek TLS 1.2+
  • Šifrirano shranjevanje – zasebni ključi in žetoni šifrirani v mirovanju v Tajo
  • Potek žetonov – podrobno določeni žetoni samodejno potečejo; nastavi opozorila za rotacijo

Povezani viri

Subscribe to updates

developer-docs

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

auto-detect
AI pomočnik

Živjo! Vprašajte me o dokumentaciji.