Конектор GitHub
Свържете вашите GitHub хранилища с Brevo за проследяване на ангажираността на разработчиците, работни потоци за известия за release-и и наблюдение на активността на общността чрез Tajo.
Преглед
| Свойство | Стойност |
|---|---|
| Платформа | GitHub |
| Категория | Персонализирана |
| Сложност на настройка | Умерена |
| Официална интеграция | Не |
| Синхронизирани данни | Събития, потребители, хранилища |
| Тип на API | REST API, GraphQL API |
| Автентикация | GitHub App / Personal Access Token / OAuth 2.0 |
| Base URL | https://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
Предварителни условия
Преди да започнете, уверете се, че имате:
- Акаунт в GitHub с достъп до целевите хранилища
- GitHub App или Personal Access Token (препоръчва се fine-grained)
- Администраторски достъп до хранилищата за конфигуриране на webhook
- Акаунт в Brevo с API достъп
- Акаунт в Tajo с активен абонамент
Автентикация
GitHub поддържа множество методи за автентикация. Tajo препоръчва използването на GitHub Apps за достъп на ниво организация.
Опция 1: GitHub App (препоръчително)
- Отидете в Settings > Developer settings > GitHub Apps
- Щракнете върху New GitHub App
- Конфигурирайте приложението със следните разрешения:
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
- Отидете в Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Щракнете върху Generate new token
- Изберете целевите хранилища
- Предоставете следните разрешения:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyСигурност на токените
Fine-grained токените имат дати на изтичане. Настройте ротация на токените преди изтичането. Installation токените на GitHub App се обновяват автоматично и са предпочитани за продукционна употреба.
Свързване към Tajo
# Using GitHub Apptajo connectors install github \ --app-id $GITHUB_APP_ID \ --private-key-path ./github-app-key.pem \ --installation-id $GITHUB_INSTALLATION_ID
# Using Personal Access Tokentajo 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_BIOAPI крайни точки
Tajo се интегрира със следните GitHub REST API крайни точки:
| Endpoint | Method | Цел |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Списък на issue-тата в хранилище |
/repos/{owner}/{repo}/pulls | GET | Списък на pull request-ите |
/repos/{owner}/{repo}/releases | GET | Списък на release-ите |
/repos/{owner}/{repo}/contributors | GET | Списък на contributor-ите |
/repos/{owner}/{repo}/stargazers | GET | Списък на stargazer-ите |
/repos/{owner}/{repo}/forks | GET | Списък на fork-овете |
/repos/{owner}/{repo}/events | GET | Списък на събитията в хранилището |
/users/{username} | GET | Извличане на потребителски профил |
/orgs/{org}/members | GET | Списък на членовете на организацията |
/repos/{owner}/{repo}/hooks | POST | Създаване на 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 campaigntajo.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 Token | 5000 заявки/час | 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Тестване на връзката
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Най-добри практики
- Използвайте GitHub Apps вместо PAT – GitHub Apps предоставят гранулирани разрешения и автоматично обновявани токени
- Активирайте webhook secrets – Винаги проверявайте webhook подписите с HMAC-SHA256
- Използвайте условни заявки – Използвайте ETags, за да избегнете хабене на лимита на заявките
- Пагинирайте големите отговори – GitHub връща максимум 100 елемента на страница; итерирайте с хедъри
Link - Синхронизирайте при ниска активност – Планирайте пълни синхронизации извън пиковите часове на разработка
- Наблюдавайте хедърите за лимит – Проверявайте
X-RateLimit-Remainingза проактивно throttling
Сигурност
- Автентикация с GitHub App – RSA ключ-базиран JWT с краткотрайни installation токени
- Webhook подписи – HMAC-SHA256 верификация на подписите на всички webhook payloads
- Fine-Grained токени – Обхванати до конкретни хранилища и разрешения
- Само HTTPS – Цялата API комуникация е криптирана чрез TLS 1.2+
- Криптирано съхранение – Частните ключове и токените са криптирани в покой в Tajo
- Изтичане на токени – Fine-grained токените автоматично изтичат; настройте предупреждения за ротация