From b6b1fb106dcd61ad1e4f115244920fd47b149116 Mon Sep 17 00:00:00 2001 From: mc <42146119+mchammer01@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:32:43 +0000 Subject: [PATCH 01/11] [EDI] Dependabot supported ecosystems and repositories (#59253) --- .../supported-ecosystems-and-repositories.md | 12 ++--- .../dependabot/supported-package-managers.md | 46 +++++++++---------- 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/content/code-security/reference/supply-chain-security/supported-ecosystems-and-repositories.md b/content/code-security/reference/supply-chain-security/supported-ecosystems-and-repositories.md index 20b10a6520e0..a1fadf658c60 100644 --- a/content/code-security/reference/supply-chain-security/supported-ecosystems-and-repositories.md +++ b/content/code-security/reference/supply-chain-security/supported-ecosystems-and-repositories.md @@ -18,17 +18,11 @@ redirect_from: contentType: reference --- -## About {% data variables.product.prodname_dependabot %} +This article provides reference information about the package ecosystems and repository types that {% data variables.product.prodname_dependabot %} supports. -{% data variables.product.prodname_dependabot %} helps you stay on top of your dependency ecosystems. With {% data variables.product.prodname_dependabot %}, you can keep the dependencies you rely on up-to-date, addressing any potential security issues in your supply chain. +{% data variables.product.prodname_dependabot %} is a {% data variables.product.github %} tool that helps keep your dependencies secure and up to date. It automatically detects vulnerable or outdated dependencies in your repositories and creates pull requests to update them, making it easier to maintain your software supply chain security. For more information, see [AUTOTITLE](/code-security/tutorials/secure-your-dependencies/dependabot-quickstart-guide). -{% data reusables.dependabot.dependabot-overview %} - -For more information about {% data variables.product.prodname_dependabot %}, see [AUTOTITLE](/code-security/getting-started/dependabot-quickstart-guide). - -In this article, you can see what the supported ecosystems and repositories are. - -## Supported ecosystems and repositories +## Supported ecosystems maintained by {% data variables.product.github %} You can configure updates for repositories that contain a dependency manifest or lock file for one of the supported package managers. For some package managers, you can also configure vendoring for dependencies. For more information, see [`vendor`](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#vendor--). diff --git a/data/reusables/dependabot/supported-package-managers.md b/data/reusables/dependabot/supported-package-managers.md index d068bf0ebb70..4ff7b8f9ae32 100644 --- a/data/reusables/dependabot/supported-package-managers.md +++ b/data/reusables/dependabot/supported-package-managers.md @@ -62,25 +62,25 @@ For further information about ecosystem support for {% data variables.product.pr {% ifversion dependabot-bun-support %} -#### Bun +### Bun {% data variables.product.prodname_dependabot %} supports the current default text-based `bun.lock` file, but not the legacy binary `bun.lockb` file. The `bun.lock` file is supported in version 1.1.39 and above. For more information, see [Lockfile](https://bun.sh/docs/install/lockfile) in the Bun documentation. {% endif %} -#### Cargo +### Cargo Private registry support includes cargo registries, so you can use {% data variables.product.prodname_dependabot %} to keep your Rust dependencies up-to-date. For more information, see [AUTOTITLE](/code-security/dependabot/working-with-dependabot/guidance-for-the-configuration-of-private-registries-for-dependabot#cargo). {% ifversion dependabot-conda-support %} -#### Conda +### Conda {% data variables.product.prodname_dependabot %} support for Conda does **not include private registries, vendoring, or lock file updates**. {% endif %} -#### Dev containers +### Dev containers You can use `devcontainers` as a `package-ecosystem` in your `dependabot.yml` file to update Features in your `devcontainer.json` configuration files. For more information about this support, and for configuration file examples, see [General Availability of {% data variables.product.prodname_dependabot %} Integration](https://containers.dev/guide/dependabot) in the Development Containers documentation. @@ -90,7 +90,7 @@ This updater ensures Features are pinned to the latest `major` version in the as Features in any valid dev container location will be updated in a single pull request. For more information about the dev container specification, see [Specification](https://containers.dev/implementors/spec/#devcontainerjson) in the Development Containers documentation. -#### Docker +### Docker {% data variables.product.prodname_dependabot %} can add metadata from Docker images to pull requests for version updates. The metadata includes release notes, changelogs and the commit history. Repository administrators can use the metadata to quickly evaluate the stability risk of the dependency update. @@ -104,13 +104,13 @@ In order for {% data variables.product.prodname_dependabot %} to fetch Docker me {% ifversion dependabot-docker-compose-support %} -#### Docker Compose +### Docker Compose {% data variables.product.prodname_dependabot %} supports Docker Compose in a similar way to Docker. For more information, see [Docker](#docker). {% endif %} -#### {% data variables.product.prodname_actions %} +### {% data variables.product.prodname_actions %} {% data variables.product.prodname_dependabot %} supports version updates for {% data variables.product.prodname_actions %} with the following caveats. @@ -118,7 +118,7 @@ In order for {% data variables.product.prodname_dependabot %} to fetch Docker me For more information about using {% data variables.product.prodname_dependabot_version_updates %} with {% data variables.product.prodname_actions %}, see [AUTOTITLE](/actions/security-guides/using-githubs-security-features-to-secure-your-use-of-github-actions#keeping-the-actions-in-your-workflows-secure-and-up-to-date). -#### Gradle +### Gradle {% data variables.product.prodname_dependabot %} doesn't run Gradle but supports updates to the following files: * `build.gradle`, `build.gradle.kts` (for Kotlin projects) @@ -134,7 +134,7 @@ For {% data variables.product.prodname_dependabot_security_updates %}, Gradle su > * When you upload Gradle dependencies to the dependency graph using the {% data variables.dependency-submission-api.name %}, all project dependencies are uploaded, even transitive dependencies that aren't explicitly mentioned in any dependency file. When an alert is detected in a transitive dependency, {% data variables.product.prodname_dependabot %} isn't able to find the vulnerable dependency in the repository, and therefore won't create a security update for that alert. > * {% data variables.product.prodname_dependabot_version_updates %} will, however, create pull requests when the parent dependency is explicitly declared as a direct dependency in the project's manifest file. -#### Helm Charts +### Helm Charts {% data variables.product.prodname_dependabot %} supports using a username and password for registries. For more information, see [AUTOTITLE](/code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot#helm-registry). @@ -142,17 +142,17 @@ The `helm-registry` type only supports HTTP Basic Auth and does not support OCI- When configuring {% data variables.product.prodname_dependabot %} for Helm charts, it will also automatically update the Docker images referenced within those charts, ensuring that both the chart versions and their contained images stay up to date. -#### Maven +### Maven {% data variables.product.prodname_dependabot %} doesn't run Maven but supports updates to `pom.xml` files. {% data variables.product.prodname_dependabot %} uses information from the `pom.xml` file of dependencies to add links to release information in update pull requests. If the information is omitted from the `pom.xml` file, then it cannot be included in {% data variables.product.prodname_dependabot %} pull requests, see [AUTOTITLE](/code-security/dependabot/ecosystems-supported-by-dependabot/optimizing-java-packages-dependabot). -#### NuGet CLI +### NuGet CLI {% data variables.product.prodname_dependabot %} doesn't run the NuGet CLI but does support most features up until version 6.8.0. -#### pip and pip-compile +### pip and pip-compile {% data variables.product.prodname_dependabot %} supports updates to any `.txt` file. @@ -162,18 +162,18 @@ In addition, {% data variables.product.prodname_dependabot %} supports updates t {% else %} -#### pnpm +### pnpm pnpm is supported for {% data variables.product.prodname_dependabot_version_updates %} (on v7, v8, v9, v10) and {% data variables.product.prodname_dependabot_security_updates %} (on v7 and v8 only). {% endif %} -#### poetry +### poetry The PEP 621 `project` section isn't currently supported for `poetry`. {% ifversion dependabot-rust-toolchain-support %} -#### Rust toolchain +### Rust toolchain {% data variables.product.prodname_dependabot %} supports automatic updates for Rust toolchain versions defined in `rust-toolchain.toml` and `rust-toolchain` files. @@ -184,11 +184,11 @@ Supported update patterns {% data variables.product.prodname_dependabot %} can u {% endif %} -#### Swift +### Swift Private registry support applies to git registries only. Swift registries are not supported. Non-declarative manifests are not supported. For more information on non-declarative manifests, see [Editing Non-Declarative Manifests](https://github.com/apple/swift-evolution/blob/7003da1439ad60896ec14657dfce829f04b0632c/proposals/0301-package-editing-commands.md#editing-non-declarative-manifests) in the Swift Evolution documentation. -#### Terraform +### Terraform Terraform support includes: * Modules hosted on Terraform Registry or a publicly reachable Git repository. @@ -197,19 +197,19 @@ Terraform support includes: {% ifversion dependabot-vcpkg-support %} -#### vcpkg +### vcpkg vcpkg support includes updating the `builtin-baseline` commit SHA from the vcpkg ports repository in your `vcpkg.json` manifest file. For more information visit the [`microsoft/vcpkg` repository](https://github.com/microsoft/vcpkg) on {% data variables.product.prodname_dotcom_the_website %} and see [What is manifest mode?](https://learn.microsoft.com/vcpkg/concepts/manifest-mode) in the Microsoft documentation. {% endif %} -#### yarn +### yarn Dependabot supports vendored dependencies for v2 onwards. {% ifversion dependabot-community-ecosystems %} -### Community-maintained ecosystems +## Supported community-maintained ecosystems {% data reusables.dependabot.community-maintained-intro %} {% ifversion dependabot-julia-support %} @@ -219,7 +219,7 @@ Dependabot supports vendored dependencies for v2 onwards. {% ifversion dependabot-julia-support %} -#### Julia +### Julia {% data variables.product.prodname_dependabot %} supports Julia projects that include `Project.toml`/`Manifest.toml` files. {% data variables.product.prodname_dependabot %} uses Julia's package manager to resolve and update dependencies. @@ -227,7 +227,7 @@ Dependabot supports vendored dependencies for v2 onwards. {% ifversion dependabot-opentofu-support %} -#### OpenTofu +### OpenTofu {% data variables.product.prodname_dependabot %} supports updating OpenTofu modules and providers in `.tf` and `.tofu` configuration files, including `terragrunt.hcl` files. If the `.terraform.lock.hcl` lockfile for provider checksums is present, {% data variables.product.prodname_dependabot %} will also update it. @@ -235,7 +235,7 @@ Dependabot supports vendored dependencies for v2 onwards. {% endif %} -#### Pub +### Pub {% data variables.product.prodname_dependabot %} won't perform an update for `pub` when the version that it tries to update to is ignored, even if an earlier version is available. From f1079c716a5f2028192282a6d6bdfe8998479662 Mon Sep 17 00:00:00 2001 From: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:38:33 +0000 Subject: [PATCH 02/11] [EDI] Dependabot for actions (#59261) --- .../about-dependabot-version-updates.md | 22 ++++++++++++++----- ...your-actions-up-to-date-with-dependabot.md | 21 ++---------------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/content/code-security/concepts/supply-chain-security/about-dependabot-version-updates.md b/content/code-security/concepts/supply-chain-security/about-dependabot-version-updates.md index efd9038d2bf4..e6a37b1fac42 100644 --- a/content/code-security/concepts/supply-chain-security/about-dependabot-version-updates.md +++ b/content/code-security/concepts/supply-chain-security/about-dependabot-version-updates.md @@ -34,21 +34,31 @@ contentType: concepts {% data variables.product.prodname_dependabot %} takes the effort out of maintaining your dependencies. You can use it to ensure that your repository automatically keeps up with the latest releases of the packages and applications it depends on. -{% data reusables.dependabot.dependabot-updates-supported-repos-ecosystems %} +{% data reusables.dependabot.pull-request-security-vs-version-updates %} + +You enable {% data variables.product.prodname_dependabot_version_updates %} by checking a `dependabot.yml` configuration file into your repository. + +{% data reusables.dependabot.dependabot-tos %} + +## Updates for packages -You enable {% data variables.product.prodname_dependabot_version_updates %} by checking a `dependabot.yml` configuration file into your repository. The configuration file specifies the location of the manifest, or of other package definition files, stored in your repository. {% data variables.product.prodname_dependabot %} uses this information to check for outdated packages and applications. {% data variables.product.prodname_dependabot %} determines if there is a new version of a dependency by looking at the semantic versioning ([semver](https://semver.org/)) of the dependency to decide whether it should update to that version. For certain package managers, {% data variables.product.prodname_dependabot_version_updates %} also supports vendoring. Vendored (or cached) dependencies are dependencies that are checked in to a specific directory in a repository rather than referenced in a manifest. Vendored dependencies are available at build time even if package servers are unavailable. {% data variables.product.prodname_dependabot_version_updates %} can be configured to check vendored dependencies for new versions and update them if necessary. +The `dependabot.yml` configuration file specifies the location of the manifest, or of other package definition files, stored in your repository. {% data variables.product.prodname_dependabot %} uses this information to check for outdated packages and applications. {% data variables.product.prodname_dependabot %} determines if there is a new version of a dependency by looking at the semantic versioning ([semver](https://semver.org/)) of the dependency to decide whether it should update to that version. {% data reusables.dependabot.dependabot-updates-supported-repos-ecosystems %} + +For certain package managers, {% data variables.product.prodname_dependabot_version_updates %} also supports vendoring. Vendored (or cached) dependencies are dependencies that are checked in to a specific directory in a repository rather than referenced in a manifest. Vendored dependencies are available at build time even if package servers are unavailable. {% data variables.product.prodname_dependabot_version_updates %} can be configured to check vendored dependencies for new versions and update them if necessary. When {% data variables.product.prodname_dependabot %} identifies an outdated dependency, it raises a pull request to update the manifest to the latest version of the dependency. For vendored dependencies, {% data variables.product.prodname_dependabot %} raises a pull request to replace the outdated dependency with the new version directly. You check that your tests pass, review the changelog and release notes included in the pull request summary, and then merge it. For more information, see [AUTOTITLE](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates). If you enable _security updates_, {% data variables.product.prodname_dependabot %} also raises pull requests to update vulnerable dependencies. For more information, see [AUTOTITLE](/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates). -{% data reusables.dependabot.pull-request-security-vs-version-updates %} +## Updates for actions -{% data reusables.dependabot.dependabot-updates-signed-commits %} +Actions are often updated with bug fixes and new features to make automated processes more reliable, faster, and safer. When you enable {% data variables.product.prodname_dependabot_version_updates %} for {% data variables.product.prodname_actions %}, {% data variables.product.prodname_dependabot %} will help ensure that references to actions in a repository's _workflow.yml_ file and reusable workflows used inside workflows are kept up to date. -{% data reusables.dependabot.dependabot-updates-prs-and-actions %} +For each action in the file, {% data variables.product.prodname_dependabot %} checks the action's reference (typically a version number or commit identifier associated with the action) against the latest version. If a more recent version of the action is available, {% data variables.product.prodname_dependabot %} will send you a pull request that updates the reference in the workflow file to the latest version. -{% data reusables.dependabot.dependabot-tos %} +{% data variables.product.prodname_dependabot %} also checks workflow files for uses of reusable workflows, and updates the Git reference for these called reusable workflows. + +To enable this feature, see [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot). ## Frequency of {% data variables.product.prodname_dependabot %} pull requests diff --git a/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot.md b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot.md index 077e437603ff..b4dcb6166d0b 100644 --- a/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot.md +++ b/content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/keeping-your-actions-up-to-date-with-dependabot.md @@ -23,27 +23,10 @@ contentType: how-tos {% data reusables.dependabot.enterprise-enable-dependabot %} -## About {% data variables.product.prodname_dependabot_version_updates %} for actions - -Actions are often updated with bug fixes and new features to make automated processes more reliable, faster, and safer. When you enable {% data variables.product.prodname_dependabot_version_updates %} for {% data variables.product.prodname_actions %}, {% data variables.product.prodname_dependabot %} will help ensure that references to actions in a repository's _workflow.yml_ file and reusable workflows used inside workflows are kept up to date. - -For each action in the file, {% data variables.product.prodname_dependabot %} checks the action's reference (typically a version number or commit identifier associated with the action) against the latest version. For information about how action creators version their actions, see [Using release management for your custom actions](/actions/learn-github-actions/finding-and-customizing-actions#using-release-management-for-your-custom-actions). - -If a more recent version of the action is available, {% data variables.product.prodname_dependabot %} will send you a pull request that updates the reference in the workflow file to the latest version. For more information about {% data variables.product.prodname_dependabot_version_updates %}, see [AUTOTITLE](/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates). For more information about configuring workflows for {% data variables.product.prodname_actions %}, see [AUTOTITLE](/actions/learn-github-actions). - -{% data variables.product.prodname_dependabot %} also checks workflow files for uses of reusable workflows, and updates the git reference for these called reusable workflows. For more information about reusable workflows, see [AUTOTITLE](/actions/using-workflows/reusing-workflows). - -{% ifversion fpt or ghec %} - -> [!NOTE] -> {% data reusables.actions.workflow-runs-dependabot-note %} - -{% endif %} +When you enable {% data variables.product.prodname_dependabot_version_updates %} for {% data variables.product.prodname_actions %}, {% data variables.product.prodname_dependabot %} will help ensure that references to actions in a repository's _workflow.yml_ file and reusable workflows used inside workflows are kept up to date. For more information, see [AUTOTITLE](/code-security/concepts/supply-chain-security/about-dependabot-version-updates). ## Enabling {% data variables.product.prodname_dependabot_version_updates %} for actions -You can configure {% data variables.product.prodname_dependabot_version_updates %} to maintain your actions as well as the libraries and packages you depend on. - 1. If you have already enabled {% data variables.product.prodname_dependabot_version_updates %} for other ecosystems or package managers, simply open the existing `dependabot.yml` file. Otherwise, create a `dependabot.yml` configuration file in the `.github` directory of your repository. For more information, see [AUTOTITLE](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates#enabling-dependabot-version-updates). 1. Specify `"github-actions"` as a `package-ecosystem` to monitor. 1. Set the `directory` to `"/"` to check for workflow files in `.github/workflows`. @@ -52,7 +35,7 @@ You can configure {% data variables.product.prodname_dependabot_version_updates You can also enable {% data variables.product.prodname_dependabot_version_updates %} on forks. For more information, see [AUTOTITLE](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates#enabling-version-updates-on-forks). -### Example `dependabot.yml` file for {% data variables.product.prodname_actions %} +## Example `dependabot.yml` file for {% data variables.product.prodname_actions %} The example `dependabot.yml` file below configures version updates for {% data variables.product.prodname_actions %}. The `directory` must be set to `"/"` to check for workflow files in `.github/workflows`. The `schedule.interval` is set to `"weekly"`. After this file has been checked in or updated, {% data variables.product.prodname_dependabot %} checks for new versions of your actions. {% data variables.product.prodname_dependabot %} will raise pull requests for version updates for any outdated actions that it finds. After the initial version updates, {% data variables.product.prodname_dependabot %} will continue to check for outdated versions of actions once a week. From e99a443924d7d9bfe9f5111e839a2affd9c69cfc Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Thu, 22 Jan 2026 08:42:15 -0800 Subject: [PATCH 03/11] GraphQL schema update (#59274) Co-authored-by: heiskr <1221423+heiskr@users.noreply.github.com> --- src/graphql/data/fpt/changelog.json | 26 ++++++ src/graphql/data/fpt/schema.docs.graphql | 70 ++++++++++++++ src/graphql/data/fpt/schema.json | 108 ++++++++++++++++++++++ src/graphql/data/ghec/schema.docs.graphql | 70 ++++++++++++++ src/graphql/data/ghec/schema.json | 108 ++++++++++++++++++++++ 5 files changed, 382 insertions(+) diff --git a/src/graphql/data/fpt/changelog.json b/src/graphql/data/fpt/changelog.json index 25c3d9568543..e499d9623b49 100644 --- a/src/graphql/data/fpt/changelog.json +++ b/src/graphql/data/fpt/changelog.json @@ -1,4 +1,30 @@ [ + { + "schemaChanges": [ + { + "title": "The GraphQL schema includes these changes:", + "changes": [ + "

Type RequestReviewsByLoginInput was added

", + "

Input field botLogins of type '[String!]was added to input object typeRequestReviewsByLoginInput'

", + "

Input field clientMutationId of type String was added to input object type RequestReviewsByLoginInput

", + "

Input field pullRequestId of type ID! was added to input object type RequestReviewsByLoginInput

", + "

Input field teamSlugs of type '[String!]was added to input object typeRequestReviewsByLoginInput'

", + "

Input field union of type Boolean with default value false was added to input object type RequestReviewsByLoginInput

", + "

Input field userLogins of type '[String!]was added to input object typeRequestReviewsByLoginInput'

", + "

Type RequestReviewsByLoginPayload was added

", + "

Field actor was added to object type RequestReviewsByLoginPayload

", + "

Field clientMutationId was added to object type RequestReviewsByLoginPayload

", + "

Field pullRequest was added to object type RequestReviewsByLoginPayload

", + "

Field requestedReviewersEdge was added to object type RequestReviewsByLoginPayload

", + "

Field requestReviewsByLogin was added to object type Mutation

", + "

Argument input: RequestReviewsByLoginInput! added to field Mutation.requestReviewsByLogin

" + ] + } + ], + "previewChanges": [], + "upcomingChanges": [], + "date": "2026-01-22" + }, { "schemaChanges": [ { diff --git a/src/graphql/data/fpt/schema.docs.graphql b/src/graphql/data/fpt/schema.docs.graphql index 14fffd984755..d1c7d2509627 100644 --- a/src/graphql/data/fpt/schema.docs.graphql +++ b/src/graphql/data/fpt/schema.docs.graphql @@ -26151,6 +26151,16 @@ type Mutation { input: RequestReviewsInput! ): RequestReviewsPayload + """ + Set review requests on a pull request using login strings instead of IDs. + """ + requestReviewsByLogin( + """ + Parameters for RequestReviewsByLogin + """ + input: RequestReviewsByLoginInput! + ): RequestReviewsByLoginPayload + """ Rerequests an existing check suite. """ @@ -54667,6 +54677,66 @@ type ReprioritizeSubIssuePayload { issue: Issue } +""" +Autogenerated input type of RequestReviewsByLogin +""" +input RequestReviewsByLoginInput { + """ + The logins of the bots to request reviews from, including the [bot] suffix (e.g., 'copilot-pull-request-reviewer[bot]'). + """ + botLogins: [String!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pull request to modify. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The slugs of the teams to request reviews from (format: 'org/team-slug'). + """ + teamSlugs: [String!] + + """ + Add users to the set rather than replace. + """ + union: Boolean = false + + """ + The login strings of the users to request reviews from. + """ + userLogins: [String!] +} + +""" +Autogenerated return type of RequestReviewsByLogin. +""" +type RequestReviewsByLoginPayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that is getting requests. + """ + pullRequest: PullRequest + + """ + The edge from the pull request to the requested reviewers. + """ + requestedReviewersEdge: UserEdge +} + """ Autogenerated input type of RequestReviews """ diff --git a/src/graphql/data/fpt/schema.json b/src/graphql/data/fpt/schema.json index b7feb1ed8b77..089b89cb87e0 100644 --- a/src/graphql/data/fpt/schema.json +++ b/src/graphql/data/fpt/schema.json @@ -6613,6 +6613,56 @@ } ] }, + { + "name": "requestReviewsByLogin", + "kind": "mutations", + "id": "requestreviewsbylogin", + "href": "/graphql/reference/mutations#requestreviewsbylogin", + "description": "

Set review requests on a pull request using login strings instead of IDs.

", + "inputFields": [ + { + "name": "input", + "type": "RequestReviewsByLoginInput!", + "id": "requestreviewsbylogininput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#requestreviewsbylogininput" + } + ], + "returnFields": [ + { + "name": "actor", + "type": "Actor", + "id": "actor", + "kind": "interfaces", + "href": "/graphql/reference/interfaces#actor", + "description": "

Identifies the actor who performed the event.

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

A unique identifier for the client performing the mutation.

" + }, + { + "name": "pullRequest", + "type": "PullRequest", + "id": "pullrequest", + "kind": "objects", + "href": "/graphql/reference/objects#pullrequest", + "description": "

The pull request that is getting requests.

" + }, + { + "name": "requestedReviewersEdge", + "type": "UserEdge", + "id": "useredge", + "kind": "objects", + "href": "/graphql/reference/objects#useredge", + "description": "

The edge from the pull request to the requested reviewers.

" + } + ] + }, { "name": "rerequestCheckSuite", "kind": "mutations", @@ -106842,6 +106892,64 @@ } ] }, + { + "name": "RequestReviewsByLoginInput", + "kind": "inputObjects", + "id": "requestreviewsbylogininput", + "href": "/graphql/reference/input-objects#requestreviewsbylogininput", + "description": "

Autogenerated input type of RequestReviewsByLogin.

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

The logins of the bots to request reviews from, including the [bot] suffix (e.g., 'copilot-pull-request-reviewer[bot]').

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

A unique identifier for the client performing the mutation.

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

The Node ID of the pull request to modify.

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

The slugs of the teams to request reviews from (format: 'org/team-slug').

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

Add users to the set rather than replace.

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

The login strings of the users to request reviews from.

", + "type": "[String!]", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "RequestReviewsInput", "kind": "inputObjects", diff --git a/src/graphql/data/ghec/schema.docs.graphql b/src/graphql/data/ghec/schema.docs.graphql index 14fffd984755..d1c7d2509627 100644 --- a/src/graphql/data/ghec/schema.docs.graphql +++ b/src/graphql/data/ghec/schema.docs.graphql @@ -26151,6 +26151,16 @@ type Mutation { input: RequestReviewsInput! ): RequestReviewsPayload + """ + Set review requests on a pull request using login strings instead of IDs. + """ + requestReviewsByLogin( + """ + Parameters for RequestReviewsByLogin + """ + input: RequestReviewsByLoginInput! + ): RequestReviewsByLoginPayload + """ Rerequests an existing check suite. """ @@ -54667,6 +54677,66 @@ type ReprioritizeSubIssuePayload { issue: Issue } +""" +Autogenerated input type of RequestReviewsByLogin +""" +input RequestReviewsByLoginInput { + """ + The logins of the bots to request reviews from, including the [bot] suffix (e.g., 'copilot-pull-request-reviewer[bot]'). + """ + botLogins: [String!] + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The Node ID of the pull request to modify. + """ + pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"]) + + """ + The slugs of the teams to request reviews from (format: 'org/team-slug'). + """ + teamSlugs: [String!] + + """ + Add users to the set rather than replace. + """ + union: Boolean = false + + """ + The login strings of the users to request reviews from. + """ + userLogins: [String!] +} + +""" +Autogenerated return type of RequestReviewsByLogin. +""" +type RequestReviewsByLoginPayload { + """ + Identifies the actor who performed the event. + """ + actor: Actor + + """ + A unique identifier for the client performing the mutation. + """ + clientMutationId: String + + """ + The pull request that is getting requests. + """ + pullRequest: PullRequest + + """ + The edge from the pull request to the requested reviewers. + """ + requestedReviewersEdge: UserEdge +} + """ Autogenerated input type of RequestReviews """ diff --git a/src/graphql/data/ghec/schema.json b/src/graphql/data/ghec/schema.json index b7feb1ed8b77..089b89cb87e0 100644 --- a/src/graphql/data/ghec/schema.json +++ b/src/graphql/data/ghec/schema.json @@ -6613,6 +6613,56 @@ } ] }, + { + "name": "requestReviewsByLogin", + "kind": "mutations", + "id": "requestreviewsbylogin", + "href": "/graphql/reference/mutations#requestreviewsbylogin", + "description": "

Set review requests on a pull request using login strings instead of IDs.

", + "inputFields": [ + { + "name": "input", + "type": "RequestReviewsByLoginInput!", + "id": "requestreviewsbylogininput", + "kind": "input-objects", + "href": "/graphql/reference/input-objects#requestreviewsbylogininput" + } + ], + "returnFields": [ + { + "name": "actor", + "type": "Actor", + "id": "actor", + "kind": "interfaces", + "href": "/graphql/reference/interfaces#actor", + "description": "

Identifies the actor who performed the event.

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

A unique identifier for the client performing the mutation.

" + }, + { + "name": "pullRequest", + "type": "PullRequest", + "id": "pullrequest", + "kind": "objects", + "href": "/graphql/reference/objects#pullrequest", + "description": "

The pull request that is getting requests.

" + }, + { + "name": "requestedReviewersEdge", + "type": "UserEdge", + "id": "useredge", + "kind": "objects", + "href": "/graphql/reference/objects#useredge", + "description": "

The edge from the pull request to the requested reviewers.

" + } + ] + }, { "name": "rerequestCheckSuite", "kind": "mutations", @@ -106842,6 +106892,64 @@ } ] }, + { + "name": "RequestReviewsByLoginInput", + "kind": "inputObjects", + "id": "requestreviewsbylogininput", + "href": "/graphql/reference/input-objects#requestreviewsbylogininput", + "description": "

Autogenerated input type of RequestReviewsByLogin.

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

The logins of the bots to request reviews from, including the [bot] suffix (e.g., 'copilot-pull-request-reviewer[bot]').

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

A unique identifier for the client performing the mutation.

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

The Node ID of the pull request to modify.

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

The slugs of the teams to request reviews from (format: 'org/team-slug').

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

Add users to the set rather than replace.

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

The login strings of the users to request reviews from.

", + "type": "[String!]", + "id": "string", + "kind": "scalars", + "href": "/graphql/reference/scalars#string" + } + ] + }, { "name": "RequestReviewsInput", "kind": "inputObjects", From 8b3fc317bf462c77aa83debf1ed48108f332d5d9 Mon Sep 17 00:00:00 2001 From: Ryan Ghadimi <114221941+GhadimiR@users.noreply.github.com> Date: Thu, 22 Jan 2026 16:48:52 +0000 Subject: [PATCH 04/11] Update about-actions-usage-metrics-aggregation.md (#59275) --- .../actions/about-actions-usage-metrics-aggregation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/reusables/actions/about-actions-usage-metrics-aggregation.md b/data/reusables/actions/about-actions-usage-metrics-aggregation.md index 41f88df43c8d..13221bf9d440 100644 --- a/data/reusables/actions/about-actions-usage-metrics-aggregation.md +++ b/data/reusables/actions/about-actions-usage-metrics-aggregation.md @@ -1,4 +1,4 @@ -The time period selection feature allows you to view {% data variables.product.prodname_actions %} metrics over predefined periods, as detailed in the following table. These metrics include skipped runs and those that use zero minutes. Data is presented using Coordinated Universal Time (UTC) days. +The time period selection feature allows you to view {% data variables.product.prodname_actions %} metrics over predefined periods, as detailed in the following table. These metrics exclude skipped runs and those that use zero minutes. Data is presented using Coordinated Universal Time (UTC) days. {% rowheaders %} From b2de84c4c3d7588c31171359af05ffd9032cc291 Mon Sep 17 00:00:00 2001 From: Kacz <71774507+KaczDev@users.noreply.github.com> Date: Thu, 22 Jan 2026 16:56:53 +0000 Subject: [PATCH 05/11] Update GHES OTEL docs on advanced dashboards (#59260) Co-authored-by: Manuel Bergler Co-authored-by: Ben Ahmady <32935794+subatoi@users.noreply.github.com> Co-authored-by: Sarita Iyer <66540150+saritai@users.noreply.github.com> --- .../about-the-monitor-dashboards.md | 2 +- .../about-opentelemetry-metrics.md | 2 +- ...d-dashboards.md => advanced-dashboards.md} | 25 +++++++++++++++---- ...iguring-opentelemetry-for-your-instance.md | 2 +- .../opentelemetry-metrics/index.md | 2 +- 5 files changed, 24 insertions(+), 9 deletions(-) rename content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/{enable-advanced-dashboards.md => advanced-dashboards.md} (80%) diff --git a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/about-the-monitor-dashboards.md b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/about-the-monitor-dashboards.md index adb938bec9d1..0a73adc0c44e 100644 --- a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/about-the-monitor-dashboards.md +++ b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/about-the-monitor-dashboards.md @@ -43,7 +43,7 @@ Within the pre-built dashboards you can find various sections grouping graphs of {% ifversion ghes-opentelemetry %} -If you have enabled metrics for OpenTelemetry, then additional dashboards are available, see: [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/enable-advanced-dashboards). +If you have enabled metrics for OpenTelemetry, then additional dashboards are available, see: [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/advanced-dashboards). {% endif %} diff --git a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/about-opentelemetry-metrics.md b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/about-opentelemetry-metrics.md index ff551b46443c..acdea25190ec 100644 --- a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/about-opentelemetry-metrics.md +++ b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/about-opentelemetry-metrics.md @@ -35,7 +35,7 @@ OpenTelemetry metrics offer several advantages over the legacy collectd system: * **Extensible**: Support for custom metrics and external monitoring integrations * **Native endpoints**: Direct integration with service `/metrics` endpoints for efficient monitoring -With OpenTelemetry, advanced Grafana dashboards with enhanced visualization and monitoring capabilities are available, see: [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/enable-advanced-dashboards). +With OpenTelemetry, advanced Grafana dashboards with enhanced visualization and monitoring capabilities are available, see: [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/advanced-dashboards). ## Key components diff --git a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/enable-advanced-dashboards.md b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/advanced-dashboards.md similarity index 80% rename from content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/enable-advanced-dashboards.md rename to content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/advanced-dashboards.md index 6b1f4d3fbbec..9c96a484b730 100644 --- a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/enable-advanced-dashboards.md +++ b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/advanced-dashboards.md @@ -1,6 +1,8 @@ --- -title: Enabling advanced dashboards of OpenTelemetry metrics +title: Advanced dashboards of OpenTelemetry metrics intro: 'After enabling OpenTelemetry metrics collection on your {% data variables.product.prodname_ghe_server %} instance, you have access to additional dashboards with enhanced visualization and monitoring capabilities.' +redirect_from: + - /enterprise/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/enable-advanced-dashboards versions: feature: ghes-opentelemetry topics: @@ -10,7 +12,7 @@ topics: - Monitoring - Performance type: how_to -shortTitle: Enable advanced dashboards +shortTitle: Advanced dashboards --- {% data reusables.enterprise.opentelemetry-migration %} @@ -21,9 +23,18 @@ shortTitle: Enable advanced dashboards {% endif %} +## Prerequisites + +* OpenTelemetry metrics are enabled for your {% data variables.product.prodname_ghe_server %} instance + + ## Additional dashboards +{% ifversion ghes < 3.19 %} When OpenTelemetry metrics are enabled, you can turn on advanced Grafana dashboards with enhanced visualization and monitoring capabilities. +{% else %} +When OpenTelemetry metrics are enabled, you will have access to advanced Grafana dashboards with enhanced visualization and monitoring capabilities. +{% endif %} * **Elasticsearch** - Detailed metrics for search performance, indexing operations, and cluster health * **Nomad** - In-depth monitoring of job scheduling, resource allocation, and service orchestration @@ -33,12 +44,15 @@ When OpenTelemetry metrics are enabled, you can turn on advanced Grafana dashboa These dashboards provide more granular insights into your {% data variables.product.prodname_ghe_server %} instance's performance and can help with advanced troubleshooting and capacity planning. -## Prerequisites +{% ifversion ghes < 3.19 %} +## Enabling advanced dashboards + +### Prerequisites -* OpenTelemetry metrics are enabled for your {% data variables.product.prodname_ghe_server %} instance * SSH access to your {% data variables.product.prodname_ghe_server %} instance -## Enabling advanced dashboards +--- + {% data reusables.enterprise_installation.ssh-into-instance %} 1. Run the following command to enable advanced dashboards: @@ -50,3 +64,4 @@ These dashboards provide more granular insights into your {% data variables.prod {% data reusables.enterprise.apply-configuration %} After running these commands, your external Grafana instance will have access to additional pre-configured dashboards. +{% endif %} diff --git a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/configuring-opentelemetry-for-your-instance.md b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/configuring-opentelemetry-for-your-instance.md index dd3cb06612e4..da5ead6627b8 100644 --- a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/configuring-opentelemetry-for-your-instance.md +++ b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/configuring-opentelemetry-for-your-instance.md @@ -169,5 +169,5 @@ sudo journalctl -u victoriametrics -f ## Next steps -* To enable advanced monitoring dashboards, see [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/enable-advanced-dashboards) +* To enable advanced monitoring dashboards, see [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/advanced-dashboards) * To set up external monitoring, see [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/setting-up-external-monitoring-with-opentelemetry). diff --git a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/index.md b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/index.md index 4ae7cfde50d2..332ff735c973 100644 --- a/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/index.md +++ b/content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/index.md @@ -8,7 +8,7 @@ topics: children: - /about-opentelemetry-metrics - /configuring-opentelemetry-for-your-instance - - /enable-advanced-dashboards + - /advanced-dashboards - /setting-up-external-monitoring-with-opentelemetry shortTitle: OpenTelemetry metrics --- From 6c307458e1fba644fd169502628c4ba3f4e6f19b Mon Sep 17 00:00:00 2001 From: David Yang <105812142+davidjunxyang@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:56:15 -0800 Subject: [PATCH 06/11] Docs update for specifying who can access cost center endpoints (#59201) Co-authored-by: Brittany Ellich Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- content/rest/billing/cost-centers.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/content/rest/billing/cost-centers.md b/content/rest/billing/cost-centers.md index 8e06b9263d7f..8e49f282328c 100644 --- a/content/rest/billing/cost-centers.md +++ b/content/rest/billing/cost-centers.md @@ -8,5 +8,12 @@ topics: autogenerated: rest allowTitleToDifferFromFilename: true --- +## Required roles + +The following roles can access cost center API endpoints: + +* **Enterprise owners** +* **Billing managers** +* **Organization owners** From 46e3f3b73ec185f23df6e807b46fedbeca2f43b7 Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:34:53 -0800 Subject: [PATCH 07/11] Update audit log event data (#59273) Co-authored-by: Sarita Iyer <66540150+saritai@users.noreply.github.com> --- src/audit-logs/data/ghec/enterprise.json | 18 +++++++++++------- src/audit-logs/lib/config.json | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/audit-logs/data/ghec/enterprise.json b/src/audit-logs/data/ghec/enterprise.json index 45d00d451607..004310a21ce7 100644 --- a/src/audit-logs/data/ghec/enterprise.json +++ b/src/audit-logs/data/ghec/enterprise.json @@ -1792,7 +1792,7 @@ }, { "action": "business.invite_billing_manager", - "description": "An invitation for someone to be an billing manager of an enterprise was sent.", + "description": "An invitation for someone to be a billing manager of an enterprise was sent.", "docs_reference_links": "N/A", "fields": [ "user", @@ -19887,17 +19887,19 @@ "description": "SSO lockdown for users was disabled.", "docs_reference_links": "N/A", "fields": [ - "user_agent", - "request_id", "actor", "actor_id", + "user_agent", + "request_id", + "request_access_security_header", "business", "business_id", "action", "_document_id", "@timestamp", "created_at", - "operation_type" + "operation_type", + "actor_is_bot" ] }, { @@ -19905,17 +19907,19 @@ "description": "SSO lockdown for users was enabled.", "docs_reference_links": "N/A", "fields": [ - "user_agent", - "request_id", "actor", "actor_id", + "user_agent", + "request_id", + "request_access_security_header", "business", "business_id", "action", "_document_id", "@timestamp", "created_at", - "operation_type" + "operation_type", + "actor_is_bot" ] }, { diff --git a/src/audit-logs/lib/config.json b/src/audit-logs/lib/config.json index 6c35c7b542b2..a4db321a9a31 100644 --- a/src/audit-logs/lib/config.json +++ b/src/audit-logs/lib/config.json @@ -9,5 +9,5 @@ "git": "Note: Git events have special access requirements and retention policies that differ from other audit log events. For GitHub Enterprise Cloud, access Git events via the REST API only with 7-day retention. For GitHub Enterprise Server, Git events must be enabled in audit log configuration and are not included in search results.", "sso_redirect": "Note: Automatically redirecting users to sign in is currently in beta for Enterprise Managed Users and subject to change." }, - "sha": "cae0414d457f280b90b251fbf911f44a709d6ca9" + "sha": "6db8e8d59222d152b5a2df1030d78dee55aeba92" } \ No newline at end of file From ba3c8706549e08c6fda8b335bed93709553f49ab Mon Sep 17 00:00:00 2001 From: Kevin Heis Date: Thu, 22 Jan 2026 12:11:14 -0800 Subject: [PATCH 08/11] Fix race condition in search index workflow triggering (#59276) --- .github/workflows/index-general-search.yml | 16 +++++++++++----- .github/workflows/purge-fastly.yml | 4 +++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/index-general-search.yml b/.github/workflows/index-general-search.yml index f09cb3aa8a55..52cdddeecf67 100644 --- a/.github/workflows/index-general-search.yml +++ b/.github/workflows/index-general-search.yml @@ -26,9 +26,11 @@ on: permissions: contents: read -# This allows a subsequently queued workflow run to cancel previous runs +# This allows a subsequently queued workflow run to cancel previous runs. +# Include the triggering workflow's conclusion in the group so that runs triggered +# by skipped Purge Fastly workflows don't cancel runs triggered by successful ones. concurrency: - group: '${{ github.workflow }} @ ${{ github.head_ref }} ${{ github.event_name }}' + group: '${{ github.workflow }} @ ${{ github.head_ref }} ${{ github.event_name }} ${{ github.event.workflow_run.conclusion }}' cancel-in-progress: true env: @@ -40,7 +42,9 @@ env: jobs: figureOutMatrix: - if: ${{ github.repository == 'github/docs-internal' }} + # Skip immediately if triggered by a non-successful Purge Fastly run. + # This prevents skipped runs from canceling valid indexing runs via concurrency. + if: ${{ github.repository == 'github/docs-internal' && (github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success') }} runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.result }} @@ -55,11 +59,13 @@ jobs: const allPossible = ["en", ...allNonEnglish] if (context.eventName === "workflow_run") { + // Job-level `if` already ensures we only get here for successful runs, + // but keep this as a safety check. if (context.payload.workflow_run.conclusion === "success") { return ["en"] } - console.warn(`NOTE! It was a workflow_run but not success ('${context.payload.workflow_run.conclusion}')`) - console.warn("This means we're not going to index anything in the next dependent step.") + // This shouldn't happen due to job-level filter, but handle gracefully. + console.warn(`Unexpected: workflow_run with conclusion '${context.payload.workflow_run.conclusion}'`) return [] } diff --git a/.github/workflows/purge-fastly.yml b/.github/workflows/purge-fastly.yml index eaccdfba31df..558817cb55df 100644 --- a/.github/workflows/purge-fastly.yml +++ b/.github/workflows/purge-fastly.yml @@ -22,7 +22,9 @@ env: jobs: send-purges: - # Run when workflow_dispatch is the event (manual) or when deployment_status is the event (automatic) and it's a successful production deploy + # Run when workflow_dispatch is the event (manual) or when deployment_status is the event (automatic) and it's a successful production deploy. + # NOTE: This workflow triggers on all deployment_status events (including staging), but only runs for production. + # Non-production deploys will show as "skipped" - this is expected behavior. if: >- ${{ github.repository == 'github/docs-internal' && From 2b9ceae6bf4e8b98b85027bcd5f009fcfa6a7534 Mon Sep 17 00:00:00 2001 From: jclement136 Date: Thu, 22 Jan 2026 15:29:36 -0500 Subject: [PATCH 09/11] Apply readability improvements using updated agent instructions - Edit about-custom-agents.md with new copilot-readability-editor-2 guidelines - Add copilot-readability-editor-2.md with enhanced instructions for Flesch score improvement --- .../agents/copilot-readability-editor-2.md | 128 ++++++++++++++++++ .../coding-agent/about-custom-agents.md | 37 +++-- 2 files changed, 153 insertions(+), 12 deletions(-) create mode 100644 .github/agents/copilot-readability-editor-2.md diff --git a/.github/agents/copilot-readability-editor-2.md b/.github/agents/copilot-readability-editor-2.md new file mode 100644 index 000000000000..9dd8f1469d44 --- /dev/null +++ b/.github/agents/copilot-readability-editor-2.md @@ -0,0 +1,128 @@ +--- +name: "Copilot-Readability-Editor-2" +description: "Improves the readability and scannability of an article provided by the user, applying plain language principles and the GitHub Docs team's style guide and writing standards." +tools: ['read', 'edit/editFiles', 'search', 'web', 'github/*', 'execute'] + +--- + +# Copilot-Readability-Editor Agent + +You are an expert editor for the GitHub Docs content team. Your job is to maximize the readability of articles using plain language principles and the Docs team's writing standards. + +## Readability Score Target + +Your primary goal is to improve the Flesch Reading Ease score. Target 35+ (ideally 40+). + +The Flesch formula rewards: +* **Shorter sentences** (biggest impact) +* **Fewer syllables per word** + +When in doubt, make two short sentences instead of one medium sentence. + +## Editing Process + +Follow this two-pass approach: + +1. **First pass—Split sentences**: Find all sentences over 20 words and break them into 2+ shorter sentences. This is the single biggest driver of improved readability scores. +2. **Second pass—Simplify words**: Replace complex words with simpler alternatives where meaning is preserved. + +## Sentence Structure Targets + +* **Target 12-15 words per sentence on average** (not just "under 20") +* Aim for 1.5-2x more sentences than the original while keeping similar word count +* When you see a sentence with commas, em dashes, or "and/or" conjunctions, consider splitting it +* Make sure no more than 25% of sentences contain more than 20 words +* Avoid consecutive sentences starting the same way + +## Word Choice for Readability + +Replace multi-syllable words when a shorter synonym exists: + +| Instead of | Use | +|------------|-----| +| instantiates | starts, creates | +| utilize | use | +| functionality | features | +| configuration | setup, settings | +| implementation | setup, code | +| appropriate | right, correct | +| indicates | shows | +| requirements | needs | +| assistance | help | + +Keep unavoidable technical terms (MCP, Copilot, repository) but simplify surrounding words to compensate. + +## Plain Language Principles + +* Use concise, everyday language. Explain or remove jargon when it doesn't support user understanding. +* Use full terms, not shortened versions (repository, not repo). +* Use active voice and personal pronouns ("you," "your"); favor present tense. +* Write one idea per sentence; avoid redundancy, vague modifiers, and ambiguous phrasing. +* Limit paragraphs to 150 words or fewer. +* State the topic at the start of each paragraph; clarify connections between paragraphs. + +## Scannability (Conservative Approach) + +* Do NOT add new headings unless clearly beneficial +* Do NOT add excessive bold formatting +* Do NOT create headers that would only have one sentence of content +* Convert long inline lists to bulleted lists, but preserve existing structure otherwise +* Focus on sentence clarity over structural changes +* Structure logically with clear, descriptive headings and short sections + +## Audience Guidance + +When editing, consider the audience type: +* [Builders](https://github.com/github/docs-team/discussions/5060) +* [Drivers](https://github.com/github/docs-team/discussions/5061) +* [Learners](https://github.com/github/docs-team/blob/main/personas/learners/best-practices-for-learners-content.md) + +## Formatting Rules + +* When creating lists, use asterisks (*) instead of hyphens (-) +* Do not end list items with periods if the items are not complete sentences +* Use "For more information, see [link]" or "See [link]" before links that provide additional details; do not use a colon or other formats +* Consider splitting a paragraph or list item when it includes two topics or steps, or is notably longer than others + +## What to Preserve + +* Retain all essential technical details: defaults, warnings, and admin options +* Do not remove sentences about defaults, feature scope, or access unless clearly repeated +* Retain essential usage details, admin options, and warnings unless obviously redundant +* Do not alter the intent of verbs and actions (e.g., "navigate" does not necessarily mean "select") + +## Avoid These Patterns + +Based on past tests, do NOT: +* ❌ Add excessive bold text on every key term +* ❌ Create subheadings with bold text instead of actual ## headings +* ❌ Add headers that only have one sentence of content +* ❌ Use "See: [link]" with a colon (use "See [link]" instead) +* ❌ Convert simple prose to overly nested lists +* ❌ Reorganize sections unless clearly beneficial + +## Review Process + +1. Read through the article once, noting barriers to readability +2. Identify sentences over 20 words that can be split +3. Identify complex words that can be simplified +4. Make changes according to the guidelines above +5. Only analyze and edit the specific `.md` files provided +6. Do not move or delete files +7. Make edits only when they provide meaningful improvements +8. Submit edits as a pull request + +## References + +* [Example: good readability and scannability PR](https://github.com/github/docs-internal/pull/57154) +* [Readability improvement outcomes & examples](https://github.com/github/docs-team/discussions/5971) + +## Quality Checklist + +- [ ] Flesch Reading Ease score improved (target 35+) +- [ ] Sentences average 12-15 words; no more than 25% exceed 20 words +- [ ] Language is clear, direct, and free from unnecessary complexity +- [ ] Article is easy to scan (headings, lists, short paragraphs) +- [ ] Article follows the Docs team's style, tone, and formatting standards +- [ ] Technical details, defaults, and warnings are preserved +- [ ] Summary and at least 2 before/after examples included in output diff --git a/content/copilot/concepts/agents/coding-agent/about-custom-agents.md b/content/copilot/concepts/agents/coding-agent/about-custom-agents.md index e0f0f3964ec6..f9efe18bb59b 100644 --- a/content/copilot/concepts/agents/coding-agent/about-custom-agents.md +++ b/content/copilot/concepts/agents/coding-agent/about-custom-agents.md @@ -11,24 +11,28 @@ topics: ## About {% data variables.copilot.custom_agents_short %} -{% data variables.copilot.custom_agents_caps_short %} are specialized versions of {% data variables.copilot.copilot_coding_agent %} that you can tailor to your unique workflows, coding conventions, and use cases. Instead of repeatedly providing the same instructions and context, {% data variables.copilot.custom_agents_short %} allow you to define specialized agents that act like tailored teammates—following standards, using the right tools, and implementing team-specific practices. +{% data variables.copilot.custom_agents_caps_short %} are specialized versions of {% data variables.copilot.copilot_coding_agent %}. You can tailor them to your workflows, coding conventions, and use cases. -{% data variables.copilot.custom_agents_caps_short %} are defined using Markdown files, called {% data variables.copilot.agent_profiles %}, that specify prompts, tools, and MCP servers. This allows individuals and teams to encode their conventions, frameworks, and desired outcomes directly into {% data variables.product.prodname_copilot_short %}. The {% data variables.copilot.agent_profile %} serves as the artifact that defines the {% data variables.copilot.copilot_custom_agent_short %}'s behavior, and assigning the agent to a task or issue instantiates the {% data variables.copilot.copilot_custom_agent_short %}. +With {% data variables.copilot.custom_agents_short %}, you define agents that act like tailored teammates. They follow your standards, use the right tools, and apply your team's practices. You don't need to repeat the same instructions each time. + +You define {% data variables.copilot.custom_agents_short %} using Markdown files called {% data variables.copilot.agent_profiles %}. These files specify prompts, tools, and MCP servers. This lets you build your conventions and desired outcomes directly into {% data variables.product.prodname_copilot_short %}. + +The {% data variables.copilot.agent_profile %} defines the {% data variables.copilot.copilot_custom_agent_short %}'s behavior. When you assign the agent to a task or issue, it starts working. ## {% data variables.copilot.agent_profile_caps %} format -{% data variables.copilot.agent_profiles_caps %} are Markdown files with YAML frontmatter. In their simplest form, they include: +{% data variables.copilot.agent_profiles_caps %} are Markdown files with YAML frontmatter. A basic profile includes: * **Name**: A unique identifier for the {% data variables.copilot.copilot_custom_agent_short %} -* **Description**: Explains the agent's purpose and capabilities -* **Prompt**: Custom instructions that define the agent's behavior and expertise -* **Tools**: Specific tools the agent can access. This is optional, and the default is access to all available tools, including built-in tools and MCP server tools. +* **Description**: The agent's purpose and what it can do +* **Prompt**: Instructions that define the agent's behavior and expertise +* **Tools** (optional): Specific tools the agent can access—by default, agents can use all available tools -Organization and enterprise-level {% data variables.copilot.agent_profiles %} can also include MCP server configurations within the {% data variables.copilot.agent_profile %}, using the `mcp-server` property. +At the organization and enterprise level, {% data variables.copilot.agent_profiles %} can also include MCP server settings. Use the `mcp-server` property to add these. ### Example {% data variables.copilot.agent_profile %} -This is a basic {% data variables.copilot.agent_profile %} with name, description, and prompt configured. +The following example shows a basic {% data variables.copilot.agent_profile %} with a name, description, and prompt. ```text --- @@ -49,17 +53,26 @@ Focus on the following instructions: ## Where you can configure {% data variables.copilot.custom_agents_short %} -You can define {% data variables.copilot.agent_profiles %} at the repository level (`.github/agents/CUSTOM-AGENT-NAME.md` in your repository) for project-specific agents, or at the organization or enterprise level (`/agents/CUSTOM-AGENT-NAME.md` in a `.github-private` repository) for broader availability. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents). +You can define {% data variables.copilot.agent_profiles %} at different levels: + +* **Repository level**: Create `.github/agents/CUSTOM-AGENT-NAME.md` in your repository for project-specific agents +* **Organization or enterprise level**: Create `/agents/CUSTOM-AGENT-NAME.md` in a `.github-private` repository for broader access + +For more information, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents). ## Where you can use {% data variables.copilot.custom_agents_short %} {% data reusables.copilot.custom-agents-ide-preview %} -Once created, your {% data variables.copilot.custom_agents_short %} are available wherever you can use {% data variables.copilot.copilot_coding_agent %}, including {% data variables.product.prodname_dotcom_the_website %} (the agents tab and panel, issue assignment, pull requests), the {% data variables.copilot.copilot_cli %}, and in {% data variables.product.prodname_vscode %}, JetBrains IDEs, Eclipse, and Xcode. +After you create {% data variables.copilot.custom_agents_short %}, you can use them wherever {% data variables.copilot.copilot_coding_agent %} is available: + +* **{% data variables.product.prodname_dotcom_the_website %}**: The agents tab and panel, issue assignment, and pull requests +* **Command line**: The {% data variables.copilot.copilot_cli %} +* **IDEs**: {% data variables.product.prodname_vscode %}, JetBrains IDEs, Eclipse, and Xcode -{% data variables.copilot.agent_profiles_caps %} can be used directly in {% data variables.product.prodname_vscode %}, JetBrains IDEs, Eclipse, and Xcode, though some properties may function differently, or be ignored, between environments. +You can use {% data variables.copilot.agent_profiles %} directly in these IDEs. Some properties may work differently or be ignored depending on the environment. -For more information on using {% data variables.copilot.custom_agents_short %} in {% data variables.product.prodname_vscode %} specifically, see [{% data variables.copilot.custom_agents_caps_short %} in {% data variables.product.prodname_vscode_shortname %}](https://code.visualstudio.com/docs/copilot/customization/custom-agents) in the {% data variables.product.prodname_vscode_shortname %} documentation. +For more information about using {% data variables.copilot.custom_agents_short %} in {% data variables.product.prodname_vscode %}, see [{% data variables.copilot.custom_agents_caps_short %} in {% data variables.product.prodname_vscode_shortname %}](https://code.visualstudio.com/docs/copilot/customization/custom-agents) in the {% data variables.product.prodname_vscode_shortname %} documentation. ## Next steps From a5dbb6aa223d732dd23dee9836e2a3c61dec0b94 Mon Sep 17 00:00:00 2001 From: jclement136 Date: Thu, 22 Jan 2026 15:31:26 -0500 Subject: [PATCH 10/11] Add updated (experimental) agent and another article test --- ...urity-configuration-for-your-repositories.md | 2 -- ...lnerability-reporting-for-an-organization.md | 2 +- .../protect-your-secrets.md | 2 +- .../establish-complete-coverage/index.md | 1 - package-lock.json | 17 +++++++++++++++++ 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/content/code-security/concepts/security-at-scale/choosing-a-security-configuration-for-your-repositories.md b/content/code-security/concepts/security-at-scale/choosing-a-security-configuration-for-your-repositories.md index b2cf2064d4b6..e2f18ea48c6b 100644 --- a/content/code-security/concepts/security-at-scale/choosing-a-security-configuration-for-your-repositories.md +++ b/content/code-security/concepts/security-at-scale/choosing-a-security-configuration-for-your-repositories.md @@ -36,8 +36,6 @@ The {% data variables.product.prodname_github_security_configuration %} offers a The {% data variables.product.prodname_github_security_configuration %} includes {% data variables.product.prodname_GH_code_security %} and {% data variables.product.prodname_GH_secret_protection %} features. Applying the configuration to private and internal repositories in your organization will incur usage costs or require licenses. -To start securing repositories in your organization with the {% data variables.product.prodname_github_security_configuration %}, see [AUTOTITLE](/code-security/securing-your-organization/enabling-security-features-in-your-organization/applying-the-github-recommended-security-configuration-in-your-organization). - ## Choosing a {% data variables.product.prodname_custom_security_configuration %} If you are familiar with {% data variables.product.company_short %}'s security products, and you have specific security needs that the {% data variables.product.prodname_github_security_configuration %} can't meet, you can create and apply {% data variables.product.prodname_custom_security_configurations %}. With {% data variables.product.prodname_custom_security_configurations %}, you can: diff --git a/content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/configuring-private-vulnerability-reporting-for-an-organization.md b/content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/configuring-private-vulnerability-reporting-for-an-organization.md index 33a0778bc7bb..6afbc8a78b3b 100644 --- a/content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/configuring-private-vulnerability-reporting-for-an-organization.md +++ b/content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/configuring-private-vulnerability-reporting-for-an-organization.md @@ -32,7 +32,7 @@ For more information about configuring notification preferences, see [AUTOTITLE] ## Enabling or disabling private vulnerability reporting for public repositories added to the organization -You can enable or disable private vulnerability reporting for new public repositories added to the organization using the {% data variables.product.prodname_github_security_configuration %}, or you can create a {% data variables.product.prodname_custom_security_configuration %}. For more information, see [AUTOTITLE](/code-security/securing-your-organization/enabling-security-features-in-your-organization/applying-the-github-recommended-security-configuration-in-your-organization) and [AUTOTITLE](/code-security/securing-your-organization/enabling-security-features-in-your-organization/creating-a-custom-security-configuration). +You can enable or disable private vulnerability reporting for new public repositories added to the organization by creating a {% data variables.product.prodname_custom_security_configuration %}. For more information, see [AUTOTITLE](/code-security/securing-your-organization/enabling-security-features-in-your-organization/creating-a-custom-security-configuration). ## What having private vulnerability reporting enabled for a repository looks like for a security researcher diff --git a/content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/protect-your-secrets.md b/content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/protect-your-secrets.md index 7f4c96c6acdc..9949f83c1769 100644 --- a/content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/protect-your-secrets.md +++ b/content/code-security/how-tos/secure-at-scale/configure-organization-security/configure-specific-tools/protect-your-secrets.md @@ -31,4 +31,4 @@ Before you configure {% data variables.product.prodname_GH_secret_protection %}, * **For public repositories for free**: Click to enable for _only_ public repositories in your organization. * **For all repositories**: Click to see an estimated cost for {% data variables.product.prodname_GH_secret_protection %} for all repositories in your organization. * If you are satisfied with the pricing estimate, to enable {% data variables.product.prodname_secret_scanning %} alerts and push protection across your organization, click **Enable {% data variables.product.prodname_secret_protection %}**. - * Alternatively, click **Configure in settings** to customize which repositories you want to enable {% data variables.product.prodname_secret_protection %} for. See {% ifversion fpt or ghec %}[AUTOTITLE](/code-security/securing-your-organization/enabling-security-features-in-your-organization/applying-the-github-recommended-security-configuration-in-your-organization) and {% endif %}[AUTOTITLE](/code-security/securing-your-organization/enabling-security-features-in-your-organization/creating-a-custom-security-configuration). + * Alternatively, click **Configure in settings** to customize which repositories you want to enable {% data variables.product.prodname_secret_protection %} for. See [AUTOTITLE](/code-security/securing-your-organization/enabling-security-features-in-your-organization/creating-a-custom-security-configuration). diff --git a/content/code-security/how-tos/secure-at-scale/configure-organization-security/establish-complete-coverage/index.md b/content/code-security/how-tos/secure-at-scale/configure-organization-security/establish-complete-coverage/index.md index 012a36ec3a09..5b6eff0dd6d0 100644 --- a/content/code-security/how-tos/secure-at-scale/configure-organization-security/establish-complete-coverage/index.md +++ b/content/code-security/how-tos/secure-at-scale/configure-organization-security/establish-complete-coverage/index.md @@ -7,7 +7,6 @@ versions: ghec: '*' contentType: how-tos children: - - /applying-the-github-recommended-security-configuration-in-your-organization - /creating-a-custom-security-configuration - /applying-a-custom-security-configuration - /configuring-global-security-settings-for-your-organization diff --git a/package-lock.json b/package-lock.json index 0777921224e7..1bd0e7c24a85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3018,6 +3018,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -3057,6 +3058,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3077,6 +3079,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3097,6 +3100,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3117,6 +3121,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3137,6 +3142,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3157,6 +3163,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3177,6 +3184,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3197,6 +3205,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3217,6 +3226,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3237,6 +3247,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3257,6 +3268,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3277,6 +3289,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3297,6 +3310,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -3314,6 +3328,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, "license": "Apache-2.0", "optional": true, "bin": { @@ -8633,6 +8648,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -12593,6 +12609,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, "license": "MIT", "optional": true }, From ec70ecf1c9ce1e1d73cf0cda5d2c098e75a59488 Mon Sep 17 00:00:00 2001 From: Artem <69678753+artemaniskin@users.noreply.github.com> Date: Thu, 22 Jan 2026 23:23:36 +0200 Subject: [PATCH 11/11] Fix typo in AI tools overview section (#42354) Co-authored-by: Sharra-writes --- content/copilot/concepts/tools/ai-tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/copilot/concepts/tools/ai-tools.md b/content/copilot/concepts/tools/ai-tools.md index 5748e82c6bdd..8154c61bc734 100644 --- a/content/copilot/concepts/tools/ai-tools.md +++ b/content/copilot/concepts/tools/ai-tools.md @@ -18,7 +18,7 @@ category: ## Overview -The use of AI tools is increasingly becoming a standard part of a software developer's daily workflow. To be competitive in the job market, it's important to to know which AI tools to use for each task you face as a developer. +The use of AI tools is increasingly becoming a standard part of a software developer's daily workflow. To be competitive in the job market, it's important to know which AI tools to use for each task you face as a developer. {% data variables.product.github %}'s AI tools assist with every phase of the software development lifecycle (SDLC):