GitHub integration
Available on: Team and above for connecting, plans from tags and check runs. Business and Enterprise for the deployment protection rule. On lower plans the rule answers rejected with the comment "Requires Business plan" (fail closed, because it is a gate). After a downgrade, connections are kept but gated features stop being processed. See pricing.
The Deployment Playbook GitHub App connects a workspace to your GitHub organization:
- Tag or release → plan. Pushing a tag (or publishing a release) that matches a pattern in a mapped repository creates a plan from the mapped template. One plan per repository + tag; redeliveries and re-pushes don't create duplicates.
- Check run on the tagged commit. A "Deployment Playbook" check run links to the plan and is updated on every change: in progress while sign-off runs, success when the plan is done, failure when it's rejected, cancelled when it's rolled back.
- Deployment protection rule. Enable the app on a GitHub environment and deployment jobs to that environment wait until the plan's gate phase is open (the same rule as the gate API). Then the app approves the deployment. A rejected plan, or a deployment with no matching plan, is rejected.
No long-lived GitHub credentials are stored: the app uses short-lived installation tokens (valid 1 hour), created on demand with the app's private key.
Connect a workspace
You need the Admin role in the workspace and permission to install apps on the GitHub organization.
- Open Integrations in the workspace menu and click Install the GitHub App.
- On GitHub, pick the organization and the repositories the app may access, then confirm.
- GitHub asks you to authorize the app once. This lets us check that your GitHub account can access the installation, so no one can link someone else's installation. You're sent back to Integrations.
- Under Repository → template, add a mapping:
- Repository:
owner/repo. - Template: the template new plans use.
- Environment: the environment name shown on the plan.
- Tag pattern:
*is a wildcard. The default isv*. - Gate phase: deployments may start once this phase is open.
DURINGmeans the plan is approved and everyBEFOREstep is resolved. - Four-eyes: whether plans created from this mapping require four-eyes approval.
- Repository:
Plans are created on behalf of the Admin who installed the app, and the audit log records them as created "via github integration".
Protect a GitHub environment
- In the repository, open Settings → Environments → production (or another environment).
- Under Deployment protection rules, enable Deployment Playbook and save.
- In your workflow, deploy with
environment: productionfrom a tag:
on:
push:
tags: ["v*"]
jobs:
deploy:
runs-on: ubuntu-latest
environment: production # waits for Deployment Playbook
steps:
- uses: actions/checkout@v4
- run: ./deploy.sh
When the job starts, GitHub asks the app. The app looks up the plan by repository and commit (or tag), and answers as soon as the gate phase opens. The job waits on GitHub (environment protection rules can wait up to 30 days).
Permissions requested
| Permission | Access | Why |
|---|---|---|
| Checks | Read & write | Create and update the check run on the tagged commit |
| Deployments | Read & write | Approve or reject deployments waiting on the protection rule |
| Actions | Read | Required by GitHub for deployment protection rules |
| Contents | Read | Resolve a release's tag to its commit |
| Metadata | Read | Mandatory for every app |
Events: push, release, deployment_protection_rule (plus installation, which every app receives).
Security
- Webhooks are verified with HMAC-SHA256 (
X-Hub-Signature-256), de-duplicated byX-GitHub-Delivery, and rate-limited per installation. - Deployment callbacks are only sent to
api.github.com. The callback URL is stored encrypted (AES-256-GCM). - Outbound calls go only to
api.github.comandgithub.com. See Security & network. - Disconnect on the Integrations page removes the link and its mappings. Uninstall the app on GitHub (Settings → GitHub Apps) to revoke its access entirely. When the app is uninstalled, the integration is disabled automatically.
Troubleshooting
- No plan appears. Check that the repository name matches the mapping exactly, that the tag matches the pattern, and that the app has access to the repository. The Integrations page shows the last error.
- Deployment rejected with "No Deployment Playbook plan found". The deployment's commit or tag has no plan. Push
a mapped tag first, or create the plan with
POST /api/plansusing the same repository and tag. - GitHub Enterprise Server isn't supported yet.