DORA Deploy Tracking Setup
Wire up real production deploy data in under 5 minutes. SiftPulse receives Render deploy webhooks, matches deploys to merged PRs, and computes lead time, change failure rate, and MTTR for your DORA panel.
Your webhook URL
https://siftpulse.polsia.app/webhooks/render
Setup: Render (recommended)
1
Open your Render service settings
Go to render.com → your service → Settings → Webhooks.
2
Add the SiftPulse webhook URL
Paste the URL above. Render will POST JSON to this endpoint for every
deploy.started deploy.succeeded deploy.failed event.
3
(Optional) Set a shared secret
If Render supports a webhook signing secret, add it to your SiftPulse env var as
RENDER_WEBHOOK_SECRET.
SiftPulse will verify the HMAC signature on every event.
4
Trigger a deploy — data appears within minutes
SiftPulse processes the first event immediately. DORA metrics populate on your dashboard
after the first deploy.succeeded event is received and matched to a merged PR.
Smoke test: visit
https://siftpulse.polsia.app/webhooks/render/ping
— it returns {"ok":true} when the endpoint is live.
Generic CI/CD (GitHub Actions, CircleCI, etc.)
Any system that can make an HTTP POST request can feed SiftPulse deploy data. Send JSON to the webhook URL with the following fields:
{
"type": "deploy",
"action": "succeeded", // "succeeded" | "failed" | "started"
"commit": { "id": "abc1234" }, // git commit SHA
"repo": { "fullName": "org/repo" }, // optional: repo slug for multi-repo setups
"environment": "production", // optional, defaults to "production"
"deploy": {
"createdAt": "2026-06-27T18:00:00Z", // optional: deploy start time
"finishedAt": "2026-06-27T18:04:30Z" // optional: deploy finish time
}
}
GitHub Actions example
- name: Notify SiftPulse deploy
if: success()
run: |
curl -s -X POST https://siftpulse.polsia.app/webhooks/render \
-H "Content-Type: application/json" \
-d '{
"type": "deploy",
"action": "succeeded",
"commit": { "id": "${{ github.sha }}" },
"repo": { "fullName": "${{ github.repository }}" }
}'
How each metric is computed
| Metric | How SiftPulse computes it |
|---|---|
| Deploy frequency | Count of deploy.succeeded events in 7d / 30d rolling windows. |
| Lead time (merge→deploy) |
Median seconds from PR merge (captured from GitHub pull_request.closed
webhook) to deploy.succeeded finished_at. Matched via commit SHA.
|
| Change failure rate |
(Failed deploys / Total deploys) × 100 over 30d.
A deploy is flagged as a failure when: (a) Render fires deploy.failed,
or (b) a PR with branch prefix hotfix/ or label hotfix is merged
within 24h of a successful deploy.
|
| MTTR |
Median seconds from a failure-flagged deploy to the next deploy.succeeded
on the same environment. Only computable once a failure + recovery pair exists.
|
Hotfix detection (CFR)
SiftPulse automatically flags a deploy as a change failure when a hotfix PR ships within 24 hours of a successful deploy. A PR is classified as a hotfix if:
- The branch name starts with
hotfix/orhotfix- - The PR has a label named
hotfix
No configuration needed — it's detected automatically from the GitHub PR webhook payload.