From 708226c48d74c098abc55e405911bf30b7476b4e Mon Sep 17 00:00:00 2001 From: Rachael Rose Renk <91027132+rachaelrenk@users.noreply.github.com> Date: Wed, 14 Jun 2023 14:23:42 -0600 Subject: [PATCH 01/11] [2023-06-12] GHAS self-serve trial for Enterprise Accounts (GA) (#36594) Co-authored-by: Laura Coursen --- ...ut-billing-for-github-advanced-security.md | 4 +- .../index.md | 1 + ...-up-a-trial-of-github-advanced-security.md | 41 +++++++++++++++++++ ...signing-up-for-github-advanced-security.md | 6 +-- .../github-security-features.md | 2 + .../about-github-advanced-security.md | 3 ++ .../reusables/advanced-security/ghas-trial.md | 1 + .../advanced-security/purchase-ghas.md | 3 ++ .../gated-features/secret-scanning.md | 2 + 9 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 content/billing/managing-billing-for-github-advanced-security/setting-up-a-trial-of-github-advanced-security.md create mode 100644 data/reusables/advanced-security/ghas-trial.md create mode 100644 data/reusables/advanced-security/purchase-ghas.md diff --git a/content/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security.md b/content/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security.md index c308124b18a5..c8d20b4a6ed2 100644 --- a/content/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security.md +++ b/content/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security.md @@ -56,7 +56,9 @@ You can determine how many licenses you'll need for {% data variables.product.pr {% endif %} {% ifversion ghec %} -If you use {% data variables.product.prodname_ghe_cloud %} with an enterprise account and pay with a credit card, you can purchase a {% data variables.product.prodname_GH_advanced_security %} license from your enterprise account settings. For more information, see "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/signing-up-for-github-advanced-security)." +If you use {% data variables.product.prodname_ghe_cloud %} with an enterprise account and pay with a credit card, you can purchase a {% data variables.product.prodname_GH_advanced_security %} license or start a free trial from your enterprise account settings. For more information, see "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/signing-up-for-github-advanced-security)" and "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/setting-up-a-trial-of-github-advanced-security)." + +You can not purchase {% data variables.product.prodname_GH_advanced_security %} or start a {% data variables.product.prodname_GH_advanced_security %} trial if you are currently on a {% data variables.product.prodname_ghe_cloud %} trial. If you pay by invoice, contact {% data variables.contact.contact_enterprise_sales %} to discuss licensing {% data variables.product.prodname_GH_advanced_security %} for your enterprise. diff --git a/content/billing/managing-billing-for-github-advanced-security/index.md b/content/billing/managing-billing-for-github-advanced-security/index.md index d1d9db34a2dc..51aba2fca898 100644 --- a/content/billing/managing-billing-for-github-advanced-security/index.md +++ b/content/billing/managing-billing-for-github-advanced-security/index.md @@ -11,6 +11,7 @@ versions: ghes: '*' ghec: '*' children: + - /setting-up-a-trial-of-github-advanced-security - /about-billing-for-github-advanced-security - /signing-up-for-github-advanced-security - /viewing-committer-information-for-github-advanced-security diff --git a/content/billing/managing-billing-for-github-advanced-security/setting-up-a-trial-of-github-advanced-security.md b/content/billing/managing-billing-for-github-advanced-security/setting-up-a-trial-of-github-advanced-security.md new file mode 100644 index 000000000000..074cdb2dde0d --- /dev/null +++ b/content/billing/managing-billing-for-github-advanced-security/setting-up-a-trial-of-github-advanced-security.md @@ -0,0 +1,41 @@ +--- +title: Setting up a trial of GitHub Advanced Security +intro: 'You can evaluate the extra security features that {% data variables.product.prodname_dotcom %} makes available to customers with a {% data variables.product.prodname_GH_advanced_security %} license by setting up a free trial of {% data variables.product.prodname_GH_advanced_security %}.' +product: '{% data reusables.gated-features.ghas %}' +versions: + ghec: '*' +type: how_to +topics: + - Advanced Security + - Enterprise +shortTitle: Set up an Advanced Security trial +--- + +## About trials of {% data variables.product.prodname_GH_advanced_security %} +{% data variables.product.prodname_GH_advanced_security %} provides features that help you improve and maintain the security and quality of code. For more information, see "[AUTOTITLE](/get-started/learning-about-github/about-github-advanced-security)." + + If you use {% data variables.product.prodname_ghe_cloud %} with an enterprise account and pay with a credit card, you can set up a 14-day trial to evaluate the features that come with {% data variables.product.prodname_GH_advanced_security %}, such as code scanning, secret scanning, and dependency review. During the trial, you can add any number of committers and enable {% data variables.product.prodname_GH_advanced_security %} for any number of organizations. + +## Setting up your trial of {% data variables.product.prodname_GH_advanced_security %} + +{% data reusables.enterprise-accounts.access-enterprise %} +{% data reusables.enterprise-accounts.settings-tab %} +{% data reusables.enterprise-accounts.license-tab %} +1. To the right of "{% data variables.product.prodname_GH_advanced_security %}", click **Start free trial**. +2. Click **Start trial**. + +## Finishing your trial + +You can finish your trial at any time by purchasing {% data variables.product.prodname_GH_advanced_security %}. If you haven't purchased {% data variables.product.prodname_GH_advanced_security %} by the end of the 14 days, your trial will expire. + +{% data reusables.enterprise-accounts.access-enterprise %} +{% data reusables.enterprise-accounts.settings-tab %} +{% data reusables.enterprise-accounts.license-tab %} +1. To the right of "{% data variables.product.prodname_GH_advanced_security %} trial", select the **Manage** dropdown menu and click **Purchase**. +{% data reusables.advanced-security.purchase-ghas %} + +## Further reading + +- "[AUTOTITLE](/get-started/learning-about-github/about-github-advanced-security)" +- "[AUTOTITLE](/code-security/adopting-github-advanced-security-at-scale)" +- "[AUTOTITLE](/code-security/getting-started/securing-your-organization)" diff --git a/content/billing/managing-billing-for-github-advanced-security/signing-up-for-github-advanced-security.md b/content/billing/managing-billing-for-github-advanced-security/signing-up-for-github-advanced-security.md index d2012385a378..3326cd8d4f59 100644 --- a/content/billing/managing-billing-for-github-advanced-security/signing-up-for-github-advanced-security.md +++ b/content/billing/managing-billing-for-github-advanced-security/signing-up-for-github-advanced-security.md @@ -1,6 +1,6 @@ --- title: Signing up for GitHub Advanced Security -intro: 'You can sign up for {% data variables.product.prodname_GH_advanced_security %} from your enterprise account''s settings to take advantage of extra security features that {% data variables.product.prodname_dotcom %} makes available to customers under a {% data variables.product.prodname_GH_advanced_security %} license.' +intro: "You can sign up for {% data variables.product.prodname_GH_advanced_security %} from your enterprise account's settings to take advantage of extra security features that {% data variables.product.prodname_dotcom %} makes available to customers under a {% data variables.product.prodname_GH_advanced_security %} license." permissions: 'Enterprise owners can sign up for {% data variables.product.prodname_GH_advanced_security %}.' product: '{% data reusables.gated-features.ghas-ghec %}' versions: @@ -18,9 +18,7 @@ shortTitle: Sign up for Advanced Security 1. To the right of "GitHub Advanced Security", click **Buy Advanced Security**. ![Screenshot of the {% data variables.product.prodname_GH_advanced_security %} section of the enterprise licensing screen. The "Buy Advanced Security" button is highlighted with an orange outline.](/assets/images/help/enterprises/ghas-buy-advanced-security-button.png) -2. Under "How many committers do you want to include?", enter the number of committers for which you want to purchase licenses. For more information about committer numbers, see "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security)." -3. Confirm your billing information and payment method. -4. Click **Purchase Advanced Security**. +1. {% data reusables.advanced-security.purchase-ghas %} ## Further reading * [Introduction to adopting {% data variables.product.prodname_GH_advanced_security %} at scale](/code-security/adopting-github-advanced-security-at-scale/introduction-to-adopting-github-advanced-security-at-scale) diff --git a/content/code-security/getting-started/github-security-features.md b/content/code-security/getting-started/github-security-features.md index 45973c333e25..28ba57620fea 100644 --- a/content/code-security/getting-started/github-security-features.md +++ b/content/code-security/getting-started/github-security-features.md @@ -87,6 +87,8 @@ The following {% data variables.product.prodname_GH_advanced_security %} feature {% elsif ghec %} Many {% data variables.product.prodname_GH_advanced_security %} features are available and free of charge for public repositories on {% data variables.product.prodname_dotcom_the_website %}. Organizations within an enterprise that have a {% data variables.product.prodname_GH_advanced_security %} license can use the following features on all their repositories. {% data reusables.advanced-security.more-info-ghas %} +{% data reusables.advanced-security.ghas-trial %} + {% elsif ghes %} {% data variables.product.prodname_GH_advanced_security %} features are available for enterprises with a license for {% data variables.product.prodname_GH_advanced_security %}. The features are restricted to repositories owned by an organization. {% data reusables.advanced-security.more-info-ghas %} diff --git a/content/get-started/learning-about-github/about-github-advanced-security.md b/content/get-started/learning-about-github/about-github-advanced-security.md index 9b1d0d59b2ec..49046dedce33 100644 --- a/content/get-started/learning-about-github/about-github-advanced-security.md +++ b/content/get-started/learning-about-github/about-github-advanced-security.md @@ -20,6 +20,9 @@ shortTitle: GitHub Advanced Security {% ifversion ghes %}For information about buying a license for {% data variables.product.prodname_GH_advanced_security %}, see "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security)."{% elsif ghec %}For information about buying a license for {% data variables.product.prodname_GH_advanced_security %}, see "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/signing-up-for-github-advanced-security)."{% elsif ghae %}There is no charge for {% data variables.product.prodname_GH_advanced_security %} on {% data variables.product.prodname_ghe_managed %} during the beta release.{% elsif fpt %}To purchase a {% data variables.product.prodname_GH_advanced_security %} license, you must be using {% data variables.product.prodname_enterprise %}. For information about upgrading to {% data variables.product.prodname_enterprise %} with {% data variables.product.prodname_GH_advanced_security %}, see "[AUTOTITLE](/get-started/learning-about-github/githubs-products)" and "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security)."{% endif %} + +{% ifversion ghec %}{% data reusables.advanced-security.ghas-trial %}{% endif %} + {% ifversion ghas-for-azure-devops %} {% note %} diff --git a/data/reusables/advanced-security/ghas-trial.md b/data/reusables/advanced-security/ghas-trial.md new file mode 100644 index 000000000000..9eaea6bc4b82 --- /dev/null +++ b/data/reusables/advanced-security/ghas-trial.md @@ -0,0 +1 @@ +For information about how you can try {% data variables.product.prodname_GH_advanced_security %} for free, see "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/setting-up-a-trial-of-github-advanced-security)." \ No newline at end of file diff --git a/data/reusables/advanced-security/purchase-ghas.md b/data/reusables/advanced-security/purchase-ghas.md new file mode 100644 index 000000000000..a9cc179698b0 --- /dev/null +++ b/data/reusables/advanced-security/purchase-ghas.md @@ -0,0 +1,3 @@ +1. Under "How many committers do you want to include?", enter the number of committers you want to purchase licenses for. For more information about committer numbers, see "[AUTOTITLE](/billing/managing-billing-for-github-advanced-security/about-billing-for-github-advanced-security)." +1. Confirm your billing information and payment method. +1. Click **Purchase Advanced Security**. \ No newline at end of file diff --git a/data/reusables/gated-features/secret-scanning.md b/data/reusables/gated-features/secret-scanning.md index b1141fe5c989..997b7fe033f5 100644 --- a/data/reusables/gated-features/secret-scanning.md +++ b/data/reusables/gated-features/secret-scanning.md @@ -10,3 +10,5 @@ {% data variables.product.prodname_secret_scanning_caps %} is available for organization-owned repositories in {% data variables.product.product_name %}. This is a {% data variables.product.prodname_GH_advanced_security %} feature (free during the beta release). {%- endif %} {% ifversion not ghae %}{% data reusables.advanced-security.more-info-ghas-secret-scanning %}{% endif %} + +{% ifversion ghec %}{% data reusables.advanced-security.ghas-trial %}{% endif %} From cd0b398284cfb7add4d0252a506aa2476f50f3e5 Mon Sep 17 00:00:00 2001 From: Rachael Sewell Date: Wed, 14 Jun 2023 14:12:56 -0700 Subject: [PATCH 02/11] One of objects openapi (#37826) --- src/rest/scripts/utils/get-body-params.js | 44 +++++++++++++++-------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/src/rest/scripts/utils/get-body-params.js b/src/rest/scripts/utils/get-body-params.js index 5050de2ee2d2..1fadfb4f87d6 100644 --- a/src/rest/scripts/utils/get-body-params.js +++ b/src/rest/scripts/utils/get-body-params.js @@ -106,18 +106,7 @@ export async function getBodyParams(schema, topLevel = false) { if (param.items.oneOf.every((object) => object.type === 'object')) { paramType.splice(paramType.indexOf('array'), 1, `array of objects`) param.oneOfObject = true - - for (const oneOfParam of param.items.oneOf) { - const objParam = { - type: 'object', - name: oneOfParam.title, - description: await renderContent(oneOfParam.description), - isRequired: oneOfParam.required, - childParamsGroups: [], - } - objParam.childParamsGroups.push(...(await getBodyParams(oneOfParam, false))) - childParamsGroups.push(objParam) - } + childParamsGroups.push(...(await getOneOfChildParams(param.items))) } } else { const arrayType = param.items.type @@ -129,7 +118,14 @@ export async function getBodyParams(schema, topLevel = false) { } } } else if (paramType && paramType.includes('object')) { - childParamsGroups.push(...(await getBodyParams(param, false))) + if (param && param.oneOf) { + if (param.oneOf.every((object) => object.type === 'object')) { + param.oneOfObject = true + childParamsGroups.push(...(await getOneOfChildParams(param))) + } + } else { + childParamsGroups.push(...(await getBodyParams(param, false))) + } } else if (param && param.oneOf) { // get concatenated description and type const descriptions = [] @@ -150,6 +146,8 @@ export async function getBodyParams(schema, topLevel = false) { descriptions.push({ type: childParam.type, description: childParam.description }) } } + } else { + descriptions.push({ type: param.type, description: param.description }) } } // Occasionally, there is no parent description and the description @@ -205,7 +203,7 @@ async function getTransformedParam(param, paramType, props) { if (required && required.includes(paramKey)) { paramDecorated.isRequired = true } - if (childParamsGroups && childParamsGroups.length > 0) { + if (childParamsGroups && childParamsGroups.length > 0 && !param.oneOfObject) { // Since the allOf properties can have multiple duplicate properties we want to get rid of the duplicates with the same name, but keep the // the one that has isRequired set to true. const mergedChildParamsGroups = Array.from( @@ -221,6 +219,8 @@ async function getTransformedParam(param, paramType, props) { ) paramDecorated.childParamsGroups = mergedChildParamsGroups + } else if (childParamsGroups.length > 0) { + paramDecorated.childParamsGroups = childParamsGroups } if (param.enum) { paramDecorated.enum = param.enum @@ -236,3 +236,19 @@ async function getTransformedParam(param, paramType, props) { } return paramDecorated } + +async function getOneOfChildParams(param) { + const childParamsGroups = [] + for (const oneOfParam of param.oneOf) { + const objParam = { + type: 'object', + name: oneOfParam.title, + description: await renderContent(oneOfParam.description), + isRequired: oneOfParam.required, + childParamsGroups: [], + } + objParam.childParamsGroups.push(...(await getBodyParams(oneOfParam, false))) + childParamsGroups.push(objParam) + } + return childParamsGroups +} From 2cdf9ce06c92f4d5804311ef82a4123ed65b04bf Mon Sep 17 00:00:00 2001 From: David Kunkler Date: Wed, 14 Jun 2023 14:13:21 -0700 Subject: [PATCH 03/11] Update git-lfs.md (#37827) --- data/reusables/repositories/git-lfs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/reusables/repositories/git-lfs.md b/data/reusables/repositories/git-lfs.md index b6cc85c329e2..7341761a5975 100644 --- a/data/reusables/repositories/git-lfs.md +++ b/data/reusables/repositories/git-lfs.md @@ -1 +1 @@ -If you exceed the limit of {% ifversion ghae %}200 MiB{% else %}5 GB{% endif %}, any new files added to the repository will be rejected silently by Git LFS. +If you exceed the per file limit of {% ifversion ghae %}200 MiB{% else %}5 GB{% endif %}, the file will be rejected silently by Git LFS. From 848bf9ebb2c4154ef047ed72b5cdc6c7b79d2510 Mon Sep 17 00:00:00 2001 From: hubwriter Date: Thu, 15 Jun 2023 00:34:41 +0100 Subject: [PATCH 04/11] Codespaces: add new policy article (#37109) Co-authored-by: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Co-authored-by: github-actions --- .../codespaces/maximum-minutes-timeout.png | Bin 20544 -> 26047 bytes .../maximum-value-policy-setting.png | Bin 0 -> 23439 bytes .../about-billing-for-github-codespaces.md | 4 + .../index.md | 1 + ...-github-codespaces-in-your-organization.md | 2 + .../restricting-access-to-machine-types.md | 2 + ...stricting-the-base-image-for-codespaces.md | 2 + .../restricting-the-idle-timeout-period.md | 1 + ...ion-billed-codespaces-a-user-can-create.md | 71 ++++++++++++++++++ ...ing-the-retention-period-for-codespaces.md | 1 + ...cting-the-visibility-of-forwarded-ports.md | 2 + .../codespaces/codespaces-policy-targets.md | 7 +- .../codespaces/delete-codespace-policy.md | 2 +- 13 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 assets/images/help/codespaces/maximum-value-policy-setting.png create mode 100644 content/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create.md diff --git a/assets/images/help/codespaces/maximum-minutes-timeout.png b/assets/images/help/codespaces/maximum-minutes-timeout.png index ff8efdc2a9c56a6855b54ae922d208e09d7f4f01..5f577b82fb312b67973f0f113da22ce54e4eda59 100644 GIT binary patch literal 26047 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 M8iJ72z%};&01wm&IRF3v literal 20544 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 fsWx)40o^s@0=W{V2_(aQ=S*=Y<_1 literal 0 HcmV?d00001 diff --git a/content/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces.md b/content/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces.md index d4e10891c704..f59b1c9a6e45 100644 --- a/content/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces.md +++ b/content/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces.md @@ -203,6 +203,10 @@ If a machine type that has more resources is chosen, this will affect the per-ho Organization owners can create a policy to limit the choice of machine types available to users for codespaces that are billed to an organization or enterprise account. For more information, see "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types)." +## Limiting the number of organization-owned codespaces + +Organization owners can limit the number of codespaces that people can create, where the organization will be billed for the codespace. This can help to reduce storage charges for the organization. For more information, see "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create)." + ## How billing is handled for forked repositories Usage of codespaces created from a forked repository will be billed to your personal account unless the upstream (or parent) repository is in an organization that has allowed you - as a member, or outside collaborator, of the organization - to use codespaces at the organization's expense. diff --git a/content/codespaces/managing-codespaces-for-your-organization/index.md b/content/codespaces/managing-codespaces-for-your-organization/index.md index d65a8957a368..e4b5bf22b00d 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/index.md +++ b/content/codespaces/managing-codespaces-for-your-organization/index.md @@ -16,6 +16,7 @@ children: - /managing-repository-access-for-your-organizations-codespaces - /reviewing-your-organizations-audit-logs-for-github-codespaces - /restricting-access-to-machine-types + - /restricting-the-number-of-organization-billed-codespaces-a-user-can-create - /restricting-the-base-image-for-codespaces - /restricting-the-visibility-of-forwarded-ports - /restricting-the-idle-timeout-period diff --git a/content/codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization.md b/content/codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization.md index 455438b1faa9..82d46c323a9f 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization.md +++ b/content/codespaces/managing-codespaces-for-your-organization/managing-the-cost-of-github-codespaces-in-your-organization.md @@ -44,6 +44,8 @@ You can disable all use of {% data variables.product.prodname_github_codespaces {% data reusables.codespaces.codespaces-disabling-org-billing %} +You can limit the number of codespaces that people can create, where the organization will be billed for the codespace. This can help to reduce codespace storage charges for your organization. For more information, see "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create)." + You can configure which repositories can be accessed from codespaces created for a particular repository. For more information, see "[AUTOTITLE](/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces)." You can limit the choice of types of machine that are available for codespaces created from repositories owned by your organization. This allows you to prevent people using overly resourced machines for their codespaces, and incurring unnecessary charges. For more information, see "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types)." diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types.md index b8d55b0f8e54..086bc986f0a4 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types.md @@ -57,8 +57,10 @@ If you add an organization-wide policy, you should set it to the largest choice ![Screenshot of the "Allowed values" dropdown with options for four machine types. The options for 2-core and 4-core machines are selected.](/assets/images/help/codespaces/edit-machine-constraint.png) +1. Click outside of the dialog box to close it. {% data reusables.codespaces.codespaces-policy-targets %} 1. If you want to add another constraint to the policy, click **Add constraint** and choose another constraint. For information about other constraints, see: + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period)" diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces.md index f5566656d479..2ca9d130cea3 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces.md @@ -67,9 +67,11 @@ For example, you could create an organization-wide policy that restricts the bas 1. Click {% octicon "plus" aria-label="Add button" %} to add the value. 1. If required, repeat the previous two steps to add more image URLs. +1. Click outside of the dialog box to close it. {% data reusables.codespaces.codespaces-policy-targets %} 1. If you want to add another constraint to the policy, click **Add constraint** and choose another constraint. For information about other constraints, see: * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types)" + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces)" diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period.md index a1a44aa8a7fd..3b2d7ef64eea 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period.md @@ -56,6 +56,7 @@ If you add an organization-wide policy with a timeout constraint, you should set {% data reusables.codespaces.codespaces-policy-targets %} 1. If you want to add another constraint to the policy, click **Add constraint** and choose another constraint. For information about other constraints, see: * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types)" + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces)" diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create.md new file mode 100644 index 000000000000..9056acca8e41 --- /dev/null +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create.md @@ -0,0 +1,71 @@ +--- +title: Restricting the number of organization-billed codespaces a user can create +shortTitle: Restrict codespace creation +intro: You can specify the maximum number of codespaces that any member of your organization, or collaborator, can create for the repositories in your organization. +permissions: 'To manage this constraint for an organization, you must be an owner of the organization.' +versions: + fpt: '*' + ghec: '*' +type: how_to +topics: + - Codespaces +product: '{% data reusables.gated-features.codespaces-org %}' +--- + +## Overview + +By default, if organization members, or collaborators, are permitted to create codespaces that are billable to your organization, they can create multiple such codespaces. The number of organization-billed codespaces someone can create is governed by a limit to the total number of codespaces that they can create across all repositories they can access. This limit is set by {% data variables.product.company_short %}. + +As an organization owner, you can restrict the number of codespaces that each user can create, where the costs of the codespace are billable to the organization. This can help to reduce the overall cost of {% data variables.product.prodname_github_codespaces %} to the organization, as there is a charge for codespace storage. For more information, see "[AUTOTITLE](/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#about-billing-for-storage-usage)." + +To restrict the maximum number of organization-billed codespaces that users can create, you create a policy in the {% data variables.product.prodname_codespaces %} settings for your organization. For example, if you set the maximum to 2, users who already have 2 active or stopped codespaces that are billed to your organization will have to delete one of these before they can create a new codespace that's billed to the organization. + +This setting does not restrict users from creating codespaces that are not billed to your organization. For example, they can create additional codespaces for public repositories, using their personal {% data variables.product.prodname_codespaces %} usage allowance. However, users who are permitted to create organization-billed codespaces, but have reached the limit for such codespaces, cannot choose to create a codespace for an organization-owned repository using their personal included allowance. + +For information about the free use of {% data variables.product.prodname_github_codespaces %} for personal accounts, see "[AUTOTITLE](/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts)." For information on how to choose who can create codespaces that are billed to your organization, see "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/enabling-github-codespaces-for-your-organization#choose-who-can-create-codespaces-that-are-billed-to-your-organization)." + +Policies with the "Maximum codespaces per user" constraint are applied to every repository in your organization. You can't, therefore, add this constraint to an existing policy that is configured to apply only to selected repositories. + +## Adding a policy to define the maximum codespaces per user + +{% data reusables.profile.access_org %} +{% data reusables.profile.org_settings %} +{% data reusables.codespaces.codespaces-org-policies %} +1. Click **Add constraint** and choose **Maximum codespaces per user**. +1. Click {% octicon "pencil" aria-label="Edit policy" %} to edit the constraint. +1. In the "Maximum value" field, enter the maximum number of organization-billed codespaces that each user can create. + + ![Screenshot of the 'Maximum value' dialog with the value '2' being entered, and 'Cancel' and 'Save' buttons.](/assets/images/help/codespaces/maximum-value-policy-setting.png) + +1. Click **Save**. +1. If you want to add another constraint to the policy, click **Add constraint** and choose another constraint. For information about other constraints, see: + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types)" + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces)" + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports)" + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period)" + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces)" + + {% note %} + + **Note**: When you add a constraint to a policy that already contains the "Maximum codespaces per user" constraint, you won't be able to restrict the additional constraint to specific repositories, as the "Maximum codespaces per user" constraint applies to all repositories in the organization. + + {% endnote %} + +1. After you've finished adding constraints to your policy, click **Save**. + +The policy is applied when anyone attempts to create a new codespace that is billable to your organization. + +## Editing a policy + +You can edit an existing policy. For example, you may want to add or remove constraints to or from a policy. + +1. Display the "Codespace policies" page. For more information, see "[Adding a policy to define the maximum codespaces per user](#adding-a-policy-to-define-the-maximum-codespaces-per-user)." +1. Click the name of the policy you want to edit. +1. Beside the "Maximum codespaces per user" constraint, click {% octicon "pencil" aria-label="Edit policy" %}. +1. Edit the maximum number of codespaces. +1. Click **Save**. + +## Deleting a policy + +1. Display the "Codespace policies" page. For more information, see "[Adding a policy to define the maximum codespaces per user](#adding-a-policy-to-define-the-maximum-codespaces-per-user)." +1. Click {% octicon "trash" aria-label="The trash can icon" %} to the right of the policy you want to delete. diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces.md index ffdb111aba3b..ae71428e5ed5 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces.md @@ -57,6 +57,7 @@ If you add an organization-wide policy with a retention constraint, you should s {% data reusables.codespaces.codespaces-policy-targets %} 1. If you want to add another constraint to the policy, click **Add constraint** and choose another constraint. For information about other constraints, see: * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types)" + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period)" diff --git a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports.md b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports.md index f93df0777346..3ddf021ec0e5 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports.md +++ b/content/codespaces/managing-codespaces-for-your-organization/restricting-the-visibility-of-forwarded-ports.md @@ -49,9 +49,11 @@ If you add an organization-wide policy, you should set it to the most lenient vi ![Screenshot of the "Allowed values" dropdown, with two checkboxes. "Org" is selected and "Public" is cleared.](/assets/images/help/codespaces/choose-port-visibility-options.png) +1. Click outside of the dialog box to close it. {% data reusables.codespaces.codespaces-policy-targets %} 1. If you want to add another constraint to the policy, click **Add constraint** and choose another constraint. For information about other constraints, see: * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-access-to-machine-types)" + * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-number-of-organization-billed-codespaces-a-user-can-create)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-base-image-for-codespaces)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-idle-timeout-period)" * "[AUTOTITLE](/codespaces/managing-codespaces-for-your-organization/restricting-the-retention-period-for-codespaces)" diff --git a/data/reusables/codespaces/codespaces-policy-targets.md b/data/reusables/codespaces/codespaces-policy-targets.md index 31d8bb769698..ee684ed9d133 100644 --- a/data/reusables/codespaces/codespaces-policy-targets.md +++ b/data/reusables/codespaces/codespaces-policy-targets.md @@ -1,8 +1,13 @@ -1. Click outside of the dialog box to close it. 1. By default the policy is set to apply to all repositories, if you want it to apply only to some of the repositories in your organization, click **All repositories** and then click **Selected repositories** in the dropdown menu. ![Screenshot of the repository selection dropdown, showing the options "All repositories" and "Selected repositories."](/assets/images/help/codespaces/selected-repositories.png) + {% note %} + + **Note**: If you're adding a constraint to a policy that already contains the "Maximum codespaces per user" constraint, you won't be able to apply the policy to selected repositories. This is because the "Maximum codespaces per user" constraint always applies to all repositories in the organization. + + {% endnote %} + With **Selected repositories** selected: 1. Click {% octicon "gear" aria-label="The settings icon" %}. diff --git a/data/reusables/codespaces/delete-codespace-policy.md b/data/reusables/codespaces/delete-codespace-policy.md index c38e65bc798a..f9b9b08b6539 100644 --- a/data/reusables/codespaces/delete-codespace-policy.md +++ b/data/reusables/codespaces/delete-codespace-policy.md @@ -1,3 +1,3 @@ -1. Click the delete button to the right of the policy you want to delete. +1. Click {% octicon "trash" aria-label="Delete YOUR-POLICY-NAME" %} to the right of the policy you want to delete. ![Screenshot of a policy with the delete button (a trash can icon) highlighted with a dark orange outline.](/assets/images/help/codespaces/policy-delete.png) From c6fa87514cdad7a11f4bf8bf9bd79dd94aa217d0 Mon Sep 17 00:00:00 2001 From: Hirsch Singhal <1666363+hpsin@users.noreply.github.com> Date: Wed, 14 Jun 2023 17:36:56 -0700 Subject: [PATCH 05/11] Add CAPTCHA details to 2fa setup (#37825) Co-authored-by: Siara <108543037+SiaraMist@users.noreply.github.com> Co-authored-by: Jenni Christensen <97056108+dihydroJenoxide@users.noreply.github.com> --- .../configuring-two-factor-authentication.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication.md b/content/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication.md index d610e8e7ad3f..dc02397ab4b0 100644 --- a/content/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication.md +++ b/content/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication.md @@ -107,8 +107,10 @@ Before using this method, be sure that you can receive text messages. Carrier ra {% data reusables.user-settings.security %} {% data reusables.two_fa.enable-two-factor-authentication %} 1. At the bottom of the page, next to "SMS authentication", click **Select**. +1. Complete the CAPTCHA challenge, which helps protect against spam and abuse. 1. Under "Setup SMS authentication", select your country code and type your mobile phone number, including the area code. When your information is correct, click **Send authentication code**. 1. You'll receive a text message with a security code. On {% data variables.product.product_name %}, type the code into the field under "Verify the code sent to your phone" and click **Continue**. + - If you need to edit the phone number you entered, you'll need to complete another CAPTCHA challenge. {% data reusables.two_fa.save_your_recovery_codes_during_2fa_setup %} {% data reusables.two_fa.backup_options_during_2fa_enrollment %} From 9af5beec9c35f951dfbd3e88ef7f4d6c47c1f63b Mon Sep 17 00:00:00 2001 From: Fabian Aguilar Gomez Date: Thu, 15 Jun 2023 04:59:01 -0500 Subject: [PATCH 06/11] Pages custom workflow docs (#37298) Co-authored-by: github-actions Co-authored-by: Sophie <29382425+sophietheking@users.noreply.github.com> --- .../index.md | 1 + ...sing-custom-workflows-with-github-pages.md | 141 ++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 content/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages.md diff --git a/content/pages/getting-started-with-github-pages/index.md b/content/pages/getting-started-with-github-pages/index.md index 63025ac74c24..50cb7be1b561 100644 --- a/content/pages/getting-started-with-github-pages/index.md +++ b/content/pages/getting-started-with-github-pages/index.md @@ -17,6 +17,7 @@ topics: children: - /about-github-pages - /creating-a-github-pages-site + - /using-custom-workflows-with-github-pages - /configuring-a-publishing-source-for-your-github-pages-site - /deleting-a-github-pages-site - /unpublishing-a-github-pages-site diff --git a/content/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages.md b/content/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages.md new file mode 100644 index 000000000000..a6fc1f4a741b --- /dev/null +++ b/content/pages/getting-started-with-github-pages/using-custom-workflows-with-github-pages.md @@ -0,0 +1,141 @@ +--- +title: Using custom workflows with GitHub Pages +intro: 'You can take advantage of using {% data variables.product.prodname_actions %} and {% data variables.product.prodname_pages %} by creating a workflow file or choosing from the predefined workflows.' +product: '{% data reusables.gated-features.pages %}' +versions: + fpt: '*' + ghes: '>= 3.7' + ghec: '*' +topics: + - Pages +shortTitle: Use custom workflows +--- + +## About custom workflows + +Custom workflows allow {% data variables.product.prodname_pages %} sites to be built via the use of {% data variables.product.prodname_actions %}. You can still select the branch you would like to use via the workflow file, but you are able to do much more with the use of custom workflows. To start using custom workflows you must first enable them for your current repository. For more information, see "[AUTOTITLE](/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow)." + +## Configuring the `configure-pages` action + +{% data variables.product.prodname_actions %} enables the use of {% data variables.product.prodname_pages %} through the `configure-pages` action, which also lets you gather different metadata about a website. For more information, see the [`configure-pages`](https://github.com/marketplace/actions/configure-github-pages) action. + +To use the action place this snippet under your `jobs` in the desired workflow. + +```yaml +- name: Configure GitHub Pages + uses: actions/configure-pages@v3 +``` + +This action helps support deployment from any static site generator to {% data variables.product.prodname_pages %}. To make this process less repetitive you can use starter workflows for some of the most widely used static site generators. For more information, see "[AUTOTITLE](/actions/using-workflows/using-starter-workflows)." + +## Configuring the `upload-pages-artifact` action + +The `upload-pages-artifact` actions enables you to package and upload artifacts. The {% data variables.product.prodname_pages %} artifact should be a compressed `gzip` archive containing a single `tar` file. The `tar` file must be under 10GB in size and should not contain any symbolic or hard links. For more information, see the [`upload-pages-artifact`](https://github.com/marketplace/actions/upload-github-pages-artifact) action. + +To use the action in your current workflow place this snippet under `jobs`. + +```yaml +- name: Upload Github Pages artifact + uses: actions/upload-pages-artifact@v1 +``` + +## Deploying {% data variables.product.prodname_pages %} artifacts + +The `deploy-pages` action handles the necessary setup for deploying artifacts. To ensure proper functionality, the following requirements should be met: + +- The job must have a minimum of `pages: write` and `id-token: write` permissions. +- The `needs` parameter must be set to the `id` of the build step. Not setting this parameter may result in an independent deployment that continuously searches for an artifact that hasn't been created. +- An `environment` must be established to enforce branch/environment protection rules. The default environment is `github-pages`. +- To specify the URL of the page as an output, utilize the `url:` field. + +For more information, see the [`deploy-pages`](https://github.com/marketplace/actions/deploy-github-pages-site) action. + +```yaml +... + +jobs: + deploy: + permissions: + contents: read + pages: write + id-token: write + runs-on: ubuntu-latest + needs: jekyll-build + environment: github-pages + url: ${{steps.deployment.outputs.page_url}} + steps: + - name: Deploy artifact + id: deployment + uses: actions/deploy-pages@v1 +... +``` + +## Linking separate build and deploy jobs + +You can link your `build` and `deploy` jobs in a single workflow file, eliminating the need to create two separate files to get the same result. To get started on your workflow file, under `jobs` you can define a `build` and `deploy` job to execute your jobs. + +```yaml +... + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: {% data reusables.actions.action-checkout %} + - name: Setup Pages + id: pages + uses: actions/configure-pages@v3 + - name: Build with Jekyll + uses: actions/jekyll-build-pages@v1 + with: + source: ./ + destination: ./_site + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{steps.deployment.outputs.page_url}} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 +... +``` + +In certain cases, you might choose to combine everything into a single job, especially if there is no need for a build process. Consequently, you would solely focus on the deployment step. + +```yaml +... + +jobs: + # Single deploy job no building + deploy: + environment: + name: github-pages + url: ${{steps.deployment.outputs.page_url}} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: {% data reusables.actions.action-checkout %} + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Upload Artifact + uses: actions/upload-pages-artifact@v3 + with: + # upload entire directory + path: '.' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 + +... +``` + +You can define your jobs to be run on different runners, sequentially, or in parallel. For more information, see "[AUTOTITLE](/actions/using-jobs)." From 1184aa92a5a6a1cc1e0ecbd05a2a9db4191d4952 Mon Sep 17 00:00:00 2001 From: Tony Truong Date: Thu, 15 Jun 2023 16:05:33 +0200 Subject: [PATCH 07/11] adding updated docs for ghes-manage and management console (#37701) Co-authored-by: Kevin Heis Co-authored-by: Matt Pollard --- content/rest/enterprise-admin/manage-ghes.md | 15 +++++++++++++ .../enterprise-admin/management-console.md | 18 +++++++++++++--- src/rest/components/get-rest-code-samples.ts | 21 ++++++++++++------- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/content/rest/enterprise-admin/manage-ghes.md b/content/rest/enterprise-admin/manage-ghes.md index a2cd5bef46eb..2af80af9ba2a 100644 --- a/content/rest/enterprise-admin/manage-ghes.md +++ b/content/rest/enterprise-admin/manage-ghes.md @@ -26,4 +26,19 @@ To authenticate requests to endpoints for the Manage {% data variables.product.p curl -L -u "api_key:ROOT-SITE-ADMINISTRATOR-PASSWORD" 'http(s)://HOSTNAME:ADMINISTRATION-PORT/manage' ``` +### Query parameters + +By default, the response includes information from about all configured nodes for the instance. On an instance with multiple nodes, the details originate from `/data/user/common/cluster.conf`. You can use the following query parameters to filter the response for information about specific nodes. + +| Query parameter | Description | +| :- | :- | +| `uuid` | Unique identifier for the node. | +| `cluster_role` | For nodes in a cluster, the roles that apply to the node. For more information, see "[AUTOTITLE)(/admin/enterprise-management/configuring-clustering/about-cluster-nodes)." | + +You can specify multiple values for the query parameter by delimiting the values with a comma. For example, the following request uses curl to return any nodes with the `web-server` or `storage-server` role. + +```shell +curl -L -u "api_key:ROOT-SITE-ADMINISTRATOR-PASSWORD" 'http(s)://HOSTNAME:ADMINISTRATION-PORT/manage/v1/config/nodes?cluster_role=WebServer,StorageServer' +``` + diff --git a/content/rest/enterprise-admin/management-console.md b/content/rest/enterprise-admin/management-console.md index 423c2f6debdd..b7d30f95485b 100644 --- a/content/rest/enterprise-admin/management-console.md +++ b/content/rest/enterprise-admin/management-console.md @@ -22,9 +22,9 @@ You may also need to add the [`-k` flag](http://curl.haxx.se/docs/manpage.html#- {% endtip %} -### Authentication +### Authentication {% ifversion enterprise-management-console-multi-user-auth %}as the root site administrator{% endif %} -You need to pass your [Management Console password](/admin/configuration/administering-your-instance-from-the-management-console) as an authentication token to every endpoint in this category except ["Create a license"](#create-a-github-enterprise-server-license). +You need to pass your [{% ifversion enterprise-management-console-multi-user-auth %}root site administrator{% else %}{% data variables.enterprise.management_console %}{% endif %} password](/admin/configuration/administering-your-instance-from-the-management-console/managing-access-to-the-management-console) as an authentication token to every endpoint in this category except ["Create a license"](#create-a-github-enterprise-server-license). Use the `api_key` parameter to send this token with each request. For example: @@ -38,7 +38,19 @@ You can also use standard HTTP authentication to send this token. For example: $ curl -L -u "api_key:YOUR_PASSWORD" 'https://HOSTNAME:ADMIN-PORT/setup/api' ``` -{% data reusables.user-settings.enterprise-admin-api-classic-pat-only %} +{% ifversion enterprise-management-console-multi-user-auth %} + +### Authentication as a {% data variables.enterprise.management_console %} user + +[Management Console user accounts](/admin/configuration/administering-your-instance-from-the-management-console/managing-access-to-the-management-console#management-console-user) can also authenticate to access this endpoint. + +To authenticate with the password for a {% data variables.enterprise.management_console %} user account, use standard HTTP authentication. In the following example, replace YOUR_USER_NAME and YOUR_PASSWORD with the account's user name and password. + +```shell +$ curl -L -u "YOUR_USER_NAME:YOUR_PASSWORD" 'https://HOSTNAME:ADMIN-PORT/setup/api' +``` + +{% endif %} diff --git a/src/rest/components/get-rest-code-samples.ts b/src/rest/components/get-rest-code-samples.ts index f001ee977c81..1a2ee274eca6 100644 --- a/src/rest/components/get-rest-code-samples.ts +++ b/src/rest/components/get-rest-code-samples.ts @@ -70,17 +70,22 @@ export function getShellExample(operation: Operation, codeSample: CodeSample) { } } - let authHeader = '-H "Authorization: Bearer "' - if (operation.subcategory === 'management-console') { + let authHeader + let apiVersionHeader + + if (operation.subcategory === 'management-console' || operation.subcategory === 'manage-ghes') { authHeader = '-u "api_key:your-password"' + apiVersionHeader = '' + } else { + authHeader = '-H "Authorization: Bearer "' + + apiVersionHeader = + allVersions[currentVersion].apiVersions.length > 0 && + allVersions[currentVersion].latestApiVersion + ? `\\\n -H "X-GitHub-Api-Version: ${allVersions[currentVersion].latestApiVersion}"` + : '' } - const apiVersionHeader = - allVersions[currentVersion].apiVersions.length > 0 && - allVersions[currentVersion].latestApiVersion - ? `\\\n -H "X-GitHub-Api-Version: ${allVersions[currentVersion].latestApiVersion}"` - : '' - const args = [ operation.verb !== 'get' && `-X ${operation.verb.toUpperCase()}`, `-H "Accept: ${defaultAcceptHeader}" \\\n ${authHeader}${apiVersionHeader}`, From 74e042f1f387e9d84d85aba661389729522603e1 Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Thu, 15 Jun 2023 16:29:34 +0200 Subject: [PATCH 08/11] [Improvement] Update description of Projects (#37883) --- .../learning-about-projects/about-projects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects.md b/content/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects.md index 09a8e190998b..5a0085a845ee 100644 --- a/content/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects.md +++ b/content/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects.md @@ -15,7 +15,7 @@ topics: ## About {% data variables.product.prodname_projects_v2 %} -A project is an adaptable spreadsheet that integrates with your issues and pull requests on {% data variables.product.company_short %} to help you plan and track your work effectively. You can create and customize multiple views by filtering, sorting, grouping your issues and pull requests,{% ifversion projects-v2-insights %} visualize work with configurable charts,{% endif %} and add custom fields to track metadata specific to your team. Rather than enforcing a specific methodology, a project provides flexible features you can customize to your team’s needs and processes. +A project is an adaptable spreadsheet, task-board, and road map that integrates with your issues and pull requests on {% data variables.product.company_short %} to help you plan and track your work effectively. You can create and customize multiple views by filtering, sorting, grouping your issues and pull requests,{% ifversion projects-v2-insights %} visualize work with configurable charts,{% endif %} and add custom fields to track metadata specific to your team. Rather than enforcing a specific methodology, a project provides flexible features you can customize to your team’s needs and processes. ### Staying up-to-date From 80cd66b787929f37dd078389b7415ce0b752de21 Mon Sep 17 00:00:00 2001 From: docubot <67483024+docubot@users.noreply.github.com> Date: Thu, 15 Jun 2023 10:39:01 -0400 Subject: [PATCH 09/11] Update OpenAPI Description (#37892) Co-authored-by: Matt Pollard --- src/github-apps/lib/config.json | 2 +- src/rest/data/fpt-2022-11-28/schema.json | 22 ++++++++++++------- src/rest/data/ghae/schema.json | 12 +++++----- src/rest/data/ghec-2022-11-28/schema.json | 22 ++++++++++++------- src/rest/data/ghes-3.4/schema.json | 12 +++++----- src/rest/data/ghes-3.5/schema.json | 4 ++-- src/rest/data/ghes-3.6/schema.json | 4 ++-- src/rest/data/ghes-3.7/schema.json | 4 ++-- src/rest/data/ghes-3.8/schema.json | 4 ++-- src/rest/data/ghes-3.9-2022-11-28/schema.json | 4 ++-- src/rest/lib/config.json | 2 +- src/webhooks/data/fpt/schema.json | 2 +- src/webhooks/data/ghae/schema.json | 2 +- src/webhooks/data/ghec/schema.json | 2 +- src/webhooks/data/ghes-3.7/schema.json | 2 +- src/webhooks/data/ghes-3.8/schema.json | 2 +- src/webhooks/data/ghes-3.9/schema.json | 2 +- src/webhooks/lib/config.json | 2 +- 18 files changed, 59 insertions(+), 47 deletions(-) diff --git a/src/github-apps/lib/config.json b/src/github-apps/lib/config.json index c48eaa1b8b2c..bfc2ffb0a265 100644 --- a/src/github-apps/lib/config.json +++ b/src/github-apps/lib/config.json @@ -7,5 +7,5 @@ "2022-11-28" ] }, - "sha": "a690f58e01c4ad78d5541f2cf795b53712b25d84" + "sha": "bff312ae07f0fca06be8c742d9f3f836a7b8bfab" } \ No newline at end of file diff --git a/src/rest/data/fpt-2022-11-28/schema.json b/src/rest/data/fpt-2022-11-28/schema.json index bda863162354..ccd5ba184cb8 100644 --- a/src/rest/data/fpt-2022-11-28/schema.json +++ b/src/rest/data/fpt-2022-11-28/schema.json @@ -163385,6 +163385,12 @@ "default", "extended" ] + }, + { + "type": "array of strings", + "name": "languages", + "in": "body", + "description": "

CodeQL languages to be analyzed. Supported values are: c-cpp, csharp, go, java-kotlin, javascript-typescript, python, and ruby.

" } ], "enabledForGitHubApps": true, @@ -163813,8 +163819,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -163915,8 +163921,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -359406,8 +359412,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns a 204 if the given user is blocked by the given organization. Returns a 404 if the organization is not blocking the user, or if the user account has been identified as spam by GitHub.

", "statusCodes": [ { "httpStatusCode": "204", @@ -359465,8 +359471,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Blocks the given user on behalf of the specified organization and returns a 204. If the organization cannot block the given user a 422 is returned.

", "statusCodes": [ { "httpStatusCode": "204", @@ -359524,8 +359530,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Unblocks the given user on behalf of the specified organization.

", "statusCodes": [ { "httpStatusCode": "204", @@ -542338,8 +542344,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns a 204 if the given user is blocked by the authenticated user. Returns a 404 if the given user is not blocked by the authenticated user, or if the given user account has been identified as spam by GitHub.

", "statusCodes": [ { "httpStatusCode": "204", @@ -542399,8 +542405,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Blocks the given user and returns a 204. If the authenticated user cannot block the given user a 422 is returned.

", "statusCodes": [ { "httpStatusCode": "204", @@ -542464,8 +542470,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Unblocks the given user and returns a 204.

", "statusCodes": [ { "httpStatusCode": "204", diff --git a/src/rest/data/ghae/schema.json b/src/rest/data/ghae/schema.json index 89a8b9a375ee..1a54cc753382 100644 --- a/src/rest/data/ghae/schema.json +++ b/src/rest/data/ghae/schema.json @@ -116496,8 +116496,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -116598,8 +116598,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -369582,7 +369582,7 @@ } ], "previews": [], - "descriptionHTML": "

Lists secret scanning alerts for a private repository, from newest to oldest. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", + "descriptionHTML": "

Lists secret scanning alerts for an eligible repository, from newest to oldest. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -369927,7 +369927,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a single secret scanning alert detected in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", + "descriptionHTML": "

Gets a single secret scanning alert detected in an eligible repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -370335,7 +370335,7 @@ } ], "previews": [], - "descriptionHTML": "

