Probar un webhook de GitHub en local
Para validar un handler de webhook de GitHub, no hace falta pushear commits ni abrir PRs reales. Genera un evento de GitHub firmado en HMAC-SHA256, edita el payload (repo, rama, autor) y envíalo a tu servidor local. Tu verificación de X-Hub-Signature-256 se prueba al momento.
Verificar la firma en el 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 recibir un webhook real de GitHub en tu máquina sin desplegar, configura la URL de tu túnel Relay en los ajustes del repo.
Preguntas frecuentes
¿Cómo simular un push de GitHub en mi servidor local?
Elige el evento push de arriba, pega el secret del webhook configurado en tu repo, indica la URL de tu handler (vía Relay) y envía. El header X-Hub-Signature-256 se calcula en HMAC-SHA256 igual que lo hace GitHub.
¿Cuál es la diferencia entre X-Hub-Signature y X-Hub-Signature-256?
X-Hub-Signature usa SHA-1 (legacy), X-Hub-Signature-256 usa SHA-256 (recomendado). El generador produce ambos headers para cubrir todos los casos.
¿Cómo verificar la firma en el servidor?
Calcula HMAC-SHA256(rawBody, secret) y compáralo en tiempo constante con el valor del header (después de 'sha256='). Mira el ejemplo de código de abajo.
¿Puedo probar pull_request e issues también?
Sí, los eventos push, pull_request e issues están disponibles, con un header X-GitHub-Event correcto para cada uno.