From 264ed5cbab6f75fc282d077aadb6d15745b0ed54 Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Fri, 8 Sep 2023 15:57:27 +0100 Subject: [PATCH 01/15] Document that GEI doesn't migrate user-owned repos (#42167) --- .../migration-support-for-github-enterprise-importer.md | 1 + data/reusables/enterprise-migration-tool/data-not-migrated.md | 1 + 2 files changed, 2 insertions(+) diff --git a/content/migrations/using-github-enterprise-importer/understanding-github-enterprise-importer/migration-support-for-github-enterprise-importer.md b/content/migrations/using-github-enterprise-importer/understanding-github-enterprise-importer/migration-support-for-github-enterprise-importer.md index 090d96519da2..42891980dac6 100644 --- a/content/migrations/using-github-enterprise-importer/understanding-github-enterprise-importer/migration-support-for-github-enterprise-importer.md +++ b/content/migrations/using-github-enterprise-importer/understanding-github-enterprise-importer/migration-support-for-github-enterprise-importer.md @@ -49,6 +49,7 @@ If your migration source is Bitbucket Server, you can migrate repositories. We c Currently, the following data is **not** migrated. +- Personal repositories owned by users - Branch permissions - Commit comments - Repository settings diff --git a/data/reusables/enterprise-migration-tool/data-not-migrated.md b/data/reusables/enterprise-migration-tool/data-not-migrated.md index d086750e8f60..39220c968890 100644 --- a/data/reusables/enterprise-migration-tool/data-not-migrated.md +++ b/data/reusables/enterprise-migration-tool/data-not-migrated.md @@ -1,5 +1,6 @@ Currently, the following data is **not** migrated. +- Repositories owned by user accounts - {% data variables.large_files.product_name_short %} objects and large binaries (repositories using {% data variables.large_files.product_name_short %} are still supported, see "[Limitations of {% data variables.product.prodname_importer_proper_name %}](#limitations-of-github-enterprise-importer)") - {% data variables.product.prodname_actions %} secrets, variables, environments, self-hosted runners, {% data variables.actions.hosted_runner %}s, or workflow run history - Webhook secrets From 24941a663f50fa60973ff6def0ffcc567f45f864 Mon Sep 17 00:00:00 2001 From: Matt Pollard Date: Fri, 8 Sep 2023 17:12:17 +0200 Subject: [PATCH 02/15] Revise release notes about OpenTelemetry changes in GHES 3.9 and 3.10 (#42027) --- data/release-notes/enterprise-server/3-10/0.yml | 5 +++-- data/release-notes/enterprise-server/3-9/0.yml | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/data/release-notes/enterprise-server/3-10/0.yml b/data/release-notes/enterprise-server/3-10/0.yml index bd8f0c95a417..057d7bb1424f 100644 --- a/data/release-notes/enterprise-server/3-10/0.yml +++ b/data/release-notes/enterprise-server/3-10/0.yml @@ -199,7 +199,7 @@ sections: changes: # https://github.com/github/releases/issues/3398 - | - Field names for some service logs on GitHub Enterprise Server have changed as part of GitHub's gradual migration to internal semantic conventions for [OpenTelemetry](https://opentelemetry.io/). Additional field names were changed in GitHub Enterprise Server 3.9. If any tooling or processes in your environment rely on specific field names within logs, or log entries in specific files, the following changes may affect you. + Field names and destinations for some service logs on GitHub Enterprise Server have changed in this release and the prior release. If any tooling or processes in your environment rely on specific field names within logs, or log entries in specific files, the following changes may affect you. - `level` is now `SeverityText`. - `log_message`, `msg`, or `message` is now `Body`. @@ -207,7 +207,8 @@ sections: - Custom field names such as `gh.repo.id` or `graphql.operation.name` use semantic names. - Log statements that the instance would previously write to `auth.log`, `ldap.log`, or `ldap-sync.log` now appear in containerized logs for `github-unicorn` if the statement originated from a web request, or in logs for `github-resqued` if the statement originated from a background job. - For a full list of mappings, download the [OpenTelemetry attribute mapping CSV for GitHub Enterprise Server 3.9](/assets/ghes-3.9-opentelemetry-attribute-mappings.csv) and the [OpenTelemetry attribute mapping CSV for GitHub Enterprise Server 3.10](/assets/ghes-3.10-opentelemetry-attribute-mappings.csv). + For a full list of field mappings, download the [OpenTelemetry attribute mapping CSV for GitHub Enterprise Server 3.9](/assets/ghes-3.9-opentelemetry-attribute-mappings.csv) and the [OpenTelemetry attribute mapping CSV for GitHub Enterprise Server 3.10](/assets/ghes-3.10-opentelemetry-attribute-mappings.csv). This change is part of GitHub's gradual migration to internal semantic conventions for [OpenTelemetry](https://opentelemetry.io/), and additional field names will change in upcoming releases. + # https://github.com/github/releases/issues/3134 - | Users who use pull requests with protected branches may be affected by the following security measures. diff --git a/data/release-notes/enterprise-server/3-9/0.yml b/data/release-notes/enterprise-server/3-9/0.yml index 0865ac5b4504..6bd467181950 100644 --- a/data/release-notes/enterprise-server/3-9/0.yml +++ b/data/release-notes/enterprise-server/3-9/0.yml @@ -290,7 +290,7 @@ sections: changes: # https://github.com/github/releases/issues/2909 - | - Field names for some service logs on GitHub Enterprise Server have changed as part of GitHub's gradual migration to internal semantic conventions for [OpenTelemetry](https://opentelemetry.io/). Additional field names will change in upcoming releases. If any tooling or processes in your environment rely on specific field names within logs, or log entries in specific files, the following changes may affect you. + Field names and destinations for some service logs on GitHub Enterprise Server have changed. If any tooling or processes in your environment rely on specific field names within logs, or log entries in specific files, the following changes may affect you. - `level` is now `SeverityText`. - `log_message`, `msg`, or `message` is now `Body`. @@ -298,7 +298,7 @@ sections: - Custom field names such as `gh.repo.id` or `graphql.operation.name` use semantic names. - Log statements that the instance would previously write to `auth.log`, `ldap.log`, or `ldap-sync.log` now appear in containerized logs for `github-unicorn` if the statement originated from a web request, or in logs for `github-resqued` if the statement originated from a background job. - For a full list of mappings, download the [OpenTelemetry attribute mapping CSV](/assets/ghes-3.9-opentelemetry-attribute-mappings.csv). + For a full list of field mappings, download the [OpenTelemetry attribute mapping CSV](/assets/ghes-3.9-opentelemetry-attribute-mappings.csv). This change is part of GitHub's gradual migration to internal semantic conventions for [OpenTelemetry](https://opentelemetry.io/), and additional field names will change in upcoming releases. # https://github.com/github/ghes/issues/6342 - | From c22c07598d313db2b0f04fd87522182a851fd2ef Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Fri, 8 Sep 2023 09:34:52 -0700 Subject: [PATCH 03/15] Update audit log event data (#42255) --- src/audit-logs/lib/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audit-logs/lib/config.json b/src/audit-logs/lib/config.json index 4c2f9503d6f5..603ab5b2ad06 100644 --- a/src/audit-logs/lib/config.json +++ b/src/audit-logs/lib/config.json @@ -1,3 +1,3 @@ { - "sha": "c221a9bce62f375d84dfc8b883070658217eb58c" + "sha": "84fb72135b013a72ec2fc0b22383ac6280ad931b" } \ No newline at end of file From fb68922e1cf08fdfb40031f379c64e3af13da2a7 Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Fri, 8 Sep 2023 09:35:34 -0700 Subject: [PATCH 04/15] GraphQL schema update (#42257) Co-authored-by: rachmari --- data/graphql/ghae/schema.docs-ghae.graphql | 125 +++++++++++++ data/graphql/ghec/schema.docs.graphql | 125 +++++++++++++ data/graphql/schema.docs.graphql | 125 +++++++++++++ src/graphql/data/fpt/changelog.json | 18 ++ src/graphql/data/fpt/schema.json | 200 +++++++++++++++++++++ src/graphql/data/ghae/schema.json | 200 +++++++++++++++++++++ src/graphql/data/ghec/schema.json | 200 +++++++++++++++++++++ 7 files changed, 993 insertions(+) diff --git a/data/graphql/ghae/schema.docs-ghae.graphql b/data/graphql/ghae/schema.docs-ghae.graphql index 7f335690e80a..56aa57277b4a 100644 --- a/data/graphql/ghae/schema.docs-ghae.graphql +++ b/data/graphql/ghae/schema.docs-ghae.graphql @@ -11056,6 +11056,31 @@ type EnterpriseBillingInfo { totalLicenses: Int! } +""" +The connection type for Enterprise. +""" +type EnterpriseConnection { + """ + A list of edges. + """ + edges: [EnterpriseEdge] + + """ + A list of nodes. + """ + nodes: [Enterprise] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + """ The possible values for the enterprise base repository permission setting. """ @@ -11086,6 +11111,21 @@ enum EnterpriseDefaultRepositoryPermissionSettingValue { WRITE } +""" +An edge in a connection. +""" +type EnterpriseEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Enterprise +} + """ The possible values for an enabled/disabled enterprise setting. """ @@ -11369,6 +11409,56 @@ enum EnterpriseMembersCanMakePurchasesSettingValue { ENABLED } +""" +The possible values we have for filtering Platform::Objects::User#enterprises. +""" +enum EnterpriseMembershipType { + """ + Returns all enterprises in which the user is an admin. + """ + ADMIN + + """ + Returns all enterprises in which the user is a member, admin, or billing manager. + """ + ALL + + """ + Returns all enterprises in which the user is a billing manager. + """ + BILLING_MANAGER + + """ + Returns all enterprises in which the user is a member of an org that is owned by the enterprise. + """ + ORG_MEMBERSHIP +} + +""" +Ordering options for enterprises. +""" +input EnterpriseOrder { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprises by. + """ + field: EnterpriseOrderField! +} + +""" +Properties by which enterprise connections can be ordered. +""" +enum EnterpriseOrderField { + """ + Order enterprises by name + """ + NAME +} + """ The connection type for Organization. """ @@ -45984,6 +46074,41 @@ type User implements Actor & Node & ProfileOwner & ProjectOwner & RepositoryDisc """ email: String! + """ + A list of enterprises that the user belongs to. + """ + enterprises( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Filter enterprises returned based on the user's membership type. + """ + membershipType: EnterpriseMembershipType = ALL + + """ + Ordering options for the User's enterprises. + """ + orderBy: EnterpriseOrder = {field: NAME, direction: ASC} + ): EnterpriseConnection + """ A list of users the given user is followed by. """ diff --git a/data/graphql/ghec/schema.docs.graphql b/data/graphql/ghec/schema.docs.graphql index e5987c273313..f7e69b89e334 100644 --- a/data/graphql/ghec/schema.docs.graphql +++ b/data/graphql/ghec/schema.docs.graphql @@ -12559,6 +12559,31 @@ type EnterpriseBillingInfo { totalLicenses: Int! } +""" +The connection type for Enterprise. +""" +type EnterpriseConnection { + """ + A list of edges. + """ + edges: [EnterpriseEdge] + + """ + A list of nodes. + """ + nodes: [Enterprise] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + """ The possible values for the enterprise base repository permission setting. """ @@ -12589,6 +12614,21 @@ enum EnterpriseDefaultRepositoryPermissionSettingValue { WRITE } +""" +An edge in a connection. +""" +type EnterpriseEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Enterprise +} + """ The possible values for an enabled/disabled enterprise setting. """ @@ -12872,6 +12912,56 @@ enum EnterpriseMembersCanMakePurchasesSettingValue { ENABLED } +""" +The possible values we have for filtering Platform::Objects::User#enterprises. +""" +enum EnterpriseMembershipType { + """ + Returns all enterprises in which the user is an admin. + """ + ADMIN + + """ + Returns all enterprises in which the user is a member, admin, or billing manager. + """ + ALL + + """ + Returns all enterprises in which the user is a billing manager. + """ + BILLING_MANAGER + + """ + Returns all enterprises in which the user is a member of an org that is owned by the enterprise. + """ + ORG_MEMBERSHIP +} + +""" +Ordering options for enterprises. +""" +input EnterpriseOrder { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprises by. + """ + field: EnterpriseOrderField! +} + +""" +Properties by which enterprise connections can be ordered. +""" +enum EnterpriseOrderField { + """ + Order enterprises by name + """ + NAME +} + """ The connection type for Organization. """ @@ -57349,6 +57439,41 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectOwner & """ email: String! + """ + A list of enterprises that the user belongs to. + """ + enterprises( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Filter enterprises returned based on the user's membership type. + """ + membershipType: EnterpriseMembershipType = ALL + + """ + Ordering options for the User's enterprises. + """ + orderBy: EnterpriseOrder = {field: NAME, direction: ASC} + ): EnterpriseConnection + """ The estimated next GitHub Sponsors payout for this user/organization in cents (USD). """ diff --git a/data/graphql/schema.docs.graphql b/data/graphql/schema.docs.graphql index e5987c273313..f7e69b89e334 100644 --- a/data/graphql/schema.docs.graphql +++ b/data/graphql/schema.docs.graphql @@ -12559,6 +12559,31 @@ type EnterpriseBillingInfo { totalLicenses: Int! } +""" +The connection type for Enterprise. +""" +type EnterpriseConnection { + """ + A list of edges. + """ + edges: [EnterpriseEdge] + + """ + A list of nodes. + """ + nodes: [Enterprise] + + """ + Information to aid in pagination. + """ + pageInfo: PageInfo! + + """ + Identifies the total count of items in the connection. + """ + totalCount: Int! +} + """ The possible values for the enterprise base repository permission setting. """ @@ -12589,6 +12614,21 @@ enum EnterpriseDefaultRepositoryPermissionSettingValue { WRITE } +""" +An edge in a connection. +""" +type EnterpriseEdge { + """ + A cursor for use in pagination. + """ + cursor: String! + + """ + The item at the end of the edge. + """ + node: Enterprise +} + """ The possible values for an enabled/disabled enterprise setting. """ @@ -12872,6 +12912,56 @@ enum EnterpriseMembersCanMakePurchasesSettingValue { ENABLED } +""" +The possible values we have for filtering Platform::Objects::User#enterprises. +""" +enum EnterpriseMembershipType { + """ + Returns all enterprises in which the user is an admin. + """ + ADMIN + + """ + Returns all enterprises in which the user is a member, admin, or billing manager. + """ + ALL + + """ + Returns all enterprises in which the user is a billing manager. + """ + BILLING_MANAGER + + """ + Returns all enterprises in which the user is a member of an org that is owned by the enterprise. + """ + ORG_MEMBERSHIP +} + +""" +Ordering options for enterprises. +""" +input EnterpriseOrder { + """ + The ordering direction. + """ + direction: OrderDirection! + + """ + The field to order enterprises by. + """ + field: EnterpriseOrderField! +} + +""" +Properties by which enterprise connections can be ordered. +""" +enum EnterpriseOrderField { + """ + Order enterprises by name + """ + NAME +} + """ The connection type for Organization. """ @@ -57349,6 +57439,41 @@ type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectOwner & """ email: String! + """ + A list of enterprises that the user belongs to. + """ + enterprises( + """ + Returns the elements in the list that come after the specified cursor. + """ + after: String + + """ + Returns the elements in the list that come before the specified cursor. + """ + before: String + + """ + Returns the first _n_ elements from the list. + """ + first: Int + + """ + Returns the last _n_ elements from the list. + """ + last: Int + + """ + Filter enterprises returned based on the user's membership type. + """ + membershipType: EnterpriseMembershipType = ALL + + """ + Ordering options for the User's enterprises. + """ + orderBy: EnterpriseOrder = {field: NAME, direction: ASC} + ): EnterpriseConnection + """ The estimated next GitHub Sponsors payout for this user/organization in cents (USD). """ diff --git a/src/graphql/data/fpt/changelog.json b/src/graphql/data/fpt/changelog.json index fb22e8a85d68..b1c1a07de687 100644 --- a/src/graphql/data/fpt/changelog.json +++ b/src/graphql/data/fpt/changelog.json @@ -1,4 +1,22 @@ [ + { + "schemaChanges": [ + { + "title": "The GraphQL schema includes these changes:", + "changes": [ + "

Type EnterpriseConnection was added

", + "

Type EnterpriseEdge was added

", + "

Type EnterpriseMembershipType was added

", + "

Type EnterpriseOrder was added

", + "

Type EnterpriseOrderField was added

", + "

Field enterprises was added to object type User

" + ] + } + ], + "previewChanges": [], + "upcomingChanges": [], + "date": "2023-09-08" + }, { "schemaChanges": [ { diff --git a/src/graphql/data/fpt/schema.json b/src/graphql/data/fpt/schema.json index 26849395e2c6..bc9daf5cf9ff 100644 --- a/src/graphql/data/fpt/schema.json +++ b/src/graphql/data/fpt/schema.json @@ -20831,6 +20831,72 @@ } ] }, + { + "name": "EnterpriseConnection", + "kind": "objects", + "id": "enterpriseconnection", + "href": "/graphql/reference/objects#enterpriseconnection", + "description": "

The connection type for Enterprise.

", + "fields": [ + { + "name": "edges", + "description": "

A list of edges.

", + "type": "[EnterpriseEdge]", + "id": "enterpriseedge", + "kind": "objects", + "href": "/graphql/reference/objects#enterpriseedge" + }, + { + "name": "nodes", + "description": "

A list of nodes.

", + "type": "[Enterprise]", + "id": "enterprise", + "kind": "objects", + "href": "/graphql/reference/objects#enterprise" + }, + { + "name": "pageInfo", + "description": "

Information to aid in pagination.

", + "type": "PageInfo!", + "id": "pageinfo", + "kind": "objects", + "href": "/graphql/reference/objects#pageinfo" + }, + { + "name": "totalCount", + "description": "

Identifies the total count of items in the connection.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, + { + "name": "EnterpriseEdge", + "kind": "objects", + "id": "enterpriseedge", + "href": "/graphql/reference/objects#enterpriseedge", + "description": "

An edge in a connection.

", + "fields": [ + { + "name": "cursor", + "description": "

A cursor for use in pagination.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "node", + "description": "

The item at the end of the edge.

", + "type": "Enterprise", + "id": "enterprise", + "kind": "objects", + "href": "/graphql/reference/objects#enterprise" + } + ] + }, { "name": "EnterpriseFailedInvitationConnection", "kind": "objects", @@ -70871,6 +70937,77 @@ "kind": "scalars", "href": "/graphql/reference/scalars#string" }, + { + "name": "enterprises", + "description": "

A list of enterprises that the user belongs to.

", + "type": "EnterpriseConnection", + "id": "enterpriseconnection", + "kind": "objects", + "href": "/graphql/reference/objects#enterpriseconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "membershipType", + "defaultValue": "ALL", + "description": "

Filter enterprises returned based on the user's membership type.

", + "type": { + "name": "EnterpriseMembershipType", + "id": "enterprisemembershiptype", + "kind": "enums", + "href": "/graphql/reference/enums#enterprisemembershiptype" + } + }, + { + "name": "orderBy", + "description": "

Ordering options for the User's enterprises.

", + "type": { + "name": "EnterpriseOrder", + "id": "enterpriseorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#enterpriseorder" + } + } + ] + }, { "name": "estimatedNextSponsorsPayoutInCents", "description": "

The estimated next GitHub Sponsors payout for this user/organization in cents (USD).

", @@ -79327,6 +79464,44 @@ } ] }, + { + "name": "EnterpriseMembershipType", + "kind": "enums", + "id": "enterprisemembershiptype", + "href": "/graphql/reference/enums#enterprisemembershiptype", + "description": "

The possible values we have for filtering Platform::Objects::User#enterprises.

", + "values": [ + { + "name": "ADMIN", + "description": "

Returns all enterprises in which the user is an admin.

" + }, + { + "name": "ALL", + "description": "

Returns all enterprises in which the user is a member, admin, or billing manager.

" + }, + { + "name": "BILLING_MANAGER", + "description": "

Returns all enterprises in which the user is a billing manager.

" + }, + { + "name": "ORG_MEMBERSHIP", + "description": "

Returns all enterprises in which the user is a member of an org that is owned by the enterprise.

" + } + ] + }, + { + "name": "EnterpriseOrderField", + "kind": "enums", + "id": "enterpriseorderfield", + "href": "/graphql/reference/enums#enterpriseorderfield", + "description": "

Properties by which enterprise connections can be ordered.

", + "values": [ + { + "name": "NAME", + "description": "

Order enterprises by name.

" + } + ] + }, { "name": "EnterpriseServerInstallationOrderField", "kind": "enums", @@ -92026,6 +92201,31 @@ } ] }, + { + "name": "EnterpriseOrder", + "kind": "inputObjects", + "id": "enterpriseorder", + "href": "/graphql/reference/input-objects#enterpriseorder", + "description": "

Ordering options for enterprises.

", + "inputFields": [ + { + "name": "direction", + "description": "

The ordering direction.

", + "type": "OrderDirection!", + "id": "orderdirection", + "kind": "enums", + "href": "/graphql/reference/enums#orderdirection" + }, + { + "name": "field", + "description": "

The field to order enterprises by.

", + "type": "EnterpriseOrderField!", + "id": "enterpriseorderfield", + "kind": "enums", + "href": "/graphql/reference/enums#enterpriseorderfield" + } + ] + }, { "name": "EnterpriseServerInstallationOrder", "kind": "inputObjects", diff --git a/src/graphql/data/ghae/schema.json b/src/graphql/data/ghae/schema.json index f47d82fb7bb8..aa61d2d85726 100644 --- a/src/graphql/data/ghae/schema.json +++ b/src/graphql/data/ghae/schema.json @@ -18028,6 +18028,72 @@ } ] }, + { + "name": "EnterpriseConnection", + "kind": "objects", + "id": "enterpriseconnection", + "href": "/graphql/reference/objects#enterpriseconnection", + "description": "

The connection type for Enterprise.

", + "fields": [ + { + "name": "edges", + "description": "

A list of edges.

", + "type": "[EnterpriseEdge]", + "id": "enterpriseedge", + "kind": "objects", + "href": "/graphql/reference/objects#enterpriseedge" + }, + { + "name": "nodes", + "description": "

A list of nodes.

", + "type": "[Enterprise]", + "id": "enterprise", + "kind": "objects", + "href": "/graphql/reference/objects#enterprise" + }, + { + "name": "pageInfo", + "description": "

Information to aid in pagination.

", + "type": "PageInfo!", + "id": "pageinfo", + "kind": "objects", + "href": "/graphql/reference/objects#pageinfo" + }, + { + "name": "totalCount", + "description": "

Identifies the total count of items in the connection.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, + { + "name": "EnterpriseEdge", + "kind": "objects", + "id": "enterpriseedge", + "href": "/graphql/reference/objects#enterpriseedge", + "description": "

An edge in a connection.

", + "fields": [ + { + "name": "cursor", + "description": "

A cursor for use in pagination.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "node", + "description": "

The item at the end of the edge.

", + "type": "Enterprise", + "id": "enterprise", + "kind": "objects", + "href": "/graphql/reference/objects#enterprise" + } + ] + }, { "name": "EnterpriseFailedInvitationConnection", "kind": "objects", @@ -59441,6 +59507,77 @@ "kind": "scalars", "href": "/graphql/reference/scalars#string" }, + { + "name": "enterprises", + "description": "

A list of enterprises that the user belongs to.

", + "type": "EnterpriseConnection", + "id": "enterpriseconnection", + "kind": "objects", + "href": "/graphql/reference/objects#enterpriseconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "membershipType", + "defaultValue": "ALL", + "description": "

Filter enterprises returned based on the user's membership type.

", + "type": { + "name": "EnterpriseMembershipType", + "id": "enterprisemembershiptype", + "kind": "enums", + "href": "/graphql/reference/enums#enterprisemembershiptype" + } + }, + { + "name": "orderBy", + "description": "

Ordering options for the User's enterprises.

", + "type": { + "name": "EnterpriseOrder", + "id": "enterpriseorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#enterpriseorder" + } + } + ] + }, { "name": "followers", "description": "

A list of users the given user is followed by.

", @@ -65763,6 +65900,44 @@ } ] }, + { + "name": "EnterpriseMembershipType", + "kind": "enums", + "id": "enterprisemembershiptype", + "href": "/graphql/reference/enums#enterprisemembershiptype", + "description": "

The possible values we have for filtering Platform::Objects::User#enterprises.

", + "values": [ + { + "name": "ADMIN", + "description": "

Returns all enterprises in which the user is an admin.

" + }, + { + "name": "ALL", + "description": "

Returns all enterprises in which the user is a member, admin, or billing manager.

" + }, + { + "name": "BILLING_MANAGER", + "description": "

Returns all enterprises in which the user is a billing manager.

" + }, + { + "name": "ORG_MEMBERSHIP", + "description": "

Returns all enterprises in which the user is a member of an org that is owned by the enterprise.

" + } + ] + }, + { + "name": "EnterpriseOrderField", + "kind": "enums", + "id": "enterpriseorderfield", + "href": "/graphql/reference/enums#enterpriseorderfield", + "description": "

Properties by which enterprise connections can be ordered.

", + "values": [ + { + "name": "NAME", + "description": "

Order enterprises by name.

" + } + ] + }, { "name": "EnterpriseServerInstallationOrderField", "kind": "enums", @@ -75102,6 +75277,31 @@ } ] }, + { + "name": "EnterpriseOrder", + "kind": "inputObjects", + "id": "enterpriseorder", + "href": "/graphql/reference/input-objects#enterpriseorder", + "description": "

Ordering options for enterprises.

", + "inputFields": [ + { + "name": "direction", + "description": "

The ordering direction.

", + "type": "OrderDirection!", + "id": "orderdirection", + "kind": "enums", + "href": "/graphql/reference/enums#orderdirection" + }, + { + "name": "field", + "description": "

The field to order enterprises by.

", + "type": "EnterpriseOrderField!", + "id": "enterpriseorderfield", + "kind": "enums", + "href": "/graphql/reference/enums#enterpriseorderfield" + } + ] + }, { "name": "EnterpriseServerInstallationOrder", "kind": "inputObjects", diff --git a/src/graphql/data/ghec/schema.json b/src/graphql/data/ghec/schema.json index 26849395e2c6..bc9daf5cf9ff 100644 --- a/src/graphql/data/ghec/schema.json +++ b/src/graphql/data/ghec/schema.json @@ -20831,6 +20831,72 @@ } ] }, + { + "name": "EnterpriseConnection", + "kind": "objects", + "id": "enterpriseconnection", + "href": "/graphql/reference/objects#enterpriseconnection", + "description": "

The connection type for Enterprise.

", + "fields": [ + { + "name": "edges", + "description": "

A list of edges.

", + "type": "[EnterpriseEdge]", + "id": "enterpriseedge", + "kind": "objects", + "href": "/graphql/reference/objects#enterpriseedge" + }, + { + "name": "nodes", + "description": "

A list of nodes.

", + "type": "[Enterprise]", + "id": "enterprise", + "kind": "objects", + "href": "/graphql/reference/objects#enterprise" + }, + { + "name": "pageInfo", + "description": "

Information to aid in pagination.

", + "type": "PageInfo!", + "id": "pageinfo", + "kind": "objects", + "href": "/graphql/reference/objects#pageinfo" + }, + { + "name": "totalCount", + "description": "

Identifies the total count of items in the connection.

", + "type": "Int!", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + ] + }, + { + "name": "EnterpriseEdge", + "kind": "objects", + "id": "enterpriseedge", + "href": "/graphql/reference/objects#enterpriseedge", + "description": "

An edge in a connection.

", + "fields": [ + { + "name": "cursor", + "description": "

A cursor for use in pagination.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + }, + { + "name": "node", + "description": "

The item at the end of the edge.

", + "type": "Enterprise", + "id": "enterprise", + "kind": "objects", + "href": "/graphql/reference/objects#enterprise" + } + ] + }, { "name": "EnterpriseFailedInvitationConnection", "kind": "objects", @@ -70871,6 +70937,77 @@ "kind": "scalars", "href": "/graphql/reference/scalars#string" }, + { + "name": "enterprises", + "description": "

A list of enterprises that the user belongs to.

", + "type": "EnterpriseConnection", + "id": "enterpriseconnection", + "kind": "objects", + "href": "/graphql/reference/objects#enterpriseconnection", + "arguments": [ + { + "name": "after", + "description": "

Returns the elements in the list that come after the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "before", + "description": "

Returns the elements in the list that come before the specified cursor.

", + "type": { + "name": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + }, + { + "name": "first", + "description": "

Returns the first n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "last", + "description": "

Returns the last n elements from the list.

", + "type": { + "name": "Int", + "id": "int", + "kind": "scalars", + "href": "/graphql/reference/scalars#int" + } + }, + { + "name": "membershipType", + "defaultValue": "ALL", + "description": "

Filter enterprises returned based on the user's membership type.

", + "type": { + "name": "EnterpriseMembershipType", + "id": "enterprisemembershiptype", + "kind": "enums", + "href": "/graphql/reference/enums#enterprisemembershiptype" + } + }, + { + "name": "orderBy", + "description": "

Ordering options for the User's enterprises.

", + "type": { + "name": "EnterpriseOrder", + "id": "enterpriseorder", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#enterpriseorder" + } + } + ] + }, { "name": "estimatedNextSponsorsPayoutInCents", "description": "

The estimated next GitHub Sponsors payout for this user/organization in cents (USD).

", @@ -79327,6 +79464,44 @@ } ] }, + { + "name": "EnterpriseMembershipType", + "kind": "enums", + "id": "enterprisemembershiptype", + "href": "/graphql/reference/enums#enterprisemembershiptype", + "description": "

The possible values we have for filtering Platform::Objects::User#enterprises.

", + "values": [ + { + "name": "ADMIN", + "description": "

Returns all enterprises in which the user is an admin.

" + }, + { + "name": "ALL", + "description": "

Returns all enterprises in which the user is a member, admin, or billing manager.

" + }, + { + "name": "BILLING_MANAGER", + "description": "

Returns all enterprises in which the user is a billing manager.

" + }, + { + "name": "ORG_MEMBERSHIP", + "description": "

Returns all enterprises in which the user is a member of an org that is owned by the enterprise.

" + } + ] + }, + { + "name": "EnterpriseOrderField", + "kind": "enums", + "id": "enterpriseorderfield", + "href": "/graphql/reference/enums#enterpriseorderfield", + "description": "

Properties by which enterprise connections can be ordered.

", + "values": [ + { + "name": "NAME", + "description": "

Order enterprises by name.

" + } + ] + }, { "name": "EnterpriseServerInstallationOrderField", "kind": "enums", @@ -92026,6 +92201,31 @@ } ] }, + { + "name": "EnterpriseOrder", + "kind": "inputObjects", + "id": "enterpriseorder", + "href": "/graphql/reference/input-objects#enterpriseorder", + "description": "

Ordering options for enterprises.

", + "inputFields": [ + { + "name": "direction", + "description": "

The ordering direction.

", + "type": "OrderDirection!", + "id": "orderdirection", + "kind": "enums", + "href": "/graphql/reference/enums#orderdirection" + }, + { + "name": "field", + "description": "

The field to order enterprises by.

", + "type": "EnterpriseOrderField!", + "id": "enterpriseorderfield", + "kind": "enums", + "href": "/graphql/reference/enums#enterpriseorderfield" + } + ] + }, { "name": "EnterpriseServerInstallationOrder", "kind": "inputObjects", From edae4118a8dafa8af7fd5d6c5fc502688319d87c Mon Sep 17 00:00:00 2001 From: Rachael Sewell Date: Fri, 8 Sep 2023 10:07:38 -0700 Subject: [PATCH 05/15] fix warn for todocs git commit hook (#42219) --- src/content-linter/scripts/markdownlint.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/content-linter/scripts/markdownlint.js b/src/content-linter/scripts/markdownlint.js index b5763b6ba588..c8f723d2c900 100755 --- a/src/content-linter/scripts/markdownlint.js +++ b/src/content-linter/scripts/markdownlint.js @@ -190,10 +190,7 @@ function formatResult(object) { // Add severity of error or warning const ruleName = object.ruleNames[1] || object.ruleNames[0] - // The severity of the rule can be different when running locally vs in CI - formattedResult.severity = process.env.CI - ? allConfig[ruleName].severity - : allConfig[ruleName]['severity-local-env'] || allConfig[ruleName].severity + formattedResult.severity = allConfig[ruleName].severity return Object.entries(object).reduce((acc, [key, value]) => { if (key === 'fixInfo') { @@ -279,7 +276,12 @@ function getMarkdownLintConfig(errorsOnly, rules) { // Only configure the rules that have the severity of error if (errorsOnly) { const errorConfig = Object.keys(allConfig).reduce((acc, key) => { - if (allConfig[key].severity === 'error') acc[key] = allConfig[key] + // The severity of the rule can be different when running locally vs in CI + const defaultSev = allConfig[key].severity + const localSev = allConfig[key]['severity-local-env'] || defaultSev + const severity = process.env.CI ? defaultSev : localSev + + if (severity === 'error') acc[key] = allConfig[key] return acc }, config.content) Object.assign(config.content, errorConfig) From c9e0d0362c0e44ea9fcb15f8b257474282c63fe1 Mon Sep 17 00:00:00 2001 From: Grace Park Date: Fri, 8 Sep 2023 10:25:34 -0700 Subject: [PATCH 06/15] Add lang attr to LanguagePicker (#42204) --- src/languages/components/LanguagePicker.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/languages/components/LanguagePicker.tsx b/src/languages/components/LanguagePicker.tsx index bd751a12b53c..61ee010d0ec2 100644 --- a/src/languages/components/LanguagePicker.tsx +++ b/src/languages/components/LanguagePicker.tsx @@ -45,6 +45,7 @@ export const LanguagePicker = ({ xs, mediumOrLower }: Props) => { key={`/${lang.code}${routerPath}`} selected={lang === selectedLang} as={Link} + lang={lang.code} href={`/${lang.code}${routerPath}`} onSelect={() => { if (lang.code) { @@ -61,7 +62,7 @@ export const LanguagePicker = ({ xs, mediumOrLower }: Props) => { } }} > - {lang.nativeName || lang.name} + {lang.nativeName || lang.name} )) From cb14d358bc05a22b045a7324fd19a7660e60502e Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:38:56 -0700 Subject: [PATCH 07/15] Update OpenAPI Description (#42184) Co-authored-by: Jules <19994093+jules-p@users.noreply.github.com> Co-authored-by: Sarah Edwards --- content/rest/enterprise-admin/scim.md | 4 +- src/github-apps/lib/config.json | 2 +- src/rest/data/fpt-2022-11-28/schema.json | 90 +++++++++++++++- src/rest/data/ghae/schema.json | 58 ++++++++++ src/rest/data/ghec-2022-11-28/schema.json | 101 +++++++++++++++++- .../data/ghes-3.10-2022-11-28/schema.json | 69 +++++++++++- src/rest/data/ghes-3.6/schema.json | 64 +++++++++++ src/rest/data/ghes-3.7/schema.json | 64 +++++++++++ src/rest/data/ghes-3.8/schema.json | 65 +++++++++++ src/rest/data/ghes-3.9-2022-11-28/schema.json | 69 +++++++++++- src/rest/lib/config.json | 2 +- src/webhooks/lib/config.json | 2 +- 12 files changed, 575 insertions(+), 15 deletions(-) diff --git a/content/rest/enterprise-admin/scim.md b/content/rest/enterprise-admin/scim.md index 9e1554c8621f..720b3ee75c24 100644 --- a/content/rest/enterprise-admin/scim.md +++ b/content/rest/enterprise-admin/scim.md @@ -143,6 +143,6 @@ The {% data variables.product.product_name %} instance links each user who authe | `id` | String | Identifier generated by the instance's SCIM endpoint. | | `active` | Boolean | Indicates whether the identity is active (`true`) or should be suspended (`false`). | - - {% endif %} + + diff --git a/src/github-apps/lib/config.json b/src/github-apps/lib/config.json index c9cd37113164..64a8de785d6c 100644 --- a/src/github-apps/lib/config.json +++ b/src/github-apps/lib/config.json @@ -60,5 +60,5 @@ "2022-11-28" ] }, - "sha": "5510d0097b4671e408afa4da29456749b30205ff" + "sha": "75ade23f4b33a6efb37297ac3073a00294a0d5b8" } \ 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 5cc3980d9327..fcf5f3289ddd 100644 --- a/src/rest/data/fpt-2022-11-28/schema.json +++ b/src/rest/data/fpt-2022-11-28/schema.json @@ -3137,6 +3137,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -7775,6 +7776,14 @@ "category": "actions", "subcategory": "self-hosted-runners", "parameters": [ + { + "name": "name", + "description": "

The name of a self-hosted runner.

", + "in": "query", + "schema": { + "type": "string" + } + }, { "name": "org", "description": "

The organization name. The name is not case sensitive.

", @@ -9235,6 +9244,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -10810,6 +10820,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -12378,6 +12389,14 @@ "category": "actions", "subcategory": "self-hosted-runners", "parameters": [ + { + "name": "name", + "description": "

The name of a self-hosted runner.

", + "in": "query", + "schema": { + "type": "string" + } + }, { "name": "owner", "description": "

The account owner of the repository. The name is not case sensitive.

", @@ -13878,6 +13897,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -15463,6 +15483,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -38357,6 +38378,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -42413,6 +42435,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -46463,6 +46486,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -50507,6 +50531,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -54541,6 +54566,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -58596,6 +58622,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -62630,6 +62657,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -66675,6 +66703,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -70720,6 +70749,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -78403,6 +78433,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -80024,6 +80055,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -81955,6 +81987,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -83433,6 +83466,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -91686,6 +91720,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -98052,6 +98087,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -100821,6 +100857,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -174365,6 +174402,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -176178,6 +176216,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -177647,6 +177686,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -203438,6 +203478,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -205096,6 +205137,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -225413,8 +225455,8 @@ "versionInfo": "1.0.0", "downloadLocation": "NOASSERTION", "filesAnalyzed": false, - "licenseConcluded": "NOASSERTION", - "licenseDeclared": "NOASSERTION" + "licenseConcluded": "MIT", + "licenseDeclared": "MIT" } ] } @@ -256554,6 +256596,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -260075,6 +260118,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -263514,6 +263558,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -266890,6 +266935,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -270237,6 +270283,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -273648,6 +273695,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -277339,6 +277387,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -281020,6 +281069,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -284357,6 +284407,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -291905,6 +291956,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -296879,6 +296931,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -324556,6 +324609,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -333500,6 +333554,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -335519,6 +335574,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -337503,6 +337559,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -342470,6 +342527,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -344482,6 +344540,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -346459,6 +346518,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -392577,6 +392637,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -394235,6 +394296,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -415841,6 +415903,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -417499,6 +417562,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -421558,6 +421622,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -423216,6 +423281,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -445548,6 +445614,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -448258,6 +448325,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -450071,6 +450139,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -451540,6 +451609,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -454678,6 +454748,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -456491,6 +456562,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -457960,6 +458032,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -463131,6 +463204,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -465799,6 +465873,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -467621,6 +467696,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -476656,6 +476732,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -478469,6 +478546,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -479938,6 +480016,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -481738,7 +481817,7 @@ } ], "previews": [], - "descriptionHTML": "

Returns all rules that apply to the specified branch. The branch does not need to exist; rules that would apply to a\nbranch with that name will be returned. All rules that apply will be returned, regardless of the level at which they\nare configured.

", + "descriptionHTML": "

Returns all active rules that apply to the specified branch. The branch does not need to exist; rules that would apply\nto a branch with that name will be returned. All active rules that apply will be returned, regardless of the level\nat which they are configured (e.g. repository or organization). Rules in rulesets with \"evaluate\" or \"disabled\"\nenforcement statuses are not returned.

", "statusCodes": [ { "httpStatusCode": "200", @@ -491720,6 +491799,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -500042,6 +500122,7 @@ "array", "null" ], + "description": "The users who contributed to the advisory.", "readOnly": true, "items": { "type": "object", @@ -500685,6 +500766,7 @@ "array", "null" ], + "description": "The users who contributed to the advisory.", "readOnly": true, "items": { "type": "object", @@ -523733,6 +523815,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -531082,6 +531165,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] diff --git a/src/rest/data/ghae/schema.json b/src/rest/data/ghae/schema.json index b48afae035b9..30586e0af0a8 100644 --- a/src/rest/data/ghae/schema.json +++ b/src/rest/data/ghae/schema.json @@ -2743,6 +2743,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -9624,6 +9625,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -11114,6 +11116,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -13158,6 +13161,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -14648,6 +14652,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -16722,6 +16727,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -18222,6 +18228,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -35375,6 +35382,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -39324,6 +39332,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -43294,6 +43303,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -50892,6 +50902,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -52428,6 +52439,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -54274,6 +54286,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -55667,6 +55680,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -63769,6 +63783,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -68726,6 +68741,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -71394,6 +71410,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -127410,6 +127427,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -128983,6 +129001,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -173096,6 +173115,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -176532,6 +176552,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -179886,6 +179907,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -183177,6 +183199,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -186439,6 +186462,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -189765,6 +189789,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -193371,6 +193396,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -196967,6 +196993,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -200219,6 +200246,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -207682,6 +207710,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -212571,6 +212600,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -240163,6 +240193,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -247866,6 +247897,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -249800,6 +249832,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -251699,6 +251732,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -254767,6 +254801,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -256694,6 +256729,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -277825,6 +277861,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -279398,6 +279435,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -300903,6 +300941,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -302476,6 +302515,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -306450,6 +306490,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -308023,6 +308064,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -328777,6 +328819,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -331402,6 +331445,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -333084,6 +333128,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -334468,6 +334513,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -337522,6 +337568,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -339204,6 +339251,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -340588,6 +340636,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -344754,6 +344803,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -346408,6 +346458,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -348145,6 +348196,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -357056,6 +357108,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -358738,6 +358791,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -360122,6 +360176,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -365677,6 +365732,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -378544,6 +378600,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -385808,6 +385865,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] diff --git a/src/rest/data/ghec-2022-11-28/schema.json b/src/rest/data/ghec-2022-11-28/schema.json index 2ef0d1f9152b..2136fe1fb874 100644 --- a/src/rest/data/ghec-2022-11-28/schema.json +++ b/src/rest/data/ghec-2022-11-28/schema.json @@ -4071,6 +4071,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -12786,6 +12787,14 @@ "category": "actions", "subcategory": "self-hosted-runners", "parameters": [ + { + "name": "name", + "description": "

The name of a self-hosted runner.

", + "in": "query", + "schema": { + "type": "string" + } + }, { "name": "enterprise", "description": "

The slug version of the enterprise name. You can also substitute this value with the enterprise id.

", @@ -14242,6 +14251,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -15817,6 +15827,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -17389,6 +17400,14 @@ "category": "actions", "subcategory": "self-hosted-runners", "parameters": [ + { + "name": "name", + "description": "

The name of a self-hosted runner.

", + "in": "query", + "schema": { + "type": "string" + } + }, { "name": "org", "description": "

The organization name. The name is not case sensitive.

", @@ -18849,6 +18868,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -20424,6 +20444,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -21992,6 +22013,14 @@ "category": "actions", "subcategory": "self-hosted-runners", "parameters": [ + { + "name": "name", + "description": "

The name of a self-hosted runner.

", + "in": "query", + "schema": { + "type": "string" + } + }, { "name": "owner", "description": "

The account owner of the repository. The name is not case sensitive.

", @@ -23492,6 +23521,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -25077,6 +25107,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -47971,6 +48002,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -52027,6 +52059,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -56077,6 +56110,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -60121,6 +60155,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -64155,6 +64190,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -68210,6 +68246,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -72244,6 +72281,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -76289,6 +76327,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -80334,6 +80373,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -88017,6 +88057,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -89638,6 +89679,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -91569,6 +91611,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -93047,6 +93090,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -101816,6 +101860,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -108182,6 +108227,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -110951,6 +110997,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -186064,6 +186111,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -187877,6 +187925,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -189346,6 +189395,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -215137,6 +215187,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -216795,6 +216846,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -237112,8 +237164,8 @@ "versionInfo": "1.0.0", "downloadLocation": "NOASSERTION", "filesAnalyzed": false, - "licenseConcluded": "NOASSERTION", - "licenseDeclared": "NOASSERTION" + "licenseConcluded": "MIT", + "licenseDeclared": "MIT" } ] } @@ -249564,6 +249616,7 @@ "acceptHeader": "application/vnd.github.v3+json", "bodyParameters": { "advanced_security_enabled_for_new_repositories": true, + "advanced_security_enabled_new_user_namespace_repos": true, "dependabot_alerts_enabled_for_new_repositories": true, "secret_scanning_enabled_for_new_repositories": true, "secret_scanning_push_protection_enabled_for_new_repositories": true, @@ -275354,6 +275407,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -278875,6 +278929,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -282314,6 +282369,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -285690,6 +285746,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -289037,6 +289094,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -292448,6 +292506,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -296139,6 +296198,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -299820,6 +299880,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -303157,6 +303218,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -310705,6 +310767,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -315679,6 +315742,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -343356,6 +343420,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -352300,6 +352365,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -354319,6 +354385,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -356303,6 +356370,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -361270,6 +361338,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -363282,6 +363351,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -365259,6 +365329,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -414868,6 +414939,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -416526,6 +416598,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -438132,6 +438205,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -439790,6 +439864,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -443849,6 +443924,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -445507,6 +445583,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -467839,6 +467916,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -470549,6 +470627,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -472362,6 +472441,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -473831,6 +473911,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -476970,6 +477051,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -478783,6 +478865,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -480252,6 +480335,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -485423,6 +485507,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -488091,6 +488176,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -489913,6 +489999,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -498948,6 +499035,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -500761,6 +500849,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -502230,6 +502319,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -504151,7 +504241,7 @@ } ], "previews": [], - "descriptionHTML": "

Returns all rules that apply to the specified branch. The branch does not need to exist; rules that would apply to a\nbranch with that name will be returned. All rules that apply will be returned, regardless of the level at which they\nare configured.

", + "descriptionHTML": "

Returns all active rules that apply to the specified branch. The branch does not need to exist; rules that would apply\nto a branch with that name will be returned. All active rules that apply will be returned, regardless of the level\nat which they are configured (e.g. repository or organization). Rules in rulesets with \"evaluate\" or \"disabled\"\nenforcement statuses are not returned.

", "statusCodes": [ { "httpStatusCode": "200", @@ -516619,6 +516709,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -524941,6 +525032,7 @@ "array", "null" ], + "description": "The users who contributed to the advisory.", "readOnly": true, "items": { "type": "object", @@ -525584,6 +525676,7 @@ "array", "null" ], + "description": "The users who contributed to the advisory.", "readOnly": true, "items": { "type": "object", @@ -548632,6 +548725,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -555981,6 +556075,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] diff --git a/src/rest/data/ghes-3.10-2022-11-28/schema.json b/src/rest/data/ghes-3.10-2022-11-28/schema.json index 6bb0daf4272d..8a847f2e3185 100644 --- a/src/rest/data/ghes-3.10-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.10-2022-11-28/schema.json @@ -4288,6 +4288,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -14461,6 +14462,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -16036,6 +16038,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -19078,6 +19081,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -20653,6 +20657,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -23731,6 +23736,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -25316,6 +25322,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -47769,6 +47776,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -51825,6 +51833,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -55875,6 +55884,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -59919,6 +59929,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -63953,6 +63964,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -68008,6 +68020,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -72042,6 +72055,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -76087,6 +76101,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -80132,6 +80147,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -87811,6 +87827,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -89432,6 +89449,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -91363,6 +91381,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -92841,6 +92860,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -101353,6 +101373,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -107719,6 +107740,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -110488,6 +110510,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -170787,6 +170810,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -172445,6 +172469,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -190312,8 +190337,8 @@ "versionInfo": "1.0.0", "downloadLocation": "NOASSERTION", "filesAnalyzed": false, - "licenseConcluded": "NOASSERTION", - "licenseDeclared": "NOASSERTION" + "licenseConcluded": "MIT", + "licenseDeclared": "MIT" } ] } @@ -203337,6 +203362,7 @@ "acceptHeader": "application/vnd.github.v3+json", "bodyParameters": { "advanced_security_enabled_for_new_repositories": true, + "advanced_security_enabled_new_user_namespace_repos": true, "dependabot_alerts_enabled_for_new_repositories": true, "secret_scanning_enabled_for_new_repositories": true, "secret_scanning_push_protection_enabled_for_new_repositories": true, @@ -237532,6 +237558,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -241053,6 +241080,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -244492,6 +244520,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -247868,6 +247897,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -251215,6 +251245,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -254626,6 +254657,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -258317,6 +258349,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -261998,6 +262031,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -265335,6 +265369,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -272883,6 +272918,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -277857,6 +277893,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -305534,6 +305571,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -313210,6 +313248,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -315229,6 +315268,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -317213,6 +317253,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -320366,6 +320407,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -322378,6 +322420,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -370897,6 +370940,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -372555,6 +372599,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -394161,6 +394206,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -395819,6 +395865,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -399878,6 +399925,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -401536,6 +401584,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -423795,6 +423844,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -426505,6 +426555,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -428318,6 +428369,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -429787,6 +429839,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -432919,6 +432972,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -434732,6 +434786,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -436201,6 +436256,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -440870,6 +440926,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -443557,6 +443614,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -445379,6 +445437,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -454414,6 +454473,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -456227,6 +456287,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -457696,6 +457757,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -463641,6 +463703,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -478599,6 +478662,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -485924,6 +485988,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] diff --git a/src/rest/data/ghes-3.6/schema.json b/src/rest/data/ghes-3.6/schema.json index 2bb06d168fab..dc50c2cb589c 100644 --- a/src/rest/data/ghes-3.6/schema.json +++ b/src/rest/data/ghes-3.6/schema.json @@ -3511,6 +3511,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -13199,6 +13200,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -14766,6 +14768,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -17578,6 +17581,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -19145,6 +19149,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -21983,6 +21988,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -23560,6 +23566,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -42433,6 +42440,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -46481,6 +46489,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -50523,6 +50532,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -54559,6 +54569,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -58585,6 +58596,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -62632,6 +62644,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -66658,6 +66671,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -70695,6 +70709,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -74732,6 +74747,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -82254,6 +82270,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -83867,6 +83884,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -85790,6 +85808,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -87260,6 +87279,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -95295,6 +95315,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -101571,6 +101592,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -104316,6 +104338,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -161835,6 +161858,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -163485,6 +163509,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -219464,6 +219489,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -222977,6 +223003,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -226408,6 +226435,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -229776,6 +229804,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -233115,6 +233144,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -236518,6 +236548,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -240201,6 +240232,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -243874,6 +243906,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -247203,6 +247236,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -254743,6 +254777,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -259699,6 +259734,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -287318,6 +287354,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -294986,6 +295023,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -296997,6 +297035,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -298973,6 +299012,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -302046,6 +302086,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -304050,6 +304091,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -333181,6 +333223,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -334831,6 +334874,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -356363,6 +356407,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -358013,6 +358058,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -362048,6 +362094,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -363698,6 +363745,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -385853,6 +385901,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -388549,6 +388598,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -390354,6 +390404,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -391815,6 +391866,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -394919,6 +394971,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -396724,6 +396777,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -398185,6 +398239,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -402495,6 +402550,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -405113,6 +405169,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -406927,6 +406984,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -415776,6 +415834,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -417581,6 +417640,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -419042,6 +419102,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -424843,6 +424904,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -439468,6 +439530,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -446632,6 +446695,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] diff --git a/src/rest/data/ghes-3.7/schema.json b/src/rest/data/ghes-3.7/schema.json index 4e6037360081..efe5f917d50b 100644 --- a/src/rest/data/ghes-3.7/schema.json +++ b/src/rest/data/ghes-3.7/schema.json @@ -4269,6 +4269,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -13971,6 +13972,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -15546,6 +15548,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -18366,6 +18369,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -19941,6 +19945,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -22787,6 +22792,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -24372,6 +24378,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -43295,6 +43302,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -47351,6 +47359,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -51401,6 +51410,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -55445,6 +55455,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -59479,6 +59490,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -63534,6 +63546,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -67568,6 +67581,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -71613,6 +71627,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -75658,6 +75673,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -83163,6 +83179,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -84784,6 +84801,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -86715,6 +86733,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -88193,6 +88212,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -96242,6 +96262,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -102526,6 +102547,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -105279,6 +105301,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -164265,6 +164288,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -165923,6 +165947,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -222293,6 +222318,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -225814,6 +225840,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -229253,6 +229280,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -232629,6 +232657,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -235976,6 +236005,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -239387,6 +239417,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -243078,6 +243109,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -246759,6 +246791,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -250096,6 +250129,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -257644,6 +257678,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -262608,6 +262643,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -290235,6 +290271,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -297911,6 +297948,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -299930,6 +299968,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -301914,6 +301953,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -304998,6 +305038,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -307010,6 +307051,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -336795,6 +336837,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -338453,6 +338496,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -359993,6 +360037,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -361651,6 +361696,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -365694,6 +365740,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -367352,6 +367399,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -389518,6 +389566,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -392228,6 +392277,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -394041,6 +394091,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -395510,6 +395561,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -398628,6 +398680,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -400441,6 +400494,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -401910,6 +401964,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -406238,6 +406293,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -408867,6 +408923,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -410689,6 +410746,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -419597,6 +419655,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -421410,6 +421469,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -422879,6 +422939,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -428694,6 +428755,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -443369,6 +443431,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -450544,6 +450607,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] diff --git a/src/rest/data/ghes-3.8/schema.json b/src/rest/data/ghes-3.8/schema.json index 0d73743b4c5d..12dea9a55b80 100644 --- a/src/rest/data/ghes-3.8/schema.json +++ b/src/rest/data/ghes-3.8/schema.json @@ -4288,6 +4288,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -13992,6 +13993,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -15567,6 +15569,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -18387,6 +18390,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -19962,6 +19966,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -22808,6 +22813,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -24393,6 +24399,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -46067,6 +46074,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -50123,6 +50131,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -54173,6 +54182,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -58217,6 +58227,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -62251,6 +62262,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -66306,6 +66318,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -70340,6 +70353,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -74385,6 +74399,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -78430,6 +78445,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -85935,6 +85951,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -87556,6 +87573,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -89487,6 +89505,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -90965,6 +90984,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -99306,6 +99326,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -105631,6 +105652,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -108392,6 +108414,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -167652,6 +167675,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -169310,6 +169334,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -198851,6 +198876,7 @@ "acceptHeader": "application/vnd.github.v3+json", "bodyParameters": { "advanced_security_enabled_for_new_repositories": true, + "advanced_security_enabled_new_user_namespace_repos": true, "dependabot_alerts_enabled_for_new_repositories": true, "secret_scanning_enabled_for_new_repositories": true, "secret_scanning_push_protection_enabled_for_new_repositories": true, @@ -232330,6 +232356,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -235851,6 +235878,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -239290,6 +239318,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -242666,6 +242695,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -246013,6 +246043,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -249424,6 +249455,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -253115,6 +253147,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -256796,6 +256829,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -260133,6 +260167,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -267681,6 +267716,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -272645,6 +272681,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -300272,6 +300309,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -307948,6 +307986,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -309967,6 +310006,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -311951,6 +311991,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -315035,6 +315076,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -317047,6 +317089,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -346954,6 +346997,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -348612,6 +348656,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -370158,6 +370203,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -371816,6 +371862,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -375859,6 +375906,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -377517,6 +377565,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -399707,6 +399756,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -402417,6 +402467,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -404230,6 +404281,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -405699,6 +405751,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -408817,6 +408870,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -410630,6 +410684,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -412099,6 +412154,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -416427,6 +416483,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -419056,6 +419113,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -420878,6 +420936,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -429786,6 +429845,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -431599,6 +431659,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -433068,6 +433129,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -438883,6 +438945,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -453662,6 +453725,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -460837,6 +460901,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] 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 11d925bd7286..e5092ebb7814 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 @@ -4288,6 +4288,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -14211,6 +14212,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -15786,6 +15788,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -18606,6 +18609,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -20181,6 +20185,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -23027,6 +23032,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -24612,6 +24618,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -46857,6 +46864,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -50913,6 +50921,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -54963,6 +54972,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -59007,6 +59017,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -63041,6 +63052,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -67096,6 +67108,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -71130,6 +71143,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -75175,6 +75189,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -79220,6 +79235,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -86857,6 +86873,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -88478,6 +88495,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -90409,6 +90427,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -91887,6 +91906,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -100371,6 +100391,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -106737,6 +106758,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -109506,6 +109528,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -169451,6 +169474,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -171109,6 +171133,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -188948,8 +188973,8 @@ "versionInfo": "1.0.0", "downloadLocation": "NOASSERTION", "filesAnalyzed": false, - "licenseConcluded": "NOASSERTION", - "licenseDeclared": "NOASSERTION" + "licenseConcluded": "MIT", + "licenseDeclared": "MIT" } ] } @@ -201092,6 +201117,7 @@ "acceptHeader": "application/vnd.github.v3+json", "bodyParameters": { "advanced_security_enabled_for_new_repositories": true, + "advanced_security_enabled_new_user_namespace_repos": true, "dependabot_alerts_enabled_for_new_repositories": true, "secret_scanning_enabled_for_new_repositories": true, "secret_scanning_push_protection_enabled_for_new_repositories": true, @@ -235019,6 +235045,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -238540,6 +238567,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -241979,6 +242007,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -245355,6 +245384,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -248702,6 +248732,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -252113,6 +252144,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -255804,6 +255836,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -259485,6 +259518,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -262822,6 +262856,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -270370,6 +270405,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -275334,6 +275370,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -302961,6 +302998,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -310637,6 +310675,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -312656,6 +312695,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -314640,6 +314680,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -317779,6 +317820,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -319791,6 +319833,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -364847,6 +364890,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -366505,6 +366549,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -388061,6 +388106,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -389719,6 +389765,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -393762,6 +393809,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -395420,6 +395468,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -417665,6 +417714,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -420375,6 +420425,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -422188,6 +422239,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -423657,6 +423709,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -426775,6 +426828,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -428588,6 +428642,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -430057,6 +430112,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -434598,6 +434654,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -437271,6 +437328,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -439093,6 +439151,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -448100,6 +448159,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -449913,6 +449973,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -451382,6 +451443,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -457285,6 +457347,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -472119,6 +472182,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] @@ -479349,6 +479413,7 @@ "description": "Whether downloads are enabled.", "default": true, "type": "boolean", + "deprecated": true, "examples": [ true ] diff --git a/src/rest/lib/config.json b/src/rest/lib/config.json index 96a387b3604f..78e66ec44c1b 100644 --- a/src/rest/lib/config.json +++ b/src/rest/lib/config.json @@ -36,5 +36,5 @@ ] } }, - "sha": "5510d0097b4671e408afa4da29456749b30205ff" + "sha": "75ade23f4b33a6efb37297ac3073a00294a0d5b8" } \ No newline at end of file diff --git a/src/webhooks/lib/config.json b/src/webhooks/lib/config.json index 5ea3608905ca..27a49b10f69a 100644 --- a/src/webhooks/lib/config.json +++ b/src/webhooks/lib/config.json @@ -1,3 +1,3 @@ { - "sha": "5510d0097b4671e408afa4da29456749b30205ff" + "sha": "75ade23f4b33a6efb37297ac3073a00294a0d5b8" } \ No newline at end of file From e61e10586b1ac7562165b41e88474d30044cb139 Mon Sep 17 00:00:00 2001 From: Laura Coursen Date: Fri, 8 Sep 2023 14:11:43 -0500 Subject: [PATCH 08/15] Temporarily make @lecoursen code owner of audit log events (#42263) --- .github/CODEOWNERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 949a24869f06..df7e6be6a24d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -12,3 +12,9 @@ src/ghes-releases/lib/enterprise-dates.json @github/docs-content-enterprise # Requires review of #actions-oidc-integration, docs-engineering/issues/1506 content/actions/deployment/security-hardening-your-deployments/** @github/oidc + +# Temporary, so @lecoursen can copy any changes to the audit log reference +# to the JSON file that will soon be used to auto-generate this content +/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/audit-log-events-for-your-enterprise.md @lecoursen +/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/audit-log-events-for-your-organization.md @lecoursen +/content/authentication/keeping-your-account-and-data-secure/security-log-events.md @lecoursen From bdf9be5dcc8fbba091d1f983526cab836092027d Mon Sep 17 00:00:00 2001 From: Rachael Sewell Date: Fri, 8 Sep 2023 12:21:48 -0700 Subject: [PATCH 09/15] refactor markdownlint tests (#42200) --- .../lib/default-markdownlint-options.js | 4 +- src/content-linter/lib/helpers/utils.js | 9 +++ src/content-linter/lib/init-test.js | 4 +- .../image-alt-text-end-punctuation.js | 6 +- .../lib/linting-rules/internal-links-lang.js | 5 +- src/content-linter/scripts/markdownlint.js | 2 +- .../tests/fixtures/code-fence-line-length.md | 31 ----------- .../image-alt-text-end-punctuation.md | 15 ----- .../image-alt-text-exclude-start-words.md | 6 -- .../tests/fixtures/image-alt-text-length.md | 7 --- .../tests/fixtures/image-file-kebab.md | 7 --- .../tests/fixtures/internal-links-lang.md | 21 ------- .../tests/fixtures/internal-links-slash.md | 12 ---- .../tests/unit/code-fence-line-length.js | 55 +++++++++++++------ .../unit/image-alt-text-end-punctuation.js | 52 +++++++++++++++--- .../image-alt-text-exclude-start-words.js | 31 ++++++++--- .../tests/unit/image-alt-text-length.js | 27 ++++++--- .../tests/unit/image-file-kebab.js | 27 ++++++--- .../tests/unit/internal-links-lang.js | 37 ++++++++++--- .../tests/unit/internal-links-slash.js | 47 +++++++++++++--- src/languages/lib/languages.js | 9 ++- 21 files changed, 245 insertions(+), 169 deletions(-) delete mode 100644 src/content-linter/tests/fixtures/code-fence-line-length.md delete mode 100644 src/content-linter/tests/fixtures/image-alt-text-end-punctuation.md delete mode 100644 src/content-linter/tests/fixtures/image-alt-text-exclude-start-words.md delete mode 100644 src/content-linter/tests/fixtures/image-alt-text-length.md delete mode 100644 src/content-linter/tests/fixtures/image-file-kebab.md delete mode 100644 src/content-linter/tests/fixtures/internal-links-lang.md delete mode 100644 src/content-linter/tests/fixtures/internal-links-slash.md diff --git a/src/content-linter/lib/default-markdownlint-options.js b/src/content-linter/lib/default-markdownlint-options.js index 45970a0f2868..974107fff25c 100644 --- a/src/content-linter/lib/default-markdownlint-options.js +++ b/src/content-linter/lib/default-markdownlint-options.js @@ -1,11 +1,11 @@ -export function testOptions(rule, module, fixtureFile) { +export function testOptions(rule, module, strings) { const config = { default: false, [rule]: true, } const options = { - files: [fixtureFile], + strings, customRules: [module], config, } diff --git a/src/content-linter/lib/helpers/utils.js b/src/content-linter/lib/helpers/utils.js index be7596792f0f..c1f7c0388e6c 100644 --- a/src/content-linter/lib/helpers/utils.js +++ b/src/content-linter/lib/helpers/utils.js @@ -9,3 +9,12 @@ export function getRange(line, content) { const startColumnIndex = line.indexOf(content) return startColumnIndex !== -1 ? [startColumnIndex + 1, content.length] : null } + +export function isStringQuoted(text) { + // String starts with either a single or double quote + // ends with either a single or double quote + // and optionally ends with a question mark or exclamation point + // because that punctuation can exist outside of the quoted string + const regex = /^['"].*['"][?!]?$/ + return text.match(regex) +} diff --git a/src/content-linter/lib/init-test.js b/src/content-linter/lib/init-test.js index 91b84f4edb28..88e74b6ae923 100644 --- a/src/content-linter/lib/init-test.js +++ b/src/content-linter/lib/init-test.js @@ -2,7 +2,7 @@ import markdownlint from 'markdownlint' import { testOptions } from './default-markdownlint-options.js' -export async function runRule(module, fixtureFile) { - const options = testOptions(module.names[0], module, fixtureFile) +export async function runRule(module, strings) { + const options = testOptions(module.names[0], module, strings) return await markdownlint.promises.markdownlint(options) } diff --git a/src/content-linter/lib/linting-rules/image-alt-text-end-punctuation.js b/src/content-linter/lib/linting-rules/image-alt-text-end-punctuation.js index f8a7b7ca8c86..a1889590b546 100644 --- a/src/content-linter/lib/linting-rules/image-alt-text-end-punctuation.js +++ b/src/content-linter/lib/linting-rules/image-alt-text-end-punctuation.js @@ -1,6 +1,6 @@ import { forEachInlineChild } from 'markdownlint-rule-helpers' -import { addFixErrorDetail, getRange } from '../helpers/utils.js' +import { addFixErrorDetail, getRange, isStringQuoted } from '../helpers/utils.js' export const imageAltTextEndPunctuation = { names: ['GHD002', 'image-alt-text-end-punctuation'], @@ -20,7 +20,9 @@ export const imageAltTextEndPunctuation = { ) { addFixErrorDetail(onError, token.lineNumber, imageAltText + '.', imageAltText, range, { lineNumber: token.lineNumber, - editColumn: token.line.indexOf(']') + 1, + editColumn: isStringQuoted(imageAltText) + ? token.line.indexOf(']') + : token.line.indexOf(']') + 1, deleteCount: 0, insertText: '.', }) diff --git a/src/content-linter/lib/linting-rules/internal-links-lang.js b/src/content-linter/lib/linting-rules/internal-links-lang.js index be6b3671ee24..f3f32539de70 100644 --- a/src/content-linter/lib/linting-rules/internal-links-lang.js +++ b/src/content-linter/lib/linting-rules/internal-links-lang.js @@ -1,7 +1,6 @@ import { filterTokens } from 'markdownlint-rule-helpers' - import { addFixErrorDetail, getRange } from '../helpers/utils.js' -import { languageKeys } from '#src/languages/lib/languages.js' +import { allLanguageKeys } from '#src/languages/lib/languages.js' export const internalLinksLang = { names: ['GHD005', 'internal-links-lang'], @@ -24,7 +23,7 @@ export const internalLinksLang = { .filter((attr) => attr[0] === 'href') .filter((attr) => attr[1].startsWith('/') || !attr[1].startsWith('//')) // Filter out link paths that start with language code - .filter((attr) => languageKeys.some((lang) => attr[1].split('/')[1] === lang)) + .filter((attr) => allLanguageKeys.some((lang) => attr[1].split('/')[1] === lang)) // Get the link path from the attribute .map((attr) => attr[1]) // Create errors for each link path that includes a language code diff --git a/src/content-linter/scripts/markdownlint.js b/src/content-linter/scripts/markdownlint.js index c8f723d2c900..6f4ae5712b03 100755 --- a/src/content-linter/scripts/markdownlint.js +++ b/src/content-linter/scripts/markdownlint.js @@ -46,7 +46,7 @@ main() async function main() { // If paths has not been specified, lint all files const files = getFilesToLint((summaryByRule && ALL_CONTENT_DIR) || paths || getChangedFiles()) - const spinner = ora({ text: 'Running content linter', spinner: 'simpleDots' }) + const spinner = ora({ text: 'Running content linter\n\n', spinner: 'simpleDots' }) if (!files.length) { spinner.succeed('No files to lint') diff --git a/src/content-linter/tests/fixtures/code-fence-line-length.md b/src/content-linter/tests/fixtures/code-fence-line-length.md deleted file mode 100644 index b0af0549729f..000000000000 --- a/src/content-linter/tests/fixtures/code-fence-line-length.md +++ /dev/null @@ -1,31 +0,0 @@ -# Heading - -Line length exceeds max length by 1 - -```shell -111 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -bbb -``` - -Line length equals max length - -```shell -111 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -bbbbbbb -``` - -Line length is less than max length - -```shell -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -``` - -Multiple lines in code fence exceed max length by 1 - -```shell -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccc -1 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb -``` diff --git a/src/content-linter/tests/fixtures/image-alt-text-end-punctuation.md b/src/content-linter/tests/fixtures/image-alt-text-end-punctuation.md deleted file mode 100644 index 896f13ee1b63..000000000000 --- a/src/content-linter/tests/fixtures/image-alt-text-end-punctuation.md +++ /dev/null @@ -1,15 +0,0 @@ -# hi - -![GitHub Documentation is here](./image.png) - -![GitHub Documentation is found on this site.](./image.png) - -GitHub Documentation's logo looks like this: ![logo of GitHub Docs?](./image.png) over here. - -!["image".](./image.png) -!["image!"](./image.png) -!["image"!](./image.png) -!["image?"](./image.png) -!["image"?](./image.png) -!["image."](./image.png) -!["image"](./image.png) diff --git a/src/content-linter/tests/fixtures/image-alt-text-exclude-start-words.md b/src/content-linter/tests/fixtures/image-alt-text-exclude-start-words.md deleted file mode 100644 index 03d7372c011e..000000000000 --- a/src/content-linter/tests/fixtures/image-alt-text-exclude-start-words.md +++ /dev/null @@ -1,6 +0,0 @@ -![This is ok image](/images/this-is-ok.png) -![Image with alt text](/images/image-with-alt-text.png) -![image with alt text](/images/image-with-alt-text.png) -![Graphic with alt text](/images/graphic-with-alt-text.png) -![graphic with alt text](/images/graphic-with-alt-text.png) -![This is ok grapic](/images/this-is-ok.png) diff --git a/src/content-linter/tests/fixtures/image-alt-text-length.md b/src/content-linter/tests/fixtures/image-alt-text-length.md deleted file mode 100644 index 2fef08d2459d..000000000000 --- a/src/content-linter/tests/fixtures/image-alt-text-length.md +++ /dev/null @@ -1,7 +0,0 @@ -![012345678901234567890123456789012345678](./image.png) - -![0123456789012345678901234567890123456789](./image.png) - -![012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789](./image.png) - -![0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567891](./image.png) diff --git a/src/content-linter/tests/fixtures/image-file-kebab.md b/src/content-linter/tests/fixtures/image-file-kebab.md deleted file mode 100644 index 0b7130d34393..000000000000 --- a/src/content-linter/tests/fixtures/image-file-kebab.md +++ /dev/null @@ -1,7 +0,0 @@ -# Header - -![Image.](image-file.jpg) -![Image.](/path/to/imageFile.jpg) -![Image.](image_file.jpg) -![Image.](imageFile-Location.png) -![Image.](image-file-Location.jpg) diff --git a/src/content-linter/tests/fixtures/internal-links-lang.md b/src/content-linter/tests/fixtures/internal-links-lang.md deleted file mode 100644 index b92004bba7fa..000000000000 --- a/src/content-linter/tests/fixtures/internal-links-lang.md +++ /dev/null @@ -1,21 +0,0 @@ -# English Docs - -[English Docs](/en/docs) - -This gets caught by the internal-links-slashes rule -[Internal Link Fail Docs](en/docs) - -## Documentation - -These are the [Docs](//ja/actions) we need. - -## Korean Documentation - -This is the [Korean Docs](/actions) - -Should not catch links to enterprise as an english prefix -[Enterprise](/enterprise/overview) - -Hello [GitHub Actions](//example.com) - -[Link to just a landing page in english](/en) diff --git a/src/content-linter/tests/fixtures/internal-links-slash.md b/src/content-linter/tests/fixtures/internal-links-slash.md deleted file mode 100644 index 7c054104c403..000000000000 --- a/src/content-linter/tests/fixtures/internal-links-slash.md +++ /dev/null @@ -1,12 +0,0 @@ -# hi - -Hello [GitHub Actions](/actions/index.md) -[Anchor on page](#anchor-on-page) -[GitHub Actions Quickstart](actions/quickstart.md) -[External Link](https://git-scm.com/) -[External link](http://example.com) -[External Link](mailto:email@example.com) - -## Anchor on page - -Stuff diff --git a/src/content-linter/tests/unit/code-fence-line-length.js b/src/content-linter/tests/unit/code-fence-line-length.js index 2d5587bf8ef3..94cf1ea3250e 100644 --- a/src/content-linter/tests/unit/code-fence-line-length.js +++ b/src/content-linter/tests/unit/code-fence-line-length.js @@ -5,25 +5,48 @@ import { codeFenceLineLength } from '../../lib/linting-rules/code-fence-line-len jest.setTimeout(60 * 1000) -const fixtureFilePath = 'src/content-linter/tests/fixtures/code-fence-line-length.md' -const result = await runRule(codeFenceLineLength, fixtureFilePath) -const errors = result[fixtureFilePath] - describe(codeFenceLineLength.names.join(' - '), () => { - test('line length of max length + 1 fails', async () => { - expect(errors.map((error) => error.lineNumber).includes(7)).toBe(true) - }) - test('line length equals max length passes', async () => { - expect(errors.map((error) => error.lineNumber).includes(15)).toBe(false) + test('line length of max + 1 fails', async () => { + const markdown = [ + '```shell', + '111', + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + 'bbb', + '```', + ].join('\n') + const result = await runRule(codeFenceLineLength, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(1) + expect(errors[0].lineNumber).toBe(3) + expect(errors[0].errorRange).toEqual([1, 61]) + expect(errors[0].fixInfo).toBeNull() }) - test('line length less than max length passes', async () => { - expect(errors.map((error) => error.lineNumber).includes(22)).toBe(false) + test('line length less than or equal to max length passes', async () => { + const markdown = [ + '```javascript', + '111', + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + '```', + ].join('\n') + const result = await runRule(codeFenceLineLength, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(0) }) test('multiple lines in code block that exceed max length fail', async () => { - expect(errors.map((error) => error.lineNumber).includes(28)).toBe(true) - expect(errors.map((error) => error.lineNumber).includes(30)).toBe(true) - }) - test('errors only occur on expected lines', async () => { - expect(errors.length).toBe(3) + const markdown = [ + '```', + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccc', + '1', + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbb', + '```', + ].join('\n') + const result = await runRule(codeFenceLineLength, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(2) + expect(errors[0].lineNumber).toBe(2) + expect(errors[1].lineNumber).toBe(4) + expect(errors[0].errorRange).toEqual([1, 61]) + expect(errors[1].errorRange).toEqual([1, 61]) }) }) diff --git a/src/content-linter/tests/unit/image-alt-text-end-punctuation.js b/src/content-linter/tests/unit/image-alt-text-end-punctuation.js index 49571646e4af..45c3e7d42991 100644 --- a/src/content-linter/tests/unit/image-alt-text-end-punctuation.js +++ b/src/content-linter/tests/unit/image-alt-text-end-punctuation.js @@ -5,14 +5,52 @@ import { imageAltTextEndPunctuation } from '../../lib/linting-rules/image-alt-te jest.setTimeout(60 * 1000) -const fixtureFile = 'src/content-linter/tests/fixtures/image-alt-text-end-punctuation.md' -const result = await runRule(imageAltTextEndPunctuation, fixtureFile) -const errors = result[fixtureFile] - describe(imageAltTextEndPunctuation.names.join(' - '), () => { - test('image alt text must have an end punctuation', () => { - expect(Object.keys(result).length).toBe(1) + test('image alt text without end punctutation errors', async () => { + const markdown = [ + '# Heading', + '', + '![GitHub Documentation is here](./image.png)', + '', + '!["image"](./image.png)', + ].join('\n') + const result = await runRule(imageAltTextEndPunctuation, { markdown }) + const errors = result.markdown expect(errors.length).toBe(2) - expect(errors.map((error) => error.lineNumber)).toEqual([3, 15]) + expect(errors[0].lineNumber).toBe(3) + expect(errors[1].lineNumber).toBe(5) + expect(errors[0].errorRange).toEqual([3, 28]) + expect(errors[1].errorRange).toEqual([3, 7]) + expect(errors[0].fixInfo).toEqual({ + lineNumber: 3, + editColumn: 31, + deleteCount: 0, + insertText: '.', + }) + expect(errors[1].fixInfo).toEqual({ + lineNumber: 5, + editColumn: 9, + deleteCount: 0, + insertText: '.', + }) + }) + test('image alt text with end punctutation passes', async () => { + const markdown = [ + '# Heading', + '', + '![GitHub Documentation is found on this site.](./image.png)', + '', + "GitHub Documentation's logo looks like this: ![logo of GitHub Docs?](./image.png) over here.", + '', + '!["image".](./image.png)', + '!["image!"](./image.png)', + '!["image"!](./image.png)', + '!["image?"](./image.png)', + '!["image"?](./image.png)', + '!["image."](./image.png)', + ].join('\n') + const result = await runRule(imageAltTextEndPunctuation, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(0) }) }) diff --git a/src/content-linter/tests/unit/image-alt-text-exclude-start-words.js b/src/content-linter/tests/unit/image-alt-text-exclude-start-words.js index 241b45c00480..087563bba835 100644 --- a/src/content-linter/tests/unit/image-alt-text-exclude-start-words.js +++ b/src/content-linter/tests/unit/image-alt-text-exclude-start-words.js @@ -5,14 +5,31 @@ import { imageAltTextExcludeStartWords } from '../../lib/linting-rules/image-alt jest.setTimeout(60 * 1000) -const fixtureFile = 'src/content-linter/tests/fixtures/image-alt-text-exclude-start-words.md' -const result = await runRule(imageAltTextExcludeStartWords, fixtureFile) -const errors = result[fixtureFile] - describe(imageAltTextExcludeStartWords.names.join(' - '), () => { - test('image alt text does not start with exclude words', () => { - expect(Object.keys(result).length).toBe(1) + test('image alt text that starts with exclude words fails', async () => { + const markdown = [ + '![Image with alt text](/images/image-with-alt-text.png)', + '![image with alt text](/images/image-with-alt-text.png)', + '![Graphic with alt text](/images/graphic-with-alt-text.png)', + '![graphic with alt text](/images/graphic-with-alt-text.png)', + ].join('\n') + const result = await runRule(imageAltTextExcludeStartWords, { markdown }) + const errors = result.markdown expect(errors.length).toBe(4) - expect(errors.map((error) => error.lineNumber)).toEqual([2, 3, 4, 5]) + expect(errors[0].lineNumber).toBe(1) + expect(errors[1].lineNumber).toBe(2) + expect(errors[2].lineNumber).toBe(3) + expect(errors[3].lineNumber).toBe(4) + expect(errors[0].errorRange).toEqual([3, 19]) + expect(errors[2].errorRange).toEqual([3, 21]) + }) + test('image alt text with no start exclude words passes', async () => { + const markdown = [ + '![This is ok image](/images/this-is-ok.png)', + '![This is ok grapic](/images/this-is-ok.png)', + ].join('\n') + const result = await runRule(imageAltTextExcludeStartWords, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(0) }) }) diff --git a/src/content-linter/tests/unit/image-alt-text-length.js b/src/content-linter/tests/unit/image-alt-text-length.js index 7e9c30967f76..04e605101a8a 100644 --- a/src/content-linter/tests/unit/image-alt-text-length.js +++ b/src/content-linter/tests/unit/image-alt-text-length.js @@ -5,14 +5,27 @@ import { incorrectAltTextLength } from '../../lib/linting-rules/image-alt-text-l jest.setTimeout(60 * 1000) -const fixtureFile = 'src/content-linter/tests/fixtures/image-alt-text-length.md' -const result = await runRule(incorrectAltTextLength, fixtureFile) -const errors = result[fixtureFile] - describe(incorrectAltTextLength.names.join(' - '), () => { - test('image with correct length alt text', () => { - expect(Object.keys(result).length).toBe(1) + test('image with incorrect alt text length fails', async () => { + const markdown = [ + '![012345678901234567890123456789012345678](./image.png)', + '![0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567891](./image.png)', + ].join('\n') + const result = await runRule(incorrectAltTextLength, { markdown }) + const errors = result.markdown expect(errors.length).toBe(2) - expect(errors.map((error) => error.lineNumber)).toEqual([1, 7]) + expect(errors[0].lineNumber).toBe(1) + expect(errors[1].lineNumber).toBe(2) + expect(errors[0].errorRange).toEqual([3, 39]) + expect(errors[1].errorRange).toEqual([3, 151]) + }) + test('image with correct lenght alt test passes', async () => { + const markdown = [ + '![0123456789012345678901234567890123456789](./image.png)', + '![012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789](./image.png)', + ].join('\n') + const result = await runRule(incorrectAltTextLength, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(0) }) }) diff --git a/src/content-linter/tests/unit/image-file-kebab.js b/src/content-linter/tests/unit/image-file-kebab.js index b75762b7509c..2814258f29eb 100644 --- a/src/content-linter/tests/unit/image-file-kebab.js +++ b/src/content-linter/tests/unit/image-file-kebab.js @@ -5,14 +5,27 @@ import { imageFileKebab } from '../../lib/linting-rules/image-file-kebab' jest.setTimeout(20 * 1000) -const fixtureFile = 'src/content-linter/tests/fixtures/image-file-kebab.md' -const result = await runRule(imageFileKebab, fixtureFile) -const errors = result[fixtureFile] - describe(imageFileKebab.names.join(' - '), () => { - test('image file with lowercase kebab case', () => { - expect(Object.keys(result).length).toBe(1) + test('image file not using lowercase kebab case fails', async () => { + const markdown = [ + '# Heading', + '', + '![Image.](/path/to/imageFile.jpg)', + '![Image.](image_file.jpg)', + '![Image.](imageFile-Location.png)', + '![Image.](image-file-Location.jpg)', + ].join('\n') + const result = await runRule(imageFileKebab, { markdown }) + const errors = result.markdown expect(errors.length).toBe(4) - expect(errors.map((error) => error.lineNumber)).toEqual([4, 5, 6, 7]) + expect(errors.map((error) => error.lineNumber)).toEqual([3, 4, 5, 6]) + expect(errors[0].errorRange).toEqual([20, 9]) + expect(errors[1].errorRange).toEqual([11, 10]) + }) + test('image file using lowercase kebab case passes', async () => { + const markdown = ['![Image.](image-file.jpg)'].join('\n') + const result = await runRule(imageFileKebab, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(0) }) }) diff --git a/src/content-linter/tests/unit/internal-links-lang.js b/src/content-linter/tests/unit/internal-links-lang.js index 88a6bc839377..517d0f46763d 100644 --- a/src/content-linter/tests/unit/internal-links-lang.js +++ b/src/content-linter/tests/unit/internal-links-lang.js @@ -4,14 +4,37 @@ import { runRule } from '../../lib/init-test.js' import { internalLinksLang } from '../../lib/linting-rules/internal-links-lang.js' jest.setTimeout(30 * 1000) -const fixtureFilePath = 'src/content-linter/tests/fixtures/internal-links-lang.md' -const result = await runRule(internalLinksLang, fixtureFilePath) -const errors = result[fixtureFilePath] describe(internalLinksLang.names.join(' - '), () => { - test('internal links and hardcoded language codes', () => { - expect(Object.keys(result).length).toBe(1) - expect(errors.length).toBe(2) - expect(errors.map((error) => error.lineNumber)).toEqual([3, 21]) + test('internal links with hardcoded language codes fail', async () => { + const markdown = [ + '[English Docs](/en/docs)', + '[Link to just a landing page in english](/en)', + '[Korean Docs](/ko/actions)', + ].join('\n') + const result = await runRule(internalLinksLang, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(3) + expect(errors.map((error) => error.lineNumber)).toEqual([1, 2, 3]) + expect(errors[0].errorRange).toEqual([16, 8]) + expect(errors[1].errorRange).toEqual([42, 3]) + expect(errors[2].errorRange).toEqual([15, 11]) + expect(errors[0].fixInfo).toEqual({ deleteCount: 3, editColumn: 16, lineNumber: 1 }) + expect(errors[1].fixInfo).toEqual({ deleteCount: 3, editColumn: 42, lineNumber: 2 }) + expect(errors[2].fixInfo).toEqual({ deleteCount: 3, editColumn: 15, lineNumber: 3 }) + }) + test('internal links with no hardcoded language codes pass', async () => { + const markdown = [ + // This is caught by the internal-links-slashes rule + '[Internal Link Fail Docs](en/docs)', + // a // means the link is external + 'These are the [Docs](//ja/actions) we need.', + 'This is the [actions Docs](/actions)', + // A link that starts with a language code + '[Enterprise](/enterprise/overview)', + ].join('\n') + const result = await runRule(internalLinksLang, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(0) }) }) diff --git a/src/content-linter/tests/unit/internal-links-slash.js b/src/content-linter/tests/unit/internal-links-slash.js index ea169fc0b404..2902ef6a5e90 100755 --- a/src/content-linter/tests/unit/internal-links-slash.js +++ b/src/content-linter/tests/unit/internal-links-slash.js @@ -5,14 +5,45 @@ import { internalLinksSlash } from '../../lib/linting-rules/internal-links-slash jest.setTimeout(60 * 1000) -const fixtureFile = 'src/content-linter/tests/fixtures/internal-links-slash.md' -const result = await runRule(internalLinksSlash, fixtureFile) -const errors = result[fixtureFile] - describe(internalLinksSlash.names.join(' - '), () => { - test('relative links start with /', () => { - expect(Object.keys(result).length).toBe(1) - expect(errors.length).toBe(1) - expect(errors.map((error) => error.lineNumber)).toEqual([5]) + test('relative links that do not start with / fail', async () => { + const markdown = [ + '# heading', + '[GitHub Actions Quickstart](actions/quickstart.md)', + '', + '[GitHub Actions Quickstart](en/quickstart.md)', + ].join('\n') + const result = await runRule(internalLinksSlash, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(2) + expect(errors.map((error) => error.lineNumber)).toEqual([2, 4]) + expect(errors[0].errorRange).toEqual([29, 21]) + expect(errors[1].errorRange).toEqual([29, 16]) + expect(errors[0].fixInfo).toEqual({ + deleteCount: 0, + editColumn: 29, + insertText: '/', + lineNumber: 2, + }) + expect(errors[1].fixInfo).toEqual({ + deleteCount: 0, + editColumn: 29, + insertText: '/', + lineNumber: 4, + }) + }) + test('relative links that start with / pass', async () => { + const markdown = [ + 'Hello [GitHub Actions](/actions/index.md)', + // Not a relative page link + '[Anchor on page](#anchor-on-page)', + // Not internal links + '[External Link](https://git-scm.com/)', + '[External link](http://example.com)', + '[External Link](mailto:email@example.com)', + ].join('\n') + const result = await runRule(internalLinksSlash, { markdown }) + const errors = result.markdown + expect(errors.length).toBe(0) }) }) diff --git a/src/languages/lib/languages.js b/src/languages/lib/languages.js index de04af779534..c2e8aeb714f4 100644 --- a/src/languages/lib/languages.js +++ b/src/languages/lib/languages.js @@ -45,7 +45,7 @@ function getRoot(languageCode) { // Languages in order of accept-language header frequency // 92BD1212-61B8-4E7A: Remove `wip: Boolean` for the public ship of ko, fr, de, ru -const languages = { +const allLanguages = { en: { name: 'English', code: 'en', @@ -122,6 +122,13 @@ const languages = { wip: false, }, } +// Some markdownlint tests depend on having access to all +// language keys. Not modifying the original object makes +// it possible to export all keys, even when those directories +// don't exist on disk. +Object.freeze(allLanguages) +export const allLanguageKeys = Object.keys(allLanguages) +const languages = { ...allLanguages } if (TRANSLATIONS_FIXTURE_ROOT) { // Keep all languages that have a directory in the fixture root. From 31d83ed1931b5b58669eb52c28fb91def932fd64 Mon Sep 17 00:00:00 2001 From: Rachael Sewell Date: Fri, 8 Sep 2023 12:29:39 -0700 Subject: [PATCH 10/15] Break up giant content linter test suite (#42144) --- .github/workflows/test.yml | 4 +- lib/ajv-validate.js | 16 ++ .../tests/lint-code-languages.js | 18 -- src/content-linter/tests/lint-files.js | 224 +----------------- .../tests/lint-secret-scanning-data.js | 41 ---- .../lib/learning-tracks-schema.js | 0 src/learning-track/tests/validate-schema.js | 56 +++++ .../lib/release-notes-schema.js | 0 src/release-notes/tests/validate-schema.js | 42 ++++ src/release-notes/tests/yaml.js | 63 +++++ .../lib/secret-scanning-schema.js | 0 src/secret-scanning/tests/validate-schema.js | 25 ++ 12 files changed, 207 insertions(+), 282 deletions(-) create mode 100644 lib/ajv-validate.js delete mode 100644 src/content-linter/tests/lint-code-languages.js delete mode 100644 src/content-linter/tests/lint-secret-scanning-data.js rename src/{content-linter => learning-track}/lib/learning-tracks-schema.js (100%) create mode 100644 src/learning-track/tests/validate-schema.js rename src/{content-linter => release-notes}/lib/release-notes-schema.js (100%) create mode 100644 src/release-notes/tests/validate-schema.js create mode 100644 src/release-notes/tests/yaml.js rename src/{content-linter => secret-scanning}/lib/secret-scanning-schema.js (100%) create mode 100644 src/secret-scanning/tests/validate-schema.js diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d59619d5ea2e..cb154f7591c5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -53,16 +53,18 @@ jobs: { name: 'github-apps', path: 'src/github-apps/tests', }, { name: 'graphql', path: 'src/graphql/tests', }, { name: 'landings', path: 'src/landings/tests', }, - // { name: 'learning-track', path: 'src/learning-track/tests', }, + { name: 'learning-track', path: 'src/learning-track/tests', }, { name: 'linting', path: 'src/content-linter/tests', }, { name: 'observability', path: 'src/observability/tests' }, { name: 'pageinfo', path: 'src/pageinfo/tests', }, { name: 'redirects', path: 'src/redirects/tests', }, + { name: 'release-notes', path: 'src/release-notes/tests', }, { name: 'rendering', path: 'tests/rendering', }, { name: 'rendering-fixtures', path: 'tests/rendering-fixtures', }, { name: 'rest', path: 'src/rest/tests', }, { name: 'routing', path: 'tests/routing', }, { name: 'search', path: 'src/search/tests', }, + { name: 'secret-scanning', path: 'src/secret-scanning/tests',}, { name: 'shielding', path: 'src/shielding/tests', }, context.payload.repository.full_name === 'github/docs-internal' && { name: 'languages', path: 'src/languages/tests', }, diff --git a/lib/ajv-validate.js b/lib/ajv-validate.js new file mode 100644 index 000000000000..0a520e23504f --- /dev/null +++ b/lib/ajv-validate.js @@ -0,0 +1,16 @@ +import Ajv from 'ajv' +import addErrors from 'ajv-errors' +import addFormats from 'ajv-formats' +import semver from 'semver' + +const ajv = new Ajv({ allErrors: true, allowUnionTypes: true }) +addFormats(ajv) +addErrors(ajv) +// *** TODO: We can drop this override once the frontmatter schema has been updated to work with AJV. *** +ajv.addFormat('semver', { + validate: (x) => semver.validRange(x), +}) + +export function ajvValidate(schema) { + return ajv.compile(schema) +} diff --git a/src/content-linter/tests/lint-code-languages.js b/src/content-linter/tests/lint-code-languages.js deleted file mode 100644 index bcf22d99a30a..000000000000 --- a/src/content-linter/tests/lint-code-languages.js +++ /dev/null @@ -1,18 +0,0 @@ -// Code languages must be listed in data/variables/code-languages.yml -import fs from 'fs' -import walkFiles from '../../../script/helpers/walk-files.js' -import yaml from 'js-yaml' - -const allFiles = walkFiles('content', '.md').concat(walkFiles('data', '.md')) -const languages = Object.keys( - yaml.load(fs.readFileSync('./data/variables/code-languages.yml', 'utf8')), -) - -describe.skip('lint-code-languages', () => { - test.each(allFiles)('%s', async (file) => { - const fileContents = await fs.promises.readFile(file, 'utf8') - for (const [, lang] of fileContents.matchAll(/```(\S+)/gm)) { - expect(languages).toContain(lang) - } - }) -}) diff --git a/src/content-linter/tests/lint-files.js b/src/content-linter/tests/lint-files.js index 871e451dfbc0..0ba8e7aeab9c 100755 --- a/src/content-linter/tests/lint-files.js +++ b/src/content-linter/tests/lint-files.js @@ -4,23 +4,16 @@ import slash from 'slash' import walk from 'walk-sync' import { zip } from 'lodash-es' import yaml from 'js-yaml' -import Ajv from 'ajv' -import addErrors from 'ajv-errors' -import addFormats from 'ajv-formats' import { fromMarkdown } from 'mdast-util-from-markdown' import { visit } from 'unist-util-visit' import fs from 'fs/promises' import { existsSync } from 'fs' -import semver from 'semver' import { jest } from '@jest/globals' import { frontmatter, deprecatedProperties } from '../../../lib/frontmatter.js' import languages from '#src/languages/lib/languages.js' -import releaseNotesSchema from '../lib/release-notes-schema.js' -import learningTracksSchema from '../lib/learning-tracks-schema.js' import { liquid } from '#src/content-render/index.js' import { getDiffFiles } from '../lib/diff-files.js' -import { formatAjvErrors } from '../../../tests/helpers/schemas.js' jest.useFakeTimers({ legacyFakeTimers: true }) @@ -31,9 +24,6 @@ const contentDir = path.join(rootDir, 'content') const reusablesDir = path.join(rootDir, 'data/reusables') const variablesDir = path.join(rootDir, 'data/variables') const glossariesDir = path.join(rootDir, 'data/glossaries') -const ghesReleaseNotesDir = path.join(rootDir, 'data/release-notes/enterprise-server') -const ghaeReleaseNotesDir = path.join(rootDir, 'data/release-notes/github-ae') -const learningTracks = path.join(rootDir, 'data/learning-tracks') const fbvDir = path.join(rootDir, 'data/features') const languageCodes = Object.keys(languages) @@ -217,7 +207,7 @@ const yamlWalkOptions = { } // different lint rules apply to different content types -let mdToLint, ymlToLint, ghesReleaseNotesToLint, ghaeReleaseNotesToLint, learningTracksToLint +let mdToLint, ymlToLint // compile lists of all the files we want to lint @@ -294,35 +284,11 @@ const FbvYamlAbsPaths = walk(fbvDir, yamlWalkOptions).sort() const FbvYamlRelPaths = FbvYamlAbsPaths.map((p) => slash(path.relative(rootDir, p))) const fbvTuples = zip(FbvYamlRelPaths, FbvYamlAbsPaths) -// GHES release notes -const ghesReleaseNotesYamlAbsPaths = walk(ghesReleaseNotesDir, yamlWalkOptions).sort() -const ghesReleaseNotesYamlRelPaths = ghesReleaseNotesYamlAbsPaths.map((p) => - slash(path.relative(rootDir, p)), -) -ghesReleaseNotesToLint = zip(ghesReleaseNotesYamlRelPaths, ghesReleaseNotesYamlAbsPaths) - -// GHAE release notes -const ghaeReleaseNotesYamlAbsPaths = walk(ghaeReleaseNotesDir, yamlWalkOptions).sort() -const ghaeReleaseNotesYamlRelPaths = ghaeReleaseNotesYamlAbsPaths.map((p) => - slash(path.relative(rootDir, p)), -) -ghaeReleaseNotesToLint = zip(ghaeReleaseNotesYamlRelPaths, ghaeReleaseNotesYamlAbsPaths) - -// Learning tracks -const learningTracksYamlAbsPaths = walk(learningTracks, yamlWalkOptions).sort() -const learningTracksYamlRelPaths = learningTracksYamlAbsPaths.map((p) => - slash(path.relative(rootDir, p)), -) -learningTracksToLint = zip(learningTracksYamlRelPaths, learningTracksYamlAbsPaths) - // Put all the yaml files together ymlToLint = [].concat( variableYamlTuples, // These "tuples" not tested independently; they are only tested as part of ymlToLint. glossariesYamlTuples, fbvTuples, - ghesReleaseNotesToLint, - ghaeReleaseNotesToLint, - learningTracksToLint, ) function formatLinkError(message, links) { @@ -361,19 +327,9 @@ if (diffFiles.length > 0) { ) mdToLint = filterFiles(mdToLint) ymlToLint = filterFiles(ymlToLint) - ghesReleaseNotesToLint = filterFiles(ghesReleaseNotesToLint) - ghaeReleaseNotesToLint = filterFiles(ghaeReleaseNotesToLint) - learningTracksToLint = filterFiles(learningTracksToLint) } -if ( - mdToLint.length + - ymlToLint.length + - ghesReleaseNotesToLint.length + - ghaeReleaseNotesToLint.length + - learningTracksToLint.length < - 1 -) { +if (mdToLint.length + ymlToLint.length < 1) { // With this in place, at least one `test()` is called and you don't // get the `Your test suite must contain at least one test.` error // from `jest`. @@ -382,18 +338,6 @@ if ( }) } -// ajv for schema validation tests -const ajv = new Ajv({ allErrors: true, allowUnionTypes: true }) -addFormats(ajv) -addErrors(ajv) -// *** TODO: We can drop this override once the frontmatter schema has been updated to work with AJV. *** -ajv.addFormat('semver', { - validate: (x) => semver.validRange(x), -}) -// *** End TODO *** -const ghesValidate = ajv.compile(releaseNotesSchema) -const learningTracksValidate = ajv.compile(learningTracksSchema) - describe('lint markdown content', () => { if (mdToLint.length < 1) return @@ -881,167 +825,3 @@ describe('lint yaml content', () => { }) }) }) - -describe('lint GHES release notes', () => { - if (ghesReleaseNotesToLint.length < 1) return - describe.each(ghesReleaseNotesToLint)('%s', (yamlRelPath, yamlAbsPath) => { - let dictionary - let dictionaryError = false - - beforeAll(async () => { - const fileContents = await fs.readFile(yamlAbsPath, 'utf8') - try { - dictionary = yaml.load(fileContents, { filename: yamlRelPath }) - } catch (error) { - dictionaryError = error - } - }) - - it('can be parsed as a single yaml document', () => { - expect(dictionaryError).toBe(false) - }) - - it('matches the schema', () => { - const valid = ghesValidate(dictionary) - let errors - - if (!valid) { - errors = formatAjvErrors(ghesValidate.errors) - } - - expect(valid, errors).toBe(true) - }) - - it('contains valid liquid', () => { - const { intro, sections } = dictionary - let toLint = { intro } - for (const key in sections) { - const section = sections[key] - const label = `sections.${key}` - section.forEach((part) => { - if (Array.isArray(part)) { - toLint = { ...toLint, ...{ [label]: section.join('\n') } } - } else { - for (const prop in section) { - toLint = { ...toLint, ...{ [`${label}.${prop}`]: section[prop] } } - } - } - }) - } - - for (const key in toLint) { - if (!toLint[key]) continue - expect(() => liquid.parse(toLint[key]), `${key} contains invalid liquid`).not.toThrow() - } - }) - }) -}) - -describe('lint GHAE release notes', () => { - if (ghaeReleaseNotesToLint.length < 1) return - const currentWeeksFound = [] - describe.each(ghaeReleaseNotesToLint)('%s', (yamlRelPath, yamlAbsPath) => { - let dictionary - let dictionaryError = false - - beforeAll(async () => { - const fileContents = await fs.readFile(yamlAbsPath, 'utf8') - try { - dictionary = yaml.load(fileContents, { filename: yamlRelPath }) - } catch (error) { - dictionaryError = error - } - }) - - it('can be parsed as a single yaml document', () => { - expect(dictionaryError).toBe(false) - }) - - it('matches the schema', () => { - const valid = ghesValidate(dictionary) - let errors - - if (!valid) { - errors = formatAjvErrors(ghesValidate.errors) - } - - expect(valid, errors).toBe(true) - }) - - it('does not have more than one yaml file with currentWeek set to true', () => { - if (dictionary.currentWeek) currentWeeksFound.push(yamlRelPath) - const errorMessage = `Found more than one file with currentWeek set to true: ${currentWeeksFound.join( - '\n', - )}` - expect(currentWeeksFound.length, errorMessage).not.toBeGreaterThan(1) - }) - - it('contains valid liquid', () => { - const { intro, sections } = dictionary - let toLint = { intro } - for (const key in sections) { - const section = sections[key] - const label = `sections.${key}` - section.forEach((part) => { - if (Array.isArray(part)) { - toLint = { ...toLint, ...{ [label]: section.join('\n') } } - } else { - for (const prop in section) { - toLint = { ...toLint, ...{ [`${label}.${prop}`]: section[prop] } } - } - } - }) - } - - for (const key in toLint) { - if (!toLint[key]) continue - expect(() => liquid.parse(toLint[key]), `${key} contains invalid liquid`).not.toThrow() - } - }) - }) -}) - -describe('lint learning tracks', () => { - if (learningTracksToLint.length < 1) return - - describe.each(learningTracksToLint)('%s', (yamlRelPath, yamlAbsPath) => { - let dictionary - let dictionaryError = false - - beforeAll(async () => { - const fileContents = await fs.readFile(yamlAbsPath, 'utf8') - try { - dictionary = yaml.load(fileContents, { filename: yamlRelPath }) - } catch (error) { - dictionaryError = error - } - }) - - it('can be parsed as a single yaml document', () => { - expect(dictionaryError).toBe(false) - }) - - it('matches the schema', () => { - const valid = learningTracksValidate(dictionary) - let errors - - if (!valid) { - errors = formatAjvErrors(learningTracksValidate.errors) - } - - expect(valid, errors).toBe(true) - }) - - it('contains valid liquid', () => { - const toLint = [] - Object.values(dictionary).forEach(({ title, description }) => { - toLint.push(title) - toLint.push(description) - }) - - toLint.forEach((element) => { - expect(() => liquid.parse(element), `${element} contains invalid liquid`).not.toThrow() - }) - }) - }) -}) diff --git a/src/content-linter/tests/lint-secret-scanning-data.js b/src/content-linter/tests/lint-secret-scanning-data.js deleted file mode 100644 index 49d106406792..000000000000 --- a/src/content-linter/tests/lint-secret-scanning-data.js +++ /dev/null @@ -1,41 +0,0 @@ -import fs from 'fs' -import yaml from 'js-yaml' -import { get } from 'lodash-es' -import Ajv from 'ajv' -import addErrors from 'ajv-errors' -import semver from 'semver' - -import schema from '../lib/secret-scanning-schema.js' - -const data = yaml.load(fs.readFileSync('data/secret-scanning.yml', 'utf8')) - -const ajv = new Ajv({ allErrors: true, allowUnionTypes: true }) -addErrors(ajv) - -// *** TODO: We can drop this override once the frontmatter schema has been updated to work with AJV. *** -ajv.addFormat('semver', { - validate: (x) => semver.validRange(x), -}) -// *** End TODO *** - -const validate = ajv.compile(schema) - -test('make sure secret scanning data matches the schema', () => { - validate(data) - - const errors = (validate.errors || []).map((errorObj) => { - // We have to use AJV's instancePath, which is an index number, to find out which entries are invalid. - const split = errorObj.instancePath.split('/') - split.shift() - const index = split.shift() - const entry = data[index] - const path = split.length ? split.join('.') : null - return path - ? `The entry with provider '${entry.provider}' (at '${path}: ${get(entry, path)}') ${ - errorObj.message - }` - : `The entry with provider '${entry.provider}' ${errorObj.message}` - }) - - expect(errors.length, errors.join('\n ')).toBe(0) -}) diff --git a/src/content-linter/lib/learning-tracks-schema.js b/src/learning-track/lib/learning-tracks-schema.js similarity index 100% rename from src/content-linter/lib/learning-tracks-schema.js rename to src/learning-track/lib/learning-tracks-schema.js diff --git a/src/learning-track/tests/validate-schema.js b/src/learning-track/tests/validate-schema.js new file mode 100644 index 000000000000..bb5d263dcc21 --- /dev/null +++ b/src/learning-track/tests/validate-schema.js @@ -0,0 +1,56 @@ +import yaml from 'js-yaml' +import { readFile } from 'fs/promises' +import walk from 'walk-sync' +import { jest } from '@jest/globals' + +import { liquid } from '#src/content-render/index.js' +import learningTracksSchema from '../lib/learning-tracks-schema.js' +import { formatAjvErrors } from '../../../tests/helpers/schemas.js' +import { ajvValidate } from '../../../lib/ajv-validate.js' + +const learningTrackRootPath = 'data/learning-tracks' +const jsonValidator = ajvValidate(learningTracksSchema) +const yamlWalkOptions = { + globs: ['**/*.yml'], + directories: false, + includeBasePath: true, +} +const yamlFileList = walk(learningTrackRootPath, yamlWalkOptions).sort() + +jest.useFakeTimers({ legacyFakeTimers: true }) + +describe('lint learning tracks', () => { + if (yamlFileList.length < 1) return + + describe.each(yamlFileList)('%s', (yamlAbsPath) => { + let yamlContent + + beforeAll(async () => { + const fileContents = await readFile(yamlAbsPath, 'utf8') + yamlContent = await yaml.load(fileContents) + }) + + it('matches the schema', () => { + const valid = jsonValidator(yamlContent) + let errors + + if (!valid) { + errors = formatAjvErrors(jsonValidator.errors) + } + + expect(valid, errors).toBe(true) + }) + + it('contains valid liquid', () => { + const toLint = [] + Object.values(yamlContent).forEach(({ title, description }) => { + toLint.push(title) + toLint.push(description) + }) + + toLint.forEach((element) => { + expect(() => liquid.parse(element), `${element} contains invalid liquid`).not.toThrow() + }) + }) + }) +}) diff --git a/src/content-linter/lib/release-notes-schema.js b/src/release-notes/lib/release-notes-schema.js similarity index 100% rename from src/content-linter/lib/release-notes-schema.js rename to src/release-notes/lib/release-notes-schema.js diff --git a/src/release-notes/tests/validate-schema.js b/src/release-notes/tests/validate-schema.js new file mode 100644 index 000000000000..d4e901987190 --- /dev/null +++ b/src/release-notes/tests/validate-schema.js @@ -0,0 +1,42 @@ +import yaml from 'js-yaml' +import { readFile } from 'fs/promises' +import walk from 'walk-sync' +import { jest } from '@jest/globals' + +import releaseNotesSchema from '../lib/release-notes-schema.js' +import { formatAjvErrors } from '../../../tests/helpers/schemas.js' +import { ajvValidate } from '../../../lib/ajv-validate.js' + +const ghesReleaseNoteRootPath = 'data/release-notes' +const jsonValidator = ajvValidate(releaseNotesSchema) +const yamlWalkOptions = { + globs: ['**/*.yml'], + directories: false, + includeBasePath: true, +} +const yamlFileList = walk(ghesReleaseNoteRootPath, yamlWalkOptions).sort() + +jest.useFakeTimers({ legacyFakeTimers: true }) + +describe('lint enterprise release notes', () => { + if (yamlFileList.length < 1) return + describe.each(yamlFileList)('%s', (yamlAbsPath) => { + let yamlContent + + beforeAll(async () => { + const fileContents = await readFile(yamlAbsPath, 'utf8') + yamlContent = yaml.load(fileContents) + }) + + it('matches the schema', () => { + const valid = jsonValidator(yamlContent) + let errors + + if (!valid) { + errors = formatAjvErrors(jsonValidator.errors) + } + + expect(valid, errors).toBe(true) + }) + }) +}) diff --git a/src/release-notes/tests/yaml.js b/src/release-notes/tests/yaml.js new file mode 100644 index 000000000000..be6ec70404b4 --- /dev/null +++ b/src/release-notes/tests/yaml.js @@ -0,0 +1,63 @@ +import yaml from 'js-yaml' +import { readFile } from 'fs/promises' +import walk from 'walk-sync' +import path from 'path' +import { jest } from '@jest/globals' + +import { liquid } from '#src/content-render/index.js' + +const ghesReleaseNoteRootPath = 'data/release-notes' +const yamlWalkOptions = { + globs: ['**/*.yml'], + directories: false, + includeBasePath: true, +} +const yamlFileList = walk(ghesReleaseNoteRootPath, yamlWalkOptions).sort() + +jest.useFakeTimers({ legacyFakeTimers: true }) + +describe('lint enterprise release notes', () => { + if (yamlFileList.length < 1) return + describe.each(yamlFileList)('%s', (yamlAbsPath) => { + let yamlContent + const relativePath = path.relative('', yamlAbsPath) + + beforeAll(async () => { + const fileContents = await readFile(yamlAbsPath, 'utf8') + yamlContent = yaml.load(fileContents) + }) + + it('contains valid liquid', () => { + const { intro, sections } = yamlContent + let toLint = { intro } + for (const key in sections) { + const section = sections[key] + const label = `sections.${key}` + section.forEach((part) => { + if (Array.isArray(part)) { + toLint = { ...toLint, ...{ [label]: section.join('\n') } } + } else { + for (const prop in section) { + toLint = { ...toLint, ...{ [`${label}.${prop}`]: section[prop] } } + } + } + }) + } + + for (const key in toLint) { + if (!toLint[key]) continue + expect(() => liquid.parse(toLint[key]), `${key} contains invalid liquid`).not.toThrow() + } + }) + + const currentWeeksFound = [] + it('does not have more than one yaml file with currentWeek set to true', () => { + if (!yamlAbsPath.includes('data/release-notes/github-ae')) return + if (yamlContent.currentWeek) currentWeeksFound.push(relativePath) + const errorMessage = `Found more than one file with currentWeek set to true: ${currentWeeksFound.join( + '\n', + )}` + expect(currentWeeksFound.length, errorMessage).not.toBeGreaterThan(1) + }) + }) +}) diff --git a/src/content-linter/lib/secret-scanning-schema.js b/src/secret-scanning/lib/secret-scanning-schema.js similarity index 100% rename from src/content-linter/lib/secret-scanning-schema.js rename to src/secret-scanning/lib/secret-scanning-schema.js diff --git a/src/secret-scanning/tests/validate-schema.js b/src/secret-scanning/tests/validate-schema.js new file mode 100644 index 000000000000..93e6734a40ea --- /dev/null +++ b/src/secret-scanning/tests/validate-schema.js @@ -0,0 +1,25 @@ +import fs from 'fs' +import yaml from 'js-yaml' +import { jest } from '@jest/globals' + +import { ajvValidate } from '../../../lib/ajv-validate.js' +import { formatAjvErrors } from '../../../tests/helpers/schemas.js' +import secretScanningSchema from '../lib/secret-scanning-schema.js' + +jest.useFakeTimers({ legacyFakeTimers: true }) + +describe('lint secret-scanning', () => { + const yamlContent = yaml.load(fs.readFileSync('data/secret-scanning.yml', 'utf8')) + const jsonValidate = ajvValidate(secretScanningSchema) + + test('matches the schema', () => { + const valid = jsonValidate(yamlContent) + let errors + + if (!valid) { + errors = formatAjvErrors(jsonValidate.errors) + } + + expect(valid, errors).toBe(true) + }) +}) From 5a95792f7d98f5921d6b3fb83679ae375f8fcd9f Mon Sep 17 00:00:00 2001 From: Rachael Sewell Date: Fri, 8 Sep 2023 12:42:38 -0700 Subject: [PATCH 11/15] Add rule to find hardcoded docs urls (#42212) --- .../building-ci-checks-with-a-github-app.md | 6 ++-- src/content-linter/style/github-docs.js | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/content/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app.md b/content/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app.md index e3ab446a604b..f34579de31be 100644 --- a/content/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app.md +++ b/content/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app.md @@ -319,7 +319,6 @@ class GHAapp < Sinatra::Application # this request is an attack, and you should reject it. GitHub uses the HMAC # hexdigest to compute the signature. The `X-HUB-Signature` looks something # like this: 'sha1=123456'. - # See https://developer.github.com/webhooks/securing/ for details. def verify_webhook_signature their_signature_header = request.env['HTTP_X_HUB_SIGNATURE'] || 'sha1=' method, their_digest = their_signature_header.split('=') @@ -571,7 +570,7 @@ You can test that the server is listening to your app by triggering an event for 1. Create a new repository to use for testing your tutorial code. For more information, see "[AUTOTITLE](/repositories/creating-and-managing-repositories/creating-a-new-repository)." 1. Install the {% data variables.product.prodname_github_app %} on the repository you just created. For more information, see "[AUTOTITLE](/apps/using-github-apps/installing-your-own-github-app#installing-your-own-github-app)." During the installation process, choose **Only select repositories**, and select the repository you created in the previous step. -2. After you click **Install**, look at the output in the terminal tab where you're running `server.rb`. You should see something like this: +1. After you click **Install**, look at the output in the terminal tab where you're running `server.rb`. You should see something like this: ```shell > D, [2023-06-08T15:45:43.773077 #30488] DEBUG -- : ---- received event installation @@ -1147,7 +1146,7 @@ To push to a repository, your app must have write permissions for "Contents" in To commit files, Git must know which username and email address to associate with the commit. Next you'll add environment variables to store the name and email address that your app will use when it makes Git commits. 1. Open the `.env` file you created earlier in this tutorial. -2. Add the following environment variables to your `.env` file. Replace `APP_NAME` with the name of your app, and `EMAIL_ADDRESS` with any email you'd like to use for this example. +1. Add the following environment variables to your `.env` file. Replace `APP_NAME` with the name of your app, and `EMAIL_ADDRESS` with any email you'd like to use for this example. ```shell copy GITHUB_APP_USER_NAME="APP_NAME" @@ -1542,7 +1541,6 @@ class GHAapp < Sinatra::Application # this request is an attack, and you should reject it. GitHub uses the HMAC # hexdigest to compute the signature. The `X-HUB-Signature` looks something # like this: 'sha1=123456'. - # See https://developer.github.com/webhooks/securing/ for details. def verify_webhook_signature their_signature_header = request.env['HTTP_X_HUB_SIGNATURE'] || 'sha1=' method, their_digest = their_signature_header.split('=') diff --git a/src/content-linter/style/github-docs.js b/src/content-linter/style/github-docs.js index d9cd87274f50..633f6e5e8206 100644 --- a/src/content-linter/style/github-docs.js +++ b/src/content-linter/style/github-docs.js @@ -34,6 +34,11 @@ export const githubDocsConfig = { severity: 'error', 'partial-markdown-files': true, }, + 'no-github-docs-domains': { + // GHD020 + severity: 'error', + 'partial-markdown-files': true, + }, 'search-replace': { severity: 'error', 'severity-local-env': 'warning', @@ -45,6 +50,34 @@ export const githubDocsConfig = { search: 'TODOCS', searchScope: 'all', }, + { + name: 'docs-domain', + message: 'Catch occurrences of docs.gitub.com domain.', + search: 'docs.gitub.com', + searchScope: 'all', + }, + { + name: 'help-domain', + message: 'Catch occurrences of help.github.com domain.', + search: 'help.github.com', + searchScope: 'all', + }, + { + name: 'preview-domain', + message: 'Catch occurrences of preview.ghdocs.com domain.', + search: 'preview.ghdocs.com', + searchScope: 'all', + }, + { + name: 'developer-domain', + message: 'Catch occurrences of developer.github.com domain.', + // Do not match developer.github.com/changes or + // developer.github.com/enterprise/[0-9] or + // developer.github.com/enterprise/{{something}} (e.g. liquid). + // There are occurences that will likely always remain in the content. + searchPattern: '/developer.github.com(?!/(changes|enterprise/([0-9]|{))).*/g', + searchScope: 'all', + }, ], }, } From bce7dcebe3c0d283d81c448717be5b10a0808df2 Mon Sep 17 00:00:00 2001 From: Laura Coursen Date: Fri, 8 Sep 2023 14:50:13 -0500 Subject: [PATCH 12/15] Yet more CommonMark fixes (#42247) Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> --- ...ting-the-codespaces-in-your-organization.md | 10 +++++----- ...repository-from-github-to-github-desktop.md | 6 +++--- ...hanges-to-your-project-in-github-desktop.md | 2 +- .../reordering-commits-in-github-desktop.md | 2 +- ...thenticating-to-github-in-github-desktop.md | 2 +- .../manage-classrooms.md | 18 +++++++++--------- .../github-developer-program.md | 5 +++-- ...g-up-a-trial-of-github-enterprise-server.md | 6 +++--- ...sword-authentication-deprecation-desktop.md | 6 +++--- 9 files changed, 29 insertions(+), 28 deletions(-) diff --git a/content/codespaces/managing-codespaces-for-your-organization/listing-the-codespaces-in-your-organization.md b/content/codespaces/managing-codespaces-for-your-organization/listing-the-codespaces-in-your-organization.md index f214fe76beb3..2755ed0a6ddc 100644 --- a/content/codespaces/managing-codespaces-for-your-organization/listing-the-codespaces-in-your-organization.md +++ b/content/codespaces/managing-codespaces-for-your-organization/listing-the-codespaces-in-your-organization.md @@ -26,14 +26,14 @@ For information on how to see the current total {% data variables.product.prodna To list all of the current codespaces for a specified organization, use the following command. ```shell copy -gh codespace list --org ORGANIZATION +gh codespace list --org ORGANIZATION ``` This command returns a list that includes the following information for each codespace: - - The name and display name - - The user who created the codespace - - The repository and branch - - The current state of the codespace +- The name and display name +- The user who created the codespace +- The repository and branch +- The current state of the codespace To list all of the current codespaces for an organization that were created by a specific user, use the following command. diff --git a/content/desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories/cloning-a-repository-from-github-to-github-desktop.md b/content/desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories/cloning-a-repository-from-github-to-github-desktop.md index eb9ace7cb4fc..a0ce6cc6bae9 100644 --- a/content/desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories/cloning-a-repository-from-github-to-github-desktop.md +++ b/content/desktop/contributing-and-collaborating-using-github-desktop/adding-and-cloning-repositories/cloning-a-repository-from-github-to-github-desktop.md @@ -21,10 +21,10 @@ shortTitle: Clone a GitHub repo ![Screenshot of the "URL" tab of the "Clone a Repository" window. Next to the "Local Path" field, a button, labeled "Choose", is highlighted with an orange outline.](/assets/images/help/desktop/clone-choose-button-url-mac.png) - {% note %} + {% note %} - **Note:** If the repository is configured to use LFS, you will be prompted to initialize {% data variables.large_files.product_name_short %}. + **Note:** If the repository is configured to use LFS, you will be prompted to initialize {% data variables.large_files.product_name_short %}. - {% endnote %} + {% endnote %} 1. Click **Clone**. diff --git a/content/desktop/contributing-and-collaborating-using-github-desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop.md b/content/desktop/contributing-and-collaborating-using-github-desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop.md index 682008bcedcc..ecdc43f410e1 100644 --- a/content/desktop/contributing-and-collaborating-using-github-desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop.md +++ b/content/desktop/contributing-and-collaborating-using-github-desktop/making-changes-in-a-branch/committing-and-reviewing-changes-to-your-project-in-github-desktop.md @@ -120,7 +120,7 @@ Once you're satisfied with the changes you've chosen to include in your commit, - To move your changes, click **switch branches**. - To commit your changes to the protected branch, click **Commit to BRANCH**. - For more information about protected branches, see "[AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)." + For more information about protected branches, see "[AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)." {% data reusables.desktop.push-origin %} 1. If you have a pull request based off the branch you are working on, {% data variables.product.prodname_desktop %} will display the status of the checks that have run for the pull request next to the "Current Branch" section of the repository bar. For more information about checks, see "[AUTOTITLE](/desktop/contributing-and-collaborating-using-github-desktop/working-with-your-remote-repository-on-github-or-github-enterprise/viewing-and-re-running-checks-in-github-desktop)." diff --git a/content/desktop/contributing-and-collaborating-using-github-desktop/managing-commits/reordering-commits-in-github-desktop.md b/content/desktop/contributing-and-collaborating-using-github-desktop/managing-commits/reordering-commits-in-github-desktop.md index 30e57cdf3552..9ffe5cdb6f52 100644 --- a/content/desktop/contributing-and-collaborating-using-github-desktop/managing-commits/reordering-commits-in-github-desktop.md +++ b/content/desktop/contributing-and-collaborating-using-github-desktop/managing-commits/reordering-commits-in-github-desktop.md @@ -36,7 +36,7 @@ When you reorder commits, you may see one of the following notifications or erro - A message states that there are merge conflicts that you must resolve before the application can continue reordering commits on your branch. 1. Click **View conflicts**. - ![Screenshot of a notification about conflicts. At the end of the message, a link, labeled "View commits", is highlighted with an orange outline.](/assets/images/help/desktop/reorder-resolve-conflicts.png) + ![Screenshot of a notification about conflicts. At the end of the message, a link, labeled "View commits", is highlighted with an orange outline.](/assets/images/help/desktop/reorder-resolve-conflicts.png) {% data reusables.desktop.resolve-merge-conflicts %} 1. When all conflicts are resolved, you can reorder your commits. diff --git a/content/desktop/installing-and-configuring-github-desktop/installing-and-authenticating-to-github-desktop/authenticating-to-github-in-github-desktop.md b/content/desktop/installing-and-configuring-github-desktop/installing-and-authenticating-to-github-desktop/authenticating-to-github-in-github-desktop.md index b9589ae6c2ac..0567378bd7ce 100644 --- a/content/desktop/installing-and-configuring-github-desktop/installing-and-authenticating-to-github-desktop/authenticating-to-github-in-github-desktop.md +++ b/content/desktop/installing-and-configuring-github-desktop/installing-and-authenticating-to-github-desktop/authenticating-to-github-in-github-desktop.md @@ -56,7 +56,7 @@ Before you authenticate, {% data reusables.desktop.get-an-account %} {% data reusables.desktop.sign-in-browser %} - {% data reusables.user-settings.password-authentication-deprecation-desktop %} + {% indented_data_reference reusables.user-settings.password-authentication-deprecation-desktop spaces=3 %} {% data reusables.desktop.authenticate-in-browser %} {% data reusables.desktop.2fa-in-browser %} diff --git a/content/education/manage-coursework-with-github-classroom/teach-with-github-classroom/manage-classrooms.md b/content/education/manage-coursework-with-github-classroom/teach-with-github-classroom/manage-classrooms.md index 86df0dfe3e2e..d779cbd89b0a 100644 --- a/content/education/manage-coursework-with-github-classroom/teach-with-github-classroom/manage-classrooms.md +++ b/content/education/manage-coursework-with-github-classroom/teach-with-github-classroom/manage-classrooms.md @@ -60,14 +60,14 @@ If your course already has a roster, you can update the students on the roster o {% note %} - **Note:** {% data reusables.classroom.google-classroom-note %} + **Note:** {% data reusables.classroom.google-classroom-note %} - {% endnote %} + {% endnote %} 1. Provide the student identifiers for your roster. - - To import a roster by uploading a file containing student identifiers, click **Upload a CSV or text file**. - - To create a roster manually, type your student identifiers in the text field. + - To import a roster by uploading a file containing student identifiers, click **Upload a CSV or text file**. + - To create a roster manually, type your student identifiers in the text field. 1. Click **Create roster**. @@ -80,13 +80,13 @@ Your classroom must have an existing roster to add students to the roster. For m {% data reusables.classroom.click-students %} 1. To the right of "Classroom roster", click **Update students**. If you have already linked your classroom to an LMS course, then you will see a **Sync from...** button instead. 1. Follow the instructions to add students to the roster. - - To import students from an LMS, your LMS administrator will first need to register your LMS instance and then you will need to connect your LMS course to your classroom. Once connected, you can click the **Sync from...** button. For more information, see "[AUTOTITLE](/education/manage-coursework-with-github-classroom/teach-with-github-classroom/connect-a-learning-management-system-course-to-a-classroom)." - {% note %} + - To import students from an LMS, your LMS administrator will first need to register your LMS instance and then you will need to connect your LMS course to your classroom. Once connected, you can click the **Sync from...** button. For more information, see "[AUTOTITLE](/education/manage-coursework-with-github-classroom/teach-with-github-classroom/connect-a-learning-management-system-course-to-a-classroom)." + {% note %} - **Note:** {% data reusables.classroom.google-classroom-note %} + **Note:** {% data reusables.classroom.google-classroom-note %} - {% endnote %} - - To manually add students, under "Manually add students", click **Upload a CSV or text file** or type the identifiers for the students, then click **Add roster entries**. + {% endnote %} + - To manually add students, under "Manually add students", click **Upload a CSV or text file** or type the identifiers for the students, then click **Add roster entries**. ## Renaming a classroom diff --git a/content/get-started/exploring-integrations/github-developer-program.md b/content/get-started/exploring-integrations/github-developer-program.md index 3c83d0072054..4bad1a3f8d97 100644 --- a/content/get-started/exploring-integrations/github-developer-program.md +++ b/content/get-started/exploring-integrations/github-developer-program.md @@ -11,7 +11,7 @@ topics: - API --- -Building an application that integrates with GitHub? Register for our Developer Program! The possibilities are endless, and you enjoy the kudos. [Register now](https://github.com/developer/register) +Building an application that integrates with {% data variables.product.prodname_dotcom %}? Register for our Developer Program! The possibilities are endless, and you enjoy the kudos. [Register now](https://github.com/developer/register). ## Scratch an itch @@ -23,7 +23,8 @@ Email partnerships@github.com to re ## Have an integration that works with GitHub? -Awesome! We'd love to have you be part of the program. Here’s how you can spread the word:

+Awesome! We'd love to have you be part of the program. Here’s how you can spread the word: + - [Let us know about your integration](https://support.github.com/contact?tags=rr-general-technical&form[subject]=New+GitHub+Integration). - Use the [Octocat or GitHub logo](https://github.com/logos) to identify that your product works with GitHub. - Post a video or a blog on your website about your integration. diff --git a/content/get-started/signing-up-for-github/setting-up-a-trial-of-github-enterprise-server.md b/content/get-started/signing-up-for-github/setting-up-a-trial-of-github-enterprise-server.md index 6685aa7b90f3..aed5889b25cb 100644 --- a/content/get-started/signing-up-for-github/setting-up-a-trial-of-github-enterprise-server.md +++ b/content/get-started/signing-up-for-github/setting-up-a-trial-of-github-enterprise-server.md @@ -49,11 +49,11 @@ To get the most out of your trial, follow these steps: - Add users to your {% data variables.product.prodname_ghe_server %} instance using built-in authentication or your configured identity provider. For more information, see "[AUTOTITLE](/enterprise-server@latest/admin/identity-and-access-management/using-built-in-authentication/configuring-built-in-authentication)." - To invite people to become account administrators, visit the [{% data variables.product.prodname_enterprise %} Web portal](https://enterprise.github.com/login). - {% note %} + {% note %} - **Note:** People you invite to become account administrators will receive an email with a link to accept your invitation. + **Note:** People you invite to become account administrators will receive an email with a link to accept your invitation. - {% endnote %} + {% endnote %} {% data reusables.enterprise.best-practices %} diff --git a/data/reusables/user-settings/password-authentication-deprecation-desktop.md b/data/reusables/user-settings/password-authentication-deprecation-desktop.md index c04e48c62a29..44e5c67efaf6 100644 --- a/data/reusables/user-settings/password-authentication-deprecation-desktop.md +++ b/data/reusables/user-settings/password-authentication-deprecation-desktop.md @@ -1,5 +1,5 @@ - {% warning %} +{% warning %} - **Warning**: Authenticating to {% data variables.product.prodname_dotcom %} using your username and password is not supported. We require authenticating using the browser instead. +**Warning**: Authenticating to {% data variables.product.prodname_dotcom %} using your username and password is not supported. We require authenticating using the browser instead. - {% endwarning %} +{% endwarning %} From 54aa018d38f66cfc8b6bd9683c442d1c4e15b824 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Fri, 8 Sep 2023 17:22:18 -0400 Subject: [PATCH 13/15] Clean up all existing markdownlint errors (#42274) --- .../creating-a-local-environment.md | 9 ++++----- data/reusables/billing/create-personal-account.md | 2 +- data/reusables/codespaces/vscode-interface-annotation.md | 3 ++- data/reusables/copilot/signup-procedure-enterprise.md | 2 +- data/reusables/desktop/choose-a-theme.md | 2 +- data/reusables/enterprise_installation/replica-steps.md | 2 +- data/reusables/supported-languages/swift.md | 1 - 7 files changed, 10 insertions(+), 11 deletions(-) diff --git a/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md b/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md index 5b77703524a7..309afc470ff9 100644 --- a/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md +++ b/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md @@ -71,9 +71,9 @@ The [`script/bookmarklets`](https://github.com/github/docs/tree/main/script/book ### Enabling different languages -By default, the local server does not run with all supported languages enabled. If you need to run a local server with a particular language, you can temporarily edit the `start` script in `package.json` and update the `ENABLED_LANGUAGES` variable. +By default, the local server does not run with all supported languages enabled. If you need to run a local server with a particular language, you can temporarily edit the `start` script in `package.json` and update the `ENABLED_LANGUAGES` variable. -For example, to enable Japanese and Portuguese in addition to English, you can edit `package.json` and set `ENABLED_LANGUAGES='en,ja,pt'` in the `start` script. Then restart the server for the change to take effect. +For example, to enable Japanese and Portuguese in addition to English, you can edit `package.json` and set `ENABLED_LANGUAGES='en,ja,pt'` in the `start` script. Then restart the server for the change to take effect. {% note %} @@ -83,10 +83,9 @@ For example, to enable Japanese and Portuguese in addition to English, you can e The supported language codes are defined in [`src/languages/lib/languages.js`](https://github.com/github/docs/blob/main/src/languages/lib/languages.js). - ## Using {% data variables.product.prodname_github_codespaces %} -As an alternative to running {% data variables.product.prodname_docs %} locally, you can use {% data variables.product.prodname_github_codespaces %}. {% data variables.product.prodname_github_codespaces %} enable you to edit, preview, and test your changes directly from your browser. +As an alternative to running {% data variables.product.prodname_docs %} locally, you can use {% data variables.product.prodname_github_codespaces %}. {% data variables.product.prodname_github_codespaces %} enable you to edit, preview, and test your changes directly from your browser. For more information about using a codespace for working on {% data variables.product.company_short %} documentation, see "[AUTOTITLE](/contributing/setting-up-your-environment-to-work-on-github-docs/working-on-github-docs-in-a-codespace)." @@ -98,4 +97,4 @@ For more information about using a codespace for working on {% data variables.pr - [Middleware](https://github.com/github/docs/blob/main/middleware/README.md) - [Scripts](https://github.com/github/docs/blob/main/script/README.md) - [Styles](https://github.com/github/docs/blob/main/stylesheets/README.md) -- [Tests](https://github.com/github/docs/blob/main/tests/README.md) +- [Tests](https://github.com/github/docs/blob/main/tests/README.md) diff --git a/data/reusables/billing/create-personal-account.md b/data/reusables/billing/create-personal-account.md index 9f206d5ef9c1..0e24f442dd18 100644 --- a/data/reusables/billing/create-personal-account.md +++ b/data/reusables/billing/create-personal-account.md @@ -2,5 +2,5 @@ If you already have a personal account on {% data variables.product.prodname_dot 1. Go to the [Join GitHub](https://github.com/join) page. 1. Complete the form, then click **Create account**. -3. Select {% data variables.product.prodname_free_user %} for your personal account. +1. Select {% data variables.product.prodname_free_user %} for your personal account. 1. Click **Finish sign up**. diff --git a/data/reusables/codespaces/vscode-interface-annotation.md b/data/reusables/codespaces/vscode-interface-annotation.md index a786af1d1834..c721e53fc505 100644 --- a/data/reusables/codespaces/vscode-interface-annotation.md +++ b/data/reusables/codespaces/vscode-interface-annotation.md @@ -1,6 +1,7 @@ The main components of the user interface are: + 1. **Side bar** - By default, this area shows your project files in the Explorer. 1. **Activity bar** - This displays the Views and provides you with a way to switch between them. You can reorder the Views by dragging and dropping them. -3. **Editor** - This is where you edit your files. You can right-click the tab for a file to access options such as locating the file in the Explorer. +1. **Editor** - This is where you edit your files. You can right-click the tab for a file to access options such as locating the file in the Explorer. 1. **Panels** - This is where you can see output and debug information, as well as the default place for the integrated Terminal. 1. **Status bar** - This area provides you with useful information about your codespace and project. For example, the branch name, configured ports, and more. diff --git a/data/reusables/copilot/signup-procedure-enterprise.md b/data/reusables/copilot/signup-procedure-enterprise.md index f8f2fccf4a58..1f211c545506 100644 --- a/data/reusables/copilot/signup-procedure-enterprise.md +++ b/data/reusables/copilot/signup-procedure-enterprise.md @@ -1,6 +1,6 @@ 1. Go to the [{% data variables.product.prodname_copilot_for_business %} sign up page](https://github.com/github-copilot/business_signup/choose_business_type). 1. To purchase {% data variables.product.prodname_copilot %} for your enterprise, select **Enable {% data variables.product.prodname_copilot %} at an enterprise level** and click **Continue**. -3. Select the enterprise for which you want to purchase {% data variables.product.prodname_copilot %} and click **Continue**. +1. Select the enterprise for which you want to purchase {% data variables.product.prodname_copilot %} and click **Continue**. 1. Follow the steps to confirm your payment details, then click **Save**. If you don't have a payment method on file, you'll be prompted to add one. diff --git a/data/reusables/desktop/choose-a-theme.md b/data/reusables/desktop/choose-a-theme.md index c2c7f572c261..83dd63dc5e31 100644 --- a/data/reusables/desktop/choose-a-theme.md +++ b/data/reusables/desktop/choose-a-theme.md @@ -1,4 +1,4 @@ -3. Click the **Appearance** pane. +1. Click the **Appearance** pane. {% mac %} diff --git a/data/reusables/enterprise_installation/replica-steps.md b/data/reusables/enterprise_installation/replica-steps.md index 87c09bf51d7b..56934709574e 100644 --- a/data/reusables/enterprise_installation/replica-steps.md +++ b/data/reusables/enterprise_installation/replica-steps.md @@ -1,4 +1,4 @@ -3. Set an admin password that matches the password on the primary appliance and continue. +1. Set an admin password that matches the password on the primary appliance and continue. 1. Click **Configure as Replica**. 1. Under "Add new SSH key", type your SSH key. 1. Click **Add key**. diff --git a/data/reusables/supported-languages/swift.md b/data/reusables/supported-languages/swift.md index 66393240e316..778e5a9e6c8f 100644 --- a/data/reusables/supported-languages/swift.md +++ b/data/reusables/supported-languages/swift.md @@ -1,2 +1 @@ | Swift | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %}
Swift Package Manager | - From 53ae8c918da6326599e9dfed04ff92ce208a78ac Mon Sep 17 00:00:00 2001 From: Andre Kolodochka <59625655+andrekolodochka@users.noreply.github.com> Date: Sat, 9 Sep 2023 08:55:32 +1000 Subject: [PATCH 14/15] Rewording the conditions for allowed actions (#41845) Co-authored-by: Siara <108543037+SiaraMist@users.noreply.github.com> --- data/reusables/actions/allow-specific-actions-intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/reusables/actions/allow-specific-actions-intro.md b/data/reusables/actions/allow-specific-actions-intro.md index 5a1912608507..b089070351fd 100644 --- a/data/reusables/actions/allow-specific-actions-intro.md +++ b/data/reusables/actions/allow-specific-actions-intro.md @@ -21,7 +21,7 @@ When you choose {% data reusables.actions.policy-label-for-select-actions-workfl {% ifversion fpt or ghec %} {% note %} - **Note:** The **Allow specified actions{% ifversion actions-workflow-policy %} and reusable workflows{% endif %}** option is only available in public repositories with the {% data variables.product.prodname_free_user %}, {% data variables.product.prodname_pro %}, {% data variables.product.prodname_free_team %} for organizations, or {% data variables.product.prodname_team %} plan. + **Note:** For {% data variables.product.prodname_free_user %}, {% data variables.product.prodname_pro %}, {% data variables.product.prodname_free_team %} for organizations, or {% data variables.product.prodname_team %} plans, the **Allow specified actions{% ifversion actions-workflow-policy %} and reusable workflows{% endif %}** option is only available in public repositories. {% endnote %} {% endif %} From ca6926e5743e4f9829ff227fc67dfef2afb4ae6e Mon Sep 17 00:00:00 2001 From: mc <42146119+mchammer01@users.noreply.github.com> Date: Sat, 9 Sep 2023 01:20:00 +0200 Subject: [PATCH 15/15] Dependency review works with dependencies submitted with the dependency submission API [Public Beta] (#37888) Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> Co-authored-by: Courtney Claessens Co-authored-by: Anne-Marie <102995847+am-stead@users.noreply.github.com> Co-authored-by: Sarah Edwards --- .../about-dependency-review.md | 38 +++++++++++++++++-- .../dependency-review-submission-api.yml | 5 +++ .../works-with-submission-api-beta.md | 5 +++ .../about-dependency-submission.md | 5 ++- 4 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 data/features/dependency-review-submission-api.yml create mode 100644 data/reusables/dependency-review/works-with-submission-api-beta.md diff --git a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review.md b/content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review.md index 2653c5ed43ad..c5d5ec17c9cc 100644 --- a/content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review.md +++ b/content/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review.md @@ -21,7 +21,7 @@ redirect_from: ## About dependency review -{% data reusables.dependency-review.feature-overview %} +{% data reusables.dependency-review.feature-overview %} If a pull request targets your repository's default branch and contains changes to package manifests or lock files, you can display a dependency review to see what has changed. The dependency review includes details of changes to indirect dependencies in lock files, and it tells you if any of the added or updated dependencies contain known vulnerabilities. @@ -58,8 +58,10 @@ You can use the {% data variables.dependency-review.action_name %} in your repos By default, the {% data variables.dependency-review.action_name %} check will fail if it discovers any vulnerable packages. A failed check blocks a pull request from being merged when the repository owner requires the dependency review check to pass. For more information, see "[AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging)." -{% ifversion fpt or ghec or ghes %} -The action uses the Dependency Review REST API to get the diff of dependency changes between the base commit and head commit. You can use the Dependency Review API to get the diff of dependency changes, including vulnerability data, between any two commits on a repository. For more information, see "[AUTOTITLE](/rest/dependency-graph#dependency-review)." +{% ifversion fpt or ghec or ghes %}The action uses the dependency review REST API to get the diff of dependency changes between the base commit and head commit. You can use the dependency review API to get the diff of dependency changes, including vulnerability data, between any two commits on a repository. For more information, see "[AUTOTITLE](/rest/dependency-graph#dependency-review)."{% endif %}{% ifversion dependency-review-submission-api %} The action also considers dependencies submitted via the dependency submission API. For more information about the dependency submission API, see "[AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api)." + +{% data reusables.dependency-review.works-with-submission-api-beta %} + {% endif %} {% ifversion dependency-review-action-configuration %} @@ -67,3 +69,33 @@ You can configure the {% data variables.dependency-review.action_name %} to bett {% endif %} {% endif %} + +{% ifversion dependency-review-submission-api %} + +## Best practices for using the dependency review API and the dependency submission API together + +The dependency review API and the {% data variables.dependency-review.action_name %} both work by comparing dependency changes in a pull request with the state of your dependencies in the head commit of your target branch, which is usually your default branch. + +If your repository only depends on statically defined dependencies in one of {% data variables.product.prodname_dotcom %}’s supported ecosystems, the dependency review API and the {% data variables.dependency-review.action_name %} work consistently. + +However, you may want your dependencies to be scanned during a build and then uploaded to the dependency submission API. In this case, there are some best practices you should follow to ensure that you don’t introduce a race condition when running the processes for the dependency review API and the dependency submission API, since it could result in missing data. + +The best practices you should take will depend on whether you use {% data variables.product.prodname_actions %} to access the dependency submission API and the dependency review API, or whether you use direct API access. + +### Using GitHub Actions to access the dependency submission API and the dependency review API + +If you use {% data variables.product.prodname_actions %} to access the dependency submission API or the dependency review API: + * Make sure you run all of your dependency submission actions in the same {% data variables.product.prodname_actions %} workflow as your {% data variables.dependency-review.action_name %}. This will give you control over the order of execution, and it will ensure that dependency review will always work. + * If you do choose to run the {% data variables.dependency-review.action_name %} separately, for instance, as a required workflow, you should: + + Set `retry-on-snapshot-warnings` to `true`. + + Set `retry-on-snapshot-warnings-timeout` to slightly exceed the typical run time (in seconds) of your longest-running dependency submission action. + +### Using direct API access to the dependency submission API and the dependency review API + +If you don’t use {% data variables.product.prodname_actions %}, and your code relies on direct access to the dependency submission API and the dependency review API: + * Make sure you run the code that calls the dependency submission API first, and then run the code that calls the dependency review API afterwards. + * If you do choose to run the code for the dependency submission API and the dependency review API in parallel, you should implement a retry logic and note the following: + + When there are snapshots missing for either side of the comparison, you will see an explanation for that in the `x-github-dependency-graph-snapshot-warnings` header (as a base64-encoded string). Therefore, if the header is non-empty, you should consider retrying. + + Implement a retry logic with exponential backoff retries. + + Implement a reasonable number of retries to account for the typical runtime of your dependency submission code. +{% endif %} diff --git a/data/features/dependency-review-submission-api.yml b/data/features/dependency-review-submission-api.yml new file mode 100644 index 000000000000..b8793118a4cd --- /dev/null +++ b/data/features/dependency-review-submission-api.yml @@ -0,0 +1,5 @@ +# Reference: Issue #10333 Dependency review works with dependencies submitted with the dependency submission API [Public Beta] +versions: + fpt: '*' + ghec: '*' + ghes: '>3.10' diff --git a/data/reusables/dependency-review/works-with-submission-api-beta.md b/data/reusables/dependency-review/works-with-submission-api-beta.md new file mode 100644 index 000000000000..72bdcd62bf04 --- /dev/null +++ b/data/reusables/dependency-review/works-with-submission-api-beta.md @@ -0,0 +1,5 @@ +{% note %} + +**Note:** The dependency review API and the dependency submission API work together. This means that the dependency review API will include dependencies submitted via the dependency submission API. This feature is currently in public beta and subject to change. + +{% endnote %} \ No newline at end of file diff --git a/data/reusables/dependency-submission/about-dependency-submission.md b/data/reusables/dependency-submission/about-dependency-submission.md index d77aa84d561b..63c21e02ca96 100644 --- a/data/reusables/dependency-submission/about-dependency-submission.md +++ b/data/reusables/dependency-submission/about-dependency-submission.md @@ -2,4 +2,7 @@ You can use the REST API to submit dependencies for a project. This enables you The dependency graph shows any dependencies you submit using the API in addition to any dependencies that are identified from manifest or lock files in the repository (for example, a `package-lock.json` file in a JavaScript project). For more information about viewing the dependency graph, see "[AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/exploring-the-dependencies-of-a-repository#viewing-the-dependency-graph)." -Submitted dependencies will receive {% data variables.product.prodname_dependabot_alerts %} and {% data variables.product.prodname_dependabot_security_updates %} for any known vulnerabilities. You will only get {% data variables.product.prodname_dependabot_alerts %} for dependencies that are from one of the [supported ecosystems](https://github.com/github/advisory-database#supported-ecosystems) of the {% data variables.product.prodname_advisory_database %}. Submitted dependencies will not be surfaced in dependency review or your organization's dependency insights. +Submitted dependencies will receive {% data variables.product.prodname_dependabot_alerts %} and {% data variables.product.prodname_dependabot_security_updates %} for any known vulnerabilities. You will only get {% data variables.product.prodname_dependabot_alerts %} for dependencies that are from one of the supported ecosystems for the {% data variables.product.prodname_advisory_database %}. For more information about these ecosystems, see "[AUTOTITLE](/code-security/security-advisories/global-security-advisories/about-the-github-advisory-database#github-reviewed-advisories)." {% ifversion dependency-review-submission-api %}Submitted dependencies will be surfaced in dependency review or your organization's dependency insights. + +{% data reusables.dependency-review.works-with-submission-api-beta %} +{% else %}Submitted dependencies will _not_ be surfaced in dependency review or your organization's dependency insights.{% endif %}