Updates the status of a secret scanning alert in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts write permission to use this endpoint.

", + "descriptionHTML": "

Updates the status of a secret scanning alert in an eligible repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts write permission to use this endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -370614,7 +370614,7 @@ } ], "previews": [], - "descriptionHTML": "

Lists all locations for a given secret scanning alert for a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", + "descriptionHTML": "

Lists all locations for a given secret scanning alert for an eligible repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghec-2022-11-28/schema.json b/src/rest/data/ghec-2022-11-28/schema.json index 997afb9f946d..782cab93ce05 100644 --- a/src/rest/data/ghec-2022-11-28/schema.json +++ b/src/rest/data/ghec-2022-11-28/schema.json @@ -175072,6 +175072,12 @@ "default", "extended" ] + }, + { + "type": "array of strings", + "name": "languages", + "in": "body", + "description": "

CodeQL languages to be analyzed. Supported values are: c-cpp, csharp, go, java-kotlin, javascript-typescript, python, and ruby.

" } ], "enabledForGitHubApps": true, @@ -175500,8 +175506,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -175602,8 +175608,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -373533,8 +373539,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns a 204 if the given user is blocked by the given organization. Returns a 404 if the organization is not blocking the user, or if the user account has been identified as spam by GitHub.

", "statusCodes": [ { "httpStatusCode": "204", @@ -373592,8 +373598,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Blocks the given user on behalf of the specified organization and returns a 204. If the organization cannot block the given user a 422 is returned.

", "statusCodes": [ { "httpStatusCode": "204", @@ -373651,8 +373657,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Unblocks the given user on behalf of the specified organization.

", "statusCodes": [ { "httpStatusCode": "204", @@ -563427,8 +563433,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns a 204 if the given user is blocked by the authenticated user. Returns a 404 if the given user is not blocked by the authenticated user, or if the given user account has been identified as spam by GitHub.

", "statusCodes": [ { "httpStatusCode": "204", @@ -563488,8 +563494,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Blocks the given user and returns a 204. If the authenticated user cannot block the given user a 422 is returned.

", "statusCodes": [ { "httpStatusCode": "204", @@ -563553,8 +563559,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Unblocks the given user and returns a 204.

", "statusCodes": [ { "httpStatusCode": "204", diff --git a/src/rest/data/ghes-3.4/schema.json b/src/rest/data/ghes-3.4/schema.json index 042dc1175240..68b6e99cdcff 100644 --- a/src/rest/data/ghes-3.4/schema.json +++ b/src/rest/data/ghes-3.4/schema.json @@ -142565,8 +142565,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -142667,8 +142667,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -412510,7 +412510,7 @@ } ], "previews": [], - "descriptionHTML": "

Lists secret scanning alerts for a private repository, from newest to oldest. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", + "descriptionHTML": "

Lists secret scanning alerts for an eligible repository, from newest to oldest. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -412848,7 +412848,7 @@ } ], "previews": [], - "descriptionHTML": "

