From da2b2f22ba4ef99c6889046941875227c3e79b51 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Wed, 22 Feb 2023 11:30:18 -0500 Subject: [PATCH 1/6] Hack around corrupt AUTOTITLE translations (#34980) --- lib/page-data.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/page-data.js b/lib/page-data.js index 090fa42cb2..f07634b007 100644 --- a/lib/page-data.js +++ b/lib/page-data.js @@ -147,6 +147,17 @@ async function translateTree(dir, langObj, enTree) { return [key, data[key]] }) ) + + // A lot of translations have corruptions around the AUTOTITLE links. + // We've requested that these are corrected back but as a temporary + // solution we'll manually recover now. + // See internal issue #2762 + // In late 2023, search in the translations repos if these things are + // still happening and if not, the following lines can be removed. + content = content.replaceAll('[AUTOTITLE"을 참조하세요]', '[AUTOTITLE]') + content = content.replaceAll('[AUTOTITLE"을]', '[AUTOTITLE]') + content = content.replaceAll('["AUTOTITLE]', '"[AUTOTITLE]') + // The "content" isn't a frontmatter key translatedData.markdown = content From d19996f6a2b6fe89c27f33016cc3f7f0f3d26531 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Wed, 22 Feb 2023 11:33:06 -0500 Subject: [PATCH 2/6] Default to enterprise-cloud@latest for admin links (#34983) --- lib/render-content/plugins/rewrite-local-links.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/render-content/plugins/rewrite-local-links.js b/lib/render-content/plugins/rewrite-local-links.js index 62bb174521..19976a6ff6 100644 --- a/lib/render-content/plugins/rewrite-local-links.js +++ b/lib/render-content/plugins/rewrite-local-links.js @@ -144,9 +144,9 @@ function getNewHref(node, languageCode, version) { version = nonEnterpriseDefaultVersion } - // admin links on dotcom always point to Enterprise + // admin links on dotcom always point to Enterprise Cloud if (patterns.adminProduct.test(hrefWithoutLang) && version === nonEnterpriseDefaultVersion) { - version = `enterprise-server@${latest}` + version = 'enterprise-cloud@latest' } // ------ END ONE-OFF OVERRIDES ------// From fbc46059806bb92684efe7338a0e3d1a171ac365 Mon Sep 17 00:00:00 2001 From: Emma Gabriel Date: Wed, 22 Feb 2023 16:35:02 +0000 Subject: [PATCH 3/6] GitHub Archive program: Removes note about partner programs (#34974) Co-authored-by: hubwriter --- ...-of-the-github-archive-program-for-your-public-repository.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/get-started/privacy-on-github/opting-into-or-out-of-the-github-archive-program-for-your-public-repository.md b/content/get-started/privacy-on-github/opting-into-or-out-of-the-github-archive-program-for-your-public-repository.md index b5e63304eb..bd09f181ee 100644 --- a/content/get-started/privacy-on-github/opting-into-or-out-of-the-github-archive-program-for-your-public-repository.md +++ b/content/get-started/privacy-on-github/opting-into-or-out-of-the-github-archive-program-for-your-public-repository.md @@ -15,7 +15,7 @@ shortTitle: GitHub Archive program {% data reusables.repositories.about-github-archive-program %} For more information, see "[AUTOTITLE](/repositories/archiving-a-github-repository/about-archiving-content-and-data-on-github#about-the-github-archive-program)." -If you opt out of the {% data variables.product.prodname_archive %} for a repository, the repository will be excluded from any long-term archives that {% data variables.product.prodname_dotcom %} may create in the future. We will also send a request to each of our partner organizations to remove the repository from their data. +If you opt out of the {% data variables.product.prodname_archive %} for a repository, the repository will be excluded from any long-term archives that {% data variables.product.prodname_dotcom %} may create in the future. {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-settings %} From e5e5bce1b6968a79cd9c5b46b5f09ca20768a89a Mon Sep 17 00:00:00 2001 From: Octomerger Bot <63058869+Octomerger@users.noreply.github.com> Date: Wed, 22 Feb 2023 08:40:32 -0800 Subject: [PATCH 4/6] GraphQL schema update (#34987) Co-authored-by: rachmari --- data/graphql/ghec/schema.docs.graphql | 189 +++++++++++++++++++ data/graphql/schema.docs.graphql | 189 +++++++++++++++++++ src/graphql/data/dotcom/changelog.json | 21 +++ src/graphql/data/dotcom/schema.json | 243 +++++++++++++++++++++++++ src/graphql/data/ghec/schema.json | 243 +++++++++++++++++++++++++ 5 files changed, 885 insertions(+) diff --git a/data/graphql/ghec/schema.docs.graphql b/data/graphql/ghec/schema.docs.graphql index b30df0513d..abc8d4298c 100644 --- a/data/graphql/ghec/schema.docs.graphql +++ b/data/graphql/ghec/schema.docs.graphql @@ -7032,6 +7032,51 @@ type CreateProjectPayload { project: Project } +""" +Autogenerated input type of CreateProjectV2Field +""" +input CreateProjectV2FieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The data type of the field. + """ + dataType: ProjectV2CustomFieldType! + + """ + The name of the field. + """ + name: String! + + """ + The ID of the Project to create the field in. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + Options for a single select field. At least one value is required if data_type is SINGLE_SELECT + """ + singleSelectOptions: [ProjectV2SingleSelectFieldOptionInput!] +} + +""" +Autogenerated return type of CreateProjectV2Field +""" +type CreateProjectV2FieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new field. + """ + projectV2Field: ProjectV2FieldConfiguration +} + """ Autogenerated input type of CreateProjectV2 """ @@ -8528,6 +8573,40 @@ type DeleteProjectPayload { owner: ProjectOwner } +""" +Autogenerated input type of DeleteProjectV2Field +""" +input DeleteProjectV2FieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the field to delete. + """ + fieldId: ID! + @possibleTypes( + concreteTypes: ["ProjectV2Field", "ProjectV2IterationField", "ProjectV2SingleSelectField"] + abstractType: "ProjectV2FieldConfiguration" + ) +} + +""" +Autogenerated return type of DeleteProjectV2Field +""" +type DeleteProjectV2FieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The deleted field. + """ + projectV2Field: ProjectV2FieldConfiguration +} + """ Autogenerated input type of DeleteProjectV2 """ @@ -20537,6 +20616,16 @@ type Mutation { input: CreateProjectV2Input! ): CreateProjectV2Payload + """ + Create a new project field. + """ + createProjectV2Field( + """ + Parameters for CreateProjectV2Field + """ + input: CreateProjectV2FieldInput! + ): CreateProjectV2FieldPayload + """ Create a new pull request """ @@ -20777,6 +20866,16 @@ type Mutation { input: DeleteProjectV2Input! ): DeleteProjectV2Payload + """ + Delete a project field. + """ + deleteProjectV2Field( + """ + Parameters for DeleteProjectV2Field + """ + input: DeleteProjectV2FieldInput! + ): DeleteProjectV2FieldPayload + """ Deletes an item from a Project. """ @@ -29887,6 +29986,31 @@ type ProjectV2Connection { totalCount: Int! } +""" +The type of a project field. +""" +enum ProjectV2CustomFieldType { + """ + Date + """ + DATE + + """ + Number + """ + NUMBER + + """ + Single Select + """ + SINGLE_SELECT + + """ + Text + """ + TEXT +} + """ An edge in a connection. """ @@ -31196,6 +31320,71 @@ type ProjectV2SingleSelectFieldOption { nameHTML: String! } +""" +The display color of a single-select field option. +""" +enum ProjectV2SingleSelectFieldOptionColor { + """ + BLUE + """ + BLUE + + """ + GRAY + """ + GRAY + + """ + GREEN + """ + GREEN + + """ + ORANGE + """ + ORANGE + + """ + PINK + """ + PINK + + """ + PURPLE + """ + PURPLE + + """ + RED + """ + RED + + """ + YELLOW + """ + YELLOW +} + +""" +Represents a single select field option +""" +input ProjectV2SingleSelectFieldOptionInput { + """ + The display color of the option + """ + color: ProjectV2SingleSelectFieldOptionColor! + + """ + The description text of the option + """ + description: String! + + """ + The name of the option + """ + name: String! +} + """ Represents a sort by field and direction. """ diff --git a/data/graphql/schema.docs.graphql b/data/graphql/schema.docs.graphql index b30df0513d..abc8d4298c 100644 --- a/data/graphql/schema.docs.graphql +++ b/data/graphql/schema.docs.graphql @@ -7032,6 +7032,51 @@ type CreateProjectPayload { project: Project } +""" +Autogenerated input type of CreateProjectV2Field +""" +input CreateProjectV2FieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The data type of the field. + """ + dataType: ProjectV2CustomFieldType! + + """ + The name of the field. + """ + name: String! + + """ + The ID of the Project to create the field in. + """ + projectId: ID! @possibleTypes(concreteTypes: ["ProjectV2"]) + + """ + Options for a single select field. At least one value is required if data_type is SINGLE_SELECT + """ + singleSelectOptions: [ProjectV2SingleSelectFieldOptionInput!] +} + +""" +Autogenerated return type of CreateProjectV2Field +""" +type CreateProjectV2FieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The new field. + """ + projectV2Field: ProjectV2FieldConfiguration +} + """ Autogenerated input type of CreateProjectV2 """ @@ -8528,6 +8573,40 @@ type DeleteProjectPayload { owner: ProjectOwner } +""" +Autogenerated input type of DeleteProjectV2Field +""" +input DeleteProjectV2FieldInput { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The ID of the field to delete. + """ + fieldId: ID! + @possibleTypes( + concreteTypes: ["ProjectV2Field", "ProjectV2IterationField", "ProjectV2SingleSelectField"] + abstractType: "ProjectV2FieldConfiguration" + ) +} + +""" +Autogenerated return type of DeleteProjectV2Field +""" +type DeleteProjectV2FieldPayload { + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The deleted field. + """ + projectV2Field: ProjectV2FieldConfiguration +} + """ Autogenerated input type of DeleteProjectV2 """ @@ -20537,6 +20616,16 @@ type Mutation { input: CreateProjectV2Input! ): CreateProjectV2Payload + """ + Create a new project field. + """ + createProjectV2Field( + """ + Parameters for CreateProjectV2Field + """ + input: CreateProjectV2FieldInput! + ): CreateProjectV2FieldPayload + """ Create a new pull request """ @@ -20777,6 +20866,16 @@ type Mutation { input: DeleteProjectV2Input! ): DeleteProjectV2Payload + """ + Delete a project field. + """ + deleteProjectV2Field( + """ + Parameters for DeleteProjectV2Field + """ + input: DeleteProjectV2FieldInput! + ): DeleteProjectV2FieldPayload + """ Deletes an item from a Project. """ @@ -29887,6 +29986,31 @@ type ProjectV2Connection { totalCount: Int! } +""" +The type of a project field. +""" +enum ProjectV2CustomFieldType { + """ + Date + """ + DATE + + """ + Number + """ + NUMBER + + """ + Single Select + """ + SINGLE_SELECT + + """ + Text + """ + TEXT +} + """ An edge in a connection. """ @@ -31196,6 +31320,71 @@ type ProjectV2SingleSelectFieldOption { nameHTML: String! } +""" +The display color of a single-select field option. +""" +enum ProjectV2SingleSelectFieldOptionColor { + """ + BLUE + """ + BLUE + + """ + GRAY + """ + GRAY + + """ + GREEN + """ + GREEN + + """ + ORANGE + """ + ORANGE + + """ + PINK + """ + PINK + + """ + PURPLE + """ + PURPLE + + """ + RED + """ + RED + + """ + YELLOW + """ + YELLOW +} + +""" +Represents a single select field option +""" +input ProjectV2SingleSelectFieldOptionInput { + """ + The display color of the option + """ + color: ProjectV2SingleSelectFieldOptionColor! + + """ + The description text of the option + """ + description: String! + + """ + The name of the option + """ + name: String! +} + """ Represents a sort by field and direction. """ diff --git a/src/graphql/data/dotcom/changelog.json b/src/graphql/data/dotcom/changelog.json index 94540c723d..0ea5b2d468 100644 --- a/src/graphql/data/dotcom/changelog.json +++ b/src/graphql/data/dotcom/changelog.json @@ -1,4 +1,25 @@ [ + { + "schemaChanges": [ + { + "title": "The GraphQL schema includes these changes:", + "changes": [ + "

Type 'CreateProjectV2FieldInput' was added

", + "

Type 'CreateProjectV2FieldPayload' was added

", + "

Type 'DeleteProjectV2FieldInput' was added

", + "

Type 'DeleteProjectV2FieldPayload' was added

", + "

Type 'ProjectV2CustomFieldType' was added

", + "

Type 'ProjectV2SingleSelectFieldOptionColor' was added

", + "

Type 'ProjectV2SingleSelectFieldOptionInput' was added

", + "

Field 'createProjectV2Fieldwas added to object typeMutation'

", + "

Field 'deleteProjectV2Fieldwas added to object typeMutation'

" + ] + } + ], + "previewChanges": [], + "upcomingChanges": [], + "date": "2023-02-22" + }, { "schemaChanges": [ { diff --git a/src/graphql/data/dotcom/schema.json b/src/graphql/data/dotcom/schema.json index e1ad794c3f..a11a4ccac4 100644 --- a/src/graphql/data/dotcom/schema.json +++ b/src/graphql/data/dotcom/schema.json @@ -2870,6 +2870,40 @@ } ] }, + { + "name": "createProjectV2Field", + "kind": "mutations", + "id": "createprojectv2field", + "href": "/graphql/reference/mutations#createprojectv2field", + "description": "

Create a new project field.

", + "inputFields": [ + { + "name": "input", + "type": "CreateProjectV2FieldInput!", + "id": "createprojectv2fieldinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#createprojectv2fieldinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "projectV2Field", + "type": "ProjectV2FieldConfiguration", + "id": "projectv2fieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectv2fieldconfiguration", + "description": "

The new field.

" + } + ] + }, { "name": "createPullRequest", "kind": "mutations", @@ -3692,6 +3726,40 @@ } ] }, + { + "name": "deleteProjectV2Field", + "kind": "mutations", + "id": "deleteprojectv2field", + "href": "/graphql/reference/mutations#deleteprojectv2field", + "description": "

Delete a project field.

", + "inputFields": [ + { + "name": "input", + "type": "DeleteProjectV2FieldInput!", + "id": "deleteprojectv2fieldinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#deleteprojectv2fieldinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "projectV2Field", + "type": "ProjectV2FieldConfiguration", + "id": "projectv2fieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectv2fieldconfiguration", + "description": "

The deleted field.

" + } + ] + }, { "name": "deleteProjectV2Item", "kind": "mutations", @@ -77219,6 +77287,31 @@ } ] }, + { + "name": "ProjectV2CustomFieldType", + "kind": "enums", + "id": "projectv2customfieldtype", + "href": "/graphql/reference/enums#projectv2customfieldtype", + "description": "

The type of a project field.

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

Date.

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

Number.

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

Single Select.

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

Text.

" + } + ] + }, { "name": "ProjectV2FieldOrderField", "kind": "enums", @@ -77381,6 +77474,47 @@ } ] }, + { + "name": "ProjectV2SingleSelectFieldOptionColor", + "kind": "enums", + "id": "projectv2singleselectfieldoptioncolor", + "href": "/graphql/reference/enums#projectv2singleselectfieldoptioncolor", + "description": "

The display color of a single-select field option.

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

BLUE.

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

GRAY.

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

GREEN.

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

ORANGE.

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

PINK.

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

PURPLE.

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

RED.

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

YELLOW.

" + } + ] + }, { "name": "ProjectV2State", "kind": "enums", @@ -85306,6 +85440,56 @@ } ] }, + { + "name": "CreateProjectV2FieldInput", + "kind": "inputObjects", + "id": "createprojectv2fieldinput", + "href": "/graphql/reference/input-objects#createprojectv2fieldinput", + "description": "

Autogenerated input type of CreateProjectV2Field.

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

A unique identifier for the client performing the mutation.

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

The data type of the field.

", + "type": "ProjectV2CustomFieldType!", + "id": "projectv2customfieldtype", + "kind": "enums", + "href": "/graphql/reference/enums#projectv2customfieldtype" + }, + { + "name": "name", + "description": "

The name of the field.

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

The ID of the Project to create the field in.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "singleSelectOptions", + "description": "

Options for a single select field. At least one value is required if data_type is SINGLE_SELECT.

", + "type": "[ProjectV2SingleSelectFieldOptionInput!]", + "id": "projectv2singleselectfieldoptioninput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#projectv2singleselectfieldoptioninput" + } + ] + }, { "name": "CreateProjectV2Input", "kind": "inputObjects", @@ -86344,6 +86528,32 @@ } ] }, + { + "name": "DeleteProjectV2FieldInput", + "kind": "inputObjects", + "id": "deleteprojectv2fieldinput", + "href": "/graphql/reference/input-objects#deleteprojectv2fieldinput", + "description": "

Autogenerated input type of DeleteProjectV2Field.

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

A unique identifier for the client performing the mutation.

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

The ID of the field to delete.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + } + ] + }, { "name": "DeleteProjectV2Input", "kind": "inputObjects", @@ -88473,6 +88683,39 @@ } ] }, + { + "name": "ProjectV2SingleSelectFieldOptionInput", + "kind": "inputObjects", + "id": "projectv2singleselectfieldoptioninput", + "href": "/graphql/reference/input-objects#projectv2singleselectfieldoptioninput", + "description": "

Represents a single select field option.

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

The display color of the option.

", + "type": "ProjectV2SingleSelectFieldOptionColor!", + "id": "projectv2singleselectfieldoptioncolor", + "kind": "enums", + "href": "/graphql/reference/enums#projectv2singleselectfieldoptioncolor" + }, + { + "name": "description", + "description": "

The description text of the option.

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

The name of the option.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "ProjectV2ViewOrder", "kind": "inputObjects", diff --git a/src/graphql/data/ghec/schema.json b/src/graphql/data/ghec/schema.json index e1ad794c3f..a11a4ccac4 100644 --- a/src/graphql/data/ghec/schema.json +++ b/src/graphql/data/ghec/schema.json @@ -2870,6 +2870,40 @@ } ] }, + { + "name": "createProjectV2Field", + "kind": "mutations", + "id": "createprojectv2field", + "href": "/graphql/reference/mutations#createprojectv2field", + "description": "

Create a new project field.

", + "inputFields": [ + { + "name": "input", + "type": "CreateProjectV2FieldInput!", + "id": "createprojectv2fieldinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#createprojectv2fieldinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "projectV2Field", + "type": "ProjectV2FieldConfiguration", + "id": "projectv2fieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectv2fieldconfiguration", + "description": "

The new field.

" + } + ] + }, { "name": "createPullRequest", "kind": "mutations", @@ -3692,6 +3726,40 @@ } ] }, + { + "name": "deleteProjectV2Field", + "kind": "mutations", + "id": "deleteprojectv2field", + "href": "/graphql/reference/mutations#deleteprojectv2field", + "description": "

Delete a project field.

", + "inputFields": [ + { + "name": "input", + "type": "DeleteProjectV2FieldInput!", + "id": "deleteprojectv2fieldinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#deleteprojectv2fieldinput" + } + ], + "returnFields": [ + { + "name": "clientMutationId", + "type": "String", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string", + "description": "

A unique identifier for the client performing the mutation.

" + }, + { + "name": "projectV2Field", + "type": "ProjectV2FieldConfiguration", + "id": "projectv2fieldconfiguration", + "kind": "unions", + "href": "/graphql/reference/unions#projectv2fieldconfiguration", + "description": "

The deleted field.

" + } + ] + }, { "name": "deleteProjectV2Item", "kind": "mutations", @@ -77219,6 +77287,31 @@ } ] }, + { + "name": "ProjectV2CustomFieldType", + "kind": "enums", + "id": "projectv2customfieldtype", + "href": "/graphql/reference/enums#projectv2customfieldtype", + "description": "

The type of a project field.

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

Date.

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

Number.

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

Single Select.

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

Text.

" + } + ] + }, { "name": "ProjectV2FieldOrderField", "kind": "enums", @@ -77381,6 +77474,47 @@ } ] }, + { + "name": "ProjectV2SingleSelectFieldOptionColor", + "kind": "enums", + "id": "projectv2singleselectfieldoptioncolor", + "href": "/graphql/reference/enums#projectv2singleselectfieldoptioncolor", + "description": "

The display color of a single-select field option.

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

BLUE.

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

GRAY.

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

GREEN.

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

ORANGE.

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

PINK.

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

PURPLE.

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

RED.

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

YELLOW.

" + } + ] + }, { "name": "ProjectV2State", "kind": "enums", @@ -85306,6 +85440,56 @@ } ] }, + { + "name": "CreateProjectV2FieldInput", + "kind": "inputObjects", + "id": "createprojectv2fieldinput", + "href": "/graphql/reference/input-objects#createprojectv2fieldinput", + "description": "

Autogenerated input type of CreateProjectV2Field.

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

A unique identifier for the client performing the mutation.

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

The data type of the field.

", + "type": "ProjectV2CustomFieldType!", + "id": "projectv2customfieldtype", + "kind": "enums", + "href": "/graphql/reference/enums#projectv2customfieldtype" + }, + { + "name": "name", + "description": "

The name of the field.

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

The ID of the Project to create the field in.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, + { + "name": "singleSelectOptions", + "description": "

Options for a single select field. At least one value is required if data_type is SINGLE_SELECT.

", + "type": "[ProjectV2SingleSelectFieldOptionInput!]", + "id": "projectv2singleselectfieldoptioninput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#projectv2singleselectfieldoptioninput" + } + ] + }, { "name": "CreateProjectV2Input", "kind": "inputObjects", @@ -86344,6 +86528,32 @@ } ] }, + { + "name": "DeleteProjectV2FieldInput", + "kind": "inputObjects", + "id": "deleteprojectv2fieldinput", + "href": "/graphql/reference/input-objects#deleteprojectv2fieldinput", + "description": "

Autogenerated input type of DeleteProjectV2Field.

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

A unique identifier for the client performing the mutation.

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

The ID of the field to delete.

", + "type": "ID!", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + } + ] + }, { "name": "DeleteProjectV2Input", "kind": "inputObjects", @@ -88473,6 +88683,39 @@ } ] }, + { + "name": "ProjectV2SingleSelectFieldOptionInput", + "kind": "inputObjects", + "id": "projectv2singleselectfieldoptioninput", + "href": "/graphql/reference/input-objects#projectv2singleselectfieldoptioninput", + "description": "

Represents a single select field option.

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

The display color of the option.

", + "type": "ProjectV2SingleSelectFieldOptionColor!", + "id": "projectv2singleselectfieldoptioncolor", + "kind": "enums", + "href": "/graphql/reference/enums#projectv2singleselectfieldoptioncolor" + }, + { + "name": "description", + "description": "

The description text of the option.

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

The name of the option.

", + "type": "String!", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "ProjectV2ViewOrder", "kind": "inputObjects", From aef2cf64f855b2944604af0b6e53a18971bc5236 Mon Sep 17 00:00:00 2001 From: JoannaaKL Date: Wed, 22 Feb 2023 17:44:29 +0100 Subject: [PATCH 5/6] Update section-using-jobs-in-a-workflow-needs.md (#34976) Co-authored-by: hubwriter Co-authored-by: Lokesh Gopu --- .../actions/jobs/section-using-jobs-in-a-workflow-needs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/reusables/actions/jobs/section-using-jobs-in-a-workflow-needs.md b/data/reusables/actions/jobs/section-using-jobs-in-a-workflow-needs.md index 2be56dbdbb..4226396279 100644 --- a/data/reusables/actions/jobs/section-using-jobs-in-a-workflow-needs.md +++ b/data/reusables/actions/jobs/section-using-jobs-in-a-workflow-needs.md @@ -1,4 +1,4 @@ -Use `jobs..needs` to identify any jobs that must complete successfully before this job will run. It can be a string or array of strings. If a job fails, all jobs that need it are skipped unless the jobs use a conditional expression that causes the job to continue. If a run contains a series of jobs that need each other, a failure applies to all jobs in the dependency chain from the point of failure onwards. +Use `jobs..needs` to identify any jobs that must complete successfully before this job will run. It can be a string or array of strings. If a job fails or is skipped, all jobs that need it are skipped unless the jobs use a conditional expression that causes the job to continue. If a run contains a series of jobs that need each other, a failure or skip applies to all jobs in the dependency chain from the point of failure or skip onwards. ### Example: Requiring successful dependent jobs From 8268f5d0ce3910a7fbdf4465deade6c8d1c39a96 Mon Sep 17 00:00:00 2001 From: Laura Coursen Date: Wed, 22 Feb 2023 10:50:37 -0600 Subject: [PATCH 6/6] Add guidance about structuring organizations within an enterprise (#34389) Co-authored-by: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Co-authored-by: David Losert Co-authored-by: Jamie Strusz <5758031+allthedoll@users.noreply.github.com> --- content/admin/index.md | 10 +-- .../best-practices-for-enterprises.md | 8 +- ...turing-organizations-in-your-enterprise.md | 90 +++++++++++++++++++ .../index.md | 2 +- 4 files changed, 99 insertions(+), 11 deletions(-) create mode 100644 content/admin/user-management/managing-organizations-in-your-enterprise/best-practices-for-structuring-organizations-in-your-enterprise.md diff --git a/content/admin/index.md b/content/admin/index.md index 47aefa03da..2e44599a2b 100644 --- a/content/admin/index.md +++ b/content/admin/index.md @@ -72,13 +72,11 @@ featuredLinks: startHere: - '{% ifversion ghae %}/admin/user-management/managing-users-in-your-enterprise/auditing-users-across-your-enterprise{% endif %}' - /admin/identity-and-access-management/managing-iam-for-your-enterprise/about-authentication-for-your-enterprise - - /admin/policies/enforcing-policies-for-your-enterprise/about-enterprise-policies - '{% ifversion ghae %}/admin/configuration/restricting-network-traffic-to-your-enterprise-with-an-ip-allow-list{% endif %}' - - '{% ifversion ghes %}/admin/configuration/configuring-your-enterprise/configuring-backups-on-your-appliance{% endif %}' - - '{% ifversion ghes %}/admin/enterprise-management/configuring-high-availability/creating-a-high-availability-replica{% endif %}' - - '{% ifversion ghes %}/admin/overview/about-upgrades-to-new-releases{% endif %}' - '{% ifversion ghec %}/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise{% endif %}' - - '{% ifversion ghec %}/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise{% endif %}' + - '/admin/user-management/managing-organizations-in-your-enterprise/best-practices-for-structuring-organizations-in-your-enterprise' + - '{% ifversion ghes %}/admin/overview/about-upgrades-to-new-releases{% endif %}' + - '{% ifversion ghae %}/admin/policies/enforcing-policies-for-your-enterprise/about-enterprise-policies{% endif %}' guideCards: - '{% ifversion ghes %}/admin/github-actions/getting-started-with-github-actions-for-your-enterprise/getting-started-with-github-actions-for-github-enterprise-server{% endif %}' - '{% ifversion ghes %}/admin/packages/getting-started-with-github-packages-for-your-enterprise{% endif %}' @@ -89,6 +87,7 @@ featuredLinks: - '{% ifversion ghec %}/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise{% endif %}' - '{% ifversion ghec %}/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-security-and-analysis-for-your-enterprise{% endif %}' - '{% ifversion ghec %}/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise{% endif %}' + - '/admin/user-management/managing-organizations-in-your-enterprise/best-practices-for-structuring-organizations-in-your-enterprise' popular: - /admin/overview/about-github-enterprise-server - '{% ifversion ghae %}/admin/release-notes{% endif %}' @@ -126,4 +125,3 @@ children: - /release-notes - /all-releases --- - diff --git a/content/admin/overview/best-practices-for-enterprises.md b/content/admin/overview/best-practices-for-enterprises.md index 1de473817d..06c5ce37e6 100644 --- a/content/admin/overview/best-practices-for-enterprises.md +++ b/content/admin/overview/best-practices-for-enterprises.md @@ -18,20 +18,20 @@ topics: {% data reusables.enterprise.ghec-authentication-options %} -For help identifying the authentication method that will best meet your needs, see "[AUTOTITLE](/admin/identity-and-access-management/managing-iam-for-your-enterprise/about-authentication-for-your-enterprise)." +For help identifying the authentication method that will best meet your needs, see "[AUTOTITLE](/admin/identity-and-access-management/managing-iam-for-your-enterprise/about-authentication-for-your-enterprise)." {% endif %} ## Use policies -We recommend using policies to enforce business rules and regulatory compliance. +We recommend using policies to enforce business rules and regulatory compliance. {% data reusables.enterprise.about-policies %} For more information, see "[AUTOTITLE](/admin/policies/enforcing-policies-for-your-enterprise/about-enterprise-policies)." ## Minimize the number of organizations -Large enterprises often need multiple organizations, but try to create as few as possible to reflect top-level corporate divisions. A smaller number of organizations encourages innersource practices and allows discussions to involve a wider audience. +Most businesses are best served by a single organization. Some enterprises may need multiple organizations for compliance or security reasons, but try to create as few as possible. A smaller number of organizations encourages innersource practice, allows discussions to involve a wider audience, and reduces administrative overhead. -Instead, you can manage repository access and security requirements at a more granular level within each organization by using teams. For more information, see "[AUTOTITLE](/organizations/organizing-members-into-teams/about-teams)." +For more guidance on how many organizations to create and how to structure them, see "[AUTOTITLE](/admin/user-management/managing-organizations-in-your-enterprise/best-practices-for-structuring-organizations-in-your-enterprise)." ## Avoid extensive collaboration in user-owned repositories diff --git a/content/admin/user-management/managing-organizations-in-your-enterprise/best-practices-for-structuring-organizations-in-your-enterprise.md b/content/admin/user-management/managing-organizations-in-your-enterprise/best-practices-for-structuring-organizations-in-your-enterprise.md new file mode 100644 index 0000000000..109e22c313 --- /dev/null +++ b/content/admin/user-management/managing-organizations-in-your-enterprise/best-practices-for-structuring-organizations-in-your-enterprise.md @@ -0,0 +1,90 @@ +--- +title: Best practices for structuring organizations in your enterprise +intro: 'Learn to identify how many organizations to create within your enterprise, and how you should structure them.' +versions: + ghec: '*' + ghes: '*' + ghae: '*' +type: overview +topics: + - Administrator + - Enterprise + - Organizations +shortTitle: Best practices +--- + +## About best practices for organizations within an enterprise + +There are a multiple options for structuring the organizations within your enterprise. Each approach has pros and cons, and the best structure for your enterprise depends on the characteristics and needs of your business, including size and security constraints. + +However, we also recommend aligning your strategy with the culture you want to create, not the culture you currently have. If you want to advance in terms of collaboration and innersourcing, structure your tools accordingly. Then, your tools can assist you in the cultural change instead of acting as a blocker. + +## About organizational number + +In general, {% data variables.product.company_short %} recommends minimizing the number of organizations you create. Having fewer organizations encourages greater collaboration and innersourcing, which increases efficiency. In fact, many businesses are best served by a single organization, for the following reasons. + +- It's easier to find resources within a single organization, as there's only one place to search. +- It's easier to communicate within a single organization, as @-mentions only work between members of the same organization. +- Being part of a single, large organization where anyone and anything is accessible fosters collaboration and loyalty, whereas being separated into smaller organizations can make teams more isolated. + +Organization owners always have access to all repositories owned by the organization. If your company is large enough that no single owner should have access to all repositories, consider creating multiple organizations. + +The main benefit of creating multiple organizations is the ability to configure separate policies, settings, and requirements for each. For example, each organization can have a different SAML configuration. + +Avoid creating a one-to-one relationship between organizations and structural entities of your company, such as individual teams or business units. Instead, group structural entities that can share policies, settings, and requirements into a single organization. This approach maximizes collaboration while meeting your regulatory requirements. + +It’s always easier to add organizations than to remove them, so we recommend starting with a small number of organizations, which gives you more flexibility in the future. After you develop more experience of what works well for your business, you can create additional organizations if the need arises. + +Removing organizations is much more difficult, often requiring migrations and a reduction in flexibility that teams have gotten used to. Many customers have come to regret creating a large number of organizations after they experience the challenging and time-consuming process of reducing their number. + +We recommend creating and enforcing fixed and transparent rules for creating a new organization in your enterprise. This will make it easier for everyone to understand the purpose of each organization and which assets are located where. + +## About organizational structure + +There are five main archetypes for organizational structure. The archetypes are defined by two decisions: + +- Whether to use a single organization or multiple organizations +- Whether to grant all members access to all repositories, or use teams to manage repository access more granularly + +For more information about teams, see "[About teams](/organizations/organizing-members-into-teams/about-teams)." + +### Single organization with direct repository access + +The simplest organizational structure is a single organization, where members are granted access to all repositories directly via organization membership. Teams may be used for coordination and communication, but not for managing repository access. + +This structure works best for small companies, such as startups, where everyone collaborates on everything. It can work for medium-sized companies as well, if trust is high. + +To use this archetype, set the base permissions for the organization to "Write" or "Read." For more information, see "[Setting base permissions for an organization](/organizations/managing-user-access-to-your-organizations-repositories/setting-base-permissions-for-an-organization)." + +### Single organization with teams for repository access + +If your company needs to control repository access more granularly, you can set the base permissions for your organization to "None," then give each team access to specific repositories only. + +This structure works best for medium-sized companies, or for small companies with lower trust. For smaller companies with high trust, where everyone collaborates on everything, administering teams may not be worth the time investment. + +### Multiple organizations with direct repository access + +For larger companies, managing repository access within a single organization can become unwieldy, even with teams. This archetype utilizes multiple organizations to manage repository access instead. Each organization's members have access to all of that organization's repositories. + +This structure works best for companies that are large enough to have different groups that don't need to work together. This structure is not as useful if collaboration across business units is important. + +To use this archetype, create one organization for each group that can share policies, settings, and requirements as described above, then set the base permissions for each organization to "Write" or "Read." + +### Multiple organizations with teams for repository access + +Very large companies may require more granular control over repository access, even within multiple organizations. In this case, you can use teams to give each group access to specific repositories only. + +To use this archetype, create one organization for each group that can share policies, settings, and requirements as described above, set the base permission for each organization to "None," then give each team access to specific repositories only. + +### Multiple organizations with different access methods + +If you want the collaboration benefits of a single organization with direct repository access, but you have a small number of repositories that are too sensitive for global access, consider using multiple organizations with a mix of access methods. + +To use this archetype, create one organization for all of your employees and most of your repositories. Grant all members access to all repositories in this organization by setting the base permissions for the organization to "Write" or "Read." + +Then, create a second organization specifically for more sensitive repositories. In this organization, set the base permissions to "None", add only the people that need to access the sensitive repositories, and manage access to the repositories via team membership. + +## Further reading + +- [Organize your experts with ad hoc teams](https://github.blog/2017-02-15-organize-your-experts-with-ad-hoc-teams/) in the {% data variables.product.company_short %} blog +- "[Best practices for organizations](/organizations/collaborating-with-groups-in-organizations/best-practices-for-organizations)" \ No newline at end of file diff --git a/content/admin/user-management/managing-organizations-in-your-enterprise/index.md b/content/admin/user-management/managing-organizations-in-your-enterprise/index.md index 1f01a6d091..4767e79b14 100644 --- a/content/admin/user-management/managing-organizations-in-your-enterprise/index.md +++ b/content/admin/user-management/managing-organizations-in-your-enterprise/index.md @@ -20,6 +20,7 @@ versions: topics: - Enterprise children: + - /best-practices-for-structuring-organizations-in-your-enterprise - /adding-organizations-to-your-enterprise - /configuring-visibility-for-organization-membership - /preventing-users-from-creating-organizations @@ -34,4 +35,3 @@ children: - /continuous-integration-using-jenkins shortTitle: Manage organizations --- -