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.
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.