Gets a single secret scanning alert detected in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", + "descriptionHTML": "

Gets a single secret scanning alert detected in an eligible repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -413242,7 +413242,7 @@ } ], "previews": [], - "descriptionHTML": "

Updates the status of a secret scanning alert in a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts write permission to use this endpoint.

", + "descriptionHTML": "

Updates the status of a secret scanning alert in an eligible repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts write permission to use this endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -413473,7 +413473,7 @@ } ], "previews": [], - "descriptionHTML": "

Lists all locations for a given secret scanning alert for a private repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", + "descriptionHTML": "

Lists all locations for a given secret scanning alert for an eligible repository. To use this endpoint, you must be an administrator for the repository or organization, and you must use an access token with the repo scope or security_events scope.

\n

GitHub Apps must have the secret_scanning_alerts read permission to use this endpoint.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.5/schema.json b/src/rest/data/ghes-3.5/schema.json index 55db3183463f..2c354f260d7c 100644 --- a/src/rest/data/ghes-3.5/schema.json +++ b/src/rest/data/ghes-3.5/schema.json @@ -149787,8 +149787,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -149889,8 +149889,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.6/schema.json b/src/rest/data/ghes-3.6/schema.json index 9e10e845352b..4d1f9ad34892 100644 --- a/src/rest/data/ghes-3.6/schema.json +++ b/src/rest/data/ghes-3.6/schema.json @@ -152380,8 +152380,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -152482,8 +152482,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.7/schema.json b/src/rest/data/ghes-3.7/schema.json index aecbac8fd515..5fed5a296114 100644 --- a/src/rest/data/ghes-3.7/schema.json +++ b/src/rest/data/ghes-3.7/schema.json @@ -154800,8 +154800,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -154902,8 +154902,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.8/schema.json b/src/rest/data/ghes-3.8/schema.json index cafb357c3df8..6e18cd9c43a9 100644 --- a/src/rest/data/ghes-3.8/schema.json +++ b/src/rest/data/ghes-3.8/schema.json @@ -169182,8 +169182,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -169284,8 +169284,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.9-2022-11-28/schema.json b/src/rest/data/ghes-3.9-2022-11-28/schema.json index d0040a3c0087..1f441fd75205 100644 --- a/src/rest/data/ghes-3.9-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.9-2022-11-28/schema.json @@ -169859,8 +169859,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns array of all GitHub's codes of conduct.

