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

PropriedadeValor
PlataformaGitHub
CategoriaPersonalizado
Complexidade de configuraçãoModerada
Integração oficialNão
Dados sincronizadosEventos, Usuários, Repositórios
Tipo de APIREST API, GraphQL API
AutenticaçãoGitHub App / Personal Access Token / OAuth 2.0
URL basehttps://api.github.com
Versão da API2022-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:

  1. Uma conta GitHub com acesso aos repositórios alvo
  2. Um GitHub App ou Personal Access Token (fine-grained recomendado)
  3. Acesso de administrador aos repositórios para configuração de webhook
  4. Uma conta Brevo com acesso à API
  5. 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)

  1. Navegue até Settings > Developer settings > GitHub Apps
  2. Clique em New GitHub App
  3. 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
Fork

Opção 2: Fine-Grained Personal Access Token

  1. Acesse Settings > Developer settings > Personal access tokens > Fine-grained tokens
  2. Clique em Generate new token
  3. Selecione os repositórios alvo
  4. Conceda estas permissões:
Repository access: Selected repositories
Permissions:
Issues: Read-only
Pull requests: Read-only
Contents: Read-only
Metadata: Read-only

Seguranç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

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

Configuraçã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: 21

Mapeamento 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_BIO

Endpoints da API

O Tajo integra-se com os seguintes endpoints da REST API do GitHub:

EndpointMétodoFinalidade
/repos/{owner}/{repo}/issuesGETListar issues do repositório
/repos/{owner}/{repo}/pullsGETListar pull requests
/repos/{owner}/{repo}/releasesGETListar releases
/repos/{owner}/{repo}/contributorsGETListar colaboradores
/repos/{owner}/{repo}/stargazersGETListar stargazers
/repos/{owner}/{repo}/forksGETListar forks
/repos/{owner}/{repo}/eventsGETListar eventos do repositório
/users/{username}GETObter perfil de usuário
/orgs/{org}/membersGETListar membros da organização
/repos/{owner}/{repo}/hooksPOSTCriar 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 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
}
});
});

Limites de taxa

O GitHub aplica limites de taxa com base no método de autenticação:

AutenticaçãoLimite de taxa primárioSearch API
Não autenticado60 requisições/hora10 requisições/minuto
Personal Access Token5.000 requisições/hora30 requisições/minuto
GitHub App (installation)5.000 requisições/hora30 requisições/minuto
GitHub App (user-to-server)5.000 requisições/hora30 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

ProblemaCausaSolução
401 UnauthorizedToken expirado ou credenciais erradasRegere o token ou reinstale o GitHub App
403 ForbiddenPermissões insuficientesVerifique os escopos do token ou permissões do App
404 Not FoundRepositório privado sem acessoConceda acesso ao repositório ao token ou App
Limite de taxa excedidoMuitas chamadas de APIHabilite requisições condicionais e reduza a frequência de sincronização
Webhooks não recebidosURL incorreta ou firewallVerifique se a URL do webhook é publicamente acessível

Modo de depuração

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

Testar conexão

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)

Melhores práticas

  1. Use GitHub Apps em vez de PATs - GitHub Apps fornecem permissões granulares e tokens com renovação automática
  2. Habilite segredos de webhook - Sempre verifique assinaturas de webhook com HMAC-SHA256
  3. Use requisições condicionais - Aproveite ETags para evitar desperdiçar cota de limite de taxa
  4. Pagine respostas grandes - O GitHub retorna no máximo 100 itens por página; itere com cabeçalhos Link
  5. Sincronize durante baixa atividade - Agende sincronizações completas fora dos horários de pico de desenvolvimento
  6. Monitore os cabeçalhos de limite de taxa - Verifique X-RateLimit-Remaining para 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

Recursos relacionados

Subscribe to updates

developer-docs

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

auto-detect
Assistente AI

Olá! Pergunte-me qualquer coisa sobre a documentação.