← Integrações GitHub
JavaScript
Webhook do GitHub com Node.js + Express
Use express.raw nesta rota: express.json executado antes dela altera os bytes assinados pelo GitHub.
Exemplo de código
Endpoint de webhook
Exemplos de código, nomes de cabeçalhos, nomes de eventos e assinaturas permanecem literais nos dois idiomas.
import crypto from 'node:crypto';
import express from 'express';
const app = express();
app.post('/webhooks/github', express.raw({ type: 'application/json' }), (req, res) => {
const sent = req.get('X-Hub-Signature-256') ?? '';
const expected = `sha256=${crypto.createHmac('sha256', process.env.GITHUB_WEBHOOK_SECRET)
.update(req.body).digest('hex')}`;
const valid = sent.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(sent), Buffer.from(expected));
if (!valid) return res.sendStatus(401);
queue.add({ deliveryId: req.get('X-GitHub-Delivery'), event: req.get('X-GitHub-Event'),
payload: JSON.parse(req.body.toString('utf8')) });
return res.sendStatus(202);
});
Passos de configuração
Valide a primeira delivery
Passos de configuração 1
Crie um workspace no DevLog e copie o endpoint e o Secret.
Passos de configuração 2
Configure o mesmo Secret no GitHub e na variável segura da aplicação.
Passos de configuração 3
Envie um ping e confirme assinatura, Delivery ID e payload no inbox.