{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://inquir.org/use-cases/github-webhooks#webpage","url":"https://inquir.org/use-cases/github-webhooks","name":"Process GitHub webhooks serverlessly for CI/CD and automation","headline":"Process GitHub webhooks serverlessly for CI/CD and automation","description":"Serverless GitHub webhook processor: HMAC-SHA256 signature verification, push/PR/release event handling, async pipeline for CI/CD triggers, issue automation, and repo indexing.","inLanguage":"en-US","isPartOf":{"@id":"https://inquir.org/#website"},"author":{"@type":"Organization","name":"Inquir"},"datePublished":"2025-01-01T00:00:00.000Z","dateModified":"2026-04-20T00:00:00.000Z","citation":"https://inquir.org/docs"},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://inquir.org"},{"@type":"ListItem","position":2,"name":"Use cases","item":"https://inquir.org/use-cases"},{"@type":"ListItem","position":3,"name":"GitHub webhooks","item":"https://inquir.org/use-cases/github-webhooks"}]},{"@type":"HowTo","@id":"https://inquir.org/use-cases/github-webhooks#howto","name":"Process GitHub webhooks serverlessly for CI/CD and automation","description":"Serverless GitHub webhook processor: HMAC-SHA256 signature verification, push/PR/release event handling, async pipeline for CI/CD triggers, issue automation, and repo indexing.","inLanguage":"en-US","author":{"@type":"Organization","name":"Inquir"},"step":[{"@type":"HowToStep","position":1,"name":"Verify HMAC-SHA256 timing-safely","text":"Extract x-hub-signature-256, compute expected HMAC, compare with timingSafeEqual."},{"@type":"HowToStep","position":2,"name":"Route by event type, return 200","text":"Switch on x-github-event header. Trigger appropriate pipeline. Return fast—before pipelines complete."},{"@type":"HowToStep","position":3,"name":"Process in pipelines","text":"Each pipeline step runs independently with retries. Deduplication keys prevent double-processing on retry."}],"isPartOf":{"@id":"https://inquir.org/use-cases/github-webhooks#webpage"}},{"@type":"FAQPage","@id":"https://inquir.org/use-cases/github-webhooks#faq","url":"https://inquir.org/use-cases/github-webhooks","isPartOf":{"@id":"https://inquir.org/use-cases/github-webhooks#webpage"},"mainEntity":[{"@type":"Question","name":"How do I test locally?","acceptedAnswer":{"@type":"Answer","text":"Use gh webhook forward --repo owner/repo --events push --url http://localhost:PORT to forward real events to a local function."}},{"@type":"Question","name":"What about pull_request review events?","acceptedAnswer":{"@type":"Answer","text":"GitHub sends many sub-actions (submitted, dismissed, edited). Always check payload.action to route correctly."}}]}]}