GitHub DevLog AI GitHub DevLog AIWebhook inbox privado para GitHub
← 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.