Conector GitHub
Conecte seus repositórios do GitHub ao Brevo para rastreamento de engajamento de desenvolvedores, workflows de notificação de release e monitoramento de atividade da comunidade através do Tajo.
Visão geral
| Propriedade | Valor |
|---|---|
| Plataforma | GitHub |
| Categoria | Personalizado |
| Complexidade de configuração | Moderada |
| Integração oficial | Não |
| Dados sincronizados | Eventos, Usuários, Repositórios |
| Tipo de API | REST API, GraphQL API |
| Autenticação | GitHub App / Personal Access Token / OAuth 2.0 |
| URL base | https://api.github.com |
| Versão da API | 2022-11-28 (versionamento baseado em cabeçalho) |
Recursos
- Rastreamento de issues e PRs - Sincronize eventos de issues e pull requests para as timelines de contato do Brevo
- Notificações de release - Dispare campanhas do Brevo em novas releases de repositório
- Sincronização de colaboradores - Mapeie colaboradores do GitHub para contatos do Brevo para engajamento com a comunidade
- Rastreamento de stars e forks - Monitore métricas de popularidade do repositório
- Encaminhamento de eventos de webhook - Encaminhe eventos do GitHub para automações do Brevo
- Catálogo de repositórios - Sincronize metadados de repositório como itens de catálogo do Brevo
Pré-requisitos
Antes de começar, certifique-se de que você tem:
- Uma conta GitHub com acesso aos repositórios alvo
- Um GitHub App ou Personal Access Token (fine-grained recomendado)
- Acesso de administrador aos repositórios para configuração de webhook
- Uma conta Brevo com acesso à API
- Uma conta Tajo com assinatura ativa
Autenticação
O GitHub suporta vários métodos de autenticação. O Tajo recomenda usar GitHub Apps para acesso em nível de organização.
Opção 1: GitHub App (Recomendado)
- Navegue até Settings > Developer settings > GitHub Apps
- Clique em New GitHub App
- Configure o app com estas permissões:
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkOpção 2: Fine-Grained Personal Access Token
- Acesse Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Clique em Generate new token
- Selecione os repositórios alvo
- Conceda estas permissões:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlySegurança do token
Tokens fine-grained têm datas de expiração. Configure a rotação de tokens antes da expiração. Tokens de instalação de GitHub App se renovam automaticamente e são preferidos para uso em produção.
Conectando ao 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_TOKENConfiguração
Configuração básica
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: 21Mapeamento de campos
Mapeie dados de usuário do GitHub para atributos de contato do 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_BIOEndpoints da API
O Tajo integra-se com os seguintes endpoints da REST API do GitHub:
| Endpoint | Método | Finalidade |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Listar issues do repositório |
/repos/{owner}/{repo}/pulls | GET | Listar pull requests |
/repos/{owner}/{repo}/releases | GET | Listar releases |
/repos/{owner}/{repo}/contributors | GET | Listar colaboradores |
/repos/{owner}/{repo}/stargazers | GET | Listar stargazers |
/repos/{owner}/{repo}/forks | GET | Listar forks |
/repos/{owner}/{repo}/events | GET | Listar eventos do repositório |
/users/{username} | GET | Obter perfil de usuário |
/orgs/{org}/members | GET | Listar membros da organização |
/repos/{owner}/{repo}/hooks | POST | Criar webhook |
Exemplos de código
Inicializar o conector
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});Sincronizar colaboradores para o 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// }Tratar eventos de 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');});Disparar campanha de 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 } });});Limites de taxa
O GitHub aplica limites de taxa com base no método de autenticação:
| Autenticação | Limite de taxa primário | Search API |
|---|---|---|
| Não autenticado | 60 requisições/hora | 10 requisições/minuto |
| Personal Access Token | 5.000 requisições/hora | 30 requisições/minuto |
| GitHub App (installation) | 5.000 requisições/hora | 30 requisições/minuto |
| GitHub App (user-to-server) | 5.000 requisições/hora | 30 requisições/minuto |
Requisições condicionais
O Tajo usa requisições condicionais (cabeçalhos If-None-Match / If-Modified-Since) para reduzir o consumo da API. Respostas com 304 Not Modified não contam contra os limites de taxa.
Limites adicionais:
- Limites de taxa secundários: No máximo 100 requisições concorrentes. No máximo 900 pontos por minuto para endpoints da REST API.
- GraphQL: 5.000 pontos por hora (o custo da consulta varia de acordo com a complexidade).
Solução de problemas
Problemas comuns
| Problema | Causa | Solução |
|---|---|---|
| 401 Unauthorized | Token expirado ou credenciais erradas | Regere o token ou reinstale o GitHub App |
| 403 Forbidden | Permissões insuficientes | Verifique os escopos do token ou permissões do App |
| 404 Not Found | Repositório privado sem acesso | Conceda acesso ao repositório ao token ou App |
| Limite de taxa excedido | Muitas chamadas de API | Habilite requisições condicionais e reduza a frequência de sincronização |
| Webhooks não recebidos | URL incorreta ou firewall | Verifique se a URL do webhook é publicamente acessível |
Modo de depuração
connectors: github: debug: true log_level: verbose log_webhooks: trueTestar conexão
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Melhores práticas
- Use GitHub Apps em vez de PATs - GitHub Apps fornecem permissões granulares e tokens com renovação automática
- Habilite segredos de webhook - Sempre verifique assinaturas de webhook com HMAC-SHA256
- Use requisições condicionais - Aproveite ETags para evitar desperdiçar cota de limite de taxa
- Pagine respostas grandes - O GitHub retorna no máximo 100 itens por página; itere com cabeçalhos
Link - Sincronize durante baixa atividade - Agende sincronizações completas fora dos horários de pico de desenvolvimento
- Monitore os cabeçalhos de limite de taxa - Verifique
X-RateLimit-Remainingpara limitar proativamente
Segurança
- Autenticação de GitHub App - JWT baseado em chave RSA com tokens de instalação de vida curta
- Assinaturas de webhook - Verificação de assinatura HMAC-SHA256 em todos os payloads de webhook
- Tokens Fine-Grained - Com escopo para repositórios e permissões específicas
- Somente HTTPS - Toda comunicação com a API é criptografada via TLS 1.2+
- Armazenamento criptografado - Chaves privadas e tokens criptografados em repouso no Tajo
- Expiração de token - Tokens fine-grained expiram automaticamente; configure alertas de rotação