From ff375316cc607a281246d7be1f7fa3d0f747371d Mon Sep 17 00:00:00 2001 From: Sarita Iyer <66540150+saritai@users.noreply.github.com> Date: Mon, 24 Nov 2025 14:08:23 -0500 Subject: [PATCH 01/24] updates for tented model 0012 (#58602) --- content/copilot/reference/ai-models/model-hosting.md | 11 +++++++++-- .../copilot/reference/ai-models/supported-models.md | 8 ++++++++ data/reusables/copilot/claude-promo-period.md | 1 + data/tables/copilot/model-multipliers.yml | 4 ++++ data/tables/copilot/model-release-status.yml | 7 +++++++ data/tables/copilot/model-supported-clients.yml | 8 ++++++++ data/tables/copilot/model-supported-plans.yml | 7 +++++++ data/variables/copilot.yml | 1 + 8 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 data/reusables/copilot/claude-promo-period.md diff --git a/content/copilot/reference/ai-models/model-hosting.md b/content/copilot/reference/ai-models/model-hosting.md index 2aa0dfbc9845..498e0558fa97 100644 --- a/content/copilot/reference/ai-models/model-hosting.md +++ b/content/copilot/reference/ai-models/model-hosting.md @@ -46,11 +46,20 @@ Used for: ## Anthropic models + + + + +{% data reusables.copilot.claude-promo-period %} See [Model multipliers](/copilot/reference/ai-models/supported-models#model-multipliers). + + + Used for: * {% data variables.copilot.copilot_claude_haiku_45 %} * {% data variables.copilot.copilot_claude_sonnet_45 %} * {% data variables.copilot.copilot_claude_opus_41 %} +* {% data variables.copilot.copilot_claude_opus_45 %} * {% data variables.copilot.copilot_claude_sonnet_40 %} These models are hosted by Amazon Web Services, Anthropic PBC, and Google Cloud Platform. {% data variables.product.github %} has provider agreements in place to ensure data is not used for training. Additional details for each provider are included below: @@ -80,8 +89,6 @@ When using {% data variables.copilot.copilot_gemini %} models, input prompts and {% data reusables.copilot.grok-promo-period %} -Complimentary access to Grok Code Fast 1 is continuing past the previously announced end time. A new end date has not been set. We may update or conclude this promotion at any time. Regular pricing applies after the extension ends. See [AUTOTITLE](/copilot/reference/ai-models/supported-models#model-multipliers). - These models are hosted on xAI. xAI operates {% data variables.copilot.copilot_grok_code %} in {% data variables.product.prodname_copilot %} under a zero data retention API policy. This means xAI commits that user content (both inputs sent to the model and outputs generated by the model): Will **not** be: diff --git a/content/copilot/reference/ai-models/supported-models.md b/content/copilot/reference/ai-models/supported-models.md index bb200cd4e228..e45b20d77846 100644 --- a/content/copilot/reference/ai-models/supported-models.md +++ b/content/copilot/reference/ai-models/supported-models.md @@ -98,6 +98,14 @@ Each model has a premium request multiplier, based on its complexity and resourc For more information about premium requests, see [AUTOTITLE](/copilot/managing-copilot/monitoring-usage-and-entitlements/about-premium-requests). + + + + +{% data reusables.copilot.claude-promo-period %} + + + {% data reusables.copilot.model-multipliers %} ## Next steps diff --git a/data/reusables/copilot/claude-promo-period.md b/data/reusables/copilot/claude-promo-period.md new file mode 100644 index 000000000000..ea437677b145 --- /dev/null +++ b/data/reusables/copilot/claude-promo-period.md @@ -0,0 +1 @@ +> [!Important] {% data variables.copilot.copilot_claude_opus_45 %} has a promotional multiplier of **1** through Friday, December 5, 2025. After that date, the multiplier will change to **3**. diff --git a/data/tables/copilot/model-multipliers.yml b/data/tables/copilot/model-multipliers.yml index 10ce00d0ad46..e84196b9e475 100644 --- a/data/tables/copilot/model-multipliers.yml +++ b/data/tables/copilot/model-multipliers.yml @@ -17,6 +17,10 @@ multiplier_paid: 10 multiplier_free: Not applicable +- name: Claude Opus 4.5 + multiplier_paid: 1 (**3** after Dec 5, 2025) + multiplier_free: Not applicable + - name: Claude Sonnet 4 multiplier_paid: 1 multiplier_free: Not applicable diff --git a/data/tables/copilot/model-release-status.yml b/data/tables/copilot/model-release-status.yml index 78ef028992e9..d20ba3f0bacc 100644 --- a/data/tables/copilot/model-release-status.yml +++ b/data/tables/copilot/model-release-status.yml @@ -82,6 +82,13 @@ ask_mode: true edit_mode: true +- name: 'Claude Opus 4.5' + provider: 'Anthropic' + release_status: 'Public preview' + agent_mode: true + ask_mode: true + edit_mode: true + - name: 'Claude Sonnet 4' provider: 'Anthropic' release_status: 'GA' diff --git a/data/tables/copilot/model-supported-clients.yml b/data/tables/copilot/model-supported-clients.yml index 151dc7bcc116..bb94dddca429 100644 --- a/data/tables/copilot/model-supported-clients.yml +++ b/data/tables/copilot/model-supported-clients.yml @@ -29,6 +29,14 @@ xcode: true jetbrains: true +- name: Claude Opus 4.5 + dotcom: true + vscode: true + vs: false + eclipse: false + xcode: false + jetbrains: false + - name: Claude Sonnet 4 dotcom: true vscode: true diff --git a/data/tables/copilot/model-supported-plans.yml b/data/tables/copilot/model-supported-plans.yml index 63d94d9f89dd..c0db26603d48 100644 --- a/data/tables/copilot/model-supported-plans.yml +++ b/data/tables/copilot/model-supported-plans.yml @@ -26,6 +26,13 @@ business: false enterprise: true +- name: Claude Opus 4.5 + free: false + pro: true + pro_plus: true + business: true + enterprise: true + - name: Claude Sonnet 4 free: false pro: true diff --git a/data/variables/copilot.yml b/data/variables/copilot.yml index 07fd47e4c8f5..ca733c518085 100644 --- a/data/variables/copilot.yml +++ b/data/variables/copilot.yml @@ -138,6 +138,7 @@ copilot_claude: 'Claude' copilot_claude_haiku_45: 'Claude Haiku 4.5' copilot_claude_opus: 'Claude Opus 4' copilot_claude_opus_41: 'Claude Opus 4.1' +copilot_claude_opus_45: 'Claude Opus 4.5' copilot_claude_sonnet: 'Claude Sonnet' copilot_claude_sonnet_35: 'Claude Sonnet 3.5' copilot_claude_sonnet_37: 'Claude Sonnet 3.7' From b43f5633a64d77ce11adeb13e431ac76eb701613 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Nov 2025 14:31:56 -0600 Subject: [PATCH 02/24] Bump github/gh-base-image/gh-base-noble from 20251114-221740-gd084d271e to 20251119-090131-gb27dc275c in the baseimages group (#58559) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bee215efbe9b..2573d0924ce9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ # --------------------------------------------------------------- # To update the sha: # https://github.com/github/gh-base-image/pkgs/container/gh-base-image%2Fgh-base-noble -FROM ghcr.io/github/gh-base-image/gh-base-noble:20251114-221740-gd084d271e AS base +FROM ghcr.io/github/gh-base-image/gh-base-noble:20251119-090131-gb27dc275c AS base # Install curl for Node install and determining the early access branch # Install git for cloning docs-early-access & translations repos From 7daeb075b33bbbcef974d113a7bf1b86470a7586 Mon Sep 17 00:00:00 2001 From: Stephanie Lincoln <86328983+slincoln75@users.noreply.github.com> Date: Mon, 24 Nov 2025 12:38:46 -0800 Subject: [PATCH 03/24] Add Radiant Earth to fiscal host list (#58500) Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> --- .../using-a-fiscal-host-to-receive-github-sponsors-payouts.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts.md b/content/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts.md index 1e347cec56b9..b429cf3a4eb0 100644 --- a/content/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts.md +++ b/content/sponsors/receiving-sponsorships-through-github-sponsors/using-a-fiscal-host-to-receive-github-sponsors-payouts.md @@ -24,6 +24,7 @@ When you sign up for a {% data variables.product.prodname_sponsors %} profile so * [Open Collective Europe](https://opencollective.com/europe) * [Open Source Collective](https://opencollective.com/opensource) * [Python Software Foundation](https://www.python.org/psf-landing/) +* [Radiant Earth](https://radiant.earth/) * [Software in the Public Interest](https://www.spi-inc.org/) * [Software Underground](https://softwareunderground.org/) From c77a23396167039f171db84945a98e4364ada440 Mon Sep 17 00:00:00 2001 From: chiph Date: Mon, 24 Nov 2025 14:43:32 -0600 Subject: [PATCH 04/24] Document pre-receive hook timeout behavior (#57929) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Joe Clark <31087804+jc-clark@users.noreply.github.com> --- .../about-pre-receive-hooks.md | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/content/admin/enforcing-policies/enforcing-policy-with-pre-receive-hooks/about-pre-receive-hooks.md b/content/admin/enforcing-policies/enforcing-policy-with-pre-receive-hooks/about-pre-receive-hooks.md index 505f2dc300aa..98ccf11b8b1a 100644 --- a/content/admin/enforcing-policies/enforcing-policy-with-pre-receive-hooks/about-pre-receive-hooks.md +++ b/content/admin/enforcing-policies/enforcing-policy-with-pre-receive-hooks/about-pre-receive-hooks.md @@ -44,6 +44,26 @@ Due to risk of failure and performance impact for all users of your instance, we > [!NOTE] > To avoid rejection of a push due to a timeout, all combined pre-receive hooks should run in under five seconds. +## Pre-receive hook timeouts + +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. + +All pre-receive hooks for a repository share a **cumulative timeout budget**: +- If hook A takes 3 seconds, hook B gets 2 seconds remaining (from 5 second default) +- If hook A times out at 5 seconds, hook B never executes + +> [!IMPORTANT] +> Pre-receive hook timeouts are handled differently from exit codes: +> - **Exit codes**: Enforcement configuration is honored (non-enforced hooks don't block pushes) +> - **Timeouts**: Push may fail regardless of enforcement configuration + +### Timeout behavior + +Scenario | Enforcement = Enabled | Enforcement = Disabled/Testing +----------|----------------------|-------------------------------- +Exit code ≠ 0 | Push rejected | Push continues (warning only) +Timeout exceeded | Push rejected | Warning + push may still fail + {% ifversion ghes > 3.16 %} {% data reusables.repositories.push-rule-and-prereceive-hooks %} From 0fcf4b6ced3c26e1b31da97680cbbd1751f8a679 Mon Sep 17 00:00:00 2001 From: Robert Sese <734194+rsese@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:28:31 -0600 Subject: [PATCH 05/24] make journey track cards clickable with hover effect (#58544) --- .../journey/JourneyLearningTracks.module.scss | 83 +++++++++++-------- .../journey/JourneyLearningTracks.tsx | 72 +++++++--------- 2 files changed, 80 insertions(+), 75 deletions(-) diff --git a/src/landings/components/journey/JourneyLearningTracks.module.scss b/src/landings/components/journey/JourneyLearningTracks.module.scss index 58e3fff5fda1..44b7dcf89f29 100644 --- a/src/landings/components/journey/JourneyLearningTracks.module.scss +++ b/src/landings/components/journey/JourneyLearningTracks.module.scss @@ -1,11 +1,12 @@ -.learningTracks { +.journeyTracks { + margin-bottom: 1rem; + margin-left: 1rem; +} + +.trackCard { border: 1px solid var(--borderColor-default, var(--color-border-default, #d1d9e0)); border-radius: 12px; - padding: 1.5rem; - padding-bottom: 0.75rem; - margin-bottom: 1rem; - margin-left: 1rem; box-shadow: 0px 1px 3px 0px rgba(31, 35, 40, 0.08), 0px 1px 0px 0px rgba(31, 35, 40, 0.06); @@ -15,6 +16,24 @@ --bgColor-default, var(--color-canvas-default, #ffffff) ); + transition: all 0.2s ease-in-out; + + // journey card hover effect only when the card is not expanded + &:not([open]):hover { + box-shadow: + 0 0.25rem 0.5rem 0 rgba(31, 35, 40, 0.12), + 0 0.125rem 0.25rem 0 rgba(31, 35, 40, 0.08); + transform: translateY(-2px); + background-color: var(--bgColor-muted, var(--color-canvas-subtle)); + } +} + +.trackSummary { + list-style: none; + cursor: pointer; + display: block; + position: relative; + padding: 1.5rem 1.5rem 1.75rem 1.5rem; } .trackHeader { @@ -26,25 +45,25 @@ gap: 0.5rem; } -.anchorLink { - color: var(--fgColor-default, var(--color-fg-default, #1f2328)); - text-decoration: none; -} - .trackDescription { - margin: 0 0 1rem 0; - color: var(--fgColor-muted, var(--color-fg-muted, #656d76)); + margin: 0; + padding-right: 2rem; + + p { + margin: 0; + color: var(--fgColor-muted, var(--color-fg-muted, #656d76)); + } } .expandButton { - top: 0; - right: 0; + top: 1.5rem; + right: 1.5rem; } .trackGuides { - margin-top: 1rem; - margin-bottom: 1rem; - padding-left: 0; + margin-top: 0; + margin-bottom: 0; + padding: 0 1.5rem 0.75rem 1.5rem; list-style: none; counter-reset: guide-counter; } @@ -76,11 +95,6 @@ line-height: 1; } -.guideLink { - color: var(--fgColor-accent, var(--color-accent-fg, #0969da)); - text-decoration: none; -} - /* Hide only the timeline line that extends below the last badge, preserve everything else */ .timelineContainer :global(.Timeline-Item:last-child::before) { background: linear-gradient( @@ -189,21 +203,20 @@ } .mobileItem .mobileTile { - border: 1px solid - var(--borderColor-default, var(--color-border-default, #d1d9e0)); - border-radius: 12px; - padding: 1rem; margin-top: 0.5rem; text-align: left; - box-shadow: - 0px 1px 3px 0px rgba(31, 35, 40, 0.08), - 0px 1px 0px 0px rgba(31, 35, 40, 0.06); - position: relative; - z-index: 3; - background-color: var( - --bgColor-default, - var(--color-canvas-default, #ffffff) - ); + + .trackCard { + z-index: 3; + } + + .trackSummary { + padding: 1rem 1rem 1.75rem 1rem; + } + + .trackGuides { + padding: 0 1rem 0.75rem 1rem; + } } /* Desktop: show Timeline component */ diff --git a/src/landings/components/journey/JourneyLearningTracks.tsx b/src/landings/components/journey/JourneyLearningTracks.tsx index 03997a07873c..20cbcc355b34 100644 --- a/src/landings/components/journey/JourneyLearningTracks.tsx +++ b/src/landings/components/journey/JourneyLearningTracks.tsx @@ -1,6 +1,6 @@ /* filepath: /workspaces/docs-internal/src/landings/components/journey/JourneyLearningTracks.tsx */ import { ChevronDownIcon, ChevronUpIcon } from '@primer/octicons-react' -import { Button, Details, Timeline, Token, useDetails } from '@primer/react' +import { Details, Timeline, Token, useDetails } from '@primer/react' import { Link } from '@/frame/components/Link' import { JourneyTrack } from '@/journeys/lib/journey-path-resolver' import styles from './JourneyLearningTracks.module.scss' @@ -14,40 +14,38 @@ export const JourneyLearningTracks = ({ tracks }: JourneyLearningTracksProps) => return null } - const renderTrackContent = (track: JourneyTrack, trackIndex: number) => { + const renderTrackContent = (track: JourneyTrack) => { const { getDetailsProps, open } = useDetails({}) return ( - <> -
-

{track.title}

- -
-

{track.description}

-
- -
    - {(track.guides || []).map((article: { href: string; title: string }) => ( -
  1. - - {article.title} - -
  2. - ))} -
-
- + + +
    + {(track.guides || []).map((article: { href: string; title: string }) => ( +
  1. + + {article.title} + +
  2. + ))} +
+ ) } @@ -60,10 +58,8 @@ export const JourneyLearningTracks = ({ tracks }: JourneyLearningTracksProps) => return ( {trackIndex + 1} - -
- {renderTrackContent(track, trackIndex)} -
+ + {renderTrackContent(track)}
) @@ -76,11 +72,7 @@ export const JourneyLearningTracks = ({ tracks }: JourneyLearningTracksProps) => {tracks.map((track, trackIndex) => (
{trackIndex + 1}
-
-
- {renderTrackContent(track, trackIndex)} -
-
+
{renderTrackContent(track)}
{trackIndex < tracks.length - 1 &&
}
))} From 6491e4de7a1ecf4185abe255d66ae4b30412ebeb Mon Sep 17 00:00:00 2001 From: Joe Clark <31087804+jc-clark@users.noreply.github.com> Date: Mon, 24 Nov 2025 14:58:00 -0800 Subject: [PATCH 06/24] Add note about outside collaborators for cost center (#58521) Co-authored-by: Sophie DeRosa --- content/billing/concepts/cost-centers.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/billing/concepts/cost-centers.md b/content/billing/concepts/cost-centers.md index 034ce454799b..894eac856c2e 100644 --- a/content/billing/concepts/cost-centers.md +++ b/content/billing/concepts/cost-centers.md @@ -35,3 +35,4 @@ For more details, see [AUTOTITLE](/billing/reference/cost-center-allocation). * The maximum number of resources per cost center is 10,000. * A maximum of 50 resources can be added to or removed from a cost center at a time. * Azure subscriptions can only be added to or removed from cost centers through the UI. +* 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). From 21a796cca8df14e6298c0b7e0367eec7273d9b88 Mon Sep 17 00:00:00 2001 From: Brendan Scott-Smith <117171930+bss-mc@users.noreply.github.com> Date: Tue, 25 Nov 2025 17:52:44 +0900 Subject: [PATCH 07/24] Add 75 character limits for custom properties (#58605) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- ...g-custom-properties-for-repositories-in-your-organization.md | 2 +- .../enterprise-onboarding/creating-custom-properties.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization.md b/content/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization.md index b11722a45be5..be07decf8ef4 100644 --- a/content/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization.md +++ b/content/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization.md @@ -52,7 +52,7 @@ You{% ifversion custom-org-roles %}, and any users with the "Edit custom propert ![Screenshot the page to set values for repositories. A button, labeled with a pencil icon and "Edit properties", is highlighted with an orange outline.](/assets/images/help/repository/edit-properties.png) -1. In the modal dialog that appears, select a value for each property you'd like to set for the selected repositories. +1. In the modal dialog that appears, select a value for each property you'd like to set for the selected repositories. This value cannot exceed 75 characters in length. 1. Click **Save changes**. ## Viewing values for repositories in your organization diff --git a/data/reusables/enterprise-onboarding/creating-custom-properties.md b/data/reusables/enterprise-onboarding/creating-custom-properties.md index 64db02761a57..11a4856beeb6 100644 --- a/data/reusables/enterprise-onboarding/creating-custom-properties.md +++ b/data/reusables/enterprise-onboarding/creating-custom-properties.md @@ -25,7 +25,7 @@ You can add custom properties to your enterprise to make those properties availa {% data reusables.enterprise-accounts.access-enterprise %} 1. In the left sidebar, under "Policies", click **Custom properties**. 1. To add a new custom property, in the upper-right corner, click **New property**. -1. Enter a name, description, and type for the custom property. The name must be unique across all of your organizations, and cannot contain spaces. +1. Enter a name, description, and type for the custom property. The name must be unique across all of your organizations, can't contain spaces, and cannot exceed 75 characters in length. 1. Optionally, select **Allow repository actors to set this property**. When enabled, repository users and apps with the repository-level `custom properties` fine-grained permission will be able to set and update the property value for their repository. Additionally, any actor creating a repository can set the property on the repository. 1. Optionally, select **Require this property for all repositories** and add a default value. This means that you require that all repositories in your enterprise have a value for this property. Repositories that don’t have an explicit value for this property will inherit the default value. 1. Click **Save property**. From 2a375575d67b2975d513d2ff20afe7f3b82215d1 Mon Sep 17 00:00:00 2001 From: hubwriter Date: Tue, 25 Nov 2025 11:03:37 +0000 Subject: [PATCH 08/24] Mention excluded files (#58584) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../copilot/concepts/agents/code-review.md | 38 ++++---- content/copilot/reference/index.md | 1 + .../reference/review-excluded-files.md | 86 +++++++++++++++++++ 3 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 content/copilot/reference/review-excluded-files.md diff --git a/content/copilot/concepts/agents/code-review.md b/content/copilot/concepts/agents/code-review.md index 1580e239df44..5d428c67f997 100644 --- a/content/copilot/concepts/agents/code-review.md +++ b/content/copilot/concepts/agents/code-review.md @@ -26,7 +26,28 @@ category: This article provides an overview of {% data variables.copilot.copilot_code-review_short %}. For instructions on how to request a code review from {% data variables.product.prodname_copilot_short %}, see [AUTOTITLE](/copilot/how-tos/agents/copilot-code-review/using-copilot-code-review). -### {% data variables.copilot.copilot_code-review-tools-preview_cap %} +## Availability + +{% data variables.copilot.copilot_code-review_short %} is supported in: + +* {% data variables.product.prodname_dotcom_the_website %} +* {% data variables.product.prodname_mobile %} +* {% data variables.product.prodname_vscode_shortname %} +* {% data variables.product.prodname_vs %} +* Xcode +* JetBrains IDEs + +{% data variables.copilot.copilot_code-review_short %} is a premium feature, available with the {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, {% data variables.copilot.copilot_business_short %}, and {% data variables.copilot.copilot_enterprise_short %} plans. See [Copilot plans](https://github.com/features/copilot/plans?ref_product=copilot&ref_type=purchase&ref_style=text). + +If you receive {% data variables.product.prodname_copilot_short %} from an organization then, to be able to request a pull request review from {% data variables.product.prodname_copilot_short %} on {% data variables.product.prodname_dotcom_the_website %} or in {% data variables.product.prodname_mobile %}, the **{% data variables.copilot.copilot_code-review_short %}** option must be enabled in the {% data variables.product.prodname_copilot_short %} policy settings for the organization. See [AUTOTITLE](/copilot/how-tos/administer/organizations/managing-policies-for-copilot-in-your-organization). + +## Excluded files + +Dependency management files (such as package.json and Gemfile.lock) and certain other types of files (such as log files and SVGs) are excluded from {% data variables.copilot.copilot_code-review_short %}. If you include any of these files in a pull request, {% data variables.copilot.copilot_code-review_short %} will not consider the file when carrying out the review. Similarly, using {% data variables.copilot.copilot_code-review_short %} on one of these files in your IDE, will not generate review comments. + +For more information, see [AUTOTITLE](/copilot/reference/review-excluded-files). + +## {% data variables.copilot.copilot_code-review-tools-preview_cap %} > [!NOTE] > @@ -50,21 +71,6 @@ In the event that {% data variables.product.prodname_actions %} is unavailable o > > Usage charges will apply when the feature becomes generally available. -## Availability - -{% data variables.copilot.copilot_code-review_short %} is supported in: - -* {% data variables.product.prodname_dotcom_the_website %} -* {% data variables.product.prodname_mobile %} -* {% data variables.product.prodname_vscode_shortname %} -* {% data variables.product.prodname_vs %} -* Xcode -* JetBrains IDEs - -{% data variables.copilot.copilot_code-review_short %} is a premium feature, available with the {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, {% data variables.copilot.copilot_business_short %}, and {% data variables.copilot.copilot_enterprise_short %} plans. See [Copilot plans](https://github.com/features/copilot/plans?ref_product=copilot&ref_type=purchase&ref_style=text). - -If you receive {% data variables.product.prodname_copilot_short %} from an organization then, to be able to request a pull request review from {% data variables.product.prodname_copilot_short %} on {% data variables.product.prodname_dotcom_the_website %} or in {% data variables.product.prodname_mobile %}, the **{% data variables.copilot.copilot_code-review_short %}** option must be enabled in the {% data variables.product.prodname_copilot_short %} policy settings for the organization. See [AUTOTITLE](/copilot/how-tos/administer/organizations/managing-policies-for-copilot-in-your-organization). - ## Code review monthly quota Each time {% data variables.product.prodname_copilot_short %} reviews a pull request, or reviews code in your IDE, your monthly quota of Copilot premium requests is reduced by one. diff --git a/content/copilot/reference/index.md b/content/copilot/reference/index.md index 2f9e400bf016..5cf4d79e94f5 100644 --- a/content/copilot/reference/index.md +++ b/content/copilot/reference/index.md @@ -17,6 +17,7 @@ children: - /metrics-data - /copilot-billing - /agentic-audit-log-events + - /review-excluded-files - /copilot-usage-metrics contentType: reference --- diff --git a/content/copilot/reference/review-excluded-files.md b/content/copilot/reference/review-excluded-files.md new file mode 100644 index 000000000000..4a651c87749f --- /dev/null +++ b/content/copilot/reference/review-excluded-files.md @@ -0,0 +1,86 @@ +--- +title: Files excluded from {% data variables.copilot.copilot_code-review %} +shortTitle: Review excluded files +intro: 'Understand the types of files that are excluded from a review by {% data variables.product.prodname_copilot_short %}.' +versions: + feature: copilot +topics: + - Copilot +category: + - Author and optimize with Copilot +contentType: reference +--- + +Certain types of files are excluded from {% data variables.copilot.copilot_code-review_short %}. These include dependency management files, log files, SVG files, and files in locations typically reserved for vendor files or automatically generated files. + +If you include any of these files in a pull request, {% data variables.copilot.copilot_code-review_short %} will not consider the file when carrying out the review. Similarly, using {% data variables.copilot.copilot_code-review_short %} on one of these files in your IDE, will not generate review comments. + +This is an example of some of the files that are excluded from {% data variables.copilot.copilot_code-review_short %}: + +* `.gitignore` +* `package-lock.json` +* `yarn.lock` +* `jest.config.js` +* `next.config.js` +* `tailwind.config.js` +* `tsconfig.json` +* `requirements.txt` +* `Pipfile.lock` +* `Gemfile.lock` +* `composer.lock` +* `Cargo.lock` +* `go.sum` +* `paket.lock` +* `pubspec.lock` +* `stack.yaml` +* `elm.json` +* `Project.toml` +* `Manifest.toml` +* `renv.lock` +* `build.sbt` +* `Package.resolved` +* `deps.edn` +* `build.gradle` +* `mix.lock` +* `build.gradle.kts` +* `cpanfile` +* `Podfile.lock` +* `conanfile.txt` +* `info.rkt` +* `rockspec` +* `opam` +* `rebar.config` +* `nimble` +* `shard.yml` +* `dub.json` +* `dub.sdl` +* `GPR` +* `Mason.toml` +* `fpm.toml` +* `pack.pl` +* `baseline.st` +* `PacletInfo.m` +* `info.ss` +* `Jpkg` +* `box.json` +* `GNAVI.xml` + +Files matching these patterns are also excluded: + +* `**/*.svg` +* `**/*.log` +* `**/*.lock` +* `**/go.sum` +* `**/*.ipynb.raw.html` +* `**/dist/**/*` +* `**/node_modules/**/*` +* `**/*.min.js` +* `**/*.d.ts` +* `**/coverage/**/*` +* `**/*.bundle.js` +* `**/*.map` +* `**/out/**/*` +* `**/vendor/**/*` +* `**/bin/**/*` +* `**/generated/**/*` +* `**/generated-sources/**/*` From 8cc07ca28b34cc5b4d790730ab46cfc415242345 Mon Sep 17 00:00:00 2001 From: MikaelaMcGrath Date: Tue, 25 Nov 2025 21:49:57 +1000 Subject: [PATCH 09/24] Add conditional for client ID to GHES 3.18 (#58606) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> --- ...g-a-json-web-token-jwt-for-a-github-app.md | 45 ++++++++++++------- data/features/client-id-for-app.yml | 6 +++ 2 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 data/features/client-id-for-app.yml diff --git a/content/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app.md b/content/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app.md index dfc96c67a483..a009953a3e29 100644 --- a/content/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app.md +++ b/content/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app.md @@ -20,7 +20,7 @@ Your JWT must be signed using the `RS256` algorithm and must contain the followi |---|---|---| |`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). | |`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. | -|`iss`| Issuer | The client ID 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).| +|`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).| |`alg`| Message authentication code algorithm | This should be `RS256` since your JWT must be signed using the `RS256` algorithm. | 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, > [!NOTE] > You must run `gem install jwt` to install the `jwt` package in order to use this script. -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. +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. ```ruby require 'openssl' @@ -63,10 +63,11 @@ payload = { iat: Time.now.to_i - 60, # JWT expiration time (10 minute maximum) exp: Time.now.to_i + (10 * 60), - + {% ifversion client-id-for-app %} # {% data variables.product.prodname_github_app %}'s client ID - iss: "YOUR_CLIENT_ID" - + iss: "YOUR_CLIENT_ID"{% else %} +# {% data variables.product.prodname_github_app %}'s app ID + iss: "YOUR_APP_ID"{% endif %} } jwt = JWT.encode(payload, private_key, "RS256") @@ -92,12 +93,19 @@ if len(sys.argv) > 1: else: pem = input("Enter path of private PEM file: ") +{% ifversion client-id-for-app %} # Get the Client ID if len(sys.argv) > 2: client_id = sys.argv[2] else: client_id = input("Enter your Client ID: ") - +{% else %} +# Get the App ID +if len(sys.argv) > 2: + app_id = sys.argv[2] +else: + app_id = input("Enter your APP ID: ") +{% endif %} # Open PEM with open(pem, 'rb') as pem_file: @@ -108,9 +116,11 @@ payload = { 'iat': int(time.time()), # JWT expiration time (10 minutes maximum) 'exp': int(time.time()) + 600, - + {% ifversion client-id-for-app %} # {% data variables.product.prodname_github_app %}'s client ID - 'iss': client_id + 'iss': client_id{% else %} + # {% data variables.product.prodname_github_app %}'s app ID + 'iss': app_id{% endif %} } @@ -125,14 +135,16 @@ This script will prompt you for the file path where your private key is stored a ### Example: Using Bash to generate a JWT > [!NOTE] -> You must pass your Client ID and the file path where your private key is stored as arguments when running this script. +> 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. ```bash copy #!/usr/bin/env bash -set -o pipefail +{% ifversion client-id-for-app %} client_id=$1 # Client ID as first argument - +{% else %} +app_id=$1 # App ID as first argument +{% endif %} pem=$( cat $2 ) # file path of the private key as second argument now=$(date +%s) @@ -151,7 +163,7 @@ header=$( echo -n "${header_json}" | b64enc ) payload_json="{ \"iat\":${iat}, \"exp\":${exp}, - \"iss\":\"${client_id}\" + {% ifversion client-id-for-app %}\"iss\":\"${client_id}\"{% else %}\"iss\":\"${app_id}\"{% endif %} }" # Payload encode payload=$( echo -n "${payload_json}" | b64enc ) @@ -170,13 +182,16 @@ printf '%s\n' "JWT: $JWT" ### Example: Using PowerShell to generate a JWT -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. +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. ```powershell copy #!/usr/bin/env pwsh +{% ifversion client-id-for-app %} $client_id = YOUR_CLIENT_ID - +{% else %} +$app_id = YOUR_APP_ID +{% endif %} $private_key_path = "YOUR_PATH_TO_PEM" $header = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((ConvertTo-Json -InputObject @{ @@ -187,7 +202,7 @@ $header = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((Conve $payload = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((ConvertTo-Json -InputObject @{ iat = [System.DateTimeOffset]::UtcNow.AddSeconds(-10).ToUnixTimeSeconds() exp = [System.DateTimeOffset]::UtcNow.AddMinutes(10).ToUnixTimeSeconds() - iss = $client_id + {% ifversion client-id-for-app %}iss = $client_id{% else %}iss = $app_id{% endif %} }))).TrimEnd('=').Replace('+', '-').Replace('/', '_'); $rsa = [System.Security.Cryptography.RSA]::Create() diff --git a/data/features/client-id-for-app.yml b/data/features/client-id-for-app.yml new file mode 100644 index 000000000000..7a98fcd59dac --- /dev/null +++ b/data/features/client-id-for-app.yml @@ -0,0 +1,6 @@ +# Reference: #14091 + +versions: + fpt: '*' + ghec: '*' + ghes: '>=3.18' From 20ebee7cbdaf6f3b065ed38448009ab8ba025765 Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Tue, 25 Nov 2025 05:41:33 -0800 Subject: [PATCH 10/24] Delete orphaned files (2025-11-24-16-29) (#58603) --- .../images/help/copilot/tell-me-about-repo.png | Bin 37935 -> 0 bytes .../copilot/chat-previous-conversation.md | 1 - 2 files changed, 1 deletion(-) delete mode 100644 assets/images/help/copilot/tell-me-about-repo.png delete mode 100644 data/reusables/copilot/chat-previous-conversation.md diff --git a/assets/images/help/copilot/tell-me-about-repo.png b/assets/images/help/copilot/tell-me-about-repo.png deleted file mode 100644 index 58592bd2a60db1f7764a9017bd85cfd1c6be3e33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37935 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 m%tJ#&Y3Nd&rr+k*sqG(R_*f8g+DJzL0000