WebhookToolkit
GitHub

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.

Gere a assinatura para ver os headers, o body e o comando cURL pronto para colar.

Verificar a assinatura no servidor

handler.js (Node)
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.

Testar um webhook GitHub localmente — Payload assinado X-Hub-Signature-256 · Webhook Toolkit