It is less hackery than I remembered. Buildbot has a built-in GitHub webhook at /change_hook/github (push + pull_request events), validates a webhook secret, and can build GitHub’s synthetic merge ref so CI tests the eventual merge. GitHubStatusPush publishes pending/success/failure commit statuses; GitHub branch protection can require those statuses, leaving the normal merge button in place. The integration is status API rather than a fancy Checks-App UI, but that is enough for the workflow you described. Docs: https://docs.buildbot.net/latest/manual/configuration/wwwhooks.html and https://docs.buildbot.net/latest/manual/configuration/reporters/github_status.html
<Post