Конектор GitHub

Свържете вашите GitHub хранилища с Brevo за проследяване на ангажираността на разработчиците, работни потоци за известия за release-и и наблюдение на активността на общността чрез Tajo.

Преглед

СвойствоСтойност
ПлатформаGitHub
КатегорияПерсонализирана
Сложност на настройкаУмерена
Официална интеграцияНе
Синхронизирани данниСъбития, потребители, хранилища
Тип на APIREST API, GraphQL API
АвтентикацияGitHub App / Personal Access Token / OAuth 2.0
Base URLhttps://api.github.com
API версия2022-11-28 (версия чрез header)

Функции

  • Проследяване на issue-та и PR-и – Синхронизирайте събития за issue-та и pull request-и към времевите линии на контактите в Brevo
  • Известия за release-и – Задействайте кампании в Brevo при нови release-и в хранилищата
  • Синхронизация на contributor-и – Мапвайте contributor-ите в GitHub към контакти в Brevo за ангажираност на общността
  • Проследяване на star-ове и fork-ове – Наблюдавайте метриките за популярност на хранилището
  • Препращане на webhook събития – Препращайте събития от GitHub към автоматизации в Brevo
  • Каталог на хранилищата – Синхронизирайте метаданни на хранилищата като каталожни елементи в Brevo

Предварителни условия

Преди да започнете, уверете се, че имате:

  1. Акаунт в GitHub с достъп до целевите хранилища
  2. GitHub App или Personal Access Token (препоръчва се fine-grained)
  3. Администраторски достъп до хранилищата за конфигуриране на webhook
  4. Акаунт в Brevo с API достъп
  5. Акаунт в Tajo с активен абонамент

Автентикация

GitHub поддържа множество методи за автентикация. Tajo препоръчва използването на GitHub Apps за достъп на ниво организация.

Опция 1: GitHub App (препоръчително)

  1. Отидете в Settings > Developer settings > GitHub Apps
  2. Щракнете върху New GitHub App
  3. Конфигурирайте приложението със следните разрешения:
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

Опция 2: Fine-Grained Personal Access Token

  1. Отидете в Settings > Developer settings > Personal access tokens > Fine-grained tokens
  2. Щракнете върху Generate new token
  3. Изберете целевите хранилища
  4. Предоставете следните разрешения:
Repository access: Selected repositories
Permissions:
Issues: Read-only
Pull requests: Read-only
Contents: Read-only
Metadata: Read-only

Сигурност на токените

Fine-grained токените имат дати на изтичане. Настройте ротация на токените преди изтичането. Installation токените на GitHub App се обновяват автоматично и са предпочитани за продукционна употреба.

Свързване към 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

Конфигурация

Основна настройка

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

Мапване на полета

Мапвайте данни за потребители от GitHub към атрибути на контактите в 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 крайни точки

Tajo се интегрира със следните GitHub REST API крайни точки:

EndpointMethodЦел
/repos/{owner}/{repo}/issuesGETСписък на issue-тата в хранилище
/repos/{owner}/{repo}/pullsGETСписък на pull request-ите
/repos/{owner}/{repo}/releasesGETСписък на release-ите
/repos/{owner}/{repo}/contributorsGETСписък на contributor-ите
/repos/{owner}/{repo}/stargazersGETСписък на stargazer-ите
/repos/{owner}/{repo}/forksGETСписък на fork-овете
/repos/{owner}/{repo}/eventsGETСписък на събитията в хранилището
/users/{username}GETИзвличане на потребителски профил
/orgs/{org}/membersGETСписък на членовете на организацията
/repos/{owner}/{repo}/hooksPOSTСъздаване на webhook

Примери за код

Инициализация на конектора

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

Синхронизация на contributor-ите към 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
// }

Обработка на 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');
});

Задействане на кампания за release

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

Лимити на заявки

GitHub налага лимити на заявки на базата на метода на автентикация:

АвтентикацияОсновен лимит на заявкиSearch API
Без автентикация60 заявки/час10 заявки/минута
Personal Access Token5000 заявки/час30 заявки/минута
GitHub App (installation)5000 заявки/час30 заявки/минута
GitHub App (user-to-server)5000 заявки/час30 заявки/минута

Условни заявки

Tajo използва условни заявки (хедъри If-None-Match / If-Modified-Since) за намаляване на API консумацията. Отговори с 304 Not Modified не се броят към лимитите на заявките.

Допълнителни лимити:

  • Вторични лимити на заявки: Не повече от 100 конкурентни заявки. Не повече от 900 точки на минута за REST API крайни точки.
  • GraphQL: 5000 точки на час (цената на заявката варира според сложността).

Отстраняване на проблеми

Често срещани проблеми

ПроблемПричинаРешение
401 UnauthorizedИзтекъл токен или грешни идентификационни данниГенерирайте нов токен или преинсталирайте GitHub App
403 ForbiddenНедостатъчни разрешенияПроверете обхватите на токена или разрешенията на App
404 Not FoundЧастно repo без достъпПредоставете достъп до хранилището на токена или App
Надвишен лимит на заявкиТвърде много API повикванияАктивирайте условни заявки и намалете честотата на синхронизация
Webhooks не се получаватГрешен URL или firewallПроверете дали webhook URL е публично достъпен

Debug режим

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

Тестване на връзката

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)

Най-добри практики

  1. Използвайте GitHub Apps вместо PAT – GitHub Apps предоставят гранулирани разрешения и автоматично обновявани токени
  2. Активирайте webhook secrets – Винаги проверявайте webhook подписите с HMAC-SHA256
  3. Използвайте условни заявки – Използвайте ETags, за да избегнете хабене на лимита на заявките
  4. Пагинирайте големите отговори – GitHub връща максимум 100 елемента на страница; итерирайте с хедъри Link
  5. Синхронизирайте при ниска активност – Планирайте пълни синхронизации извън пиковите часове на разработка
  6. Наблюдавайте хедърите за лимит – Проверявайте X-RateLimit-Remaining за проактивно throttling

Сигурност

  • Автентикация с GitHub App – RSA ключ-базиран JWT с краткотрайни installation токени
  • Webhook подписи – HMAC-SHA256 верификация на подписите на всички webhook payloads
  • Fine-Grained токени – Обхванати до конкретни хранилища и разрешения
  • Само HTTPS – Цялата API комуникация е криптирана чрез TLS 1.2+
  • Криптирано съхранение – Частните ключове и токените са криптирани в покой в Tajo
  • Изтичане на токени – Fine-grained токените автоматично изтичат; настройте предупреждения за ротация

Свързани ресурси

Subscribe to updates

developer-docs

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

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

Здравейте! Попитайте ме за документацията.