Testar um webhook GitHub localmente
Para validar um handler de webhook do GitHub, não precisa pushar commits nem abrir PRs de verdade. Gere um evento GitHub assinado em HMAC-SHA256, edite o payload (repo, branch, autor) e envie para o seu servidor local. Sua verificação de X-Hub-Signature-256 é testada na hora.
Verificar a assinatura no servidor
import crypto from 'crypto';
const sig = req.headers['x-hub-signature-256'];
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));Para receber um webhook real do GitHub na sua máquina sem fazer deploy, configure a URL do seu túnel Relay nas configurações do repo.
Already receiving real deliveries and one is being rejected? Paste the raw body, secret and header into the GitHub signature validator to see exactly why X-Hub-Signature-256 doesn't match.
Perguntas frequentes
Como simular um push do GitHub no meu servidor local?
Escolha o evento push acima, cole o secret do webhook configurado no seu repo, informe a URL do seu handler (via Relay) e envie. O header X-Hub-Signature-256 é calculado em HMAC-SHA256 como o GitHub faz.
Qual a diferença entre X-Hub-Signature e X-Hub-Signature-256?
O X-Hub-Signature usa SHA-1 (legado), o X-Hub-Signature-256 usa SHA-256 (recomendado). O gerador produz os dois headers para cobrir todos os casos.
Como verificar a assinatura no servidor?
Calcule HMAC-SHA256(rawBody, secret) e compare em tempo constante com o valor do header (depois de 'sha256='). Veja o exemplo de código abaixo.
Posso testar pull_request e issues também?
Sim, os eventos push, pull_request e issues estão disponíveis, com um header X-GitHub-Event correto para cada um.