Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
6.4 KiB
title, shortTitle, intro, product, versions, topics, redirect_from
| title | shortTitle | intro | product | versions | topics | redirect_from | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Creating custom deployment protection rules | Create custom protection rules | Use {% data variables.product.prodname_github_apps %} to automate protecting deployments with third-party systems. | {% data reusables.actions.custom-deployment-protection-rules-availability %} |
|
|
|
Prerequisites
{% data reusables.actions.custom-deployment-protection-rules-beta-note %}
For general information about deployment protection rules, see AUTOTITLE.
Creating a custom deployment protection rule with {% data variables.product.prodname_github_apps %}
-
Create a {% data variables.product.prodname_github_app %}. For more information, see AUTOTITLE. Configure the {% data variables.product.prodname_github_app %} as follows.
- Optionally, in the Callback URL text field under "Identifying and authorizing users," enter the callback URL. For more information, see AUTOTITLE.
- Under "Permissions," select Repository permissions.
- To the right of "Actions," click the drop down menu and select Access: Read-only.

- To the right of "Deployments," click the drop down menu and select Access: Read and write.

- Under "Subscribe to events," select Deployment protection rule.

-
Install the custom deployment protection rule in your repositories and enable it for use. For more information, see AUTOTITLE.
Approving or rejecting deployments
Once a workflow reaches a job that references an environment that has the custom deployment protection rule enabled, {% data variables.product.company_short %} sends a POST request to a URL you configure containing the deployment_protection_rule payload. You can write your deployment protection rule to automatically send REST API requests that approve or reject the deployment based on the deployment_protection_rule payload. Configure your REST API requests as follows.
-
Validate the incoming
POSTrequest. For more information, see AUTOTITLE. -
Use a JSON Web Token to authenticate as a {% data variables.product.prodname_github_app %}. For more information, see AUTOTITLE.
-
Using the installation ID from the
deployment_protection_rulewebhook payload, generate an install token. For more information, see AUTOTITLE.curl --request POST \ --url "{% data variables.product.rest_url %}/app/installations/INSTALLATION_ID/ACCESS_TOKENS" \ --header "Accept: application/vnd.github+json" \ --header "Authorization: Bearer {jwt}" \ --header "Content-Type: application/json" \ --data \ '{ \ "repository_ids": [321], \ "permissions": { \ "deployments": "write" \ } \ }' -
Optionally, to add a status report without taking any other action to {% data variables.product.prodname_dotcom %}, send a
POSTrequest to/repos/OWNER/REPO/actions/runs/RUN_ID/deployment_protection_rule. In the request body, omit thestate. For more information, see AUTOTITLE. You can post a status report on the same deployment up to 10 times. Status reports support Markdown formatting and can be up to 1024 characters long. -
To approve or reject a request, send a
POSTrequest to/repos/OWNER/REPO/actions/runs/RUN_ID/deployment_protection_rule. In the request body, set thestateproperty to eitherapprovedorrejected. For more information, see AUTOTITLE. -
Optionally, request the status of an approval for a workflow run by sending a
GETrequest to/repos/OWNER/REPOSITORY_ID/actions/runs/RUN_ID/approvals. For more information, see AUTOTITLE. -
Optionally, review the deployment on {% data variables.product.prodname_dotcom %}. For more information, see AUTOTITLE.
{% ifversion fpt or ghec %}
Publishing custom deployment protection rules in the {% data variables.product.prodname_marketplace %}
You can publish your {% data variables.product.prodname_github_app %} to the {% data variables.product.prodname_marketplace %} to allow developers to discover suitable protection rules and install it across their {% data variables.product.company_short %} repositories. Or you can browse existing custom deployment protection rules to suit your needs. For more information, see AUTOTITLE and AUTOTITLE.
{% endif %}