From 0a35c2cb493375ec773b7f9bcf91bc2d417f144a Mon Sep 17 00:00:00 2001 From: sreebaily <112288138+sreebaily@users.noreply.github.com> Date: Mon, 31 Mar 2025 05:23:41 -0700 Subject: [PATCH 1/9] Update charging-business-units.md (#54947) Co-authored-by: Sophie <29382425+sophietheking@users.noreply.github.com> --- .../charging-business-units.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/content/billing/using-the-new-billing-platform/charging-business-units.md b/content/billing/using-the-new-billing-platform/charging-business-units.md index d76162766467..a4eca906998c 100644 --- a/content/billing/using-the-new-billing-platform/charging-business-units.md +++ b/content/billing/using-the-new-billing-platform/charging-business-units.md @@ -16,6 +16,8 @@ To drive accountability and control costs, the new billing platform lets you cre If your account is billed to Azure, you will have the option to add an Azure subscription ID. Cost centers allows for multiple Azure subscription IDs so that different business units, within an enterprise, can directly pay for their usage. +To learn more about roles authorized to create and manage cost centers, see [AUTOTITLE](/billing/using-the-new-billing-platform/roles-for-the-new-billing-platform). + ## Creating a cost center Create cost centers to monitor and manage expenses for specific organizations or repositories. Multiple organizations, repositories, and users can be assigned to one cost center. @@ -167,6 +169,16 @@ The following table illustrates how spending for each user is allocated to a cos {% endrowheaders %} +## Limitations of the Cost Center API + +There are a few current limitations when working with cost centers and the API: + +* You **cannot** create cost centers using the API. Administrators must create them through the UI. +* Once a cost center is created in the UI, administrators can use the API to add **members** only. +* It’s **not currently possible** to add **organizations** or **repositories** to cost centers using the API. +* You **cannot** add members to cost centers through the UI. +* A single **organization**, **repository**, or **member** can only be assigned to one cost center at a time. + ## Further reading * [AUTOTITLE](/rest/enterprise-admin/billing) From 327b789acce2e00ee52b45e793f08cab82f8c510 Mon Sep 17 00:00:00 2001 From: Jye Horan Date: Mon, 31 Mar 2025 20:35:22 +0800 Subject: [PATCH 2/9] Added notes to verifying-your-custom-domain-for-github-pages.md to assist lost users and reduce ticket volume. (#54969) Co-authored-by: Sophie <29382425+sophietheking@users.noreply.github.com> --- .../verifying-your-custom-domain-for-github-pages.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages.md b/content/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages.md index 77a30a1d832f..74ae84e33322 100644 --- a/content/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages.md +++ b/content/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages.md @@ -28,6 +28,9 @@ You may be verifying a domain you own, which is currently in use by another user ## Verifying a domain for your user site +> [!NOTE] +> If you don’t see the options described below, make sure you’re in your **Profile settings**, not your repository settings. Domain verification happens at the profile level. + {% data reusables.user-settings.access_settings %} 1. In the "Code, planning, and automation" section of the sidebar, click **{% octicon "browser" aria-hidden="true" %} Pages**. {% data reusables.pages.settings-verify-domain-setup %} @@ -43,6 +46,9 @@ You may be verifying a domain you own, which is currently in use by another user Organization owners can verify custom domains for their organization. +> [!NOTE] +> If you don’t see the options described below, check that you’re in your **Organization settings**. Domain verification doesn’t take place in repository settings. + {% data reusables.profile.access_org %} {% data reusables.profile.org_settings %} 1. In the "Code, planning, and automation" section of the sidebar, click **{% octicon "browser" aria-hidden="true" %} Pages**. From c0758e8b71155ceded4379a6990dee4862ae8e7d Mon Sep 17 00:00:00 2001 From: Rachael Rose Renk <91027132+rachaelrenk@users.noreply.github.com> Date: Mon, 31 Mar 2025 06:56:20 -0600 Subject: [PATCH 3/9] Closing down of Enterprise Cloud Importer (ECI) and supporting repository import GraphQL endpoints [Closing down] (#55030) --- .../overview/about-locked-repositories.md | 10 ---------- .../overview/migration-paths-to-github.md | 15 +++++++++++---- .../large-repositories-require-expert-services.md | 2 +- data/reusables/support/scope-of-support.md | 3 +-- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/content/migrations/overview/about-locked-repositories.md b/content/migrations/overview/about-locked-repositories.md index e6b36e30983b..2228fe6c779e 100644 --- a/content/migrations/overview/about-locked-repositories.md +++ b/content/migrations/overview/about-locked-repositories.md @@ -53,16 +53,6 @@ If you're sure you want to use the repository, a site administrator can unlock t The source repository is not locked by default, only if the `--lock` argument is specified when preparing the repository for export with the `ghe-migrator add` command. To unlock the repository, use the `ghe-migrator unlock` command. For more information, see [AUTOTITLE](/migrations/using-ghe-migrator/migrating-data-to-github-enterprise-server#unlocking-repositories-on-the-source). -## Repositories locked by Enterprise Cloud Importer - -When you use Enterprise Cloud Importer, the destination repository is locked by default and is not automatically unlocked. - -If the import succeeded, you can unlock the repository by clicking the **Unlock** button in Enterprise Cloud Importer. - -If the import failed, you cannot unlock the repository yourself. Because a failed migration means that not all of your data has been migrated, we recommend deleting the repository and retrying the migration, to prevent data loss. - -If you’re sure you want to unlock the repository, contact {% data variables.contact.contact_support %}. - ## Repositories locked by the `startImport` GraphQL mutation When you use the `startImport` GraphQL mutation, the destination repository is locked by default and is not automatically unlocked. diff --git a/content/migrations/overview/migration-paths-to-github.md b/content/migrations/overview/migration-paths-to-github.md index 1beee3bc3a38..da96053805fa 100644 --- a/content/migrations/overview/migration-paths-to-github.md +++ b/content/migrations/overview/migration-paths-to-github.md @@ -18,6 +18,13 @@ Some migration paths require tools that are only available with expert-led migra In our recommendations, we'll assume that you want the highest level of fidelity if possible, which includes source, history, and metadata. + + +> [!NOTE] +> Enterprise Cloud Importer (ECI) and the GraphQL endpoints for importing migration data to {% data variables.product.prodname_ghe_cloud %} from an archive are closing down on March 31, 2025. After this date, these tools can not be used to import repository data into GitHub's cloud-based products. We recommend using {% data variables.product.prodname_importer_proper_name %} (GEI). See [AUTOTITLE](/migrations/using-github-enterprise-importer/understanding-github-enterprise-importer/about-github-enterprise-importer). + + + ## Migrations to {% data variables.product.prodname_dotcom_the_website %} You can review the scope and tooling for your migration to {% data variables.product.prodname_dotcom_the_website %}, which includes migrations to {% data variables.product.prodname_ghe_cloud %}. You can also review any additional information or caveats. @@ -104,16 +111,16 @@ Migrations from {% data variables.product.prodname_dotcom_the_website %} include * [AUTOTITLE](/migrations/using-github-enterprise-importer) * [{% data variables.product.prodname_expert_services %}](https://github.com/services/) website * **Caveats:** - * For complex repositories larger than around 5 GB, you may need to use `bbs-exporter` and Enterprise Cloud Importer instead. Enterprise Cloud Importer is only available for expert-led migrations. + * {% data reusables.migrations.large-repositories-require-expert-services %} * {% data reusables.migrations.migration-instructions-for-any-git-repository-to-githubcom %} ### GitLab to {% data variables.product.prodname_dotcom_the_website %} * **Scope:** Source, history, and metadata -* **Tooling:** `gl-exporter`, then Enterprise Cloud Importer (expert-led migrations only) +* **Tooling:** {% data variables.product.prodname_importer_proper_name %} * **More information:** [{% data variables.product.prodname_expert_services %}](https://github.com/services/) website * **Caveats:** - * Enterprise Cloud Importer is only available for expert-led migrations. + * If you want to migrate GitLab repositories to GitHub using {% data variables.product.prodname_importer_proper_name %}, please contact our {% data variables.product.prodname_expert_services %} team. * {% data reusables.migrations.migration-instructions-for-any-git-repository-to-githubcom %} ### Any Git repository to {% data variables.product.prodname_dotcom_the_website %} @@ -164,7 +171,7 @@ This path is not currently supported with our official tools. Please contact {% If you're migrating to {% data variables.enterprise.data_residency %}, your migration destination is {% data variables.enterprise.data_residency_site %}. -Migrations to {% data variables.enterprise.data_residency_site %} use similar tools as migrations to {% data variables.product.prodname_dotcom_the_website %}. However, the {% data variables.product.prodname_importer %} and Enterprise Cloud Importer are not available. +Migrations to {% data variables.enterprise.data_residency_site %} use similar tools as migrations to {% data variables.product.prodname_dotcom_the_website %}. However, the {% data variables.product.prodname_importer %} is not available. Follow a link below to review the scope and tooling for your migration to {% data variables.enterprise.data_residency_site %}, plus any additional information or caveats. diff --git a/data/reusables/migrations/large-repositories-require-expert-services.md b/data/reusables/migrations/large-repositories-require-expert-services.md index 860b6f634499..d38e01495b2d 100644 --- a/data/reusables/migrations/large-repositories-require-expert-services.md +++ b/data/reusables/migrations/large-repositories-require-expert-services.md @@ -1 +1 @@ -For complex repositories larger than around 5 GB, you may need to use `ghe-migrator` and Enterprise Cloud Importer instead. Enterprise Cloud Importer is only available for expert-led migrations. +For repositories with git or metadata archives greater than 20GB, consider engaging our {% data variables.product.prodname_expert_services %} to help bring your large repositories within Enterprise Cloud Importer limits. diff --git a/data/reusables/support/scope-of-support.md b/data/reusables/support/scope-of-support.md index 49986ff47a77..98b543fa761b 100644 --- a/data/reusables/support/scope-of-support.md +++ b/data/reusables/support/scope-of-support.md @@ -1,7 +1,6 @@ If your support request is outside of the scope of what our team can help you with, we may recommend next steps to resolve your issue outside of {% data variables.contact.github_support %}. Your support request is possibly out of {% data variables.contact.github_support %}'s scope if the request is primarily about: -* Third party integrations, such as Jira -* Enterprise Cloud Importer (available only with expert-led migrations){% ifversion ghes %} +* Third party integrations, such as Jira{% ifversion ghes %} * Hardware setup{% endif %} * CI/CD, such as Jenkins * Writing scripts From 7a4183e745bb88b4429316b931b9c3784684c462 Mon Sep 17 00:00:00 2001 From: MikaelaMcGrath Date: Tue, 1 Apr 2025 00:37:12 +1000 Subject: [PATCH 4/9] Added conditional for App ID and Client ID (#55058) --- .../generating-a-json-web-token-jwt-for-a-github-app.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0036f1652f4e..c3ae5a049c68 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 @@ -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_APP_ID` with the ID of your app. Make sure to enclose the values for `YOUR_PATH_TO_PEM` and `YOUR_APP_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' From ce946106c4ec027a5c776f4b8256e937a26047e4 Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Mon, 31 Mar 2025 16:52:08 +0200 Subject: [PATCH 5/9] Remove capitalization from sub-header (#55067) --- .../using-the-new-billing-platform/charging-business-units.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/billing/using-the-new-billing-platform/charging-business-units.md b/content/billing/using-the-new-billing-platform/charging-business-units.md index a4eca906998c..047d0a693905 100644 --- a/content/billing/using-the-new-billing-platform/charging-business-units.md +++ b/content/billing/using-the-new-billing-platform/charging-business-units.md @@ -169,7 +169,7 @@ The following table illustrates how spending for each user is allocated to a cos {% endrowheaders %} -## Limitations of the Cost Center API +## Limitations of the cost center API There are a few current limitations when working with cost centers and the API: From 93594f344900ce47402627d44e8cea3d68cff982 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 11:43:14 -0400 Subject: [PATCH 6/9] Bump github/gh-base-image/gh-base-noble from 20250319-193531-g83d4e6244 to 20250328-000607-gf66d47491 in the baseimages group (#55055) 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 91ae75e8bab0..c7e17333cf74 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:20250319-193531-g83d4e6244 AS base +FROM ghcr.io/github/gh-base-image/gh-base-noble:20250328-000607-gf66d47491 AS base # Install curl for Node install and determining the early access branch # Install git for cloning docs-early-access & translations repos From 26c96c47668725ee2e4a6dc8fea562e106be8cbd Mon Sep 17 00:00:00 2001 From: Panagiotis Lithadiotis <55960073+panoslith@users.noreply.github.com> Date: Mon, 31 Mar 2025 19:02:28 +0300 Subject: [PATCH 7/9] Dependabot label information for self-hosted runners (#55044) Co-authored-by: Anne-Marie <102995847+am-stead@users.noreply.github.com> --- .../about-dependabot-on-github-actions-runners.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/code-security/dependabot/working-with-dependabot/about-dependabot-on-github-actions-runners.md b/content/code-security/dependabot/working-with-dependabot/about-dependabot-on-github-actions-runners.md index 158dc3d9b1fd..90cfdc9432c2 100644 --- a/content/code-security/dependabot/working-with-dependabot/about-dependabot-on-github-actions-runners.md +++ b/content/code-security/dependabot/working-with-dependabot/about-dependabot-on-github-actions-runners.md @@ -29,7 +29,7 @@ Using {% data variables.product.prodname_actions %} runners allows you to more e You can run {% data variables.product.prodname_dependabot %} on {% data variables.product.prodname_actions %} using: * {% data variables.product.prodname_dotcom %}-hosted runners * {% data variables.actions.hosted_runners_caps %}. These runners are {% data variables.product.prodname_dotcom %}-hosted, with advanced features, such as more RAM, CPU, and disk space. For more information, see [AUTOTITLE](/actions/using-github-hosted-runners/about-larger-runners). -* Self-hosted runners +* Self-hosted runners. For more information on assigning a `dependabot` label on self-hosted runners, see [AUTOTITLE](/code-security/dependabot/maintain-dependencies/managing-dependabot-on-self-hosted-runners). {% data reusables.dependabot.vnet-arc-note %} From db995fa61585f2b8f5ac64fffef2dfdadf5ab673 Mon Sep 17 00:00:00 2001 From: Evan Bonsignori Date: Mon, 31 Mar 2025 10:01:46 -0700 Subject: [PATCH 8/9] add privacy disclaimer to AI Search overlay (#55051) --- data/ui.yml | 1 + src/fixtures/fixtures/data/ui.yml | 1 + .../input/SearchOverlay.module.scss | 3 + src/search/components/input/SearchOverlay.tsx | 61 +++++++++++++------ 4 files changed, 47 insertions(+), 19 deletions(-) diff --git a/data/ui.yml b/data/ui.yml index 37bc6892fe8e..ff0431750435 100644 --- a/data/ui.yml +++ b/data/ui.yml @@ -43,6 +43,7 @@ search: view_all_search_results: View more results no_results_found: No results found search_docs_with_query: Search docs for "{{query}}" + privacy_disclaimer: For product and service improvement purposes, the GitHub Docs team will retain questions and answers generated in the Docs search function. Please see the GitHub Privacy Statement to review how GitHub collects and uses your data. ai: disclaimer: Copilot uses AI. Check for mistakes by reviewing the links in the response. references: References from these articles diff --git a/src/fixtures/fixtures/data/ui.yml b/src/fixtures/fixtures/data/ui.yml index 37bc6892fe8e..ff0431750435 100644 --- a/src/fixtures/fixtures/data/ui.yml +++ b/src/fixtures/fixtures/data/ui.yml @@ -43,6 +43,7 @@ search: view_all_search_results: View more results no_results_found: No results found search_docs_with_query: Search docs for "{{query}}" + privacy_disclaimer: For product and service improvement purposes, the GitHub Docs team will retain questions and answers generated in the Docs search function. Please see the GitHub Privacy Statement to review how GitHub collects and uses your data. ai: disclaimer: Copilot uses AI. Check for mistakes by reviewing the links in the response. references: References from these articles diff --git a/src/search/components/input/SearchOverlay.module.scss b/src/search/components/input/SearchOverlay.module.scss index 3a5729139449..3946354268af 100644 --- a/src/search/components/input/SearchOverlay.module.scss +++ b/src/search/components/input/SearchOverlay.module.scss @@ -73,6 +73,9 @@ color: var(--fgColor-success, var(--fgColor-open, green)) !important; background-color: var(--overlay-bgColor); margin-right: 1em; + height: 22px !important; + font-weight: 700 !important; + border-color: unset !important; } .loadingContainer { diff --git a/src/search/components/input/SearchOverlay.tsx b/src/search/components/input/SearchOverlay.tsx index abae8c47c34d..4f05d07c31af 100644 --- a/src/search/components/input/SearchOverlay.tsx +++ b/src/search/components/input/SearchOverlay.tsx @@ -9,6 +9,7 @@ import { Overlay, Spinner, Stack, + Text, TextInput, Token, } from '@primer/react' @@ -691,28 +692,50 @@ export function SearchOverlay({ }} />
- - { - if (await getIsStaff()) { - // Hubbers users use an internal discussion for feedback - window.open('https://github.com/github/docs-engineering/discussions/5295', '_blank') - } else { - // TODO: On ship date set this value - // window.open('TODO', '_blank') - } - }} - as="button" > - {t('search.overlay.give_feedback')} - + + { + if (await getIsStaff()) { + // Hubbers users use an internal discussion for feedback + window.open( + 'https://github.com/github/docs-engineering/discussions/5295', + '_blank', + ) + } else { + // TODO: On ship date set this value + // window.open('TODO', '_blank') + } + }} + as="button" + > + {t('search.overlay.give_feedback')} + + +
From a0ee8e23cff55e5ef8941f15054e42ee909bae3a Mon Sep 17 00:00:00 2001 From: Evan Bonsignori Date: Mon, 31 Mar 2025 10:02:13 -0700 Subject: [PATCH 9/9] handle 204 again for AI Search (#55048) --- src/search/lib/ai-search-proxy.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/search/lib/ai-search-proxy.ts b/src/search/lib/ai-search-proxy.ts index 54d3d28146fb..fbb897c2b56e 100644 --- a/src/search/lib/ai-search-proxy.ts +++ b/src/search/lib/ai-search-proxy.ts @@ -80,7 +80,14 @@ export const aiSearchProxy = async (req: Request, res: Response) => { // Handle the upstream response before piping stream.on('response', (upstreamResponse) => { - if (upstreamResponse.statusCode !== 200) { + // When cse-copilot returns a 204, it means the backend received the request + // but was unable to answer the question. So we return a 400 to the client to be handled. + if (upstreamResponse.statusCode === 204) { + statsd.increment('ai-search.unable_to_answer_query', 1, diagnosticTags) + return res + .status(400) + .json({ errors: [{ message: 'Sorry I am unable to answer this question.' }] }) + } else if (upstreamResponse.statusCode !== 200) { const errorMessage = `Upstream server responded with status code ${upstreamResponse.statusCode}` console.error(errorMessage) statsd.increment('ai-search.stream_response_error', 1, diagnosticTags)