Коннектор GitHub

Подключите ваши репозитории GitHub к Brevo для отслеживания вовлечённости разработчиков, workflow уведомлений о релизах и мониторинга активности сообщества через Tajo.

Обзор

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

Возможности

  • Отслеживание issue и PR, синхронизируйте события issue и pull request в таймлайны контактов Brevo
  • Уведомления о релизах, запускайте кампании Brevo при новых релизах репозитория
  • Синхронизация контрибьюторов, сопоставляйте контрибьюторов GitHub с контактами Brevo для вовлечения сообщества
  • Отслеживание star и fork, отслеживайте метрики популярности репозитория
  • Пересылка событий вебхуков, пересылайте события GitHub в автоматизации Brevo
  • Каталог репозиториев, синхронизируйте метаданные репозиториев как элементы каталога Brevo

Предварительные требования

Прежде чем начать, убедитесь, что у вас есть:

  1. Аккаунт GitHub с доступом к целевым репозиториям
  2. GitHub App или Personal Access Token (рекомендуется fine-grained)
  3. Права администратора репозиториев для настройки вебхуков
  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:

ЭндпоинтМетодНазначение
/repos/{owner}/{repo}/issuesGETСписок issues репозитория
/repos/{owner}/{repo}/pullsGETСписок pull request
/repos/{owner}/{repo}/releasesGETСписок релизов
/repos/{owner}/{repo}/contributorsGETСписок контрибьюторов
/repos/{owner}/{repo}/stargazersGETСписок stargazer
/repos/{owner}/{repo}/forksGETСписок форков
/repos/{owner}/{repo}/eventsGETСписок событий репозитория
/users/{username}GETПолучить профиль пользователя
/orgs/{org}/membersGETСписок участников организации
/repos/{owner}/{repo}/hooksPOSTСоздать вебхук

Примеры кода

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

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

Синхронизация контрибьюторов в 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
// }

Обработка событий вебхуков

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

Запуск кампании релиза

// 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 Token5 000 запросов/час30 запросов/мин
GitHub App (installation)5 000 запросов/час30 запросов/мин
GitHub App (user-to-server)5 000 запросов/час30 запросов/мин

Условные запросы

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

Дополнительные ограничения:

  • Вторичные лимиты: не более 100 параллельных запросов. Не более 900 очков в минуту для эндпоинтов REST API.
  • GraphQL: 5 000 очков в час (стоимость запроса зависит от сложности).

Устранение неполадок

Частые проблемы

ПроблемаПричинаРешение
401 UnauthorizedИстёкший токен или неверные учётные данныеПерегенерируйте токен или переустановите GitHub App
403 ForbiddenНедостаточные разрешенияПроверьте scope токена или разрешения App
404 Not FoundПриватный репозиторий без доступаПредоставьте доступ к репозиторию токену или App
Превышен лимит запросовСлишком много API-вызововВключите условные запросы и уменьшите частоту синхронизации
Вебхуки не приходятНеверный URL или файрволПроверьте, что URL вебхука публично доступен

Режим отладки

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. Включайте секреты вебхуков, всегда проверяйте подписи вебхуков с HMAC-SHA256
  3. Используйте условные запросы, используйте ETag, чтобы не тратить квоту лимитов
  4. Пагинируйте большие ответы, GitHub возвращает максимум 100 элементов на страницу; итерируйте с заголовками Link
  5. Синхронизируйте в период низкой активности, планируйте полные синхронизации вне пиковых часов разработки
  6. Отслеживайте заголовки лимитов, проверяйте X-RateLimit-Remaining, чтобы проактивно ограничивать нагрузку

Безопасность

  • Аутентификация GitHub App, JWT на основе RSA-ключей с короткоживущими installation-токенами
  • Подписи вебхуков, проверка HMAC-SHA256 для всех payload вебхуков
  • 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-ассистент

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