You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+18Lines changed: 18 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,23 @@
1
1
# Docs changelog
2
2
3
+
**25 November 2025**
4
+
5
+
We've added details of files that are excluded from Copilot code reviews.
6
+
7
+
See [About GitHub Copilot code review](https://docs.github.com/copilot/concepts/agents/code-review#excluded-files).
8
+
9
+
<hr>
10
+
11
+
**24 November 2025**
12
+
13
+
We've added a new tutorial on burning down technical debt in a project:
14
+
15
+
[Using GitHub Copilot to reduce technical debt](https://docs.github.com/en/copilot/tutorials/reduce-technical-debt)
16
+
17
+
The addition of this tutorial was prompted by a presentation by Brittany Ellich at this year's GitHub Universe conference: [Tackling your tech debt with Copilot coding agent](https://www.youtube.com/watch?v=LafpndhNC_E), and is based on a GitHub community post by Akash Sharma: [Stop Letting Technical Debt Slow You Down](https://github.com/orgs/community/discussions/178975).
18
+
19
+
<hr>
20
+
3
21
**13 November 2025**
4
22
5
23
We've published a new tutorial on [using custom instructions for Copilot code review](https://docs.github.com/copilot/tutorials/use-custom-instructions). In this tutorial you'll learn how to write effective custom instructions that help Copilot provide more relevant and actionable code reviews.
Copy file name to clipboardExpand all lines: content/actions/how-tos/manage-runners/larger-runners/use-custom-images.md
-18Lines changed: 0 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -89,24 +89,6 @@ jobs:
89
89
# Add any steps to download and setup any dependencies here
90
90
```
91
91
92
-
### Conditionals
93
-
94
-
The `snapshot` keyword supports conditional execution using the `if` keyword around the snapshot mapping. You can use conditions to control when an image snapshot is created. For example, the following job skips image creation for tag builds.
95
-
96
-
```yaml
97
-
jobs:
98
-
build:
99
-
runs-on: my-image-generation-runner
100
-
snapshot:
101
-
if: {% raw %}${{ ! startsWith(github.ref, 'refs/tags/') }}{% endraw %}
102
-
image-name: my-custom-image
103
-
version: 2.*
104
-
steps:
105
-
# Add any steps to download and setup any dependencies here
106
-
```
107
-
108
-
For more information about the `if` keyword, see [AUTOTITLE](/actions/writing-workflows/choosing-when-your-workflow-runs/using-conditions-to-control-job-execution).
109
-
110
92
## Versioning
111
93
112
94
When you generate custom images, {% data variables.product.github %} automatically assigns version numbers to help you manage updates and track image history.
Copy file name to clipboardExpand all lines: content/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-security-and-analysis-for-your-enterprise.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -51,6 +51,9 @@ Disallowing {% data variables.product.prodname_GH_sp_cs_and_cq_or_as %} for an o
51
51
{% data reusables.enterprise-accounts.advanced-security-organization-policy-drop-down %}
52
52
{% data reusables.enterprise-accounts.advanced-security-individual-organization-policy-drop-down %}
53
53
54
+
> [!NOTE]
55
+
> If {% data variables.product.prodname_actions %} is not available for an organization, {% data variables.product.prodname_code_scanning %} and {% data variables.product.prodname_code_quality %} will be unable to run even if they are made available with this policy. See [AUTOTITLE](/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#policies).
56
+
54
57
{% ifversion ghec %}
55
58
56
59
## Enforcing a policy for visibility of dependency insights
Copy file name to clipboardExpand all lines: content/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md
+10-1Lines changed: 10 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,6 +31,8 @@ Enterprise policies control the options that are available to enterprise members
31
31
32
32
If you don't enforce enterprise policies, organization owners{% ifversion custom-org-roles %} and users with the "Manage organization Actions policies" permission{% endif %} have full control over {% data variables.product.prodname_actions %} for their organizations.
33
33
34
+
> [!NOTE] {% data variables.product.prodname_actions %} must be enabled for repositories in an organization for the {% data variables.product.prodname_codeql %} {% data variables.product.prodname_code_scanning %} default setup and {% data variables.product.prodname_code_quality %} workflows to run. However, the {% data variables.product.prodname_codeql %} default setup for {% data variables.product.prodname_code_scanning %} is not affected by other {% data variables.product.prodname_actions %} policies (such as restricting access to public actions or reusable workflows).
35
+
34
36
## Enforcing policies
35
37
36
38
{% data reusables.enterprise-accounts.access-enterprise %}
@@ -48,7 +50,14 @@ In the "Policies" section, you can control which organizations within your enter
48
50
* Enable {% data variables.product.prodname_actions %} for specific organizations
49
51
* Disable {% data variables.product.prodname_actions %} for all organizations
50
52
51
-
You can also limit the use of public actions {% ifversion actions-workflow-policy %}and reusable workflows{% endif %}, with the following options:
53
+
> [!NOTE]
54
+
> If you disable {% data variables.product.prodname_actions %}, or do not enable the feature for one or more organizations, this blocks affected organizations from using {% data variables.product.prodname_code_scanning %} and {% data variables.product.prodname_code_quality %} analysis.
55
+
56
+
### Controlling access to public actions{% ifversion actions-workflow-policy %} and reusable workflows{% endif %}
57
+
58
+
Enterprises often want to limit access to only a well-tested group of public actions {% ifversion actions-workflow-policy %}and reusable workflows{% endif %} as part of their supply chain governance. The policies available in {% data variables.product.github %} allow you to control access without blocking the dynamic workflows used by {% data variables.product.prodname_code_scanning %} and {% data variables.product.prodname_code_quality %}.
59
+
60
+
You can enforce strict controls without defining exceptions or additional configuration for {% data variables.product.prodname_code_scanning %} and {% data variables.product.prodname_code_quality %}, with the following options:
52
61
53
62
***Allow all actions {% ifversion actions-workflow-policy %}and reusable workflows{% endif %}:** Any action {% ifversion actions-workflow-policy %}or reusable workflow{% endif %} can be used, regardless of who authored it or where it is defined.
54
63
***Allow enterprise actions {% ifversion actions-workflow-policy %}and reusable workflows{% endif %}:** Only actions {% ifversion actions-workflow-policy %}and reusable workflows{% endif %} defined in a repository within the enterprise can be used. {% ifversion ghec %}Blocks all access to actions authored by {% data variables.product.prodname_dotcom %}, such as the [`actions/checkout`](https://github.com/actions/checkout) action.{% endif %}
Copy file name to clipboardExpand all lines: content/admin/enforcing-policies/enforcing-policy-with-pre-receive-hooks/about-pre-receive-hooks.md
+20Lines changed: 20 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,6 +44,26 @@ Due to risk of failure and performance impact for all users of your instance, we
44
44
> [!NOTE]
45
45
> To avoid rejection of a push due to a timeout, all combined pre-receive hooks should run in under five seconds.
46
46
47
+
## Pre-receive hook timeouts
48
+
49
+
Pre-receive hooks in {% data variables.product.prodname_ghe_server %} have a fixed timeout budget of 5 seconds (shared across all hooks). This is intentional design to prevent resource exhaustion from long-running hooks and to prevent runaway scripts from blocking repository operations indefinitely.
50
+
51
+
All pre-receive hooks for a repository share a **cumulative timeout budget**:
52
+
- If hook A takes 3 seconds, hook B gets 2 seconds remaining (from 5 second default)
53
+
- If hook A times out at 5 seconds, hook B never executes
54
+
55
+
> [!IMPORTANT]
56
+
> Pre-receive hook timeouts are handled differently from exit codes:
Copy file name to clipboardExpand all lines: content/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app.md
+30-15Lines changed: 30 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,7 +20,7 @@ Your JWT must be signed using the `RS256` algorithm and must contain the followi
20
20
|---|---|---|
21
21
|`iat`| Issued At | The time that the JWT was created. To protect against clock drift, we recommend that you set this 60 seconds in the past and ensure that your server's date and time is set accurately (for example, by using the Network Time Protocol). |
22
22
|`exp`| Expires At | The expiration time of the JWT, after which it can't be used to request an installation token. The time must be no more than 10 minutes into the future. |
23
-
|`iss`| Issuer | The clientID or application ID of your {% data variables.product.prodname_github_app %}. This value is used to find the right public key to verify the signature of the JWT. You can find your app's IDs on the settings page for your {% data variables.product.prodname_github_app %}.Use of the client ID is recommended. For more information about navigating to the settings page for your {% data variables.product.prodname_github_app %}, see [AUTOTITLE](/apps/maintaining-github-apps/modifying-a-github-app-registration#navigating-to-your-github-app-settings).|
23
+
|`iss`| Issuer | The {% ifversion client-id-for-app %}client ID or {% endif %}application ID of your {% data variables.product.prodname_github_app %}. This value is used to find the right public key to verify the signature of the JWT. You can find your app's ID{% ifversion client-id-for-app %}s{% endif %} on the settings page for your {% data variables.product.prodname_github_app %}.{% ifversion client-id-for-app %} Use of the client ID is recommended.{% endif %} For more information about navigating to the settings page for your {% data variables.product.prodname_github_app %}, see [AUTOTITLE](/apps/maintaining-github-apps/modifying-a-github-app-registration#navigating-to-your-github-app-settings).|
24
24
|`alg`| Message authentication code algorithm | This should be `RS256` since your JWT must be signed using the `RS256` algorithm. |
25
25
26
26
To use a JWT, pass it in the `Authorization` header of an API request. For example:
@@ -47,7 +47,7 @@ Most programming languages have a package that can generate a JWT. In all cases,
47
47
> [!NOTE]
48
48
> You must run `gem install jwt` to install the `jwt` package in order to use this script.
49
49
50
-
In the following example, replace `YOUR_PATH_TO_PEM` with the file path where your private key is stored. Replace `YOUR_CLIENT_ID`with the ID of your app. Make sure to enclose the values for `YOUR_PATH_TO_PEM` and `YOUR_CLIENT_ID` in double quotes.
50
+
In the following example, replace `YOUR_PATH_TO_PEM` with the file path where your private key is stored. Replace {% ifversion client-id-for-app %}`YOUR_CLIENT_ID`{% else %}`YOUR_APP_ID`{% endif %} with the ID of your app. Make sure to enclose the values for `YOUR_PATH_TO_PEM` and {% ifversion client-id-for-app %}`YOUR_CLIENT_ID`{% else %}`YOUR_APP_ID`{% endif %} in double quotes.
51
51
52
52
```ruby
53
53
require'openssl'
@@ -63,10 +63,11 @@ payload = {
63
63
iat:Time.now.to_i -60,
64
64
# JWT expiration time (10 minute maximum)
65
65
exp:Time.now.to_i + (10*60),
66
-
66
+
{% ifversion client-id-for-app %}
67
67
# {% data variables.product.prodname_github_app %}'s client ID
68
-
iss:"YOUR_CLIENT_ID"
69
-
68
+
iss: "YOUR_CLIENT_ID"{% else %}
69
+
# {% data variables.product.prodname_github_app %}'s app ID
70
+
iss:"YOUR_APP_ID"{% endif %}
70
71
}
71
72
72
73
jwt =JWT.encode(payload, private_key, "RS256")
@@ -92,12 +93,19 @@ if len(sys.argv) > 1:
92
93
else:
93
94
pem =input("Enter path of private PEM file: ")
94
95
96
+
{% ifversion client-id-for-app %}
95
97
# Get the Client ID
96
98
iflen(sys.argv) >2:
97
99
client_id = sys.argv[2]
98
100
else:
99
101
client_id = input("Enter your Client ID: ")
100
-
102
+
{%else%}
103
+
# Get the App ID
104
+
iflen(sys.argv) >2:
105
+
app_id = sys.argv[2]
106
+
else:
107
+
app_id = input("Enter your APP ID: ")
108
+
{% endif %}
101
109
102
110
# Open PEM
103
111
withopen(pem, 'rb') as pem_file:
@@ -108,9 +116,11 @@ payload = {
108
116
'iat': int(time.time()),
109
117
# JWT expiration time (10 minutes maximum)
110
118
'exp': int(time.time()) +600,
111
-
119
+
{% ifversion client-id-for-app %}
112
120
# {% data variables.product.prodname_github_app %}'s client ID
113
-
'iss': client_id
121
+
'iss': client_id{%else%}
122
+
# {% data variables.product.prodname_github_app %}'s app ID
123
+
'iss': app_id{% endif %}
114
124
115
125
}
116
126
@@ -125,14 +135,16 @@ This script will prompt you for the file path where your private key is stored a
125
135
### Example: Using Bash to generate a JWT
126
136
127
137
> [!NOTE]
128
-
> You must pass your Client ID and the file path where your private key is stored as arguments when running this script.
138
+
> You must pass your {% ifversion client-id-for-app %}Client ID{%else%}App ID{% endif %}and the file path where your private key is stored as arguments when running this script.
129
139
130
140
```bash copy
131
141
#!/usr/bin/env bash
132
142
133
-
set -o pipefail
143
+
{% ifversion client-id-for-app %}
134
144
client_id=$1# Client ID as first argument
135
-
145
+
{%else%}
146
+
app_id=$1# App ID as first argument
147
+
{% endif %}
136
148
pem=$( cat $2 ) # file path of the private key as second argument
In the following example, replace `YOUR_PATH_TO_PEM` with the file path where your private key is stored. Replace `YOUR_CLIENT_ID` with the ID of your app. Make sure to enclose the values for `YOUR_PATH_TO_PEM` in double quotes.
185
+
In the following example, replace `YOUR_PATH_TO_PEM`with the file path where your private key is stored. Replace {% ifversion client-id-for-app %}`YOUR_CLIENT_ID`{%else%}`YOUR_APP_ID`{% endif %}with the ID of your app. Make sure to enclose the values for`YOUR_PATH_TO_PEM`in double quotes.
Copy file name to clipboardExpand all lines: content/billing/concepts/cost-centers.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,3 +35,4 @@ For more details, see [AUTOTITLE](/billing/reference/cost-center-allocation).
35
35
* The maximum number of resources per cost center is 10,000.
36
36
* A maximum of 50 resources can be added to or removed from a cost center at a time.
37
37
* Azure subscriptions can only be added to or removed from cost centers through the UI.
38
+
* Outside collaborators can only be added to cost centers via the cost center API. For more information, see [AUTOTITLE](/billing/tutorials/control-costs-at-scale#add-resources-to-the-cost-center).
Copy file name to clipboardExpand all lines: content/code-security/code-quality/concepts/about-code-quality.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -42,7 +42,7 @@ With {% data variables.product.prodname_code_quality_short %}, you can:
42
42
43
43
{% data reusables.code-quality.codeql-supported-languages %}
44
44
45
-
Code quality problems in other languages are detected by AI analysis alone. For more information on analysis, see [AUTOTITLE](/code-security/code-quality/responsible-use/code-quality).
45
+
{% data variables.product.prodname_code_quality_short %} also performs AI-powered analysis with results displayed separately on the "**{% data variables.code-quality.recent_suggestions %}**" repository dashboard. Unlike the rule-based {% data variables.product.prodname_codeql %} analysis that scans the entire codebase and pull requests, this AI-powered analysis only examines files recently pushed to the default branch and may identify issues in languages beyond those listed above. For more information, see [AUTOTITLE](/code-security/code-quality/responsible-use/code-quality).
46
46
47
47
## Understanding where {% data variables.product.prodname_code_quality_short %} findings appear after enablement
0 commit comments