From 20b1cd2d4e4ae8f8954c54bd5c901a07f4090da1 Mon Sep 17 00:00:00 2001 From: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:29:53 +0000 Subject: [PATCH 1/4] =?UTF-8?q?The=20last=20Enterprise=20bugfix=20hour=20?= =?UTF-8?q?=F0=9F=98=A2=20=20(#53056)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...adding-organizations-to-your-enterprise.md | 9 +++++-- ...ving-organizations-from-your-enterprise.md | 25 +++++++++++++------ ...le-sign-on-for-enterprise-managed-users.md | 1 + ...g-started-with-enterprise-managed-users.md | 2 ++ ...es-in-the-audit-log-for-your-enterprise.md | 2 +- ...ing-license-usage-for-github-enterprise.md | 11 ++++---- ...-in-the-audit-log-for-your-organization.md | 2 +- .../data-not-migrated.md | 1 + .../repositories/rulesets-bypass-step.md | 2 ++ 9 files changed, 38 insertions(+), 17 deletions(-) diff --git a/content/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise.md b/content/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise.md index 46d3e732de99..2774267cecc9 100644 --- a/content/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise.md +++ b/content/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise.md @@ -42,8 +42,13 @@ After you add an existing organization to your enterprise, the organization's re * **SAML SSO Configuration:** - * If SAML SSO is configured **for the enterprise**, the enterprise's SAML configuration will apply to the organization. If the organization used SAML SSO, the enterprise account's configuration will replace the organization's configuration. SCIM is not available for enterprise accounts, so SCIM will be disabled for the organization. See "[AUTOTITLE](/admin/identity-and-access-management/using-saml-for-enterprise-iam/configuring-saml-single-sign-on-for-your-enterprise)" and "[AUTOTITLE](/admin/identity-and-access-management/using-saml-for-enterprise-iam/switching-your-saml-configuration-from-an-organization-to-an-enterprise-account)." - * If SAML SSO was configured **for the organization**, members' existing {% data variables.product.pat_generic %} or SSH keys that were authorized to access the organization's resources will be authorized to access the same resources. To access additional organizations owned by the enterprise, members must authorize the {% data variables.product.pat_generic %} or key. See "[AUTOTITLE](/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on)" and "[AUTOTITLE](/authentication/authenticating-with-saml-single-sign-on/authorizing-an-ssh-key-for-use-with-saml-single-sign-on)." + * If SAML SSO is configured **for the destination enterprise**, the enterprise's SAML configuration will apply to the organization. + * If SAML is currently configured on the organization, the enterprise account's SAML configuration will override the organization's configuration. SCIM is not available at the enterprise level for enterprises that use personal accounts, so SCIM will be disabled for the organization. The new inherited enterprise SAML settings will be displayed on the organization's SAML settings page. + * If SAML is ever disabled for the enterprise, the organization SAML settings will revert back to their original configuration. + * If SAML is **not** configured for the destination enterprise, the organization will retain any existing SAML and SCIM settings. + * If organization members have existing SAML authorizations for {% data variables.product.pat_generic_plural %} or SSH keys to access the organization, these authorizations will remain active. + * To see these authorizations, SAML must be configured for either the organization or enterprise, and the user must have a linked SAML identity. + * To access additional organizations owned by the enterprise, members must authorize the {% data variables.product.pat_generic %} or key. See "[AUTOTITLE](/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on)" and "[AUTOTITLE](/authentication/authenticating-with-saml-single-sign-on/authorizing-an-ssh-key-for-use-with-saml-single-sign-on)." * **Trial enterprise:** Certain features may be disabled if added to a trial enterprise. See "[AUTOTITLE](/admin/overview/setting-up-a-trial-of-github-enterprise-cloud#features-not-included-in-the-trial)." * **{% data variables.product.prodname_github_connect %}:** If the organization was connected to {% data variables.product.prodname_ghe_server %} using {% data variables.product.prodname_github_connect %}, adding the organization to an enterprise will not update the connection. {% data variables.product.prodname_github_connect %} features will no longer function for the organization. To continue using {% data variables.product.prodname_github_connect %}, you must disable and re-enable the feature. See "[AUTOTITLE](/enterprise-server@latest/admin/configuration/configuring-github-connect/managing-github-connect)" in the {% data variables.product.prodname_ghe_server %} documentation. diff --git a/content/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/removing-organizations-from-your-enterprise.md b/content/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/removing-organizations-from-your-enterprise.md index 1bb97146d560..01963c09c6b0 100644 --- a/content/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/removing-organizations-from-your-enterprise.md +++ b/content/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/removing-organizations-from-your-enterprise.md @@ -12,16 +12,25 @@ redirect_from: - /admin/user-management/managing-organizations-in-your-enterprise/removing-organizations-from-your-enterprise --- -## About organization removal - You can remove an organization that is owned by your enterprise account, so the organization stands alone. -> [!WARNING] -> When you remove an organization from your enterprise: -> * Billing, identity management, 2FA requirements, and other policies for the organization will no longer be governed by your enterprise. -> * The organization will be downgraded to the free plan. -> * The organization will be governed by our standard Terms of Service. -> * Any internal repositories within the organization will be converted to private repositories. +## What happens when an organization is removed? + +When you remove an organization from your enterprise: + +* Billing, identity management, 2FA requirements, and other policies for the organization will no longer be governed by your enterprise. +* The organization will be downgraded to the free plan. +* The organization will be governed by our standard Terms of Service. +* Any internal repositories within the organization will be converted to private repositories. + +As part of the downgrade to the free plan: + +* Protected branch and ruleset configurations will be retained in your settings, but will no longer be applied in private repositories. +* Existing pull request drafts will remain in draft status. New drafts cannot be created. +* CODEOWNERS files will no longer be applied in private repositories. +* Private {% data variables.product.prodname_pages %} sites will no longer be available. +* Wikis will be retained, but won't be visible unless the organization is upgraded to {% data variables.product.prodname_team %}. +* Secrets will be retained, but will not be accessible in private repositories unless the organization is upgraded to {% data variables.product.prodname_team %}. ## Removing an organization from your enterprise diff --git a/content/admin/managing-iam/configuring-authentication-for-enterprise-managed-users/configuring-saml-single-sign-on-for-enterprise-managed-users.md b/content/admin/managing-iam/configuring-authentication-for-enterprise-managed-users/configuring-saml-single-sign-on-for-enterprise-managed-users.md index 1c56ff8efee7..586b239541de 100644 --- a/content/admin/managing-iam/configuring-authentication-for-enterprise-managed-users/configuring-saml-single-sign-on-for-enterprise-managed-users.md +++ b/content/admin/managing-iam/configuring-authentication-for-enterprise-managed-users/configuring-saml-single-sign-on-for-enterprise-managed-users.md @@ -103,6 +103,7 @@ After the initial configuration of SAML SSO, the only setting you can update on > [!NOTE] > {% data reusables.enterprise-accounts.emu-password-reset-session %} +1. If you're using a **non-partner IdP** (an IdP other than Okta, PingFederate or Entra ID), before enabling SAML, you must update a setting so that you will be able to set up SCIM using the REST API. See "[AUTOTITLE](/admin/managing-iam/provisioning-user-accounts-with-scim/configuring-scim-provisioning-for-users#configuring-provisioning-for-other-identity-management-systems)." {% data reusables.enterprise-accounts.access-enterprise-emu %} {% data reusables.enterprise-accounts.identity-provider-tab %} {% data reusables.enterprise-accounts.sso-configuration %} diff --git a/content/admin/managing-iam/understanding-iam-for-enterprises/getting-started-with-enterprise-managed-users.md b/content/admin/managing-iam/understanding-iam-for-enterprises/getting-started-with-enterprise-managed-users.md index bef610257f98..75b56cd9f5ad 100644 --- a/content/admin/managing-iam/understanding-iam-for-enterprises/getting-started-with-enterprise-managed-users.md +++ b/content/admin/managing-iam/understanding-iam-for-enterprises/getting-started-with-enterprise-managed-users.md @@ -42,6 +42,8 @@ Using an **incognito or private browsing window**: {% data reusables.enterprise-accounts.emu-password-reset-session %} +We strongly recommend **storing the credentials for the setup user** in your company's password management tool. Someone will need to sign in as this user to update authentication settings, migrate to another identity provider or authentication method, or use your enterprise's recovery codes. + ## Create a {% data variables.product.pat_generic %} {% data reusables.enterprise-accounts.emu-create-a-pat %} diff --git a/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise.md b/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise.md index 37366254b5a8..29aaf4da3dc5 100644 --- a/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise.md +++ b/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise.md @@ -20,7 +20,7 @@ By default, {% data variables.product.product_name %} does not display the sourc You are responsible for meeting any legal obligations that accompany the viewing or storage of IP addresses displayed within your enterprise's audit log. -If you choose to display IP addresses for your enterprise account, the IP addresses will appear in both your enterprise's audit log and the audit log of every organization owned by your enterprise. Alternatively, you can enable the display of IP addresses in the audit log for individual organizations. For more information, see "[AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization)." +If you choose to display IP addresses for your enterprise account, IP addresses for **new and existing events** will appear in both your enterprise's audit log and the audit log of every organization owned by your enterprise. Alternatively, you can enable the display of IP addresses in the audit log for individual organizations. For more information, see "[AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization)." You can display IP addresses in the audit log regardless of which authentication method you use for your enterprise on {% data variables.product.github %}. For more information, see "[AUTOTITLE](/admin/identity-and-access-management/managing-iam-for-your-enterprise/about-authentication-for-your-enterprise)." diff --git a/content/billing/managing-your-license-for-github-enterprise/viewing-license-usage-for-github-enterprise.md b/content/billing/managing-your-license-for-github-enterprise/viewing-license-usage-for-github-enterprise.md index 32dcc7c11ca4..2aa0530e490e 100644 --- a/content/billing/managing-your-license-for-github-enterprise/viewing-license-usage-for-github-enterprise.md +++ b/content/billing/managing-your-license-for-github-enterprise/viewing-license-usage-for-github-enterprise.md @@ -36,10 +36,10 @@ To learn more about the license data associated with your enterprise account and ## Viewing license usage on {% ifversion ghec %}{% data variables.product.prodname_ghe_cloud %}{% elsif ghes %}{% data variables.location.product_location %}{% endif %} -You can view the license usage for your enterprise and download a file with license details. If you're not seeing expected license counts in this report, it's possible that the subscriber’s assigned {% data variables.product.prodname_vs %} subscription email address and {% data variables.product.prodname_dotcom_the_website %} email address aren't exactly the same. For further information, see "[AUTOTITLE](/billing/managing-your-license-for-github-enterprise/troubleshooting-license-usage-for-github-enterprise)." - {% ifversion ghec %} +You can view the license usage for your enterprise and download a file with license details. If you're not seeing expected license counts in this report, it's possible that the subscriber’s assigned {% data variables.product.prodname_vs %} subscription email address and {% data variables.product.prodname_dotcom_the_website %} email address aren't exactly the same. For further information, see "[AUTOTITLE](/billing/managing-your-license-for-github-enterprise/troubleshooting-license-usage-for-github-enterprise)." + {% data reusables.enterprise-accounts.access-enterprise-on-dotcom %} {% data reusables.enterprise-accounts.settings-tab %} {% data reusables.enterprise-accounts.license-tab %} @@ -54,11 +54,12 @@ You can view the license usage for your enterprise and download a file with lice {% data reusables.enterprise-accounts.access-enterprise %} {% data reusables.enterprise-accounts.settings-tab %} {% data reusables.enterprise-accounts.license-tab %} -1. Review your current {% data variables.product.prodname_enterprise %} license, as well as consumed and available user licenses.{% ifversion ghes %} - * To download the consumed license report as a JSON file, in the top right under "Quick links", choose **Export license usage**. For more information about reviewing the data in this report, see "[AUTOTITLE](/billing/managing-your-license-for-github-enterprise/troubleshooting-license-usage-for-github-enterprise)." - * If you have purchased {% data variables.product.prodname_GH_advanced_security %}, you can review your total {% ifversion ghas-billing-UI-update %}licenses{% else %}seats{% endif %} used as well as a per-organization breakdown of active committers. See "[AUTOTITLE](/admin/code-security/managing-github-advanced-security-for-your-enterprise)."{% endif %} +1. Review your current {% data variables.product.prodname_enterprise %} license, as well as consumed and available user licenses. + + If you have purchased {% data variables.product.prodname_GH_advanced_security %}, you can review your total {% ifversion ghas-billing-UI-update %}licenses{% else %}seats{% endif %} used as well as a per-organization breakdown of active committers. See "[AUTOTITLE](/admin/code-security/managing-github-advanced-security-for-your-enterprise)." {% endif %} + {% ifversion ghec %} ## Viewing the last license sync date diff --git a/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization.md b/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization.md index 3f067543c0c5..07ceea1cc6ed 100644 --- a/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization.md +++ b/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization.md @@ -18,7 +18,7 @@ topics: ## About display of IP addresses in the audit log -By default, {% data variables.product.product_name %} does not display the source IP address for events in your organization's audit log. {% data reusables.audit_log.about-ip-display %} +By default, {% data variables.product.product_name %} does not display the source IP address for events in your organization's audit log. {% data reusables.audit_log.about-ip-display %} If you enable this setting, the IP address will be displayed for **new and existing events** in the audit log. You are responsible for meeting any legal obligations that accompany the viewing or storage of IP addresses displayed within your organization's audit log. diff --git a/data/reusables/enterprise-migration-tool/data-not-migrated.md b/data/reusables/enterprise-migration-tool/data-not-migrated.md index 52d062077001..9a13349c963f 100644 --- a/data/reusables/enterprise-migration-tool/data-not-migrated.md +++ b/data/reusables/enterprise-migration-tool/data-not-migrated.md @@ -1,3 +1,4 @@ +* Audit logs * {% data variables.product.prodname_code_scanning_caps %} results * Commit status checks * {% data variables.product.prodname_dependabot %} alerts diff --git a/data/reusables/repositories/rulesets-bypass-step.md b/data/reusables/repositories/rulesets-bypass-step.md index 95feb1b89b41..376688454389 100644 --- a/data/reusables/repositories/rulesets-bypass-step.md +++ b/data/reusables/repositories/rulesets-bypass-step.md @@ -3,7 +3,9 @@ You can grant certain roles, teams, or apps bypass permissions {% ifversion push * Repository admins, organization owners, and enterprise owners * The maintain or write role, or custom repository roles based on the write role * Teams +{%- ifversion ghes > 3.13 %} * Deploy keys +{%- endif %} * {% data variables.product.prodname_github_apps %}{% ifversion repo-rules-dependabot-bypass %} * {% data variables.product.prodname_dependabot %}. For more information about {% data variables.product.prodname_dependabot %}, see "[AUTOTITLE](/code-security/getting-started/dependabot-quickstart-guide)."{% endif %} From 3a5b701981037082e95471968bb14641f8e25338 Mon Sep 17 00:00:00 2001 From: Sam Browning <106113886+sabrowning1@users.noreply.github.com> Date: Thu, 14 Nov 2024 10:46:48 -0500 Subject: [PATCH 2/4] Add a quickstart article for GitHub Copilot Extensions (#52544) Co-authored-by: Dimitrios Philliou Co-authored-by: Kevin Heis Co-authored-by: Jules <19994093+jules-p@users.noreply.github.com> --- .../index.md | 1 - .../using-a-demo-agent.md | 50 ------- ...your-server-to-host-your-copilot-agent.md} | 22 +-- ...a-github-app-for-your-copilot-extension.md | 2 +- .../creating-a-copilot-extension/index.md | 2 +- .../building-copilot-extensions/index.md | 1 + ...uickstart-for-github-copilot-extensions.md | 127 ++++++++++++++++++ .../setting-up-copilot-extensions.md | 2 + .../supported-clients-and-ides-table.md | 1 + 9 files changed, 144 insertions(+), 64 deletions(-) delete mode 100644 content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-a-demo-agent.md rename content/copilot/building-copilot-extensions/creating-a-copilot-extension/{configuring-your-server-to-deploy-your-copilot-agent.md => configuring-your-server-to-host-your-copilot-agent.md} (59%) create mode 100644 content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions.md diff --git a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/index.md b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/index.md index 572f92ae46a3..a9b2841afd85 100644 --- a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/index.md +++ b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/index.md @@ -8,7 +8,6 @@ topics: - Copilot children: - /about-copilot-agents - - /using-a-demo-agent - /configuring-your-copilot-agent-to-communicate-with-the-copilot-platform - /configuring-your-copilot-agent-to-communicate-with-github - /using-copilots-llm-for-your-agent diff --git a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-a-demo-agent.md b/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-a-demo-agent.md deleted file mode 100644 index 8ac587db68fc..000000000000 --- a/content/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-a-demo-agent.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Using a demo agent -intro: 'Learn about how you can use a demo agent to explore how {% data variables.product.prodname_copilot_extensions_short %} work.' -versions: - feature: copilot-extensions -topics: - - Copilot -shortTitle: Using a demo agent -type: how_to ---- - -{% data reusables.copilot.copilot-extensions.beta-note %} - -## About demo agents - -If you're not ready to build your own {% data variables.product.prodname_copilot_agent_short %} from scratch, you can clone and use a demo agent to experiment with {% data variables.product.prodname_copilot_extensions %}. You can use the demo agent as a basis for your own agent, or you can use it to familiarize yourself with the {% data variables.product.prodname_copilot_extensions_short %} development and deployment process. - -{% data variables.product.company_short %} provides a few different demo agents that you can use. You can find them in the [copilot-extensions](https://github.com/copilot-extensions) organization. - -This article provides instructions for running the Blackbeard demo agent on your local machine, but should be similar for other demo agents. - -1. Clone the repository. Run the following command in your terminal (Mac or Linux) or Git Bash (Windows): - - ```shell copy - git clone https://github.com/copilot-extensions/blackbeard-extension.git - ``` - -1. Open the agent repository locally by running the following command in your terminal (Mac or Linux) or Git Bash (Windows): - - ```shell copy - cd blackbeard-extension - ``` - -1. To install the necessary dependencies, run the following command in your terminal (Mac or Linux) or Git Bash (Windows): - - ```shell copy - npm install - ``` - -1. To start your server, run the following command in your terminal (Mac or Linux) or Git Bash (Windows): - - ```shell copy - npm start - ``` - - > [!NOTE] Keep the terminal window open while you are using your agent. - -## Next steps - -* [AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent) diff --git a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent.md b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-agent.md similarity index 59% rename from content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent.md rename to content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-agent.md index 19b6706c08b1..d05fdd60195f 100644 --- a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent.md +++ b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-host-your-copilot-agent.md @@ -1,47 +1,47 @@ --- -title: Configuring your server to deploy your Copilot agent -intro: 'Learn how to deploy your {% data variables.product.prodname_copilot_short %} agent to a server that is accessible to the internet.' +title: Configuring your server to host your Copilot agent +intro: 'Learn how to make your {% data variables.product.prodname_copilot_short %} agent accessible to the internet.' versions: feature: copilot-extensions +redirect_from: + - /copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent topics: - Copilot -shortTitle: Deploy your agent +shortTitle: Host your agent type: how_to --- {% data reusables.copilot.copilot-extensions.beta-note %} -Your {% data variables.product.prodname_copilot_agent_short %} must be hosted on a server that is accessible to the internet. This guide will help you set up a server to run your {% data variables.product.prodname_copilot_agent_short %}. In this guide, we will use [ngrok](https://ngrok.com/) to create a tunnel to your local server, but you could also use a service like [localtunnel](https://localtunnel.github.io/www/) or [serveo](https://serveo.net/). +Your {% data variables.product.prodname_copilot_agent_short %} must be hosted on a server that is accessible to the internet. In this guide, we will use [ngrok](https://ngrok.com/) to create a tunnel to your local server, but you could also use a service like [localtunnel](https://localtunnel.github.io/www/) or [serveo](https://serveo.net/). Alternatively, if you are a {% data variables.product.prodname_codespaces %} user, you can use the built-in {% data variables.product.prodname_codespaces %} port forwarding. For more information, see "[AUTOTITLE](/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace)." ## Prerequisites -* You have created a {% data variables.product.prodname_copilot_agent_short %}. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension)." Alternatively, you can use a demo agent. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-a-demo-agent)." +* You have created a {% data variables.product.prodname_copilot_agent_short %}. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension)." ## Configuring your server -1. Visit the [ngrok setup & installation page](https://dashboard.ngrok.com/get-started/setup/). +1. Visit the [ngrok setup & installation page](https://dashboard.ngrok.com/get-started/setup/). 1. If you do not yet have an account, follow the instructions on screen to sign up. 1. Under "Agents," ensure the correct operating system is selected. 1. Under "Installation," follow the instructions for your operating system to download and install ngrok. -1. Under "Deploy your app online," selection **Ephemeral domain** or **Static domain**. +1. Under "Deploy your app online," select **Ephemeral domain** or **Static domain**. 1. Run the command provided in your terminal, replacing the port number with the port your agent is configured to run on. For example: * For an ephemeral domain: ```shell copy - ngrok http http://localhost:3000 + ngrok http http://localhost:AGENT-PORT-NUMBER ``` * For a static domain: ```shell copy - ngrok http --domain=YOUR-STATIC-DOMAIN.ngrok-free.app 3000 + ngrok http --domain=YOUR-STATIC-DOMAIN.ngrok-free.app AGENT-PORT-NUMBER ``` - > [!NOTE] The Blackbeard demo extension is configured to run on port 3000 by default. - 1. In your terminal, next to "Forwarding," copy the URL that ngrok has assigned to your server. You will need this forwarding endpoint when you are configuring your {% data variables.product.prodname_github_app %}. > [!NOTE] Do not copy the `-> http://localhost:XXXX` part of the URL. diff --git a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension.md b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension.md index 70f91a7754c4..8439a73daa87 100644 --- a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension.md +++ b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension.md @@ -15,7 +15,7 @@ A {% data variables.product.prodname_copilot_extension_short %} is a {% data var ## Prerequisites -* You have created a {% data variables.product.prodname_copilot_agent_short %}. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension)." Alternatively, you can use a demo agent. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-a-demo-agent)." +* You have created a {% data variables.product.prodname_copilot_agent_short %}. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension)." * You have configured your server to deploy your {% data variables.product.prodname_copilot_agent_short %}, and you have your hostname (aka forwarding endpoint). For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-server-to-deploy-your-copilot-agent)." ## Creating a {% data variables.product.prodname_github_app %} diff --git a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/index.md b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/index.md index ecfd38840d4d..91fa716c6f1b 100644 --- a/content/copilot/building-copilot-extensions/creating-a-copilot-extension/index.md +++ b/content/copilot/building-copilot-extensions/creating-a-copilot-extension/index.md @@ -7,7 +7,7 @@ versions: topics: - Copilot children: - - /configuring-your-server-to-deploy-your-copilot-agent + - /configuring-your-server-to-host-your-copilot-agent - /creating-a-github-app-for-your-copilot-extension - /configuring-your-github-app-for-your-copilot-agent --- diff --git a/content/copilot/building-copilot-extensions/index.md b/content/copilot/building-copilot-extensions/index.md index b5b4ef9edf20..885f16c44a98 100644 --- a/content/copilot/building-copilot-extensions/index.md +++ b/content/copilot/building-copilot-extensions/index.md @@ -8,6 +8,7 @@ topics: - Copilot children: - /about-building-copilot-extensions + - /quickstart-for-github-copilot-extensions - /setting-up-copilot-extensions - /building-a-copilot-agent-for-your-copilot-extension - /creating-a-copilot-extension diff --git a/content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions.md b/content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions.md new file mode 100644 index 000000000000..4c50350fdb8a --- /dev/null +++ b/content/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions.md @@ -0,0 +1,127 @@ +--- +title: Quickstart for GitHub Copilot Extensions +defaultTool: vscode +intro: 'Build and try out {% data variables.product.github %}''s Blackbeard extension to learn about the development process for {% data variables.product.prodname_copilot_extensions %}.' +versions: + feature: copilot-extensions +redirect_from: + - /copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/using-a-demo-agent +topics: + - Copilot +shortTitle: Extensions quickstart +--- + +{% data reusables.copilot.copilot-extensions.beta-note %} + +The [Blackbeard extension](https://github.com/copilot-extensions/blackbeard-extension) is a {% data variables.product.prodname_copilot_extension %} built with a simple agent that responds to requests like a pirate using {% data variables.product.prodname_copilot_short %}'s large language model (LLM) API and special system prompts. + +This quickstart is designed to help you build and chat with the Blackbeard extension as quickly as possible. To instead learn how to create a new {% data variables.product.prodname_copilot_extension %}, see "[AUTOTITLE](/copilot/building-copilot-extensions/setting-up-copilot-extensions)." + +## 1. Create and install a {% data variables.product.prodname_github_app %} + +In the developer settings for your {% data variables.product.github %} account, create a {% data variables.product.prodname_github_app %}. Your {% data variables.product.prodname_github_app %} must have: +* A name +* A homepage URL +* Webhooks deselected + +After you create your app, click **Install App** in the sidebar, then install your app on your account. + +For detailed instructions, see "[AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension#creating-a-github-app)." + +{% vscode %} + +## 2. Clone and host the Blackbeard agent locally + +Rather than deploying the Blackbeard agent as a web app, you can host your agent locally for a significantly faster build process. + +1. Using the Terminal built into {% data variables.product.prodname_vscode_shortname %}, clone the [`copilot-extensions/blackbeard-extension`](https://github.com/copilot-extensions/blackbeard-extension) repository. +1. In the same Terminal, run `npm install` to install the necessary dependencies, then run `npm start` to start the Blackbeard agent on port 3000. +1. In the "Ports" tab of the {% data variables.product.prodname_vscode_shortname %} panel, click **Forward a port** or **Add port**, then add port 3000. +1. Right-click the port and set the visibility to "Public," then copy the local address. + +## 3. Integrate and test the Blackbeard extension + +After you set up your {% data variables.product.prodname_github_app %} and Blackbeard agent, you can integrate the agent with your app and test the Blackbeard extension. You need to make the following changes to your {% data variables.product.prodname_github_app %} settings: +* In the "General" settings, in the "Callback URL" field, paste the local address for your agent. +* In the "Permissions & events" settings, grant read-only permissions to {% data variables.product.prodname_copilot_chat_short %}. +* In the "{% data variables.product.prodname_copilot_short %}" settings, set your app type to "Agent," then fill out the remaining fields. + +After you update your {% data variables.product.prodname_github_app %} settings, you can start chatting with your extension by typing `@YOUR-EXTENSION-NAME` in the {% data variables.product.prodname_copilot_chat_short %} window, then sending a prompt as normal. + +For more detailed instructions, see "[AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent#configuring-your-github-app)." + +{% endvscode %} + +{% codespaces %} + +## 2. Clone and host the Blackbeard agent in a codespace + +Rather than deploying the Blackbeard agent as a web app, you can host your agent in a codespace for a significantly faster build process. + +1. Navigate to the [`copilot-extensions/blackbeard-extension`](https://github.com/copilot-extensions/blackbeard-extension) repository. Select the {% octicon "code" aria-hidden="true" %} **Code** {% octicon "triangle-down" aria-hidden="true" %} dropdown menu, then click **Create codespace on main**. +1. To find your new codespace, select the {% octicon "code" aria-hidden="true" %} **Code** {% octicon "triangle-down" aria-hidden="true" %} dropdown menu. Next to your new codespace, select {% octicon "kebab-horizontal" aria-label="Show more actions for codespace" %}, then click {% octicon "globe" aria-hidden="true" %} **Open in Browser**. +1. In the integrated Terminal, run `npm start` to start the Blackbeard agent on port 3000. +1. In the "Ports" tab of the {% data variables.product.prodname_vscode_shortname %} panel, click **Forward a port**, then add port 3000. +1. Right-click the port and set the visibility to "Public," then copy the local address. + +## 3. Integrate and test the Blackbeard extension + +After you set up your {% data variables.product.prodname_github_app %} and Blackbeard agent, you can integrate the agent with your app and test the Blackbeard extension. You need to make the following changes to your {% data variables.product.prodname_github_app %} settings: +* In the "General" settings, in the "Callback URL" field, paste the forwarded address for your agent. +* In the "Permissions & events" settings, grant read-only permissions to {% data variables.product.prodname_copilot_chat_short %}. +* In the "{% data variables.product.prodname_copilot_short %}" settings, set your app type to "Agent," then fill out the remaining fields. + +After you update your {% data variables.product.prodname_github_app %} settings, you can start chatting with your extension by typing `@YOUR-EXTENSION-NAME` in the {% data variables.product.prodname_copilot_chat_short %} window of a supported client or IDE, then sending a prompt as normal. For a list of supported clients and IDEs, see "[AUTOTITLE](/copilot/building-copilot-extensions/about-building-copilot-extensions#supported-clients-and-ides)." + +> [!NOTE] Chatting with {% data variables.product.prodname_copilot_extensions %} in {% data variables.product.prodname_github_codespaces %} is not supported. + +For more detailed instructions, see "[AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent#configuring-your-github-app)." + +{% endcodespaces %} + +{% bash %} + +## 2. Clone and start the Blackbeard agent locally + +Rather than deploying the Blackbeard agent as a web app, you can host your agent locally for a significantly faster build process. + +1. Using your command line application, clone the [`copilot-extensions/blackbeard-extension`](https://github.com/copilot-extensions/blackbeard-extension) repository. +1. Run `npm install` to install the necessary dependencies, then run `npm start` to start the Blackbeard agent on port 3000. + +## 3. Expose your local server + +To make the Blackbeard agent accessible to the {% data variables.product.prodname_copilot_short %} platform and {% data variables.product.github %}, you need to expose your local server so it's reachable by HTTP requests. You can use any port forwarding or tunneling service to achieve this. For the following steps, we'll use ngrok. + +1. Navigate to [ngrok's download page](https://ngrok.com/download), then install the appropriate version of ngrok for your operating system. +1. Navigate to the [ngrok setup and installation page](https://dashboard.ngrok.com/get-started/setup/), then log in or sign up for an ngrok account. +1. To expose your local server, in a new window of your command line application, run the following command: + + ```shell copy + ngrok http http://localhost:3000 + ``` + +1. In your command line application, next to "Forwarding," copy the URL that ngrok assigned to your server. + +## 4. Integrate and test the Blackbeard extension + +To integrate your {% data variables.product.prodname_github_app %} with the Blackbeard agent, you need to make the following changes to your app settings: +* In the "General" settings, in the "Callback URL" field, paste the URL for your exposed server. +* In the "Permissions & events" settings, grant read-only permissions to {% data variables.product.prodname_copilot_chat_short %}. +* In the "{% data variables.product.prodname_copilot_short %}" settings, set your app type to "Agent," then fill out the remaining fields. + +After you update your {% data variables.product.prodname_github_app %} settings, you can start chatting with your extension by typing `@YOUR-EXTENSION-NAME` in the {% data variables.product.prodname_copilot_chat_short %} window, then sending a prompt as normal. + +For more detailed instructions, see "[AUTOTITLE](/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-agent#configuring-your-github-app)." + +{% endbash %} + +## Next steps + +Now that you have a working {% data variables.product.prodname_copilot_extension %}, you can try building on the Blackbeard agent to experiment with agent development. + +To learn about more complex agent implementations, you can also review the following example agents and software development kit (SDK), all of which are available in the [`copilot-extensions`](https://github.com/copilot-extensions) organization: + +* [{% data variables.product.prodname_github_models %}](https://github.com/copilot-extensions/github-models-extension): A more complex agent that lets you ask about and interact with various LLMs listed on the {% data variables.product.prodname_marketplace %} through {% data variables.product.prodname_copilot_chat_short %}. The {% data variables.product.prodname_github_models %} agent makes use of function calling. +* [Function Calling](https://github.com/copilot-extensions/function-calling-extension): An example agent written in Go that demonstrates function calling and confirmation dialogs. +* [RAG Extension](https://github.com/copilot-extensions/rag-extension): An example agent written in Go that demonstrates a simple implementation of retrieval augmented generation. +* [Preview SDK](https://github.com/copilot-extensions/preview-sdk.js/tree/main): An SDK that streamlines the development of {% data variables.product.prodname_copilot_extensions_short %} by handling request verification, payload parsing, and response formatting automatically. This SDK allows extension builders to focus more on creating core functionality and less on boilerplate code. diff --git a/content/copilot/building-copilot-extensions/setting-up-copilot-extensions.md b/content/copilot/building-copilot-extensions/setting-up-copilot-extensions.md index 7583c6c7ca4b..2535412c1ad1 100644 --- a/content/copilot/building-copilot-extensions/setting-up-copilot-extensions.md +++ b/content/copilot/building-copilot-extensions/setting-up-copilot-extensions.md @@ -10,6 +10,8 @@ shortTitle: Set up Copilot Extensions {% data reusables.copilot.copilot-extensions.beta-note %} +This article is designed to help you build an entirely new {% data variables.product.prodname_copilot_extension %}. To instead learn how to quickly build and test a demo {% data variables.product.prodname_copilot_extension_short %} created by {% data variables.product.github %}, see "[AUTOTITLE](/copilot/building-copilot-extensions/quickstart-for-github-copilot-extensions)." + ## 1. Learn about {% data variables.product.prodname_copilot_agents_short %} {% data variables.product.prodname_copilot_agents_short %} contain the custom code for your {% data variables.product.prodname_copilot_extension_short %}, and integrate with a {% data variables.product.prodname_github_app %} to form the {% data variables.product.prodname_copilot_extension_short %} itself. For more information, see "[AUTOTITLE](/copilot/building-copilot-extensions/building-a-copilot-agent-for-your-copilot-extension/about-copilot-agents)." diff --git a/data/reusables/copilot/copilot-extensions/supported-clients-and-ides-table.md b/data/reusables/copilot/copilot-extensions/supported-clients-and-ides-table.md index a7c9bedd80d3..0734f6ad4c7c 100644 --- a/data/reusables/copilot/copilot-extensions/supported-clients-and-ides-table.md +++ b/data/reusables/copilot/copilot-extensions/supported-clients-and-ides-table.md @@ -4,6 +4,7 @@ | {% data variables.product.prodname_vs %} | {% octicon "check" aria-label="Supported" %} | | {% data variables.product.prodname_dotcom_the_website %} | {% octicon "check" aria-label="Supported" %} | | {% data variables.product.prodname_mobile %} | {% octicon "check" aria-label="Supported" %} | +| {% data variables.product.prodname_github_codespaces %} | {% octicon "x" aria-label="Unsupported" %} | | JetBrains IDEs | {% octicon "x" aria-label="Unsupported" %} | | Vim/Neovim | {% octicon "x" aria-label="Unsupported" %} | | {% data variables.product.prodname_copilot_cli_short %} | {% octicon "x" aria-label="Unsupported" %} | From d419bba2090c27a748dae4e4f888adf350d285c2 Mon Sep 17 00:00:00 2001 From: Tyler Chong Date: Thu, 14 Nov 2024 06:59:22 -1000 Subject: [PATCH 3/4] known issue: ghe-repl-promote when the primary is down (#53098) Co-authored-by: Vanessa --- data/release-notes/enterprise-server/3-13/0-rc1.yml | 4 ++++ data/release-notes/enterprise-server/3-13/0.yml | 6 +++++- data/release-notes/enterprise-server/3-13/2.yml | 4 ++++ data/release-notes/enterprise-server/3-13/3.yml | 5 +++++ data/release-notes/enterprise-server/3-13/4.yml | 5 +++++ data/release-notes/enterprise-server/3-13/5.yml | 4 ++++ data/release-notes/enterprise-server/3-13/6.yml | 4 ++++ data/release-notes/enterprise-server/3-14/0-rc1.yml | 4 ++++ data/release-notes/enterprise-server/3-14/0.yml | 4 ++++ data/release-notes/enterprise-server/3-14/1.yml | 4 ++++ data/release-notes/enterprise-server/3-14/2.yml | 4 ++++ data/release-notes/enterprise-server/3-14/3.yml | 6 +++++- data/release-notes/enterprise-server/3-15/0-rc1.yml | 3 +++ .../2024-11-ghe-repl-promote-primary-down.md | 8 ++++++++ 14 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 data/reusables/release-notes/2024-11-ghe-repl-promote-primary-down.md diff --git a/data/release-notes/enterprise-server/3-13/0-rc1.yml b/data/release-notes/enterprise-server/3-13/0-rc1.yml index 334fea83a8bb..b6e1a422a478 100644 --- a/data/release-notes/enterprise-server/3-13/0-rc1.yml +++ b/data/release-notes/enterprise-server/3-13/0-rc1.yml @@ -174,6 +174,10 @@ sections: When enabling log forwarding, specific service logs, including babeld, are duplicated. For more information, see "[AUTOTITLE](/admin/monitoring-activity-in-your-enterprise/exploring-user-activity-in-your-enterprise/log-forwarding#enabling-log-forwarding)." - | {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} [Updated: 2024-06-17] + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] deprecations: # https://github.com/github/releases/issues/2732 diff --git a/data/release-notes/enterprise-server/3-13/0.yml b/data/release-notes/enterprise-server/3-13/0.yml index a2ffba974f15..0192372af1c8 100644 --- a/data/release-notes/enterprise-server/3-13/0.yml +++ b/data/release-notes/enterprise-server/3-13/0.yml @@ -187,7 +187,11 @@ sections: Following an upgrade, Elasticsearch search migrations are sometimes incorrectly reported as failing in the audit log, even though the migrations completed successfully. [Updated: 2024-08-02] - | Images embedded in wiki pages may stop rendering shortly after being published. [Updated: 2024-10-16] - + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] + deprecations: # https://github.com/github/releases/issues/2732 - | diff --git a/data/release-notes/enterprise-server/3-13/2.yml b/data/release-notes/enterprise-server/3-13/2.yml index 1e91efe3f296..ba60d65a9df2 100644 --- a/data/release-notes/enterprise-server/3-13/2.yml +++ b/data/release-notes/enterprise-server/3-13/2.yml @@ -171,3 +171,7 @@ sections: Following an upgrade, Elasticsearch search migrations are sometimes incorrectly reported as failing in the audit log, even though the migrations completed successfully. [Updated: 2024-08-02] - | Images embedded in wiki pages may stop rendering shortly after being published. [Updated: 2024-10-16] + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] diff --git a/data/release-notes/enterprise-server/3-13/3.yml b/data/release-notes/enterprise-server/3-13/3.yml index 13b84b216d20..8b6039626f07 100644 --- a/data/release-notes/enterprise-server/3-13/3.yml +++ b/data/release-notes/enterprise-server/3-13/3.yml @@ -127,6 +127,11 @@ sections: {% data reusables.release-notes.2024-08-resolvconf-wont-start %} [Updated: 2024-08-26] + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] + errata: - | These release notes previously indicated as a known issue that on GitHub Enterprise Server 3.13.3 when log forwarding is enabled, some forwarded log entries may be duplicated. diff --git a/data/release-notes/enterprise-server/3-13/4.yml b/data/release-notes/enterprise-server/3-13/4.yml index de07283f7eb1..1b1f6918d64c 100644 --- a/data/release-notes/enterprise-server/3-13/4.yml +++ b/data/release-notes/enterprise-server/3-13/4.yml @@ -76,5 +76,10 @@ sections: Services may respond with a `503` status due to an out of date `haproxy` configuration. This can usually be resolved with a `ghe-config-apply` run. - | For customers using Secret Scanning, internal jobs were created and not worked that could contribute to performance issues. + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] + errata: - 'The "[Known issues](/admin/release-notes#3.13.4-known-issues)" section previously indicated that `Instance setup in AWS with IMDSv2 enforced fails if no public IP is present` is still an issue. The issue is resolved and is documented in the "[Bug fixes](/admin/release-notes#3.13.4-bugs)" section. [Updated: 2024-09-30]' diff --git a/data/release-notes/enterprise-server/3-13/5.yml b/data/release-notes/enterprise-server/3-13/5.yml index bc11898f705f..43b769f6ef40 100644 --- a/data/release-notes/enterprise-server/3-13/5.yml +++ b/data/release-notes/enterprise-server/3-13/5.yml @@ -56,3 +56,7 @@ sections: When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. - | Services may respond with a `503` status due to an out of date `haproxy` configuration. This can usually be resolved with a `ghe-config-apply` run. + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] diff --git a/data/release-notes/enterprise-server/3-13/6.yml b/data/release-notes/enterprise-server/3-13/6.yml index e4b29dbdea16..fea517a4ce16 100644 --- a/data/release-notes/enterprise-server/3-13/6.yml +++ b/data/release-notes/enterprise-server/3-13/6.yml @@ -62,3 +62,7 @@ sections: Services may respond with a `503` status due to an out of date `haproxy` configuration. This can usually be resolved with a `ghe-config-apply` run. - | Customers doing feature version upgrade to 3.13.6 may experience issues with database migrations due to data issues during database conversions. [Added: 2024-11-08] + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] diff --git a/data/release-notes/enterprise-server/3-14/0-rc1.yml b/data/release-notes/enterprise-server/3-14/0-rc1.yml index b9b246f563c4..ab55b972bb66 100644 --- a/data/release-notes/enterprise-server/3-14/0-rc1.yml +++ b/data/release-notes/enterprise-server/3-14/0-rc1.yml @@ -216,6 +216,10 @@ sections: In the header bar displayed to site administrators, some icons are not available. - | When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] deprecations: - | diff --git a/data/release-notes/enterprise-server/3-14/0.yml b/data/release-notes/enterprise-server/3-14/0.yml index f7e1af5654c2..d2b4433e2900 100644 --- a/data/release-notes/enterprise-server/3-14/0.yml +++ b/data/release-notes/enterprise-server/3-14/0.yml @@ -217,6 +217,10 @@ sections: Following an upgrade, Elasticsearch search migrations are sometimes incorrectly reported as failing in the audit log, even though the migrations completed successfully. [Updated: 2024-09-27] - | Images embedded in wiki pages may stop rendering shortly after being published. [Updated: 2024-10-16] + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] deprecations: - | diff --git a/data/release-notes/enterprise-server/3-14/1.yml b/data/release-notes/enterprise-server/3-14/1.yml index 37c23240f47b..ed9461e56fb7 100644 --- a/data/release-notes/enterprise-server/3-14/1.yml +++ b/data/release-notes/enterprise-server/3-14/1.yml @@ -76,3 +76,7 @@ sections: Services may respond with a `503` status due to an out of date `haproxy` configuration. This can usually be resolved with a `ghe-config-apply` run. - | Images embedded in wiki pages may stop rendering shortly after being published. [Updated: 2024-10-16] + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] diff --git a/data/release-notes/enterprise-server/3-14/2.yml b/data/release-notes/enterprise-server/3-14/2.yml index cd75c747023d..8d211f405120 100644 --- a/data/release-notes/enterprise-server/3-14/2.yml +++ b/data/release-notes/enterprise-server/3-14/2.yml @@ -78,3 +78,7 @@ sections: Services may respond with a `503` status due to an out of date `haproxy` configuration. This can usually be resolved with a `ghe-config-apply` run. - | Images embedded in wiki pages may stop rendering shortly after being published. [Updated: 2024-10-16] + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] diff --git a/data/release-notes/enterprise-server/3-14/3.yml b/data/release-notes/enterprise-server/3-14/3.yml index cbdcf5a787d8..169b86946d4f 100644 --- a/data/release-notes/enterprise-server/3-14/3.yml +++ b/data/release-notes/enterprise-server/3-14/3.yml @@ -7,7 +7,7 @@ sections: Packages have been updated to the latest security version. - | **HIGH**: An attacker could bypass SAML single sign-on (SSO) authentication with the optional encrypted assertions feature, allowing unauthorized provisioning of users and access to the instance, by exploiting an improper verification of cryptographic signatures vulnerability in GitHub Enterprise Server. This is a follow up fix for [CVE-2024-9487](https://www.cve.org/cverecord?id=CVE-2024-9487) to further harden the encrypted assertions feature against this type of attack. Please note that encrypted assertions are not enabled by default. Instances not utilizing SAML SSO, or utilizing SAML SSO authentication without encrypted assertions, are not impacted. Additionally, an attacker would require direct network access as well as a signed SAML response or metadata document to exploit this vulnerability. - - | + - | **HIGH**: An attacker with Enterprise Administrator access to the GitHub Enterprise Server instance could escalate privileges to SSH root access. This is achieved by exploiting the pre-receive hook environment to bypass symlink checks in the `ghe-firejail` path and execute malicious scripts. GitHub has requested CVE ID [CVE-2024-10007](https://www.cve.org/cverecord?id=CVE-2024-10007) for this vulnerability, which was reported via the [GitHub Bug Bounty program](https://bounty.github.com/). [Updated: 2024-11-07] bugs: - | @@ -76,3 +76,7 @@ sections: Services may respond with a `503` status due to an out of date `haproxy` configuration. This can usually be resolved with a `ghe-config-apply` run. - | Customers doing feature version upgrade to 3.14.3 may experience issues with database migrations due to data issues during database conversions. [Added: 2024-11-08] + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + + [Updated: 2024-11-13] diff --git a/data/release-notes/enterprise-server/3-15/0-rc1.yml b/data/release-notes/enterprise-server/3-15/0-rc1.yml index bfd4c4129222..3e5f33629004 100644 --- a/data/release-notes/enterprise-server/3-15/0-rc1.yml +++ b/data/release-notes/enterprise-server/3-15/0-rc1.yml @@ -206,6 +206,9 @@ sections: Services may respond with a `503` status due to an out of date `haproxy` configuration. This can usually be resolved with a `ghe-config-apply` run. - | Customers doing feature version upgrade to 3.14.3 may experience issues with database migrations due to data issues during database conversions. + - | + {% data reusables.release-notes.2024-11-ghe-repl-promote-primary-down %} + [Updated: 2024-11-13] closing_down: diff --git a/data/reusables/release-notes/2024-11-ghe-repl-promote-primary-down.md b/data/reusables/release-notes/2024-11-ghe-repl-promote-primary-down.md new file mode 100644 index 000000000000..4952ec3a3529 --- /dev/null +++ b/data/reusables/release-notes/2024-11-ghe-repl-promote-primary-down.md @@ -0,0 +1,8 @@ +When operating in a high availability configuration, running `ghe-repl-promote` on a replica node may fail if the original primary cannot be reached by the replica node. This is because the `ghe-repl-promote` script attempts to decommission all Elasticsearch nodes other than the promoted node, however these requests are made to the original primary node which is no longer reachable. + The error message will be similar to: + +```shell +Maintenance mode has been enabled for active replica +{"message": "No server is currently available to service your request. Sorry about that. Please try resubmitting your request and contact your local GitHub Enterprise site administrator if the problem persists."} +jq: error (at :3): Cannot index string with string "node" +``` From cd8dfd0c524bae1148b848f155d1e36f6afa122e Mon Sep 17 00:00:00 2001 From: Hector Alfaro Date: Thu, 14 Nov 2024 12:38:58 -0500 Subject: [PATCH 4/4] Add search to Copilot Cookbook (#53108) --- .../context/CategoryLandingContext.tsx | 16 +------- src/landings/components/CategoryLanding.tsx | 26 +++++++++++-- src/landings/components/CookBookFilter.tsx | 37 +++++++++++++++---- src/landings/types.ts | 18 +++++++++ 4 files changed, 71 insertions(+), 26 deletions(-) create mode 100644 src/landings/types.ts diff --git a/src/frame/components/context/CategoryLandingContext.tsx b/src/frame/components/context/CategoryLandingContext.tsx index 38360a030c06..3434ae772ba3 100644 --- a/src/frame/components/context/CategoryLandingContext.tsx +++ b/src/frame/components/context/CategoryLandingContext.tsx @@ -5,21 +5,7 @@ import { FeaturedLink, getFeaturedLinksFromReq, } from 'src/landings/components/ProductLandingContext' - -export type TocItem = { - fullPath: string - title: string - intro?: string - childTocItems?: Array<{ - fullPath: string - title: string - intro: string - octicon?: string - category?: string[] - complexity?: string[] - industry?: string[] - }> -} +import { TocItem } from '#src/landings/types.ts' export type CategoryLandingContextT = { title: string diff --git a/src/landings/components/CategoryLanding.tsx b/src/landings/components/CategoryLanding.tsx index f47a0c6d14ba..b3b4913f00c9 100644 --- a/src/landings/components/CategoryLanding.tsx +++ b/src/landings/components/CategoryLanding.tsx @@ -1,3 +1,4 @@ +import { useState } from 'react' import { useRouter } from 'next/router' import cx from 'classnames' import { CookBookArticleCard } from './CookBookArticleCard' @@ -11,6 +12,7 @@ import { useCategoryLandingContext } from 'src/frame/components/context/Category import { ClientSideRedirects } from 'src/rest/components/ClientSideRedirects' import { RestRedirect } from 'src/rest/components/RestRedirect' import { Breadcrumbs } from 'src/frame/components/page-header/Breadcrumbs' +import { ArticleCardItems } from '../types' export const CategoryLanding = () => { const router = useRouter() @@ -18,7 +20,23 @@ export const CategoryLanding = () => { const { title, intro, tocItems } = useCategoryLandingContext() // tocItems contains directories and its children, we only want the child articles - const onlyFlatItems = tocItems.flatMap((item) => item.childTocItems || []) + const onlyFlatItems: ArticleCardItems = tocItems.flatMap((item) => item.childTocItems || []) + + const [searchResults, setSearchResults] = useState(onlyFlatItems) + + const handleSearch = (query: string) => { + const results = onlyFlatItems.filter((token) => { + return Object.values(token).some((value) => { + if (typeof value === 'string') { + return value.toLowerCase().includes(query.toLowerCase()) + } else if (Array.isArray(value)) { + return value.some((item) => item.toLowerCase().includes(query.toLowerCase())) + } + return false + }) + }) + setSearchResults(results) + } return ( @@ -44,14 +62,14 @@ export const CategoryLanding = () => {
-

Explore {onlyFlatItems.length} prompt articles

+

Explore {searchResults.length} prompt articles

- +
    - {onlyFlatItems.map((item, index) => ( + {searchResults.map((item, index) => (
  • void + isSearchOpen?: boolean +} + +export const CookBookFilter = ({ onSearch, isSearchOpen }: Props) => { + const inputRef = useRef(null) + useEffect(() => { + if (isSearchOpen) { + inputRef.current?.focus() + } + }, [isSearchOpen]) -export const CookBookFilter = () => { return ( <>
    - +
    e.preventDefault()}> + { + const query = e.target.value || '' + onSearch(query) + }} + /> +
    diff --git a/src/landings/types.ts b/src/landings/types.ts new file mode 100644 index 000000000000..35a2a8fd7bd8 --- /dev/null +++ b/src/landings/types.ts @@ -0,0 +1,18 @@ +export type BaseTocItem = { + fullPath: string + title: string + intro?: string +} + +export type ChildTocItem = BaseTocItem & { + octicon?: string + category?: string[] + complexity?: string[] + industry?: string[] +} + +export type TocItem = BaseTocItem & { + childTocItems?: ChildTocItem[] +} + +export type ArticleCardItems = ChildTocItem[]