Skip to content

GitHub App

Org-level webhook receiver that turns GitHub activity into Evidence Events. Complements the GitHub Actions exporter: the App captures governance (who opened / approved / merged, scan findings); the Action captures the build with its image digest.

Prerequisites

  • Tenant ingest API key
  • Permission to create a GitHub App on the organisation
  • A public HTTPS URL for webhooks (dev: https://github.evitrus.dev/webhook)

Create the GitHub App

  1. GitHub → Organisation → Settings → Developer settings → GitHub Apps → New
  2. Or start from app-manifest.json via the manifest flow.

Configure:

SettingValue
Webhook URLhttps://github.evitrus.dev/webhook (dev) or your deployed host /webhook
Webhook secretStrong random string (also set as GITHUB_WEBHOOK_SECRET)
Permissions (read)Pull requests, Checks, Code scanning alerts, Metadata
EventsPull request, Pull request review, Check suite, Code scanning alert

Install the App on the repositories you want covered.

Deploy the receiver

The receiver is a small Go service (Helm chart under exporter/github-app):

bash
helm install evitrus-github-app ./chart \
  --namespace evitrus --create-namespace \
  --set ingest.url=https://api.evitrus.dev/ingest \
  --set ingest.apiKey=<your-tenant-key> \
  --set github.webhookSecret=<your-webhook-secret>

Environment variables (if not using Helm values):

VariableRequiredNotes
EVITRUS_API_KEYyesTenant ingest key
EVITRUS_INGEST_URLnoDefaults to local stack
GITHUB_WEBHOOK_SECRETstrongly recommendedEmpty disables signature checks
PORTnoDefault 8090

Endpoints: POST /webhook, GET /healthz.

What it emits

GitHub eventConditionEvitrus type
pull_requestopened / reopenedbuild.change.opened
pull_requestclosed and mergedbuild.change.merged
pull_requestclosed without mergebuild.change.closed
pull_request_reviewapprovedbuild.change.approved
pull_request_reviewchanges requestedbuild.change.changes_requested
check_suitesuccess / failuretest.run.passed / test.run.failed
code_scanning_alertcreated / reopened / …test.scan.completed

service is the repository name; commitSha comes from the PR head / check / alert. Ingest still accepts the older pr.* / build.succeeded / security.scan names as aliases.

Verify

Open a test PR, approve, and merge. In Evitrus you should see build.change.* events for that repository correlated with any Action / deploy events that share the commit.

Evitrus — observability for auditability