From 5b7a9961180fa5f1addacce088db1e871dbe7ec8 Mon Sep 17 00:00:00 2001 From: Jules <19994093+jules-p@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:21:27 +0200 Subject: [PATCH 1/3] GitHub MCP Registry (public preview) (#57313) Co-authored-by: Jules Porter --- .../help/copilot/mcp-icon-in-dropdown.png | Bin 0 -> 24712 bytes content/copilot/concepts/context/mcp.md | 7 +++++++ .../use-mcp/extend-copilot-chat-with-mcp.md | 19 ++++++++++++++++++ data/reusables/profile/copilot_settings.md | 1 + 4 files changed, 27 insertions(+) create mode 100644 assets/images/help/copilot/mcp-icon-in-dropdown.png create mode 100644 data/reusables/profile/copilot_settings.md diff --git a/assets/images/help/copilot/mcp-icon-in-dropdown.png b/assets/images/help/copilot/mcp-icon-in-dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..431cdc82d384415ddafe4d022288852746f617f8 GIT binary patch literal 24712 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

Type CopilotCodeReviewParameters was added

", + "

Type CopilotCodeReviewParametersInput was added

", + "

Enum value 'COPILOT_CODE_REVIEWwas added to enumRepositoryRuleType'

", + "

Member CopilotCodeReviewParameters was added to Union type RuleParameters

", + "

Input field copilotCodeReview of type CopilotCodeReviewParametersInput was added to input object type RuleParametersInput

" + ] + } + ], + "previewChanges": [], + "upcomingChanges": [], + "date": "2025-09-16" + }, { "schemaChanges": [ { diff --git a/src/graphql/data/fpt/schema.docs.graphql b/src/graphql/data/fpt/schema.docs.graphql index f44cad4cede4..b4737f6059fc 100644 --- a/src/graphql/data/fpt/schema.docs.graphql +++ b/src/graphql/data/fpt/schema.docs.graphql @@ -7250,6 +7250,36 @@ type ConvertedToDiscussionEvent implements Node { id: ID! } +""" +Request Copilot code review for new pull requests automatically if the author has access to Copilot code review. +""" +type CopilotCodeReviewParameters { + """ + Copilot automatically reviews draft pull requests before they are marked as ready for review. + """ + reviewDraftPullRequests: Boolean! + + """ + Copilot automatically reviews each new push to the pull request. + """ + reviewOnPush: Boolean! +} + +""" +Request Copilot code review for new pull requests automatically if the author has access to Copilot code review. +""" +input CopilotCodeReviewParametersInput { + """ + Copilot automatically reviews draft pull requests before they are marked as ready for review. + """ + reviewDraftPullRequests: Boolean + + """ + Copilot automatically reviews each new push to the pull request. + """ + reviewOnPush: Boolean +} + """ Copilot endpoint information """ @@ -52909,6 +52939,11 @@ enum RepositoryRuleType { """ COMMIT_MESSAGE_PATTERN + """ + Request Copilot code review for new pull requests automatically if the author has access to Copilot code review. + """ + COPILOT_CODE_REVIEW + """ Only allow users with bypass permission to create matching refs. """ @@ -54874,6 +54909,7 @@ union RuleParameters = | CommitAuthorEmailPatternParameters | CommitMessagePatternParameters | CommitterEmailPatternParameters + | CopilotCodeReviewParameters | FileExtensionRestrictionParameters | FilePathRestrictionParameters | MaxFilePathLengthParameters @@ -54915,6 +54951,11 @@ input RuleParametersInput { """ committerEmailPattern: CommitterEmailPatternParametersInput + """ + Parameters used for the `copilot_code_review` rule type + """ + copilotCodeReview: CopilotCodeReviewParametersInput + """ Parameters used for the `file_extension_restriction` rule type """ diff --git a/src/graphql/data/fpt/schema.json b/src/graphql/data/fpt/schema.json index b0ea2c548730..d2a5402ed2c7 100644 --- a/src/graphql/data/fpt/schema.json +++ b/src/graphql/data/fpt/schema.json @@ -17432,6 +17432,31 @@ } ] }, + { + "name": "CopilotCodeReviewParameters", + "kind": "objects", + "id": "copilotcodereviewparameters", + "href": "/graphql/reference/objects#copilotcodereviewparameters", + "description": "

Request Copilot code review for new pull requests automatically if the author has access to Copilot code review.

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

Copilot automatically reviews draft pull requests before they are marked as ready for review.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "reviewOnPush", + "description": "

Copilot automatically reviews each new push to the pull request.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + ] + }, { "name": "CopilotEndpoints", "kind": "objects", @@ -92881,6 +92906,10 @@ "name": "COMMIT_MESSAGE_PATTERN", "description": "

Commit message pattern.

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

Request Copilot code review for new pull requests automatically if the author has access to Copilot code review.

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

Only allow users with bypass permission to create matching refs.

" @@ -97143,6 +97172,11 @@ "id": "committeremailpatternparameters", "href": "/graphql/reference/objects#committeremailpatternparameters" }, + { + "name": "CopilotCodeReviewParameters", + "id": "copilotcodereviewparameters", + "href": "/graphql/reference/objects#copilotcodereviewparameters" + }, { "name": "FileExtensionRestrictionParameters", "id": "fileextensionrestrictionparameters", @@ -99886,6 +99920,31 @@ } ] }, + { + "name": "CopilotCodeReviewParametersInput", + "kind": "inputObjects", + "id": "copilotcodereviewparametersinput", + "href": "/graphql/reference/input-objects#copilotcodereviewparametersinput", + "description": "

Request Copilot code review for new pull requests automatically if the author has access to Copilot code review.

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

Copilot automatically reviews draft pull requests before they are marked as ready for review.

", + "type": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "reviewOnPush", + "description": "

Copilot automatically reviews each new push to the pull request.

", + "type": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + ] + }, { "name": "CopyProjectV2Input", "kind": "inputObjects", @@ -107134,6 +107193,14 @@ "kind": "input-objects", "href": "/graphql/reference/input-objects#committeremailpatternparametersinput" }, + { + "name": "copilotCodeReview", + "description": "

Parameters used for the copilot_code_review rule type.

", + "type": "CopilotCodeReviewParametersInput", + "id": "copilotcodereviewparametersinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#copilotcodereviewparametersinput" + }, { "name": "fileExtensionRestriction", "description": "

Parameters used for the file_extension_restriction rule type.

", diff --git a/src/graphql/data/ghec/schema.docs.graphql b/src/graphql/data/ghec/schema.docs.graphql index f44cad4cede4..b4737f6059fc 100644 --- a/src/graphql/data/ghec/schema.docs.graphql +++ b/src/graphql/data/ghec/schema.docs.graphql @@ -7250,6 +7250,36 @@ type ConvertedToDiscussionEvent implements Node { id: ID! } +""" +Request Copilot code review for new pull requests automatically if the author has access to Copilot code review. +""" +type CopilotCodeReviewParameters { + """ + Copilot automatically reviews draft pull requests before they are marked as ready for review. + """ + reviewDraftPullRequests: Boolean! + + """ + Copilot automatically reviews each new push to the pull request. + """ + reviewOnPush: Boolean! +} + +""" +Request Copilot code review for new pull requests automatically if the author has access to Copilot code review. +""" +input CopilotCodeReviewParametersInput { + """ + Copilot automatically reviews draft pull requests before they are marked as ready for review. + """ + reviewDraftPullRequests: Boolean + + """ + Copilot automatically reviews each new push to the pull request. + """ + reviewOnPush: Boolean +} + """ Copilot endpoint information """ @@ -52909,6 +52939,11 @@ enum RepositoryRuleType { """ COMMIT_MESSAGE_PATTERN + """ + Request Copilot code review for new pull requests automatically if the author has access to Copilot code review. + """ + COPILOT_CODE_REVIEW + """ Only allow users with bypass permission to create matching refs. """ @@ -54874,6 +54909,7 @@ union RuleParameters = | CommitAuthorEmailPatternParameters | CommitMessagePatternParameters | CommitterEmailPatternParameters + | CopilotCodeReviewParameters | FileExtensionRestrictionParameters | FilePathRestrictionParameters | MaxFilePathLengthParameters @@ -54915,6 +54951,11 @@ input RuleParametersInput { """ committerEmailPattern: CommitterEmailPatternParametersInput + """ + Parameters used for the `copilot_code_review` rule type + """ + copilotCodeReview: CopilotCodeReviewParametersInput + """ Parameters used for the `file_extension_restriction` rule type """ diff --git a/src/graphql/data/ghec/schema.json b/src/graphql/data/ghec/schema.json index b0ea2c548730..d2a5402ed2c7 100644 --- a/src/graphql/data/ghec/schema.json +++ b/src/graphql/data/ghec/schema.json @@ -17432,6 +17432,31 @@ } ] }, + { + "name": "CopilotCodeReviewParameters", + "kind": "objects", + "id": "copilotcodereviewparameters", + "href": "/graphql/reference/objects#copilotcodereviewparameters", + "description": "

Request Copilot code review for new pull requests automatically if the author has access to Copilot code review.

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

Copilot automatically reviews draft pull requests before they are marked as ready for review.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "reviewOnPush", + "description": "

Copilot automatically reviews each new push to the pull request.

", + "type": "Boolean!", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + ] + }, { "name": "CopilotEndpoints", "kind": "objects", @@ -92881,6 +92906,10 @@ "name": "COMMIT_MESSAGE_PATTERN", "description": "

Commit message pattern.

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

Request Copilot code review for new pull requests automatically if the author has access to Copilot code review.

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

Only allow users with bypass permission to create matching refs.

" @@ -97143,6 +97172,11 @@ "id": "committeremailpatternparameters", "href": "/graphql/reference/objects#committeremailpatternparameters" }, + { + "name": "CopilotCodeReviewParameters", + "id": "copilotcodereviewparameters", + "href": "/graphql/reference/objects#copilotcodereviewparameters" + }, { "name": "FileExtensionRestrictionParameters", "id": "fileextensionrestrictionparameters", @@ -99886,6 +99920,31 @@ } ] }, + { + "name": "CopilotCodeReviewParametersInput", + "kind": "inputObjects", + "id": "copilotcodereviewparametersinput", + "href": "/graphql/reference/input-objects#copilotcodereviewparametersinput", + "description": "

Request Copilot code review for new pull requests automatically if the author has access to Copilot code review.

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

Copilot automatically reviews draft pull requests before they are marked as ready for review.

", + "type": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + }, + { + "name": "reviewOnPush", + "description": "

Copilot automatically reviews each new push to the pull request.

", + "type": "Boolean", + "id": "boolean", + "kind": "scalars", + "href": "/graphql/reference/scalars#boolean" + } + ] + }, { "name": "CopyProjectV2Input", "kind": "inputObjects", @@ -107134,6 +107193,14 @@ "kind": "input-objects", "href": "/graphql/reference/input-objects#committeremailpatternparametersinput" }, + { + "name": "copilotCodeReview", + "description": "

Parameters used for the copilot_code_review rule type.

", + "type": "CopilotCodeReviewParametersInput", + "id": "copilotcodereviewparametersinput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#copilotcodereviewparametersinput" + }, { "name": "fileExtensionRestriction", "description": "

Parameters used for the file_extension_restriction rule type.

", From 0a0b02f87bc948fabe50a98a6e4433e5ac775104 Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Tue, 16 Sep 2025 11:02:06 -0700 Subject: [PATCH 3/3] Convert 14 JavaScript files to TypeScript (#57464) --- .../lib/default-markdownlint-options.js | 3 -- .../lib/default-markdownlint-options.ts | 5 +++ src/content-linter/lib/helpers/get-rules.d.ts | 8 ---- src/content-linter/lib/helpers/get-rules.js | 8 ---- src/content-linter/lib/helpers/get-rules.ts | 12 ++++++ .../lib/helpers/unified-formatter-options.js | 9 ----- .../lib/helpers/unified-formatter-options.ts | 19 ++++++++++ .../{error-handling.js => error-handling.ts} | 4 +- .../liquid/ifversion-supported-operators.js | 1 - .../liquid/ifversion-supported-operators.ts | 5 +++ .../liquid/{index.js => index.ts} | 2 +- .../lib/data-schemas/code-languages.js | 16 -------- .../lib/data-schemas/code-languages.ts | 37 +++++++++++++++++++ src/data-directory/lib/data-schemas/index.ts | 4 +- .../lib/data-schemas/variables.js | 7 ---- .../lib/data-schemas/variables.ts | 17 +++++++++ ...ses.js => encode-bracketed-parentheses.ts} | 2 +- ...file-contents.js => read-file-contents.ts} | 5 ++- .../tests/{gitignore.js => gitignore.ts} | 6 +-- src/rest/pages/category.tsx | 2 +- src/tests/helpers/script-data.js | 13 ------- src/tests/helpers/script-data.ts | 15 ++++++++ src/types/markdownlint-rules.d.ts | 7 ++++ ...n.js => non-enterprise-default-version.ts} | 3 +- ...t-from-path.js => remove-fpt-from-path.ts} | 2 +- 25 files changed, 133 insertions(+), 79 deletions(-) delete mode 100644 src/content-linter/lib/default-markdownlint-options.js create mode 100644 src/content-linter/lib/default-markdownlint-options.ts delete mode 100644 src/content-linter/lib/helpers/get-rules.d.ts delete mode 100644 src/content-linter/lib/helpers/get-rules.js create mode 100644 src/content-linter/lib/helpers/get-rules.ts delete mode 100644 src/content-linter/lib/helpers/unified-formatter-options.js create mode 100644 src/content-linter/lib/helpers/unified-formatter-options.ts rename src/content-render/liquid/{error-handling.js => error-handling.ts} (70%) delete mode 100644 src/content-render/liquid/ifversion-supported-operators.js create mode 100644 src/content-render/liquid/ifversion-supported-operators.ts rename src/content-render/liquid/{index.js => index.ts} (69%) delete mode 100644 src/data-directory/lib/data-schemas/code-languages.js create mode 100644 src/data-directory/lib/data-schemas/code-languages.ts delete mode 100644 src/data-directory/lib/data-schemas/variables.js create mode 100644 src/data-directory/lib/data-schemas/variables.ts rename src/frame/lib/{encode-bracketed-parentheses.js => encode-bracketed-parentheses.ts} (69%) rename src/frame/lib/{read-file-contents.js => read-file-contents.ts} (55%) rename src/frame/tests/{gitignore.js => gitignore.ts} (57%) delete mode 100644 src/tests/helpers/script-data.js create mode 100644 src/tests/helpers/script-data.ts create mode 100644 src/types/markdownlint-rules.d.ts rename src/versions/lib/{non-enterprise-default-version.js => non-enterprise-default-version.ts} (94%) rename src/versions/lib/{remove-fpt-from-path.js => remove-fpt-from-path.ts} (86%) diff --git a/src/content-linter/lib/default-markdownlint-options.js b/src/content-linter/lib/default-markdownlint-options.js deleted file mode 100644 index ccdda0329a94..000000000000 --- a/src/content-linter/lib/default-markdownlint-options.js +++ /dev/null @@ -1,3 +0,0 @@ -export const defaultConfig = { - default: false, -} diff --git a/src/content-linter/lib/default-markdownlint-options.ts b/src/content-linter/lib/default-markdownlint-options.ts new file mode 100644 index 000000000000..d21f286179b2 --- /dev/null +++ b/src/content-linter/lib/default-markdownlint-options.ts @@ -0,0 +1,5 @@ +import type { Configuration } from 'markdownlint' + +export const defaultConfig: Configuration = { + default: false, +} diff --git a/src/content-linter/lib/helpers/get-rules.d.ts b/src/content-linter/lib/helpers/get-rules.d.ts deleted file mode 100644 index 694e3ec21464..000000000000 --- a/src/content-linter/lib/helpers/get-rules.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -// get-rules.d.ts -// This is a declaration file for get-rules.js - -import type { Rule, RuleConfig } from '../../types' - -export const customRules: Rule[] -export const allRules: Rule[] -export const allConfig: RuleConfig diff --git a/src/content-linter/lib/helpers/get-rules.js b/src/content-linter/lib/helpers/get-rules.js deleted file mode 100644 index efa98024f5ad..000000000000 --- a/src/content-linter/lib/helpers/get-rules.js +++ /dev/null @@ -1,8 +0,0 @@ -import rules from '../../../../node_modules/markdownlint/lib/rules' -import { gitHubDocsMarkdownlint } from '../linting-rules/index' -import { baseConfig } from '../../style/base' -import { customConfig } from '../../style/github-docs' - -export const customRules = gitHubDocsMarkdownlint.rules -export const allRules = [...rules, ...gitHubDocsMarkdownlint.rules] -export const allConfig = { ...baseConfig, ...customConfig } diff --git a/src/content-linter/lib/helpers/get-rules.ts b/src/content-linter/lib/helpers/get-rules.ts new file mode 100644 index 000000000000..eaeaf8660aa9 --- /dev/null +++ b/src/content-linter/lib/helpers/get-rules.ts @@ -0,0 +1,12 @@ +import { gitHubDocsMarkdownlint } from '@/content-linter/lib/linting-rules/index' +import { baseConfig } from '@/content-linter/style/base' +import { customConfig } from '@/content-linter/style/github-docs' +import type { Rule } from '@/content-linter/types' + +// Import markdownlint rules - external library without TypeScript declarations +// @ts-ignore - markdownlint doesn't provide TypeScript declarations +import markdownlintRules from '../../../../node_modules/markdownlint/lib/rules' + +export const customRules: Rule[] = gitHubDocsMarkdownlint.rules +export const allRules: any[] = [...markdownlintRules, ...gitHubDocsMarkdownlint.rules] +export const allConfig: Record = { ...baseConfig, ...customConfig } diff --git a/src/content-linter/lib/helpers/unified-formatter-options.js b/src/content-linter/lib/helpers/unified-formatter-options.js deleted file mode 100644 index d5efae175118..000000000000 --- a/src/content-linter/lib/helpers/unified-formatter-options.js +++ /dev/null @@ -1,9 +0,0 @@ -export const MARKDOWN_OPTIONS = { - bullet: '*', - emphasis: '_', - closeAtx: false, - fence: '`', - fences: true, - incrementListMarker: false, - strong: '*', -} diff --git a/src/content-linter/lib/helpers/unified-formatter-options.ts b/src/content-linter/lib/helpers/unified-formatter-options.ts new file mode 100644 index 000000000000..a4d20e8daa6e --- /dev/null +++ b/src/content-linter/lib/helpers/unified-formatter-options.ts @@ -0,0 +1,19 @@ +interface MarkdownFormatterOptions { + bullet: string + emphasis: string + closeAtx: boolean + fence: string + fences: boolean + incrementListMarker: boolean + strong: string +} + +export const MARKDOWN_OPTIONS: MarkdownFormatterOptions = { + bullet: '*', + emphasis: '_', + closeAtx: false, + fence: '`', + fences: true, + incrementListMarker: false, + strong: '*', +} diff --git a/src/content-render/liquid/error-handling.js b/src/content-render/liquid/error-handling.ts similarity index 70% rename from src/content-render/liquid/error-handling.js rename to src/content-render/liquid/error-handling.ts index d131cb7dd5ef..c37e1a4b2ec2 100644 --- a/src/content-render/liquid/error-handling.js +++ b/src/content-render/liquid/error-handling.ts @@ -1,9 +1,9 @@ // If 'THROW_ON_EMPTY' is set and it's value is '0' or 'false' it becomes // false. Or true if it's 'true' or '1'. -export const THROW_ON_EMPTY = Boolean( +export const THROW_ON_EMPTY: boolean = Boolean( process.env.THROW_ON_EMPTY ? JSON.parse(process.env.THROW_ON_EMPTY) - : JSON.parse(process.env.CI || process.env.NODE_ENV !== 'production'), + : JSON.parse(String(process.env.CI || process.env.NODE_ENV !== 'production')), ) export class DataReferenceError extends Error {} diff --git a/src/content-render/liquid/ifversion-supported-operators.js b/src/content-render/liquid/ifversion-supported-operators.js deleted file mode 100644 index 03234759e50e..000000000000 --- a/src/content-render/liquid/ifversion-supported-operators.js +++ /dev/null @@ -1 +0,0 @@ -export default ['=', '<', '>', '!='] diff --git a/src/content-render/liquid/ifversion-supported-operators.ts b/src/content-render/liquid/ifversion-supported-operators.ts new file mode 100644 index 000000000000..735c32f40c41 --- /dev/null +++ b/src/content-render/liquid/ifversion-supported-operators.ts @@ -0,0 +1,5 @@ +const ifversionSupportedOperators = ['=', '<', '>', '!='] as const + +export type IfversionSupportedOperator = (typeof ifversionSupportedOperators)[number] + +export default ifversionSupportedOperators diff --git a/src/content-render/liquid/index.js b/src/content-render/liquid/index.ts similarity index 69% rename from src/content-render/liquid/index.js rename to src/content-render/liquid/index.ts index 412d11b75c23..ec46b21a7d2a 100644 --- a/src/content-render/liquid/index.js +++ b/src/content-render/liquid/index.ts @@ -1,7 +1,7 @@ import { processLiquidPost } from './post' import { engine } from './engine' -export async function renderLiquid(template, context) { +export async function renderLiquid(template: string, context: any): Promise { template = await engine.parseAndRender(template, context) template = processLiquidPost(template) return template diff --git a/src/data-directory/lib/data-schemas/code-languages.js b/src/data-directory/lib/data-schemas/code-languages.js deleted file mode 100644 index e3c89a434f91..000000000000 --- a/src/data-directory/lib/data-schemas/code-languages.js +++ /dev/null @@ -1,16 +0,0 @@ -export default { - type: 'object', - additionalProperties: { - type: 'object', - required: ['name', 'comment'], - properties: { - name: { - type: 'string', - }, - comment: { - type: 'string', - enum: ['number', 'slash', 'percent', 'hyphen', 'xml', 'none'], - }, - }, - }, -} diff --git a/src/data-directory/lib/data-schemas/code-languages.ts b/src/data-directory/lib/data-schemas/code-languages.ts new file mode 100644 index 000000000000..aa7f48e996e6 --- /dev/null +++ b/src/data-directory/lib/data-schemas/code-languages.ts @@ -0,0 +1,37 @@ +interface CodeLanguageProperties { + name: { + type: 'string' + } + comment: { + type: 'string' + enum: ['number', 'slash', 'percent', 'hyphen', 'xml', 'none'] + } +} + +interface CodeLanguageSchema { + type: 'object' + additionalProperties: { + type: 'object' + required: ['name', 'comment'] + properties: CodeLanguageProperties + } +} + +const codeLanguagesSchema: CodeLanguageSchema = { + type: 'object', + additionalProperties: { + type: 'object', + required: ['name', 'comment'], + properties: { + name: { + type: 'string', + }, + comment: { + type: 'string', + enum: ['number', 'slash', 'percent', 'hyphen', 'xml', 'none'], + }, + }, + }, +} + +export default codeLanguagesSchema diff --git a/src/data-directory/lib/data-schemas/index.ts b/src/data-directory/lib/data-schemas/index.ts index e8d58ceb5ed4..160483e39d6d 100644 --- a/src/data-directory/lib/data-schemas/index.ts +++ b/src/data-directory/lib/data-schemas/index.ts @@ -4,10 +4,10 @@ interface DataSchemas { const dataSchemas: DataSchemas = { 'data/features': '@/data-directory/lib/data-schemas/features.js', - 'data/variables': '@/data-directory/lib/data-schemas/variables.js', + 'data/variables': '@/data-directory/lib/data-schemas/variables', 'data/learning-tracks': '@/data-directory/lib/data-schemas/learning-tracks.js', 'data/release-notes': '@/data-directory/lib/data-schemas/release-notes.js', - 'data/code-languages.yml': '@/data-directory/lib/data-schemas/code-languages.js', + 'data/code-languages.yml': '@/data-directory/lib/data-schemas/code-languages', 'data/glossaries/candidates.yml': '@/data-directory/lib/data-schemas/glossaries-candidates.js', 'data/glossaries/external.yml': '@/data-directory/lib/data-schemas/glossaries-external.js', } diff --git a/src/data-directory/lib/data-schemas/variables.js b/src/data-directory/lib/data-schemas/variables.js deleted file mode 100644 index 3cec2cc6ff4a..000000000000 --- a/src/data-directory/lib/data-schemas/variables.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - type: 'object', - additionalProperties: { - type: 'string', - lintable: true, - }, -} diff --git a/src/data-directory/lib/data-schemas/variables.ts b/src/data-directory/lib/data-schemas/variables.ts new file mode 100644 index 000000000000..62ba9e1937cd --- /dev/null +++ b/src/data-directory/lib/data-schemas/variables.ts @@ -0,0 +1,17 @@ +interface VariableSchema { + type: 'object' + additionalProperties: { + type: 'string' + lintable: boolean + } +} + +const variablesSchema: VariableSchema = { + type: 'object', + additionalProperties: { + type: 'string', + lintable: true, + }, +} + +export default variablesSchema diff --git a/src/frame/lib/encode-bracketed-parentheses.js b/src/frame/lib/encode-bracketed-parentheses.ts similarity index 69% rename from src/frame/lib/encode-bracketed-parentheses.js rename to src/frame/lib/encode-bracketed-parentheses.ts index e3e4b3040375..d0df9a4a12ae 100644 --- a/src/frame/lib/encode-bracketed-parentheses.js +++ b/src/frame/lib/encode-bracketed-parentheses.ts @@ -1,6 +1,6 @@ // prevent `[foo] (bar)` strings with a space between from being interpreted as markdown links // by encoding the space character -export default function encodeBracketedParentheses(input) { +export default function encodeBracketedParentheses(input: string): string { return input.replace(/] \(/g, '] (') } diff --git a/src/frame/lib/read-file-contents.js b/src/frame/lib/read-file-contents.ts similarity index 55% rename from src/frame/lib/read-file-contents.js rename to src/frame/lib/read-file-contents.ts index 9b3aefc698c0..299efed569a7 100644 --- a/src/frame/lib/read-file-contents.js +++ b/src/frame/lib/read-file-contents.ts @@ -6,8 +6,9 @@ import fm from './frontmatter' /** * Read only the frontmatter from file */ -export default async function fmfromf(filepath) { - let fileContent = await fs.readFile(filepath, 'utf8') +// Using any type for return value because frontmatter structure is complex and varies +export default async function fmfromf(filepath: string): Promise { + let fileContent: string = await fs.readFile(filepath, 'utf8') fileContent = encodeBracketedParentheses(fileContent) diff --git a/src/frame/tests/gitignore.js b/src/frame/tests/gitignore.ts similarity index 57% rename from src/frame/tests/gitignore.js rename to src/frame/tests/gitignore.ts index 989f42e63ac8..760ac36341a7 100644 --- a/src/frame/tests/gitignore.js +++ b/src/frame/tests/gitignore.ts @@ -3,9 +3,9 @@ import path from 'path' import { describe, expect, test } from 'vitest' -const gitignorePath = path.join(process.cwd(), '.gitignore') -const gitignore = await fs.readFile(gitignorePath, 'utf8') -const entries = gitignore.split(/\r?\n/) +const gitignorePath: string = path.join(process.cwd(), '.gitignore') +const gitignore: string = await fs.readFile(gitignorePath, 'utf8') +const entries: string[] = gitignore.split(/\r?\n/) describe('.gitignore file', () => { test('includes an entry for .env', () => { diff --git a/src/rest/pages/category.tsx b/src/rest/pages/category.tsx index e14eaf70fcd2..0a7f1d5701d2 100644 --- a/src/rest/pages/category.tsx +++ b/src/rest/pages/category.tsx @@ -62,7 +62,7 @@ export default function Category({ export const getServerSideProps: GetServerSideProps = async (context) => { const { default: getRest, getRestMiniTocItems } = await import('@/rest/lib/index') const nonEnterpriseDefaultVersionModule = await import( - 'src/versions/lib/non-enterprise-default-version.js' + '@/versions/lib/non-enterprise-default-version' ) const nonEnterpriseDefaultVersion = nonEnterpriseDefaultVersionModule.default as string diff --git a/src/tests/helpers/script-data.js b/src/tests/helpers/script-data.js deleted file mode 100644 index b7bc3f0070ad..000000000000 --- a/src/tests/helpers/script-data.js +++ /dev/null @@ -1,13 +0,0 @@ -const NEXT_DATA_QUERY = 'script#__NEXT_DATA__' -const PRIMER_DATA_QUERY = 'script#__PRIMER_DATA__' - -function getScriptData($, key) { - const data = $(key) - if (!data.length === 1) { - throw new Error(`Not exactly 1 element match for '${key}'. Found ${data.length}`) - } - return JSON.parse(data.get()[0].children[0].data) -} - -export const getNextData = ($) => getScriptData($, NEXT_DATA_QUERY) -export const getPrimerData = ($) => getScriptData($, PRIMER_DATA_QUERY) diff --git a/src/tests/helpers/script-data.ts b/src/tests/helpers/script-data.ts new file mode 100644 index 000000000000..ec028b852382 --- /dev/null +++ b/src/tests/helpers/script-data.ts @@ -0,0 +1,15 @@ +const NEXT_DATA_QUERY = 'script#__NEXT_DATA__' +const PRIMER_DATA_QUERY = 'script#__PRIMER_DATA__' + +// Using any type for $ parameter as it represents a jQuery-like selector (cheerio) +function getScriptData($: any, key: string): any { + const data = $(key) + if (data.length !== 1) { + throw new Error(`Not exactly 1 element match for '${key}'. Found ${data.length}`) + } + return JSON.parse(data.get()[0].children[0].data) +} + +// Using any types for cheerio/jQuery-like objects and parsed JSON data +export const getNextData = ($: any): any => getScriptData($, NEXT_DATA_QUERY) +export const getPrimerData = ($: any): any => getScriptData($, PRIMER_DATA_QUERY) diff --git a/src/types/markdownlint-rules.d.ts b/src/types/markdownlint-rules.d.ts new file mode 100644 index 000000000000..7e7204208e76 --- /dev/null +++ b/src/types/markdownlint-rules.d.ts @@ -0,0 +1,7 @@ +// Simple type declaration for markdownlint external library +// Using any types to avoid complex typing for external dependencies + +declare module '../../../../node_modules/markdownlint/lib/rules' { + const rules: any[] + export = rules +} diff --git a/src/versions/lib/non-enterprise-default-version.js b/src/versions/lib/non-enterprise-default-version.ts similarity index 94% rename from src/versions/lib/non-enterprise-default-version.js rename to src/versions/lib/non-enterprise-default-version.ts index 5a438f0bf61d..23edb112520c 100644 --- a/src/versions/lib/non-enterprise-default-version.js +++ b/src/versions/lib/non-enterprise-default-version.ts @@ -1,6 +1,7 @@ import { allVersions } from '@/versions/lib/all-versions' + const nonEnterpriseDefaultVersion = Object.values(allVersions).find( (version) => version.nonEnterpriseDefault, -).version +)!.version export default nonEnterpriseDefaultVersion diff --git a/src/versions/lib/remove-fpt-from-path.js b/src/versions/lib/remove-fpt-from-path.ts similarity index 86% rename from src/versions/lib/remove-fpt-from-path.js rename to src/versions/lib/remove-fpt-from-path.ts index d93a9a29a1d7..32ee9ded6ff7 100644 --- a/src/versions/lib/remove-fpt-from-path.js +++ b/src/versions/lib/remove-fpt-from-path.ts @@ -4,6 +4,6 @@ import nonEnterpriseDefaultVersion from './non-enterprise-default-version' // This is a convenience function to remove free-pro-team@latest from all // **user-facing** aspects of the site (particularly URLs) while continuing to support // free-pro-team@latest as a version both in the codebase and in content/data files. -export default function removeFPTFromPath(path) { +export default function removeFPTFromPath(path: string): string { return slash(path.replace(`/${nonEnterpriseDefaultVersion}`, '')) }

9NOI`JmQ2z5cbtdJ_d7d^=3oE(6_&7d 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 z zc_(DtTnZa$;v$<^K3O?`Fjh8g-kRB%vCW$#+>MD7F^zeXJydAXjVzsTALSmzDaxhT z=KBfRJ9$qns%41BVl~y6d|}JoDo2Ue@lt%c!Si% zsIs2I9UBw#6>KSN9UMO9=c^8)sQa`0S}NC*VcgxO1Um;xzs77{k>4unaJe7@-|CE- zKPPu;%wNw{nhaz&nl#mG=4&TPpV(J&Un~hT`VVy~JKudaW+quf__(-3YrdpiZiE+k zNtea6Nty%G$NHCA8aHnxTh>m+?5i;qpdSF(5(k!uxf2fg93}15oFPpm#F}HTiKog40e8lxrU&pG_t% zGf`!_${t=^5ZME_y#ZWX1yEfo%5UEWC(lZm8IzTdTOGm9ta254ix%60_!;~FwJ8(7 zz@k%&e9;r~zGlA|5o?vAk86poBm2mkl(lga2h%Sv_ok%EJ2Uv(tBa!+K9aJxQCH{J zJnQsT^&`)rhd-HOM|xRl&BMN@puZz3s&1FaMB%p6E} z!Q!qsL8OzJnHfSh5ZtT)XLatM2g%lwmsHAZkXsgXU;h63PLgpNK($NrDPg6RZIjEn z^jAOReC~=XHO1iBh6=A40Iz$LUT_rh5m;(y%B!<2_tik|amw1KN4G8!3R~t#B^Fjz z_^&p{`Seg%J_{6Dia-3D9K>Um2JT9>eT_ zL&=2>w}exlJz5#NYhE39;Jy3x2zqa@Gj&Nj8vpb$b}Yy-> eKO1nE`WpcU@9x(64CKJa11gG|3TQdAm;VP<`GAK2 literal 0 HcmV?d00001 diff --git a/content/copilot/concepts/context/mcp.md b/content/copilot/concepts/context/mcp.md index 0a865051db82..d6dc84e2090a 100644 --- a/content/copilot/concepts/context/mcp.md +++ b/content/copilot/concepts/context/mcp.md @@ -45,6 +45,13 @@ Running the {% data variables.product.github %} MCP server locally requires a bi To learn how to set up and use the {% data variables.product.github %} MCP server, see [AUTOTITLE](/copilot/how-tos/context/model-context-protocol/using-the-github-mcp-server). +## About the {% data variables.product.github %} MCP Registry + +The {% data variables.product.github %} MCP Registry is a curated list of MCP servers from partners and the community. You can use the registry to discover new MCP servers and find ones that meet your specific needs. See [the {% data variables.product.github %} MCP Registry](https://github.com/mcp). + +>[!NOTE] +> The {% data variables.product.github %} MCP Registry is currently in {% data variables.release-phases.public_preview %} and subject to change. + ## Availability There is currently broad support for local MCP servers in clients such as {% data variables.product.prodname_vscode %}, JetBrains IDEs, XCode, and others. diff --git a/content/copilot/how-tos/provide-context/use-mcp/extend-copilot-chat-with-mcp.md b/content/copilot/how-tos/provide-context/use-mcp/extend-copilot-chat-with-mcp.md index e26defea2a09..e717567b9db8 100644 --- a/content/copilot/how-tos/provide-context/use-mcp/extend-copilot-chat-with-mcp.md +++ b/content/copilot/how-tos/provide-context/use-mcp/extend-copilot-chat-with-mcp.md @@ -35,6 +35,25 @@ For information on currently available MCP servers, see [the MCP servers reposit ## Configuring MCP servers in {% data variables.product.prodname_vscode %} +MCP servers can be configured manually in a configuration file, or through the {% data variables.product.github %} MCP Registry. The {% data variables.product.github %} MCP Registry provides a curated list of MCP servers that you can easily add to your {% data variables.product.prodname_vscode %} instance. + +### Using the {% data variables.product.github %} MCP Registry + +>[!NOTE] +> The {% data variables.product.github %} MCP Registry is in {% data variables.release-phases.public_preview %} and may change. + +Only MCP servers listed in the {% data variables.product.github %} MCP Registry can be added through the registry. Other servers can be configured manually. See [Configuring MCP servers manually](#configuring-mcp-servers-manually). + +1. Visit the [{% data variables.product.github %} MCP Registry](https://github.com/mcp). +1. In the search bar, search for the MCP server you want to add, then click the MCP server in the list of matches. +1. On the MCP server page, read the description for details on installation requirements and other important usage information. This may vary between servers. +1. Click **Install server**, then select **Install in {% data variables.product.prodname_vscode_shortname %}**. +1. {% data variables.product.prodname_vscode %} will open, on the server's Marketplace page. Click **Install** to add the MCP server to your {% data variables.product.prodname_vscode %} instance. +1. If further configuration is required, follow the instructions on the MCP server page in the {% data variables.product.github %} MCP Registry. +1. To check that the MCP server has been added, in the **agent mode** of {% data variables.copilot.copilot_chat_short %}, click the tools icon. A dropdown list will appear, showing all the MCP servers and associated tools that are currently available in your {% data variables.product.prodname_vscode %} instance. + +### Configuring MCP servers manually + To configure MCP servers in {% data variables.product.prodname_vscode %}, you need to set up a configuration script that specifies the details of the MCP servers you want to use. You can configure MCP servers for either: {% data reusables.copilot.mcp.mcp-configuration-location %} diff --git a/data/reusables/profile/copilot_settings.md b/data/reusables/profile/copilot_settings.md new file mode 100644 index 000000000000..49d581592a9c --- /dev/null +++ b/data/reusables/profile/copilot_settings.md @@ -0,0 +1 @@ +1. In the top right corner of {% data variables.product.prodname_dotcom %}, click your profile picture, then click **{% octicon "copilot" aria-hidden="true" aria-label="copilot" %} {% data variables.product.prodname_copilot_short %} settings**. From 740aea59e52800b9a7b13cb7d460b89eca74af79 Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:39:11 -0700 Subject: [PATCH 2/3] GraphQL schema update (#57569) Co-authored-by: heiskr <1221423+heiskr@users.noreply.github.com> --- src/graphql/data/fpt/changelog.json | 17 ++++++ src/graphql/data/fpt/schema.docs.graphql | 41 ++++++++++++++ src/graphql/data/fpt/schema.json | 67 +++++++++++++++++++++++ src/graphql/data/ghec/schema.docs.graphql | 41 ++++++++++++++ src/graphql/data/ghec/schema.json | 67 +++++++++++++++++++++++ 5 files changed, 233 insertions(+) diff --git a/src/graphql/data/fpt/changelog.json b/src/graphql/data/fpt/changelog.json index bd6ce479bfd7..8dbc38772e7c 100644 --- a/src/graphql/data/fpt/changelog.json +++ b/src/graphql/data/fpt/changelog.json @@ -1,4 +1,21 @@ [ + { + "schemaChanges": [ + { + "title": "The GraphQL schema includes these changes:", + "changes": [ + "