", "statusCodes": [ { "httpStatusCode": "200", @@ -169961,8 +169961,8 @@ } } ], - "descriptionHTML": "", "previews": [], + "descriptionHTML": "

Returns information about the specified GitHub code of conduct.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/lib/config.json b/src/rest/lib/config.json index 34d67b685e52..1720ff4d798b 100644 --- a/src/rest/lib/config.json +++ b/src/rest/lib/config.json @@ -33,5 +33,5 @@ ] } }, - "sha": "a690f58e01c4ad78d5541f2cf795b53712b25d84" + "sha": "bff312ae07f0fca06be8c742d9f3f836a7b8bfab" } \ No newline at end of file diff --git a/src/webhooks/data/fpt/schema.json b/src/webhooks/data/fpt/schema.json index 2275142f96a1..3d9230204ee0 100644 --- a/src/webhooks/data/fpt/schema.json +++ b/src/webhooks/data/fpt/schema.json @@ -18988,7 +18988,7 @@ }, "deleted": { "descriptionHtml": "

A deploy key was deleted.

", - "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", + "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL API documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", "bodyParameters": [ { "type": "string", diff --git a/src/webhooks/data/ghae/schema.json b/src/webhooks/data/ghae/schema.json index ee806ae3a843..0de3fdc5eac2 100644 --- a/src/webhooks/data/ghae/schema.json +++ b/src/webhooks/data/ghae/schema.json @@ -18988,7 +18988,7 @@ }, "deleted": { "descriptionHtml": "

A deploy key was deleted.

", - "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", + "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL API documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", "bodyParameters": [ { "type": "string", diff --git a/src/webhooks/data/ghec/schema.json b/src/webhooks/data/ghec/schema.json index ca635b623d1c..8d62afb331b0 100644 --- a/src/webhooks/data/ghec/schema.json +++ b/src/webhooks/data/ghec/schema.json @@ -18988,7 +18988,7 @@ }, "deleted": { "descriptionHtml": "

A deploy key was deleted.

", - "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", + "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL API documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", "bodyParameters": [ { "type": "string", diff --git a/src/webhooks/data/ghes-3.7/schema.json b/src/webhooks/data/ghes-3.7/schema.json index c1635d9bba38..b819754bbadf 100644 --- a/src/webhooks/data/ghes-3.7/schema.json +++ b/src/webhooks/data/ghes-3.7/schema.json @@ -17902,7 +17902,7 @@ }, "deleted": { "descriptionHtml": "

A deploy key was deleted.

", - "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", + "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL API documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", "bodyParameters": [ { "type": "string", diff --git a/src/webhooks/data/ghes-3.8/schema.json b/src/webhooks/data/ghes-3.8/schema.json index 1e77bed82a85..4564f87e4e5e 100644 --- a/src/webhooks/data/ghes-3.8/schema.json +++ b/src/webhooks/data/ghes-3.8/schema.json @@ -17902,7 +17902,7 @@ }, "deleted": { "descriptionHtml": "

A deploy key was deleted.

", - "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", + "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL API documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", "bodyParameters": [ { "type": "string", diff --git a/src/webhooks/data/ghes-3.9/schema.json b/src/webhooks/data/ghes-3.9/schema.json index 8e773d362dee..b660165dec7d 100644 --- a/src/webhooks/data/ghes-3.9/schema.json +++ b/src/webhooks/data/ghes-3.9/schema.json @@ -17902,7 +17902,7 @@ }, "deleted": { "descriptionHtml": "

A deploy key was deleted.

", - "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", + "summaryHtml": "

This event occurs when there is activity relating to deploy keys. For more information, see \"Managing deploy keys.\" For information about the APIs to manage deploy keys, see the GraphQL API documentation or \"Deploy keys\" in the REST API documentation.

\n

To subscribe to this event, a GitHub App must have at least read-level access for the \"Deployments\" repository permission.

", "bodyParameters": [ { "type": "string", diff --git a/src/webhooks/lib/config.json b/src/webhooks/lib/config.json index 92e434c91eb4..134d3d6ccb32 100644 --- a/src/webhooks/lib/config.json +++ b/src/webhooks/lib/config.json @@ -1,3 +1,3 @@ { - "sha": "a690f58e01c4ad78d5541f2cf795b53712b25d84" + "sha": "bff312ae07f0fca06be8c742d9f3f836a7b8bfab" } \ No newline at end of file From 3c99d06192f875c3893c8337b02c90de0e4a89a1 Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Thu, 15 Jun 2023 08:19:10 -0700 Subject: [PATCH 10/11] Min-width all the things (#37850) --- .../ui/MarkdownContent/stylesheets/table.scss | 23 ++++++++++--------- src/search/components/Search.tsx | 4 ++-- src/search/components/useBreakpoint.ts | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/components/ui/MarkdownContent/stylesheets/table.scss b/components/ui/MarkdownContent/stylesheets/table.scss index 8f4aab441003..142bb1b28689 100644 --- a/components/ui/MarkdownContent/stylesheets/table.scss +++ b/components/ui/MarkdownContent/stylesheets/table.scss @@ -6,18 +6,19 @@ font-size: 90%; width: 100%; line-height: 1.5; - /* We want to keep table-layout: auto so that column widths dynamically adjust; - otherwise entries get needlessly squashed into narrow columns. As a workaround, - we use components/lib/wrap-code-terms.js to prevent some reference table content - from expanding beyond the horizontal boundaries of the parent element. */ - table-layout: auto; - /* For mobile (small viewports) we need to fix the table because if the table - is larger than the viewport it will force the width of the table causing issues - with the header on scroll - */ - @media (max-width: 544px) { - table-layout: fixed; + // For mobile (small viewports) we need to fix the table + // because if the table is larger than the viewport + // it will force the width of the table causing issues + // with the header on scroll + table-layout: fixed; + + // We want to keep table-layout: auto so that column widths dynamically adjust; + // otherwise entries get needlessly squashed into narrow columns. As a workaround, + // we use components/lib/wrap-code-terms.js to prevent some reference table content + // from expanding beyond the horizontal boundaries of the parent element. + @media (min-width: 544px) { + table-layout: auto; } code { diff --git a/src/search/components/Search.tsx b/src/search/components/Search.tsx index 8a60d1b1b8f9..d34ce1797195 100644 --- a/src/search/components/Search.tsx +++ b/src/search/components/Search.tsx @@ -14,7 +14,7 @@ export function Search() { const [localQuery, setLocalQuery] = useState(query) const { t } = useTranslation('search') const { currentVersion } = useVersion() - const upToMediumViewport = useBreakpoint('medium') + const atMediumViewport = useBreakpoint('medium') function redirectSearch() { let asPath = `/${router.locale}` @@ -57,7 +57,7 @@ export function Search() { onInput={(e) => (e.target as HTMLInputElement).setCustomValidity('')} data-testid="site-search-input" // This adds focus in particular for iOS to focus and bring up the keyboard when you touch the search input text area - ref={(inputRef) => upToMediumViewport && inputRef && inputRef.focus()} + ref={(inputRef) => !atMediumViewport && inputRef && inputRef.focus()} type="search" placeholder={t`placeholder`} autoComplete={localQuery ? 'on' : 'off'} diff --git a/src/search/components/useBreakpoint.ts b/src/search/components/useBreakpoint.ts index 849378c5b474..2993646c411c 100644 --- a/src/search/components/useBreakpoint.ts +++ b/src/search/components/useBreakpoint.ts @@ -5,5 +5,5 @@ import { useMediaQuery } from './useMediaQuery' type Size = 'small' | 'medium' | 'large' | 'xlarge' export function useBreakpoint(size: Size) { const { theme } = useTheme() - return useMediaQuery(`(max-width: ${theme?.sizes[size]})`) + return useMediaQuery(`(min-width: ${theme?.sizes[size]})`) } From b21690a001fe3f070d63ef8f27e3b3e654fc0129 Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Thu, 15 Jun 2023 08:19:38 -0700 Subject: [PATCH 11/11] Remove @types/github-slugger (#37840) --- package-lock.json | 17 ----------------- package.json | 1 - 2 files changed, 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36a44fbb7d7d..a069236a0380 100644 --- a/package-lock.json +++ b/package-lock.json @@ -105,7 +105,6 @@ "@octokit/graphql": "5.0.4", "@octokit/rest": "^19.0.4", "@playwright/test": "1.35.0", - "@types/github-slugger": "^2.0.0", "@types/imurmurhash": "^0.1.1", "@types/js-cookie": "^3.0.2", "@types/lodash": "^4.14.182", @@ -4447,15 +4446,6 @@ "license": "MIT", "peer": true }, - "node_modules/@types/github-slugger": { - "version": "2.0.0", - "deprecated": "This is a stub types definition. github-slugger provides its own type definitions, so you do not need this installed.", - "dev": true, - "license": "MIT", - "dependencies": { - "github-slugger": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", @@ -22221,13 +22211,6 @@ "dev": true, "peer": true }, - "@types/github-slugger": { - "version": "2.0.0", - "dev": true, - "requires": { - "github-slugger": "*" - } - }, "@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", diff --git a/package.json b/package.json index adf0a1e3423a..f58e470282a8 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,6 @@ "@octokit/graphql": "5.0.4", "@octokit/rest": "^19.0.4", "@playwright/test": "1.35.0", - "@types/github-slugger": "^2.0.0", "@types/imurmurhash": "^0.1.1", "@types/js-cookie": "^3.0.2", "@types/lodash": "^4.14.182",