diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 4286694bb2d1..a2659418df48 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -78,7 +78,7 @@ For complete style guidance, see our [style guide](https://docs.github.com/en/co
-**Make changes in a codespace:** See "[Working in a codespace](https://github.com/github/docs/blob/main/contributing/codespace.md)" for documentation-specific setup.
+**Make changes in a codespace:** See "[Working on GitHub Docs in a codespace](https://docs.github.com/en/contributing/setting-up-your-environment-to-work-on-github-docs/working-on-github-docs-in-a-codespace)" for documentation-specific setup.
**Make changes locally:**
1. Fork the repository (see [official forking guide](https://docs.github.com/en/contributing))
diff --git a/.github/workflows/all-documents.yml b/.github/workflows/all-documents.yml
index f52aebfb8374..1f0101e770ed 100644
--- a/.github/workflows/all-documents.yml
+++ b/.github/workflows/all-documents.yml
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/article-api-docs.yml b/.github/workflows/article-api-docs.yml
index b856b43b8b3b..8bb96924ab4d 100644
--- a/.github/workflows/article-api-docs.yml
+++ b/.github/workflows/article-api-docs.yml
@@ -22,7 +22,7 @@ jobs:
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/auto-add-ready-for-doc-review.yml b/.github/workflows/auto-add-ready-for-doc-review.yml
index 14f91163d2e7..47e74c43aaf0 100644
--- a/.github/workflows/auto-add-ready-for-doc-review.yml
+++ b/.github/workflows/auto-add-ready-for-doc-review.yml
@@ -25,7 +25,7 @@ jobs:
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Check team membership
id: membership_check
diff --git a/.github/workflows/benchmark-pages.yml b/.github/workflows/benchmark-pages.yml
index be6d2de96cb7..dc33ed705481 100644
--- a/.github/workflows/benchmark-pages.yml
+++ b/.github/workflows/benchmark-pages.yml
@@ -21,7 +21,7 @@ jobs:
ISSUE_REPO: github/docs-engineering
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: 'false'
- name: Generate GitHub App token
diff --git a/.github/workflows/changelog-agent.yml b/.github/workflows/changelog-agent.yml
index 5f58f6fc4826..5a326ba3b522 100644
--- a/.github/workflows/changelog-agent.yml
+++ b/.github/workflows/changelog-agent.yml
@@ -743,7 +743,7 @@ jobs:
# Local composite actions below require the repository to be checked out.
- name: Check out repo
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
diff --git a/.github/workflows/close-on-invalid-label.yaml b/.github/workflows/close-on-invalid-label.yaml
index 0e808effc1f9..654d97402bdc 100644
--- a/.github/workflows/close-on-invalid-label.yaml
+++ b/.github/workflows/close-on-invalid-label.yaml
@@ -39,7 +39,7 @@ jobs:
- name: Check out repo
if: ${{ failure() && github.event_name != 'pull_request_target' }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() && github.event_name != 'pull_request_target' }}
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 3f5bdad4cc95..905406b760f5 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -29,7 +29,7 @@ jobs:
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: github/codeql-action/init@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
with:
diff --git a/.github/workflows/confirm-internal-staff-work-in-docs.yml b/.github/workflows/confirm-internal-staff-work-in-docs.yml
index 039525edb066..bdef245fe393 100644
--- a/.github/workflows/confirm-internal-staff-work-in-docs.yml
+++ b/.github/workflows/confirm-internal-staff-work-in-docs.yml
@@ -89,7 +89,7 @@ jobs:
- name: Check out repo
if: ${{ failure() && github.event_name != 'pull_request_target' }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() && github.event_name != 'pull_request_target' }}
with:
diff --git a/.github/workflows/content-lint-markdown.yml b/.github/workflows/content-lint-markdown.yml
index 80f35ec503a7..adb16aa08720 100644
--- a/.github/workflows/content-lint-markdown.yml
+++ b/.github/workflows/content-lint-markdown.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Fetch 2 commits so tj-actions/changed-files can diff without extra API calls
fetch-depth: 2
diff --git a/.github/workflows/content-linter-rules-docs.yml b/.github/workflows/content-linter-rules-docs.yml
index 1f0c7ebe9d64..da5de0d478d7 100644
--- a/.github/workflows/content-linter-rules-docs.yml
+++ b/.github/workflows/content-linter-rules-docs.yml
@@ -25,7 +25,7 @@ jobs:
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/content-pipelines.yml b/.github/workflows/content-pipelines.yml
index c33e1ce46856..bb69d006eb9e 100644
--- a/.github/workflows/content-pipelines.yml
+++ b/.github/workflows/content-pipelines.yml
@@ -41,7 +41,7 @@ jobs:
steps:
- name: Checkout docs-internal
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
index f1cb401ea08f..694548cf43ae 100644
--- a/.github/workflows/copilot-setup-steps.yml
+++ b/.github/workflows/copilot-setup-steps.yml
@@ -29,7 +29,7 @@ jobs:
ELASTICSEARCH_URL: http://localhost:9200/
steps:
- name: Checkout code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/copy-api-issue-to-internal.yml b/.github/workflows/copy-api-issue-to-internal.yml
index 4e1c6243e471..81f24233e866 100644
--- a/.github/workflows/copy-api-issue-to-internal.yml
+++ b/.github/workflows/copy-api-issue-to-internal.yml
@@ -75,7 +75,7 @@ jobs:
- name: Check out repo
if: ${{ failure() && github.event_name != 'workflow_dispatch' && github.repository == 'github/docs-internal' }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() && github.event_name != 'workflow_dispatch' && github.repository == 'github/docs-internal' }}
with:
diff --git a/.github/workflows/count-translation-corruptions.yml b/.github/workflows/count-translation-corruptions.yml
index 1095079dfe8d..14e17b48cb55 100644
--- a/.github/workflows/count-translation-corruptions.yml
+++ b/.github/workflows/count-translation-corruptions.yml
@@ -33,7 +33,7 @@ jobs:
repositories: docs-internal,docs-internal.es-es,docs-internal.ja-jp,docs-internal.pt-br,docs-internal.zh-cn,docs-internal.ru-ru,docs-internal.fr-fr,docs-internal.ko-kr,docs-internal.de-de
- name: Checkout English repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Using a PAT is necessary so that the new commit will trigger the
# CI in the PR. (Events from GITHUB_TOKEN don't trigger new workflows.)
diff --git a/.github/workflows/create-changelog-pr.yml b/.github/workflows/create-changelog-pr.yml
index 324c2bea6a41..a335cb02d939 100644
--- a/.github/workflows/create-changelog-pr.yml
+++ b/.github/workflows/create-changelog-pr.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: 'Ensure ${{ env.CHANGELOG_FILE }} exists'
run: |
diff --git a/.github/workflows/delete-orphan-translation-files.yml b/.github/workflows/delete-orphan-translation-files.yml
index c81f0d6de1e9..c5930f322b9d 100644
--- a/.github/workflows/delete-orphan-translation-files.yml
+++ b/.github/workflows/delete-orphan-translation-files.yml
@@ -60,7 +60,7 @@ jobs:
language_repo: github/docs-internal.ko-kr
steps:
- - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
@@ -71,7 +71,7 @@ jobs:
repositories: docs-internal.es-es,docs-internal.ja-jp,docs-internal.pt-br,docs-internal.zh-cn,docs-internal.ru-ru,docs-internal.fr-fr,docs-internal.ko-kr,docs-internal.de-de,docs-engineering
- name: Checkout the language-specific repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: ${{ matrix.language_repo }}
token: ${{ steps.app-token.outputs.token }}
diff --git a/.github/workflows/docs-review-collect.yml b/.github/workflows/docs-review-collect.yml
index 2d6ff09f556c..b3c49b9d8278 100644
--- a/.github/workflows/docs-review-collect.yml
+++ b/.github/workflows/docs-review-collect.yml
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Check out repo content
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Setup Node.js
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
diff --git a/.github/workflows/dont-delete-assets.yml b/.github/workflows/dont-delete-assets.yml
index 3d66d1c6dc82..3c3e73d4cacf 100644
--- a/.github/workflows/dont-delete-assets.yml
+++ b/.github/workflows/dont-delete-assets.yml
@@ -30,7 +30,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/dont-delete-features.yml b/.github/workflows/dont-delete-features.yml
index 9790d399ed2a..5717e5f670b8 100644
--- a/.github/workflows/dont-delete-features.yml
+++ b/.github/workflows/dont-delete-features.yml
@@ -30,7 +30,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/enterprise-dates.yml b/.github/workflows/enterprise-dates.yml
index 047618db6539..1c5419174732 100644
--- a/.github/workflows/enterprise-dates.yml
+++ b/.github/workflows/enterprise-dates.yml
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/enterprise-release-issue.yml b/.github/workflows/enterprise-release-issue.yml
index 5b95ca5864d8..2595d2e35079 100644
--- a/.github/workflows/enterprise-release-issue.yml
+++ b/.github/workflows/enterprise-release-issue.yml
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/first-responder-v2-prs-collect.yml b/.github/workflows/first-responder-v2-prs-collect.yml
index de07121825db..ff0d2aba47c7 100644
--- a/.github/workflows/first-responder-v2-prs-collect.yml
+++ b/.github/workflows/first-responder-v2-prs-collect.yml
@@ -24,7 +24,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
# Add to the FR project
# and set type to "Maintenance"
diff --git a/.github/workflows/generate-code-scanning-query-lists.yml b/.github/workflows/generate-code-scanning-query-lists.yml
index e3fd557f6014..ea466bf9f2de 100644
--- a/.github/workflows/generate-code-scanning-query-lists.yml
+++ b/.github/workflows/generate-code-scanning-query-lists.yml
@@ -32,12 +32,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
- name: Checkout codeql repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: github/codeql
path: codeql
@@ -98,12 +98,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
- name: Checkout codeql repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: github/codeql
path: codeql
@@ -164,10 +164,10 @@ jobs:
needs: [generate-security-query-lists, generate-quality-query-lists]
steps:
- name: Checkout repository code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Checkout codeql repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: github/codeql
path: codeql
diff --git a/.github/workflows/headless-tests.yml b/.github/workflows/headless-tests.yml
index aa0455cfb49c..54e844c36906 100644
--- a/.github/workflows/headless-tests.yml
+++ b/.github/workflows/headless-tests.yml
@@ -38,7 +38,7 @@ jobs:
timeout-minutes: 60
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/setup-elasticsearch
diff --git a/.github/workflows/hubber-contribution-help.yml b/.github/workflows/hubber-contribution-help.yml
index 67f711caaa53..7fb5e989b3cf 100644
--- a/.github/workflows/hubber-contribution-help.yml
+++ b/.github/workflows/hubber-contribution-help.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- id: membership_check
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3
diff --git a/.github/workflows/index-autocomplete-search.yml b/.github/workflows/index-autocomplete-search.yml
index 92816907dd78..ac53708955aa 100644
--- a/.github/workflows/index-autocomplete-search.yml
+++ b/.github/workflows/index-autocomplete-search.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
@@ -39,7 +39,7 @@ jobs:
- uses: ./.github/actions/setup-elasticsearch
if: ${{ github.event_name == 'pull_request' }}
- - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
token: ${{ steps.app-token.outputs.token }}
repository: github/docs-internal-data
diff --git a/.github/workflows/index-general-search-pr.yml b/.github/workflows/index-general-search-pr.yml
index 55ab5d56bb20..34e5647092f4 100644
--- a/.github/workflows/index-general-search-pr.yml
+++ b/.github/workflows/index-general-search-pr.yml
@@ -37,7 +37,7 @@ jobs:
if: github.repository == 'github/docs-internal'
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
@@ -49,7 +49,7 @@ jobs:
repositories: docs-internal-data
- name: Clone docs-internal-data
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: github/docs-internal-data
# This works because user `docs-bot` has read access to that private repo.
diff --git a/.github/workflows/index-general-search.yml b/.github/workflows/index-general-search.yml
index c1e66d85d4df..235df429b114 100644
--- a/.github/workflows/index-general-search.yml
+++ b/.github/workflows/index-general-search.yml
@@ -102,7 +102,7 @@ jobs:
- name: Check out repo
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
@@ -134,7 +134,7 @@ jobs:
language: ${{ fromJSON(needs.figureOutMatrix.outputs.matrix) }}
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
@@ -145,7 +145,7 @@ jobs:
repositories: docs-internal-data,docs-internal.es-es,docs-internal.ja-jp,docs-internal.pt-br,docs-internal.zh-cn,docs-internal.ru-ru,docs-internal.fr-fr,docs-internal.ko-kr,docs-internal.de-de,docs-engineering
- name: Clone docs-internal-data
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: github/docs-internal-data
# This works because user `docs-bot` has read access to that private repo.
@@ -275,7 +275,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/keep-caches-warm.yml b/.github/workflows/keep-caches-warm.yml
index be8f82dfc02b..54971c3a6e60 100644
--- a/.github/workflows/keep-caches-warm.yml
+++ b/.github/workflows/keep-caches-warm.yml
@@ -29,7 +29,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
- uses: ./.github/actions/cache-nextjs
diff --git a/.github/workflows/line-endings.yml b/.github/workflows/line-endings.yml
index 5ef81767bd12..dc52c09925f9 100644
--- a/.github/workflows/line-endings.yml
+++ b/.github/workflows/line-endings.yml
@@ -29,7 +29,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Check line endings
# Re-stage every file through the `.gitattributes` filters and fail if any
diff --git a/.github/workflows/link-check-external.yml b/.github/workflows/link-check-external.yml
index a8440699ae87..4b86ef5eb2cf 100644
--- a/.github/workflows/link-check-external.yml
+++ b/.github/workflows/link-check-external.yml
@@ -20,7 +20,7 @@ jobs:
timeout-minutes: 180 # 3 hours for external checks
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/link-check-github-github.yml b/.github/workflows/link-check-github-github.yml
index b48532edd83e..7dc07133761f 100644
--- a/.github/workflows/link-check-github-github.yml
+++ b/.github/workflows/link-check-github-github.yml
@@ -22,7 +22,7 @@ jobs:
REPORT_REPOSITORY: github/docs-content
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# To prevent issues with cloning early access content later
persist-credentials: 'false'
diff --git a/.github/workflows/link-check-internal.yml b/.github/workflows/link-check-internal.yml
index 1d8a394e6bae..7be5c087eaa1 100644
--- a/.github/workflows/link-check-internal.yml
+++ b/.github/workflows/link-check-internal.yml
@@ -37,7 +37,7 @@ jobs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
@@ -87,7 +87,7 @@ jobs:
ELASTICSEARCH_URL: ''
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
@@ -221,7 +221,7 @@ jobs:
issues: write
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/link-check-on-pr.yml b/.github/workflows/link-check-on-pr.yml
index 6d77c5627e6a..aadb81733bd6 100644
--- a/.github/workflows/link-check-on-pr.yml
+++ b/.github/workflows/link-check-on-pr.yml
@@ -27,7 +27,7 @@ jobs:
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Fetch 2 commits so tj-actions/changed-files can diff without extra API calls
fetch-depth: 2
diff --git a/.github/workflows/lint-code.yml b/.github/workflows/lint-code.yml
index e64b584d4e66..3600a02cbeb3 100644
--- a/.github/workflows/lint-code.yml
+++ b/.github/workflows/lint-code.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/lint-entire-content-data-markdown.yml b/.github/workflows/lint-entire-content-data-markdown.yml
index 86e308e0ecdf..10d31c5f4430 100644
--- a/.github/workflows/lint-entire-content-data-markdown.yml
+++ b/.github/workflows/lint-entire-content-data-markdown.yml
@@ -32,7 +32,7 @@ jobs:
run: gh --version
- name: Check out repo's default branch
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up Node and dependencies
uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/local-dev.yml b/.github/workflows/local-dev.yml
index d6506a713195..e75217962e0a 100644
--- a/.github/workflows/local-dev.yml
+++ b/.github/workflows/local-dev.yml
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/moda-allowed-ips.yml b/.github/workflows/moda-allowed-ips.yml
index 796f5cfbbc26..fc1675a882e7 100644
--- a/.github/workflows/moda-allowed-ips.yml
+++ b/.github/workflows/moda-allowed-ips.yml
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out the repository
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Update list of allowed IPs
run: |
echo "Getting a list of Fastly IP addresses...."
diff --git a/.github/workflows/move-content.yml b/.github/workflows/move-content.yml
index 9e85604d7600..bfd9147230ab 100644
--- a/.github/workflows/move-content.yml
+++ b/.github/workflows/move-content.yml
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/move-ready-to-merge-pr.yaml b/.github/workflows/move-ready-to-merge-pr.yaml
index ffb43d09ffeb..97d03d17b14b 100644
--- a/.github/workflows/move-ready-to-merge-pr.yaml
+++ b/.github/workflows/move-ready-to-merge-pr.yaml
@@ -40,7 +40,7 @@ jobs:
value: Triage
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/move-reopened-issues-to-triage.yaml b/.github/workflows/move-reopened-issues-to-triage.yaml
index 6c7c990d3ac0..233674b2b297 100644
--- a/.github/workflows/move-reopened-issues-to-triage.yaml
+++ b/.github/workflows/move-reopened-issues-to-triage.yaml
@@ -45,7 +45,7 @@ jobs:
- name: Check out repo
if: ${{ failure() }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() }}
with:
diff --git a/.github/workflows/needs-sme-stale-check.yaml b/.github/workflows/needs-sme-stale-check.yaml
index 150b3d54c487..facfbee4920e 100644
--- a/.github/workflows/needs-sme-stale-check.yaml
+++ b/.github/workflows/needs-sme-stale-check.yaml
@@ -35,7 +35,7 @@ jobs:
- name: Check out repo
if: ${{ failure() }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() }}
with:
diff --git a/.github/workflows/needs-sme-workflow.yml b/.github/workflows/needs-sme-workflow.yml
index e136add25d8a..f8e6fb7d9ba3 100644
--- a/.github/workflows/needs-sme-workflow.yml
+++ b/.github/workflows/needs-sme-workflow.yml
@@ -22,7 +22,7 @@ jobs:
issues: write
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9
with:
@@ -42,7 +42,7 @@ jobs:
pull-requests: write
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9
with:
diff --git a/.github/workflows/no-response.yaml b/.github/workflows/no-response.yaml
index 8eb5ef6835c3..3aa6655d60a6 100644
--- a/.github/workflows/no-response.yaml
+++ b/.github/workflows/no-response.yaml
@@ -57,7 +57,7 @@ jobs:
- name: Check out repo
if: ${{ failure() }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() }}
with:
diff --git a/.github/workflows/notify-about-deployment.yml b/.github/workflows/notify-about-deployment.yml
index d635559b34a9..5e7caf05c919 100644
--- a/.github/workflows/notify-about-deployment.yml
+++ b/.github/workflows/notify-about-deployment.yml
@@ -29,7 +29,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/notify-release-pms.yml b/.github/workflows/notify-release-pms.yml
index 24dc618b76a4..2e6fa9972363 100644
--- a/.github/workflows/notify-release-pms.yml
+++ b/.github/workflows/notify-release-pms.yml
@@ -44,7 +44,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/orphaned-features-check.yml b/.github/workflows/orphaned-features-check.yml
index 9069eb9db6bf..12c3c739f1cb 100644
--- a/.github/workflows/orphaned-features-check.yml
+++ b/.github/workflows/orphaned-features-check.yml
@@ -35,7 +35,7 @@ jobs:
repositories: docs-internal,docs-internal.es-es,docs-internal.ja-jp,docs-internal.pt-br,docs-internal.zh-cn,docs-internal.ru-ru,docs-internal.fr-fr,docs-internal.ko-kr,docs-internal.de-de
- name: Checkout English repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Using a PAT is necessary so that the new commit will trigger the
# CI in the PR. (Events from GITHUB_TOKEN don't trigger new workflows.)
diff --git a/.github/workflows/orphaned-files-check.yml b/.github/workflows/orphaned-files-check.yml
index cfcfa2928fbb..b2cf7ddeceaf 100644
--- a/.github/workflows/orphaned-files-check.yml
+++ b/.github/workflows/orphaned-files-check.yml
@@ -40,7 +40,7 @@ jobs:
repositories: docs-internal,docs-internal.es-es,docs-internal.ja-jp,docs-internal.pt-br,docs-internal.zh-cn,docs-internal.ru-ru,docs-internal.fr-fr,docs-internal.ko-kr,docs-internal.de-de
- name: Checkout English repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Using a PAT is necessary so that the new commit will trigger the
# CI in the PR. (Events from GITHUB_TOKEN don't trigger new workflows.)
diff --git a/.github/workflows/os-ready-for-review.yml b/.github/workflows/os-ready-for-review.yml
index 9fe64913e680..cd3de5616061 100644
--- a/.github/workflows/os-ready-for-review.yml
+++ b/.github/workflows/os-ready-for-review.yml
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo content
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Check if this run was triggered by a member of the docs team
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3
diff --git a/.github/workflows/package-lock-lint.yml b/.github/workflows/package-lock-lint.yml
index dcc3ffa41f9c..da7f7cae419e 100644
--- a/.github/workflows/package-lock-lint.yml
+++ b/.github/workflows/package-lock-lint.yml
@@ -25,7 +25,7 @@ jobs:
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Setup Node.js
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
diff --git a/.github/workflows/purge-fastly.yml b/.github/workflows/purge-fastly.yml
index 660a26098fb9..84256702d1df 100644
--- a/.github/workflows/purge-fastly.yml
+++ b/.github/workflows/purge-fastly.yml
@@ -56,7 +56,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/readability.yml b/.github/workflows/readability.yml
index 505e5ecaa62c..0c22193d0f6b 100644
--- a/.github/workflows/readability.yml
+++ b/.github/workflows/readability.yml
@@ -28,7 +28,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Fetch 2 commits so tj-actions/changed-files can diff without extra API calls
fetch-depth: 2
diff --git a/.github/workflows/ready-for-doc-review.yml b/.github/workflows/ready-for-doc-review.yml
index 534402a63740..3b465702ba15 100644
--- a/.github/workflows/ready-for-doc-review.yml
+++ b/.github/workflows/ready-for-doc-review.yml
@@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo content
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: github/docs-internal
token: ${{ secrets.DOCS_BOT_PAT_BASE }}
diff --git a/.github/workflows/repo-sync.yml b/.github/workflows/repo-sync.yml
index f1c4d100cb0d..685c92415a70 100644
--- a/.github/workflows/repo-sync.yml
+++ b/.github/workflows/repo-sync.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Sync repo to branch
diff --git a/.github/workflows/review-comment.yml b/.github/workflows/review-comment.yml
index 6182eb3816af..e0306a695928 100644
--- a/.github/workflows/review-comment.yml
+++ b/.github/workflows/review-comment.yml
@@ -38,7 +38,7 @@ jobs:
PR_NUMBER: ${{ github.event.pull_request.number }}
steps:
- name: check out repo content
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
- name: Set APP_URL
diff --git a/.github/workflows/reviewers-content-systems.yml b/.github/workflows/reviewers-content-systems.yml
index 03c585c12413..64e10a2f02ce 100644
--- a/.github/workflows/reviewers-content-systems.yml
+++ b/.github/workflows/reviewers-content-systems.yml
@@ -35,7 +35,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
diff --git a/.github/workflows/reviewers-dependabot.yml b/.github/workflows/reviewers-dependabot.yml
index 542b9a5f7663..a28264b6a5fe 100644
--- a/.github/workflows/reviewers-dependabot.yml
+++ b/.github/workflows/reviewers-dependabot.yml
@@ -36,7 +36,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
diff --git a/.github/workflows/reviewers-docs-engineering.yml b/.github/workflows/reviewers-docs-engineering.yml
index 98f233cf010e..89e47ab00b1b 100644
--- a/.github/workflows/reviewers-docs-engineering.yml
+++ b/.github/workflows/reviewers-docs-engineering.yml
@@ -48,7 +48,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
diff --git a/.github/workflows/reviewers-legal.yml b/.github/workflows/reviewers-legal.yml
index b104f193c1b2..fc3a1702c505 100644
--- a/.github/workflows/reviewers-legal.yml
+++ b/.github/workflows/reviewers-legal.yml
@@ -32,7 +32,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Fetch 2 commits so tj-actions/changed-files can diff without extra API calls
fetch-depth: 2
diff --git a/.github/workflows/site-policy-sync.yml b/.github/workflows/site-policy-sync.yml
index 8598691c332b..1d6901cda8f2 100644
--- a/.github/workflows/site-policy-sync.yml
+++ b/.github/workflows/site-policy-sync.yml
@@ -27,7 +27,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout docs-internal
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
@@ -39,7 +39,7 @@ jobs:
repositories: site-policy
- name: checkout public site-policy
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: github/site-policy
token: ${{ steps.app-token.outputs.token }}
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 03636e6f4163..c2127a4afdd6 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -38,7 +38,7 @@ jobs:
- name: Check out repo
if: ${{ failure() }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() }}
with:
diff --git a/.github/workflows/sync-audit-logs.yml b/.github/workflows/sync-audit-logs.yml
index 3dc3a8de920b..01bd38d86ef6 100644
--- a/.github/workflows/sync-audit-logs.yml
+++ b/.github/workflows/sync-audit-logs.yml
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/sync-codeql-cli.yml b/.github/workflows/sync-codeql-cli.yml
index 0aecdcf207bf..b19fc0821884 100644
--- a/.github/workflows/sync-codeql-cli.yml
+++ b/.github/workflows/sync-codeql-cli.yml
@@ -30,7 +30,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
@@ -42,7 +42,7 @@ jobs:
# Check out a nested repository inside of previous checkout
- name: Checkout semmle-code repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# By default, only the most recent commit of the `main` branch
# will be checked out
diff --git a/.github/workflows/sync-graphql.yml b/.github/workflows/sync-graphql.yml
index b4521febafe6..a82f51acb37a 100644
--- a/.github/workflows/sync-graphql.yml
+++ b/.github/workflows/sync-graphql.yml
@@ -25,7 +25,7 @@ jobs:
ignored-types: ${{ steps.sync.outputs.ignored-types }}
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
@@ -97,7 +97,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/sync-llms-txt.yml b/.github/workflows/sync-llms-txt.yml
index 36ca5d06d8bf..0c9501cb648b 100644
--- a/.github/workflows/sync-llms-txt.yml
+++ b/.github/workflows/sync-llms-txt.yml
@@ -35,7 +35,7 @@ jobs:
BRANCH: sync-llms-txt
steps:
- name: Checkout docs-internal
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Generate GitHub App token
@@ -105,8 +105,17 @@ jobs:
git config user.name "docs-bot"
git config user.email "77750099+docs-bot@users.noreply.github.com"
git add data/llms-txt/docs.md
- git commit -m "Update data/llms-txt/docs.md from popularity data"
- git push "https://x-access-token:${GH_TOKEN}@github.com/github/docs-internal.git" "$BRANCH"
+ # diff_docs compares against main, but the sync branch may already
+ # exist with this exact content (open PR from a prior run). In that
+ # case there is nothing new to stage, and `git commit` would exit 1
+ # and fail the whole workflow. Skip the commit and push when the
+ # branch is already up to date.
+ if git diff --cached --quiet; then
+ echo "Sync branch already has the latest generated docs.md; nothing to commit."
+ else
+ git commit -m "Update data/llms-txt/docs.md from popularity data"
+ git push "https://x-access-token:${GH_TOKEN}@github.com/github/docs-internal.git" "$BRANCH"
+ fi
- name: Create or update docs-internal PR
if: steps.diff_docs.outputs.changed == 'true'
diff --git a/.github/workflows/sync-openapi.yml b/.github/workflows/sync-openapi.yml
index a8e596864ee3..61a46d6bf060 100644
--- a/.github/workflows/sync-openapi.yml
+++ b/.github/workflows/sync-openapi.yml
@@ -30,11 +30,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository code
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
# Check out a nested repository inside of previous checkout
- name: Checkout rest-api-description repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# By default, only the most recent commit of the `main` branch
# will be checked out
@@ -42,7 +42,7 @@ jobs:
path: rest-api-description
ref: ${{ inputs.SOURCE_BRANCH }}
- - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# By default, only the most recent commit of the `main` branch
# will be checked out
diff --git a/.github/workflows/sync-sdk-docs.yml b/.github/workflows/sync-sdk-docs.yml
index 225ed5687897..d94684809603 100644
--- a/.github/workflows/sync-sdk-docs.yml
+++ b/.github/workflows/sync-sdk-docs.yml
@@ -47,7 +47,7 @@ jobs:
steps:
- name: Checkout docs-internal
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Fetch SDK docs from copilot-sdk
env:
diff --git a/.github/workflows/sync-secret-scanning.yml b/.github/workflows/sync-secret-scanning.yml
index 22ac69b54d40..099e99b75a36 100644
--- a/.github/workflows/sync-secret-scanning.yml
+++ b/.github/workflows/sync-secret-scanning.yml
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
diff --git a/.github/workflows/test-changed-content.yml b/.github/workflows/test-changed-content.yml
index 3b1f05f8de58..ef25f3f94677 100644
--- a/.github/workflows/test-changed-content.yml
+++ b/.github/workflows/test-changed-content.yml
@@ -27,7 +27,7 @@ jobs:
# Each of these ifs needs to be repeated at each step to make sure the required check still runs
# Even if if doesn't do anything
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Fetch 2 commits so tj-actions/changed-files can diff without extra API calls
fetch-depth: 2
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9fa3b501db76..13977e4c30c0 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -88,7 +88,7 @@ jobs:
# Each of these ifs needs to be repeated at each step to make sure the required check still runs
# Even if if doesn't do anything
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
# Fetch 2 commits so tj-actions/changed-files can diff without extra API calls
fetch-depth: 2
diff --git a/.github/workflows/triage-issue-comments.yml b/.github/workflows/triage-issue-comments.yml
index fa2efee04bc2..fb83074ebb81 100644
--- a/.github/workflows/triage-issue-comments.yml
+++ b/.github/workflows/triage-issue-comments.yml
@@ -43,7 +43,7 @@ jobs:
}
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/triage-issues.yml b/.github/workflows/triage-issues.yml
index e48f13d7e7a4..55b333e5413c 100644
--- a/.github/workflows/triage-issues.yml
+++ b/.github/workflows/triage-issues.yml
@@ -21,7 +21,7 @@ jobs:
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/triage-pull-requests.yml b/.github/workflows/triage-pull-requests.yml
index 002da127dd66..39419711d2c5 100644
--- a/.github/workflows/triage-pull-requests.yml
+++ b/.github/workflows/triage-pull-requests.yml
@@ -23,7 +23,7 @@ jobs:
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/triage-stale-check.yml b/.github/workflows/triage-stale-check.yml
index 9b20ce683aa7..ffb3ef481181 100644
--- a/.github/workflows/triage-stale-check.yml
+++ b/.github/workflows/triage-stale-check.yml
@@ -45,7 +45,7 @@ jobs:
- name: Check out repo
if: ${{ failure() }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() }}
with:
@@ -90,7 +90,7 @@ jobs:
- name: Check out repo
if: ${{ failure() }}
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/slack-alert
if: ${{ failure() }}
with:
diff --git a/.github/workflows/triage-unallowed-contributions.yml b/.github/workflows/triage-unallowed-contributions.yml
index f15768af2d65..2c7b354a31e2 100644
--- a/.github/workflows/triage-unallowed-contributions.yml
+++ b/.github/workflows/triage-unallowed-contributions.yml
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Get files changed
uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
diff --git a/.github/workflows/validate-asset-images.yml b/.github/workflows/validate-asset-images.yml
index 23effc21b63d..e29eb9eec307 100644
--- a/.github/workflows/validate-asset-images.yml
+++ b/.github/workflows/validate-asset-images.yml
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: ./.github/actions/node-npm-setup
diff --git a/.github/workflows/validate-github-github-docs-urls.yml b/.github/workflows/validate-github-github-docs-urls.yml
index d92f775d82f8..aea43103492b 100644
--- a/.github/workflows/validate-github-github-docs-urls.yml
+++ b/.github/workflows/validate-github-github-docs-urls.yml
@@ -34,7 +34,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo's default branch
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
@@ -46,7 +46,7 @@ jobs:
- uses: ./.github/actions/node-npm-setup
- - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
token: ${{ steps.app-token.outputs.token }}
repository: github/github
diff --git a/.github/workflows/validate-openapi-check.yml b/.github/workflows/validate-openapi-check.yml
index d258207e2351..b602126df401 100644
--- a/.github/workflows/validate-openapi-check.yml
+++ b/.github/workflows/validate-openapi-check.yml
@@ -28,7 +28,7 @@ jobs:
if: github.repository == 'github/docs-internal'
steps:
- name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml
index 63a7e6ffe6f8..2b13f0935714 100644
--- a/.github/workflows/zizmor.yml
+++ b/.github/workflows/zizmor.yml
@@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
diff --git a/Dockerfile b/Dockerfile
index a593f03633b4..efe89c333620 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -10,7 +10,7 @@
# ---------------------------------------------------------------
# To update the sha:
# https://github.com/github/gh-base-image/pkgs/container/gh-base-image%2Fgh-base-noble
-FROM ghcr.io/github/gh-base-image/gh-base-noble:20260630-205522-g4a33dc6bb@sha256:2b8edd7da1718e2e9c25b98fd31dae58e57e756ef19842eac212255765cf4ada AS base
+FROM ghcr.io/github/gh-base-image/gh-base-noble:20260706-152702-gdb3226338@sha256:badfd5ddfbea7896bb84dbfc20ae326234fa1cc580bb723458158e8a59cf17ec AS base
# Install curl for Node install and determining the early access branch
# Install git for cloning docs-early-access & translations repos
diff --git a/assets/images/README.md b/assets/images/README.md
index 9756be1695c9..73eafdcc09a2 100644
--- a/assets/images/README.md
+++ b/assets/images/README.md
@@ -2,4 +2,4 @@
The `/assets/images` directory holds all the site's images.
-See [imaging and versioning](https://github.com/github/docs/blob/main/contributing/images-and-versioning.md) from the contributing docs for more information.
+See [Creating screenshots](https://docs.github.com/en/contributing/writing-for-github-docs/creating-screenshots) from the contributing docs for more information.
diff --git a/content/actions/reference/runners/self-hosted-runners.md b/content/actions/reference/runners/self-hosted-runners.md
index 4cf1c86960ae..4a46f0c179d8 100644
--- a/content/actions/reference/runners/self-hosted-runners.md
+++ b/content/actions/reference/runners/self-hosted-runners.md
@@ -195,7 +195,7 @@ Self-hosted runners connect to {% ifversion fpt or ghec %}{% data variables.prod
In addition, your workflow may require access to other network resources.
-If you use an IP address allow list for your {% data variables.product.prodname_dotcom %} organization or enterprise account, you must add your self-hosted runner's IP address to the allow list. See [Managing allowed IP addresses for your organization](/{% ifversion fpt %}enterprise-cloud@latest/{% endif %}/organizations/keeping-your-organization-secure/managing-allowed-ip-addresses-for-your-organization#using-github-actions-with-an-ip-allow-list) or [Enforcing policies for security settings in your enterprise](/{% ifversion fpt %}enterprise-cloud@latest/{% endif %}admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise){% ifversion fpt %} in the {% data variables.product.prodname_ghe_cloud %} documentation.{% else %}.{% endif %}
+If you use an IP address allow list for your {% data variables.product.prodname_dotcom %} organization or enterprise account, you must add your self-hosted runner's IP address to the allow list. See [Managing allowed IP addresses for your organization](/{% ifversion fpt %}enterprise-cloud@latest/{% endif %}organizations/keeping-your-organization-secure/managing-allowed-ip-addresses-for-your-organization#using-github-actions-with-an-ip-allow-list) or [AUTOTITLE](/{% ifversion fpt %}enterprise-cloud@latest/{% endif %}admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise){% ifversion fpt %} in the {% data variables.product.prodname_ghe_cloud %} documentation.{% else %}.{% endif %}
{% else %}
diff --git a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md
index 1b4f083e8feb..f331c325092f 100644
--- a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md
+++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md
@@ -407,7 +407,7 @@ If you use a monorepo, the `.npmrc` file should live in the project's root direc
You can configure {% data variables.product.prodname_dependabot %} to send all registry requests through a specified base URL. In order for {% data variables.product.prodname_dependabot %} to access a public dependency, the registry must either have a cloned copy of the dependency with the requested version, or allow traffic to fetch from a public registry if the dependency is not available.
-If there is no global registry defined in a `.npmrc` file, you can set `replaces-base` to `true` in the `dependabot.yml` file. For more information, see "`replaces-base`" in [Top-level `registries` key](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/dependabot-options-reference#top-level-registries-key).
+If there is no global registry defined in a `.npmrc` file, you can set `replaces-base` to `true` in the `dependabot.yml` file. For more information, see "`replaces-base`" in [Top-level `registries` key](/code-security/reference/supply-chain-security/dependabot-options-reference#top-level-registries-key).
#### Notes
@@ -575,7 +575,7 @@ You can either specify the private registry configuration in the `dependabot.yml
##### Defining the private registry configuration in the `dependabot.yml` file
-You can define the private registry configuration in your `dependabot.yml` file. For more information, see [Top-level `registries` key](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/dependabot-options-reference#top-level-registries-key).
+You can define the private registry configuration in your `dependabot.yml` file. For more information, see [Top-level `registries` key](/code-security/reference/supply-chain-security/dependabot-options-reference#top-level-registries-key).
To ensure that the private registry is listed as the dependency source in the project's `yarn.lock` file, you need to run `yarn install` on a machine with private registry access. Yarn should update the resolved field to include the private registry URL.
@@ -612,7 +612,7 @@ As with Yarn Classic, you can either specify the private registry configuration
##### Defining the private registry configuration in the `dependabot.yml` file
-You can define the private registry configuration in your `dependabot.yml` file. For more information, see [Top-level `registries` key](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/dependabot-options-reference#top-level-registries-key).
+You can define the private registry configuration in your `dependabot.yml` file. For more information, see [Top-level `registries` key](/code-security/reference/supply-chain-security/dependabot-options-reference#top-level-registries-key).
To ensure the private registry is listed as the dependency source in the project's `yarn.lock` file, run `yarn install` on a machine with private registry access. Yarn should update the resolved field to include the private registry URL.
diff --git a/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md b/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md
index c0a9c80fe2a7..04b15ca4bded 100644
--- a/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md
+++ b/content/contributing/setting-up-your-environment-to-work-on-github-docs/creating-a-local-environment.md
@@ -19,7 +19,7 @@ Today it's a dynamic Node.js webserver powered by Express, using middleware to s
The tooling for this site has changed over the years, but many of the tried-and-true authoring conventions of the original Jekyll site have been preserved.
* Content is written in Markdown files, which live in the `content` directory.
-
+
* Files in the `data` directory are available to templates via the {% raw %}`{% data %}`{% endraw %} tag.
* Markdown files can contain [frontmatter](https://jekyllrb.com/docs/front-matter).
* The [`redirect_from`](https://github.com/jekyll/jekyll-redirect-from) Jekyll plugin behavior is supported.
diff --git a/content/copilot/concepts/agents/copilot-cli/about-cli-extensions.md b/content/copilot/concepts/agents/copilot-cli/about-cli-extensions.md
new file mode 100644
index 000000000000..c14b48911591
--- /dev/null
+++ b/content/copilot/concepts/agents/copilot-cli/about-cli-extensions.md
@@ -0,0 +1,99 @@
+---
+title: About extensions for {% data variables.copilot.copilot_cli %}
+shortTitle: CLI extensions
+allowTitleToDifferFromFilename: true
+intro: 'Extensions let you add your own tools and slash commands to {% data variables.copilot.copilot_cli %}, using only the SDK that ships with the CLI.'
+product: '{% data reusables.gated-features.copilot-cli %}'
+versions:
+ feature: copilot
+contentType: concepts
+category:
+ - Learn about Copilot # Copilot discovery page
+ - Learn about Copilot CLI # Copilot CLI bespoke page
+docsTeamMetrics:
+ - copilot-cli
+---
+
+{% data reusables.copilot.copilot-cli.cli-extensions-experimental %}
+
+An extension lets you add your own capabilities to {% data variables.copilot.copilot_cli_short %}. Each extension is a small Node.js module that runs as a separate process alongside your interactive session and connects back to it. Through that connection an extension can add:
+
+* **Tools** that {% data variables.product.prodname_copilot_short %} can call while it works on your behalf.
+* **Slash commands** that you run yourself.
+
+Because an extension runs real code on your machine, you can add capabilities the built-in tools don't have. For example, an extension can watch what happens in a session and keep a running total across tool calls, which a one-off shell command can't do.
+
+This article explains how extensions work and how {% data variables.copilot.copilot_cli_short %} handles them. For a hands-on guide to building your own extensions, see [AUTOTITLE](/copilot/tutorials/create-an-extension).
+
+> [!WARNING]
+> Extensions execute on your computer with your privileges. Only load extension code that you trust, in the same way you would only run any other script you didn't write yourself.
+
+## How extensions are discovered
+
+When {% data variables.copilot.copilot_cli_short %} starts, it looks for extensions in several locations. Each extension lives in its own subdirectory, and that subdirectory must contain an entry file named `extension.mjs`, `extension.cjs`, or `extension.js`. These are all JavaScript files: the {% data variables.copilot.copilot_cli_short %} runs the entry file directly with Node.js, so an extension must be written in JavaScript—TypeScript and other languages are currently not supported.
+
+The name of the subdirectory becomes the name of the extension.
+
+| Source | Location | Availability |
+| --- | --- | --- |
+| **Project** | `.github/extensions/NAME/` in the current repository | Available to anyone working in that repository. |
+| **User** | `~/.copilot/extensions/NAME/` | Available in all your CLI sessions, in every directory. |
+| **Plugin** | An installed plugin | Available wherever the plugin is enabled. |
+
+## Choosing where an extension lives
+
+Where you put the extension directory determines who can use it:
+
+* Put it in **`.github/extensions/`** in a repository when the extension is specific to that project and you want to share it with everyone who works there.
+* Put it in **`~/.copilot/extensions/`** when you want the extension available in all of your own sessions, regardless of which directory you start the CLI in.
+
+The two locations follow exactly the same structure—a named subdirectory containing an `extension.mjs` file—so you can move an extension from one to the other simply by relocating its folder.
+
+## Enabling extensions
+
+Extensions are currently an experimental feature, so you need to turn on experimental features. You can do this by doing either of the following:
+
+* Start the CLI with the `--experimental` flag.
+* Run the `/experimental on` slash command inside an interactive session.
+
+## Changing how the CLI handles extensions
+
+You can limit {% data variables.product.prodname_copilot_short %}'s access to extensions, or turn them off entirely, by using the `/extensions mode` command. When you use this command you get three options:
+
+* **Load & Augment** (the default)—the CLI runs your extensions, _and_ {% data variables.product.prodname_copilot_short %} can manage them.
+* **Load Only**—the CLI runs your extensions, but {% data variables.product.prodname_copilot_short %} cannot manage them.
+* **Disabled**—extensions are turned off entirely in the current session and will remain disabled in future sessions until you switch to one of the other two settings. Other current sessions are not affected.
+
+Any change you make takes effect immediately in the current session:
+
+* Switching **to Disabled** stops any extensions that are currently running. Their processes are shut down and their tools are no longer available.
+* Switching **from Disabled** to either of the other settings starts your extensions.
+* Switching between **Load Only** and **Load & Augment** just changes whether {% data variables.product.prodname_copilot_short %} can manage your extensions.
+
+### What "managing extensions" means
+
+In **Load & Augment** mode, {% data variables.product.prodname_copilot_short %} is given a small set of extra tools that let it work on the extension system directly, as part of carrying out your requests. Using these tools, {% data variables.product.prodname_copilot_short %} can:
+
+* **List** the extensions it has discovered and see their status.
+* **Inspect** an extension, including a tail of its log file, to help diagnose one that has failed or is misbehaving.
+* **Scaffold** a new extension—generate a starter `extension.mjs` file for you to build on.
+* **Reload** extensions, so that code it (or you) has just written takes effect without restarting the session.
+
+This is what makes it possible for you to ask {% data variables.product.prodname_copilot_short %} to build an extension for you. {% data variables.product.prodname_copilot_short %} can create the file, write the code, and reload it, all without leaving the session.
+
+Choose **Load Only** when you want to keep a known, trusted set of extensions running but don't want {% data variables.product.prodname_copilot_short %} creating, reloading, or otherwise changing extension code—which runs on your machine—as a side effect of its work. Your existing extensions still run, and {% data variables.product.prodname_copilot_short %} can still call the tools they provide; it simply can't manage the extensions themselves.
+
+## Extensions compared with plugins
+
+Both extensions and plugins add functionality to {% data variables.copilot.copilot_cli_short %}, but they serve different purposes:
+
+* An **extension** is a single JavaScript module that you write to add tools and slash commands, backed by code that runs in your session.
+* A **plugin** is an installable package that bundles reusable components—such as agents, skills, hooks, and integrations—and can be distributed through a marketplace.
+
+For more information about plugins, see [AUTOTITLE](/copilot/concepts/agents/copilot-cli/about-cli-plugins).
+
+## Further reading
+
+* [AUTOTITLE](/copilot/tutorials/create-an-extension)
+* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#slash-commands-in-the-interactive-interface)
+* [AUTOTITLE](/copilot/how-tos/copilot-cli)
diff --git a/content/copilot/concepts/agents/copilot-cli/index.md b/content/copilot/concepts/agents/copilot-cli/index.md
index e9eb3de15373..28da0d19082d 100644
--- a/content/copilot/concepts/agents/copilot-cli/index.md
+++ b/content/copilot/concepts/agents/copilot-cli/index.md
@@ -10,6 +10,7 @@ children:
- /comparing-cli-features
- /copilot-cli-in-github-actions
- /cancel-and-roll-back
+ - /context-management
- /about-remote-control
- /about-custom-agents
- /autopilot
@@ -18,7 +19,7 @@ children:
- /chronicle
- /rubber-duck
- /lsp-servers
- - /context-management
+ - /about-cli-extensions
- /tool-search
contentType: concepts
docsTeamMetrics:
diff --git a/content/copilot/concepts/models/auto-model-selection.md b/content/copilot/concepts/models/auto-model-selection.md
index cfdb70f72230..8b49b184b1aa 100644
--- a/content/copilot/concepts/models/auto-model-selection.md
+++ b/content/copilot/concepts/models/auto-model-selection.md
@@ -19,7 +19,7 @@ More than just a model picker, {% data variables.copilot.copilot_auto_model_sele
### Auto with task optimization
-> [!NOTE] {% data variables.copilot.copilot_auto_model_selection_short_cap_a %} with task optimization is generally available in {% data variables.copilot.copilot_chat_short %} on the {% data variables.product.github %} website, in {% data variables.product.prodname_vscode_shortname %}, and in {% data variables.copilot.copilot_cli_short %}.
+> [!NOTE] {% data variables.copilot.copilot_auto_model_selection_short_cap_a %} with task optimization is generally available in {% data variables.copilot.copilot_chat_short %} on the {% data variables.product.github %} website, in {% data variables.product.prodname_vscode_shortname %}, in {% data variables.copilot.copilot_cli_short %}, and in {% data variables.copilot.github_copilot_app %}.
{% data variables.copilot.copilot_auto_model_selection_short_cap_a %} with task optimization combines two systems to provide high quality results and better reliability. One system tracks real-time system health and availability, while the other evaluates task complexity. Putting these together, {% data variables.copilot.copilot_auto_model_selection_short %} routes the task to the optimal model.
@@ -60,22 +60,23 @@ When you select **Auto**, {% data variables.copilot.copilot_auto_model_selection
## {% data variables.copilot.copilot_auto_model_selection_short_cap_a %} in {% data variables.product.prodname_copilot_short %}
-{% data variables.copilot.copilot_auto_model_selection_short_cap_a %}, optimized for model reliability and availability, is available in these {% data variables.product.prodname_copilot_short %} products:
+{% data variables.copilot.copilot_auto_model_selection_short_cap_a %}, with task optimization, is generally available in these {% data variables.product.prodname_copilot_short %} products:
* {% data variables.copilot.copilot_chat_short %}, on the {% data variables.product.github %} website and supported IDEs
* {% data variables.copilot.copilot_cli_short %}
* {% data variables.copilot.copilot_cloud_agent %}
+* {% data variables.copilot.github_copilot_app %}
> [!TIP]
> You can see which model was used for each {% data variables.product.prodname_copilot_short %} response.
> * In **{% data variables.copilot.copilot_chat_short %}**, hover over the response.
> * In **{% data variables.copilot.copilot_cli_short %}**, the model used for each response displays in the terminal.
> * In **{% data variables.copilot.copilot_cloud_agent %}**, the model used for each response displays at the end of the response.
+> * In **{% data variables.copilot.github_copilot_app %}**, the model used for each response is shown by the model picker next to **Auto**.
-### {% data variables.copilot.copilot_chat_short %} on {% data variables.product.github %} and in IDEs
+### {% data variables.copilot.copilot_chat_short %} in IDEs
{% data variables.copilot.copilot_auto_model_selection_short_cap_a %}, with task optimization, is generally available in the following IDEs:
* {% data variables.product.prodname_vscode_shortname %}
- * {% data variables.product.github %} website
{% data variables.copilot.copilot_auto_model_selection_short_cap_a %}, optimized for model reliability and availability, is generally available in the following IDEs:
* JetBrains IDEs
diff --git a/content/copilot/get-started/enterprise-ai-governance.md b/content/copilot/get-started/enterprise-ai-governance.md
index 02eb3cb5f590..807bc089c776 100644
--- a/content/copilot/get-started/enterprise-ai-governance.md
+++ b/content/copilot/get-started/enterprise-ai-governance.md
@@ -26,6 +26,7 @@ journeyTracks:
- href: '/copilot/tutorials/roll-out-at-scale/govern-at-scale/maintain-codebase-standards'
- href: '/copilot/how-tos/administer-copilot/manage-for-enterprise/review-audit-logs'
- href: '/copilot/concepts/preparing-for-new-features-and-models'
+ - href: '/copilot/tutorials/roll-out-at-scale/govern-at-scale/pilot-a-feature-or-model'
- id: 'adopting_agents'
title: 'Adopting agents'
description: 'Roll out agentic features within secure guardrails.'
diff --git a/content/copilot/how-tos/administer-copilot/manage-for-organization/add-copilot-cloud-agent.md b/content/copilot/how-tos/administer-copilot/manage-for-organization/add-copilot-cloud-agent.md
index d21320eca614..493d48c9053d 100644
--- a/content/copilot/how-tos/administer-copilot/manage-for-organization/add-copilot-cloud-agent.md
+++ b/content/copilot/how-tos/administer-copilot/manage-for-organization/add-copilot-cloud-agent.md
@@ -68,4 +68,4 @@ Organization owners can configure the {% data variables.copilot.copilot_cloud_ag
* [AUTOTITLE](/copilot/tutorials/cloud-agent/get-the-best-results)
* [AUTOTITLE](/copilot/how-tos/use-copilot-agents/cloud-agent/customize-the-agent-environment)
- * [Security best practices](/copilot/rolling-out-github-copilot-at-scale/enabling-developers/using-copilot-cloud-agent-in-org#security-best-practices)
+ * [AUTOTITLE](/copilot/concepts/agents/cloud-agent/risks-and-mitigations)
diff --git a/content/copilot/how-tos/copilot-cli/customize-copilot/change-settings.md b/content/copilot/how-tos/copilot-cli/customize-copilot/change-settings.md
new file mode 100644
index 000000000000..0e521e3f2865
--- /dev/null
+++ b/content/copilot/how-tos/copilot-cli/customize-copilot/change-settings.md
@@ -0,0 +1,164 @@
+---
+title: Changing settings with the `/settings` command
+shortTitle: Change settings
+allowTitleToDifferFromFilename: true
+intro: 'View and change your personal settings for {% data variables.copilot.copilot_cli %} with the `/settings` slash command.'
+versions:
+ feature: copilot
+contentType: how-tos
+category:
+ - Configure Copilot # Copilot discovery page
+ - Configure Copilot CLI # Copilot CLI bespoke page
+docsTeamMetrics:
+ - copilot-cli
+---
+
+You can use the `/settings` slash command to view and change your settings from within an interactive CLI session. This command controls user-level settings such as whether {% data variables.copilot.copilot_cli_short %} updates itself automatically, which color palette the interface uses, what's displayed in the footer, and many other options.
+
+Use `/settings` to:
+
+* **Browse and edit settings interactively** — Run `/settings` on its own to open a searchable editor that lists every setting with a description and its current value.
+* **Change a setting with a single command** — Run `/settings KEY VALUE` to change a particular setting without opening the editor.
+* **Check a setting's value** — Run `/settings show KEY` to display the current value of a setting.
+
+You can also use `/config`, which is an alias of `/settings`.
+
+Changes you make with `/settings` or `/config` are written to your personal settings file (by default, `~/.copilot/settings.json`) and persist across sessions.
+
+## Opening the settings editor
+
+To browse and edit settings interactively, enter the slash command with no arguments:
+
+```copilot copy
+/settings
+```
+
+The editor lists every setting you can change, and the setting's current value. As you move up or down through the list, a short description of the highlighted setting is shown at the bottom of the editor. This allows you to browse and edit settings without needing to know their exact names.
+
+For more information about the available settings, see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#user-settings-copilotsettingsjson).
+
+While the editor is open, you can use the following keyboard shortcuts:
+
+
+
+
| Key | +Action | +
|---|---|
| ↑ / ↓ | +Move between settings. | +
| / | +Search and filter the list by a setting's name or description. | +
| Enter | +Toggle a boolean setting, or edit other types of values. | +
| Ctrl+R | +Reset the highlighted setting to its default. | +
| Ctrl+E | +Open settings.json in your configured terminal editor to make advanced changes. |
+
| Esc | +Clear the current search, or close the editor. | +
Type IssueFieldTimelineOption was added
Field color was added to object type IssueFieldTimelineOption
Field name was added to object type IssueFieldTimelineOption
Field options was added to object type IssueFieldAddedEvent
Field newOptions was added to object type IssueFieldChangedEvent
Field previousOptions was added to object type IssueFieldChangedEvent
Field options was added to object type IssueFieldRemovedEvent
Enum value 'LICENSE_COMPLIANCE_SCANNINGwas added to enumRepositoryRuleType'
Input field issueCreationPolicy of type IssueCreationPolicy was added to input object type UpdateRepositoryInput
The selected options for option-backed fields; single-select returns one option and multi-select returns many.
", + "type": "[IssueFieldTimelineOption!]", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption" + }, { "name": "value", "description": "The value of the added field.
", @@ -4828,6 +4835,13 @@ "id": "string", "href": "/graphql/reference/other#scalar-string" }, + { + "name": "newOptions", + "description": "The new options for option-backed fields; single-select returns one option and multi-select returns many.
", + "type": "[IssueFieldTimelineOption!]", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption" + }, { "name": "newValue", "description": "The new value of the field.
", @@ -4842,6 +4856,13 @@ "id": "string", "href": "/graphql/reference/other#scalar-string" }, + { + "name": "previousOptions", + "description": "The previous options for option-backed fields; single-select returns one option and multi-select returns many.
", + "type": "[IssueFieldTimelineOption!]", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption" + }, { "name": "previousValue", "description": "The previous value of the field.
", @@ -5249,6 +5270,13 @@ "type": "IssueFields", "id": "issuefields", "href": "/graphql/reference/issues#union-issuefields" + }, + { + "name": "options", + "description": "The removed options for option-backed fields; single-select returns one option and multi-select returns many.
", + "type": "[IssueFieldTimelineOption!]", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption" } ], "category": "issues" @@ -5582,6 +5610,30 @@ ], "category": "issues" }, + { + "name": "IssueFieldTimelineOption", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption", + "description": "Represents a selected option for a timeline issue field event.
", + "isDeprecated": false, + "fields": [ + { + "name": "color", + "description": "The option color.
", + "type": "String", + "id": "string", + "href": "/graphql/reference/other#scalar-string" + }, + { + "name": "name", + "description": "The option name.
", + "type": "String!", + "id": "string", + "href": "/graphql/reference/other#scalar-string" + } + ], + "category": "issues" + }, { "name": "IssueFieldValueConnection", "id": "issuefieldvalueconnection", diff --git a/src/graphql/data/fpt/schema-other.json b/src/graphql/data/fpt/schema-other.json index ad287af86698..81005b014ab7 100644 --- a/src/graphql/data/fpt/schema-other.json +++ b/src/graphql/data/fpt/schema-other.json @@ -643,6 +643,10 @@ "name": "FILE_PATH_RESTRICTION", "description": "Prevent commits that include changes in specified file and folder paths from\nbeing pushed to the commit graph. This includes absolute paths that contain file names.
" }, + { + "name": "LICENSE_COMPLIANCE_SCANNING", + "description": "Enforce any added or changed dependencies to comply with the organization's license policy.
" + }, { "name": "LOCK_BRANCH", "description": "Branch is read-only. Users cannot push to the branch.
" diff --git a/src/graphql/data/fpt/schema-pulls.json b/src/graphql/data/fpt/schema-pulls.json index 8ae21384d4c1..7df86ded970d 100644 --- a/src/graphql/data/fpt/schema-pulls.json +++ b/src/graphql/data/fpt/schema-pulls.json @@ -4,7 +4,7 @@ "name": "addPullRequestCreationCapBypassUsers", "id": "addpullrequestcreationcapbypassusers", "href": "/graphql/reference/pulls#mutation-addpullrequestcreationcapbypassusers", - "description": "Add users to the pull request creation cap bypass list. Bypassed users can\ncreate pull requests regardless of the configured cap. Only repository admins\ncan manage the bypass list. You can add a maximum of 100 users per request.\nThe bypass list can only hold a maximum of 100 users.
", + "description": "Add users to the pull request creation cap bypass list. Bypassed users can\ncreate pull requests regardless of the configured cap. Only users with\nmaintainer permissions can manage the bypass list. You can add a maximum of\n100 users per request. The bypass list can only hold a maximum of 100 users.
", "isDeprecated": false, "inputFields": [ { @@ -654,7 +654,7 @@ "name": "removePullRequestCreationCapBypassUsers", "id": "removepullrequestcreationcapbypassusers", "href": "/graphql/reference/pulls#mutation-removepullrequestcreationcapbypassusers", - "description": "Remove users from the pull request creation cap bypass list. Only repository admins can manage the bypass list.
", + "description": "Remove users from the pull request creation cap bypass list. Only users with\nmaintainer permissions can manage the bypass list.
", "isDeprecated": false, "inputFields": [ { diff --git a/src/graphql/data/fpt/schema-repos.json b/src/graphql/data/fpt/schema-repos.json index 734c46aa8c2e..35a58dd51966 100644 --- a/src/graphql/data/fpt/schema-repos.json +++ b/src/graphql/data/fpt/schema-repos.json @@ -5340,7 +5340,7 @@ }, { "name": "pullRequestCreationCapConfig", - "description": "A list of users who are exempt from the pull request creation cap on this repository. Only visible to repository admins.
", + "description": "The pull request creation cap configuration for this repository. Only visible\nto repository maintainers and administrators.
", "type": "PullRequestCreationCapConfig", "id": "pullrequestcreationcapconfig", "href": "/graphql/reference/pulls#object-pullrequestcreationcapconfig" @@ -10835,6 +10835,13 @@ "id": "uri", "href": "/graphql/reference/other#scalar-uri" }, + { + "name": "issueCreationPolicy", + "description": "The policy controlling who can create issues in this repository.
", + "type": "IssueCreationPolicy", + "id": "issuecreationpolicy", + "href": "/graphql/reference/issues#enum-issuecreationpolicy" + }, { "name": "name", "description": "The new name of the repository.
", diff --git a/src/graphql/data/fpt/schema.docs.graphql b/src/graphql/data/fpt/schema.docs.graphql index d62d035bf8a0..0899afab7911 100644 --- a/src/graphql/data/fpt/schema.docs.graphql +++ b/src/graphql/data/fpt/schema.docs.graphql @@ -21145,6 +21145,11 @@ type IssueFieldAddedEvent implements Node @docsCategory(name: "issues") { """ issueField: IssueFields + """ + The selected options for option-backed fields; single-select returns one option and multi-select returns many. + """ + options: [IssueFieldTimelineOption!] + """ The value of the added field. """ @@ -21180,6 +21185,11 @@ type IssueFieldChangedEvent implements Node @docsCategory(name: "issues") { """ newColor: String + """ + The new options for option-backed fields; single-select returns one option and multi-select returns many. + """ + newOptions: [IssueFieldTimelineOption!] + """ The new value of the field. """ @@ -21190,6 +21200,11 @@ type IssueFieldChangedEvent implements Node @docsCategory(name: "issues") { """ previousColor: String + """ + The previous options for option-backed fields; single-select returns one option and multi-select returns many. + """ + previousOptions: [IssueFieldTimelineOption!] + """ The previous value of the field. """ @@ -21544,6 +21559,11 @@ type IssueFieldRemovedEvent implements Node @docsCategory(name: "issues") { The issue field removed. """ issueField: IssueFields + + """ + The removed options for option-backed fields; single-select returns one option and multi-select returns many. + """ + options: [IssueFieldTimelineOption!] } """ @@ -21801,6 +21821,21 @@ type IssueFieldTextValue implements IssueFieldValueCommon & Node @docsCategory(n value: String! } +""" +Represents a selected option for a timeline issue field event. +""" +type IssueFieldTimelineOption @docsCategory(name: "issues") { + """ + The option color. + """ + color: String + + """ + The option name. + """ + name: String! +} + """ Issue field values """ @@ -26547,9 +26582,9 @@ type Mutation @docsCategory(name: "meta") { """ Add users to the pull request creation cap bypass list. Bypassed users can - create pull requests regardless of the configured cap. Only repository admins - can manage the bypass list. You can add a maximum of 100 users per request. - The bypass list can only hold a maximum of 100 users. + create pull requests regardless of the configured cap. Only users with + maintainer permissions can manage the bypass list. You can add a maximum of + 100 users per request. The bypass list can only hold a maximum of 100 users. """ addPullRequestCreationCapBypassUsers( """ @@ -28000,7 +28035,8 @@ type Mutation @docsCategory(name: "meta") { ): RemoveOutsideCollaboratorPayload @docsCategory(name: "orgs") """ - Remove users from the pull request creation cap bypass list. Only repository admins can manage the bypass list. + Remove users from the pull request creation cap bypass list. Only users with + maintainer permissions can manage the bypass list. """ removePullRequestCreationCapBypassUsers( """ @@ -53779,7 +53815,8 @@ type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent ): PullRequest """ - A list of users who are exempt from the pull request creation cap on this repository. Only visible to repository admins. + The pull request creation cap configuration for this repository. Only visible + to repository maintainers and administrators. """ pullRequestCreationCapConfig: PullRequestCreationCapConfig @@ -56066,6 +56103,11 @@ enum RepositoryRuleType { """ FILE_PATH_RESTRICTION + """ + Enforce any added or changed dependencies to comply with the organization's license policy. + """ + LICENSE_COMPLIANCE_SCANNING + """ Branch is read-only. Users cannot push to the branch. """ @@ -69395,6 +69437,11 @@ input UpdateRepositoryInput { """ homepageUrl: URI + """ + The policy controlling who can create issues in this repository. + """ + issueCreationPolicy: IssueCreationPolicy + """ The new name of the repository. """ diff --git a/src/graphql/data/ghec/category-map.json b/src/graphql/data/ghec/category-map.json index 048dcab89f50..103ffb6f1d4b 100644 --- a/src/graphql/data/ghec/category-map.json +++ b/src/graphql/data/ghec/category-map.json @@ -661,6 +661,7 @@ "issuefieldsingleselectvalue": "issues", "issuefieldtext": "issues", "issuefieldtextvalue": "issues", + "issuefieldtimelineoption": "issues", "issuefieldvalueconnection": "issues", "issuefieldvalueedge": "issues", "issuefieldsconnection": "issues", diff --git a/src/graphql/data/ghec/schema-issues.json b/src/graphql/data/ghec/schema-issues.json index 849437f17483..21d82e7343f3 100644 --- a/src/graphql/data/ghec/schema-issues.json +++ b/src/graphql/data/ghec/schema-issues.json @@ -4769,6 +4769,13 @@ "id": "issuefields", "href": "/graphql/reference/issues#union-issuefields" }, + { + "name": "options", + "description": "The selected options for option-backed fields; single-select returns one option and multi-select returns many.
", + "type": "[IssueFieldTimelineOption!]", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption" + }, { "name": "value", "description": "The value of the added field.
", @@ -4828,6 +4835,13 @@ "id": "string", "href": "/graphql/reference/other#scalar-string" }, + { + "name": "newOptions", + "description": "The new options for option-backed fields; single-select returns one option and multi-select returns many.
", + "type": "[IssueFieldTimelineOption!]", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption" + }, { "name": "newValue", "description": "The new value of the field.
", @@ -4842,6 +4856,13 @@ "id": "string", "href": "/graphql/reference/other#scalar-string" }, + { + "name": "previousOptions", + "description": "The previous options for option-backed fields; single-select returns one option and multi-select returns many.
", + "type": "[IssueFieldTimelineOption!]", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption" + }, { "name": "previousValue", "description": "The previous value of the field.
", @@ -5249,6 +5270,13 @@ "type": "IssueFields", "id": "issuefields", "href": "/graphql/reference/issues#union-issuefields" + }, + { + "name": "options", + "description": "The removed options for option-backed fields; single-select returns one option and multi-select returns many.
", + "type": "[IssueFieldTimelineOption!]", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption" } ], "category": "issues" @@ -5582,6 +5610,30 @@ ], "category": "issues" }, + { + "name": "IssueFieldTimelineOption", + "id": "issuefieldtimelineoption", + "href": "/graphql/reference/issues#object-issuefieldtimelineoption", + "description": "Represents a selected option for a timeline issue field event.
", + "isDeprecated": false, + "fields": [ + { + "name": "color", + "description": "The option color.
", + "type": "String", + "id": "string", + "href": "/graphql/reference/other#scalar-string" + }, + { + "name": "name", + "description": "The option name.
", + "type": "String!", + "id": "string", + "href": "/graphql/reference/other#scalar-string" + } + ], + "category": "issues" + }, { "name": "IssueFieldValueConnection", "id": "issuefieldvalueconnection", diff --git a/src/graphql/data/ghec/schema-other.json b/src/graphql/data/ghec/schema-other.json index 5171bc4f35d6..3090b71a3d78 100644 --- a/src/graphql/data/ghec/schema-other.json +++ b/src/graphql/data/ghec/schema-other.json @@ -643,6 +643,10 @@ "name": "FILE_PATH_RESTRICTION", "description": "Prevent commits that include changes in specified file and folder paths from\nbeing pushed to the commit graph. This includes absolute paths that contain file names.
" }, + { + "name": "LICENSE_COMPLIANCE_SCANNING", + "description": "Enforce any added or changed dependencies to comply with the organization's license policy.
" + }, { "name": "LOCK_BRANCH", "description": "Branch is read-only. Users cannot push to the branch.
" diff --git a/src/graphql/data/ghec/schema-pulls.json b/src/graphql/data/ghec/schema-pulls.json index 8ae21384d4c1..7df86ded970d 100644 --- a/src/graphql/data/ghec/schema-pulls.json +++ b/src/graphql/data/ghec/schema-pulls.json @@ -4,7 +4,7 @@ "name": "addPullRequestCreationCapBypassUsers", "id": "addpullrequestcreationcapbypassusers", "href": "/graphql/reference/pulls#mutation-addpullrequestcreationcapbypassusers", - "description": "Add users to the pull request creation cap bypass list. Bypassed users can\ncreate pull requests regardless of the configured cap. Only repository admins\ncan manage the bypass list. You can add a maximum of 100 users per request.\nThe bypass list can only hold a maximum of 100 users.
", + "description": "Add users to the pull request creation cap bypass list. Bypassed users can\ncreate pull requests regardless of the configured cap. Only users with\nmaintainer permissions can manage the bypass list. You can add a maximum of\n100 users per request. The bypass list can only hold a maximum of 100 users.
", "isDeprecated": false, "inputFields": [ { @@ -654,7 +654,7 @@ "name": "removePullRequestCreationCapBypassUsers", "id": "removepullrequestcreationcapbypassusers", "href": "/graphql/reference/pulls#mutation-removepullrequestcreationcapbypassusers", - "description": "Remove users from the pull request creation cap bypass list. Only repository admins can manage the bypass list.
", + "description": "Remove users from the pull request creation cap bypass list. Only users with\nmaintainer permissions can manage the bypass list.
", "isDeprecated": false, "inputFields": [ { diff --git a/src/graphql/data/ghec/schema-repos.json b/src/graphql/data/ghec/schema-repos.json index 734c46aa8c2e..35a58dd51966 100644 --- a/src/graphql/data/ghec/schema-repos.json +++ b/src/graphql/data/ghec/schema-repos.json @@ -5340,7 +5340,7 @@ }, { "name": "pullRequestCreationCapConfig", - "description": "A list of users who are exempt from the pull request creation cap on this repository. Only visible to repository admins.
", + "description": "The pull request creation cap configuration for this repository. Only visible\nto repository maintainers and administrators.
", "type": "PullRequestCreationCapConfig", "id": "pullrequestcreationcapconfig", "href": "/graphql/reference/pulls#object-pullrequestcreationcapconfig" @@ -10835,6 +10835,13 @@ "id": "uri", "href": "/graphql/reference/other#scalar-uri" }, + { + "name": "issueCreationPolicy", + "description": "The policy controlling who can create issues in this repository.
", + "type": "IssueCreationPolicy", + "id": "issuecreationpolicy", + "href": "/graphql/reference/issues#enum-issuecreationpolicy" + }, { "name": "name", "description": "The new name of the repository.
", diff --git a/src/graphql/data/ghec/schema.docs.graphql b/src/graphql/data/ghec/schema.docs.graphql index d62d035bf8a0..0899afab7911 100644 --- a/src/graphql/data/ghec/schema.docs.graphql +++ b/src/graphql/data/ghec/schema.docs.graphql @@ -21145,6 +21145,11 @@ type IssueFieldAddedEvent implements Node @docsCategory(name: "issues") { """ issueField: IssueFields + """ + The selected options for option-backed fields; single-select returns one option and multi-select returns many. + """ + options: [IssueFieldTimelineOption!] + """ The value of the added field. """ @@ -21180,6 +21185,11 @@ type IssueFieldChangedEvent implements Node @docsCategory(name: "issues") { """ newColor: String + """ + The new options for option-backed fields; single-select returns one option and multi-select returns many. + """ + newOptions: [IssueFieldTimelineOption!] + """ The new value of the field. """ @@ -21190,6 +21200,11 @@ type IssueFieldChangedEvent implements Node @docsCategory(name: "issues") { """ previousColor: String + """ + The previous options for option-backed fields; single-select returns one option and multi-select returns many. + """ + previousOptions: [IssueFieldTimelineOption!] + """ The previous value of the field. """ @@ -21544,6 +21559,11 @@ type IssueFieldRemovedEvent implements Node @docsCategory(name: "issues") { The issue field removed. """ issueField: IssueFields + + """ + The removed options for option-backed fields; single-select returns one option and multi-select returns many. + """ + options: [IssueFieldTimelineOption!] } """ @@ -21801,6 +21821,21 @@ type IssueFieldTextValue implements IssueFieldValueCommon & Node @docsCategory(n value: String! } +""" +Represents a selected option for a timeline issue field event. +""" +type IssueFieldTimelineOption @docsCategory(name: "issues") { + """ + The option color. + """ + color: String + + """ + The option name. + """ + name: String! +} + """ Issue field values """ @@ -26547,9 +26582,9 @@ type Mutation @docsCategory(name: "meta") { """ Add users to the pull request creation cap bypass list. Bypassed users can - create pull requests regardless of the configured cap. Only repository admins - can manage the bypass list. You can add a maximum of 100 users per request. - The bypass list can only hold a maximum of 100 users. + create pull requests regardless of the configured cap. Only users with + maintainer permissions can manage the bypass list. You can add a maximum of + 100 users per request. The bypass list can only hold a maximum of 100 users. """ addPullRequestCreationCapBypassUsers( """ @@ -28000,7 +28035,8 @@ type Mutation @docsCategory(name: "meta") { ): RemoveOutsideCollaboratorPayload @docsCategory(name: "orgs") """ - Remove users from the pull request creation cap bypass list. Only repository admins can manage the bypass list. + Remove users from the pull request creation cap bypass list. Only users with + maintainer permissions can manage the bypass list. """ removePullRequestCreationCapBypassUsers( """ @@ -53779,7 +53815,8 @@ type Repository implements Node & PackageOwner & ProjectOwner & ProjectV2Recent ): PullRequest """ - A list of users who are exempt from the pull request creation cap on this repository. Only visible to repository admins. + The pull request creation cap configuration for this repository. Only visible + to repository maintainers and administrators. """ pullRequestCreationCapConfig: PullRequestCreationCapConfig @@ -56066,6 +56103,11 @@ enum RepositoryRuleType { """ FILE_PATH_RESTRICTION + """ + Enforce any added or changed dependencies to comply with the organization's license policy. + """ + LICENSE_COMPLIANCE_SCANNING + """ Branch is read-only. Users cannot push to the branch. """ @@ -69395,6 +69437,11 @@ input UpdateRepositoryInput { """ homepageUrl: URI + """ + The policy controlling who can create issues in this repository. + """ + issueCreationPolicy: IssueCreationPolicy + """ The new name of the repository. """ diff --git a/src/landings/components/shared/LandingArticleGridWithFilter.tsx b/src/landings/components/shared/LandingArticleGridWithFilter.tsx index acdea3ef78fb..2e65957e5cf6 100644 --- a/src/landings/components/shared/LandingArticleGridWithFilter.tsx +++ b/src/landings/components/shared/LandingArticleGridWithFilter.tsx @@ -1,5 +1,6 @@ import React, { useState, useRef, useEffect, useMemo } from 'react' -import { TextInput, ActionMenu, ActionList, Token, Pagination } from '@primer/react' +import { TextInput, ActionMenu, ActionList, Token } from '@primer/react' +import { Pagination } from '@primer/react-brand' import { SearchIcon } from '@primer/octicons-react' import { announce } from '@primer/live-region-element' import cx from 'classnames' diff --git a/src/languages/lib/correct-translation-content.ts b/src/languages/lib/correct-translation-content.ts index 2b05a40af3f9..53774987d7ea 100644 --- a/src/languages/lib/correct-translation-content.ts +++ b/src/languages/lib/correct-translation-content.ts @@ -882,6 +882,42 @@ export function correctTranslatedContentStrings( '在{% data variables.product.prodname_dotcom_the_website %}或{% data variables.enterprise.data_residency_site %}{% endif %}上的企业{% ifversion ghec %}进行通信。', '的企业{% ifversion ghec %}在{% data variables.product.prodname_dotcom_the_website %}或{% data variables.enterprise.data_residency_site %}{% endif %}进行通信。', ) + + // [per-file] actions/azure-vnet-creating-network-configuration-prereqs.md: + // `{% ifversion ghec%}` closes prematurely with `{% endif %}` before the + // `{% else %}` branch, leaving `{% else %}` as an orphan. Reorder to: + // `{% ifversion ghec %}...{% else %}...{% endif %}`. + content = content.replaceAll( + '可以{% ifversion ghec%}在企业或组织级别{% endif %}在组织级别{% else %}创建网络配置,从而将 Azure 虚拟网络 (VNET) 用于专用网络。', + '可以{% ifversion ghec %}在企业或组织级别{% else %}在组织级别{% endif %}创建网络配置,从而将 Azure 虚拟网络 (VNET) 用于专用网络。', + ) + + // [per-file] gated-features/ghas-ghec.md: `prodname_team` and `prodname_ghe_cloud` + // escaped outside the `{% ifversion fpt or ghec %}` block, and the branches are + // swapped. `{% endif %}` appears before `{% elsif ghes %}`. Restore structure: + // `{% ifversion fpt or ghec %}...team...ghe_cloud{% elsif ghes %}...ghe_server{% endif %}`. + content = content.replaceAll( + '适用于{% data variables.product.prodname_team %}上的{% ifversion fpt or ghec %}账户以及{% data variables.product.prodname_ghe_server %}{% endif %}上的{% data variables.product.prodname_ghe_cloud %}{% elsif ghes %}账户。', + '适用于{% ifversion fpt or ghec %}{% data variables.product.prodname_team %}和{% data variables.product.prodname_ghe_cloud %}上的账户{% elsif ghes %}{% data variables.product.prodname_ghe_server %}上的账户{% endif %}。', + ) + + // [per-file] scim/after-you-configure-saml.md: `{% ifversion fpt or ghec %}` opener + // was dropped before `{% data variables.product.github %}`, leaving `{% else %}` as + // an orphan. The `{% ifversion %}` token was then misplaced after `{% endif %}`. + content = content.replaceAll( + '{% data variables.product.github %}{% else %}{% data variables.location.product_location_enterprise %}{% endif %} 上的{% ifversion fpt or ghec %}企业资源', + '{% ifversion fpt or ghec %}{% data variables.product.github %} 上的企业资源{% else %}{% data variables.location.product_location_enterprise %}{% endif %}', + ) + + // [per-file] enterprise_user_management/consider-usernames-for-external-authentication.md: + // The second `{% ifversion ghec %}` opener (before `product.github`) was dropped, + // leaving an orphan `{% elsif ghes %}` and a dangling `{% ifversion ghec %}` at end. + // `企业中` ("in your enterprise") is GHEC-only in the source, so it belongs inside the + // `{% ifversion ghec %}` branch, not before it. + content = content.replaceAll( + '企业中 {% data variables.product.github %}{% elsif ghes %} 上 {% data variables.location.product_location %}{% endif %} 上每个新个人帐户 {% ifversion ghec %} 的用户名。', + '{% ifversion ghec %}企业中 {% data variables.product.github %}{% elsif ghes %} 上 {% data variables.location.product_location %}{% endif %} 上每个新个人帐户的用户名。', + ) } if (context.code === 'ru') { @@ -1104,6 +1140,14 @@ export function correctTranslatedContentStrings( return match.replace(/(\d)\s*о/g, '$10').replace(/о\s*(\d)/g, '0$1') }) + // `{% PLAN PLAN ifversion %}` — plan name duplicated before `ifversion`; word-order swap. + // The universal whitespace fix converts `{ % ghes ghes ifversion %}` to this form first. + // Collapse the duplicate plan name and swap to canonical `{% ifversion PLAN %}`. + content = content.replace( + /\{%(-?)\s*(fpt|ghec|ghes|ghae|ghecom)\s+\2\s+ifversion\s*(-?)%\}/g, + '{%$1 ifversion $2 $3%}', + ) + // Word-order swap: translator placed plan name BEFORE `ifversion`, e.g. // `{% ghes ifversion %}` → `{% ifversion ghes %}`, // `{% ghes ifversion < 3,14 %}` → `{% ifversion ghes < 3.14 %}` @@ -1207,6 +1251,19 @@ export function correctTranslatedContentStrings( '{% ifversion ghec %}аутентификации и{% endif %} провизионирования SCIM{% else %}с помощью Okta', '{% ifversion ghec %}SCIM{% else %}аутентификации и{% endif %} провизионирования с помощью Okta', ) + + // [SCRAPE-6732] admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/viewing-and-managing-a-users-saml-access-to-your-enterprise.md + // (intro): translator scrambled `{% ifversion ghec %}...{% else %}...{% endif %}` + // so the `{% else %}` ended up before any opening `{% ifversion %}` (an orphan) + // and the `{% ifversion ghec %}` moved into the else branch. This breaks the + // admin landing page render (`tag "else" not found`). Reconstruct to match + // English: view and revoke an enterprise member's {% ifversion ghec %}linked + // identity, active sessions, and authorized credentials{% else %}active SAML + // sessions{% endif %}. The corrector runs on the PARSED intro value. + content = content.replaceAll( + 'связанную личность, активные сессии и авторизованные учетные{% else %}данные {% ifversion ghec %}SAML{% endif %}', + '{% ifversion ghec %}связанную личность, активные сессии и авторизованные учетные данные{% else %}активные сессии SAML{% endif %}', + ) } if (context.code === 'fr') { @@ -1777,6 +1834,13 @@ export function correctTranslatedContentStrings( 'auf selbst-gehosteten Runnern ausführen.{% data variables.product.prodname_dependabot %}', 'auf selbst-gehosteten Runnern ausführen.{% endif %}', ) + // [per-file] enterprise_installation/hardware-considerations-all-platforms.md: + // `{% ifversion ghes %}` opener was stripped before "200 GB", leaving `{% else %}` + // as an orphan. Restore the opener immediately before the "200 GB" text. + content = content.replaceAll( + 'werden 200 GB auf dem Stammdateisystem verfügbar sein. Die verbleibenden 200GB{% else %}', + 'werden {% ifversion ghes %}200 GB auf dem Stammdateisystem verfügbar sein. Die verbleibenden 200GB{% else %}', + ) } // --- Generic fixes (all languages) --- diff --git a/src/languages/tests/correct-translation-content.ts b/src/languages/tests/correct-translation-content.ts index 0295d2980da9..acd373748f98 100644 --- a/src/languages/tests/correct-translation-content.ts +++ b/src/languages/tests/correct-translation-content.ts @@ -577,6 +577,76 @@ describe('correctTranslatedContentStrings', () => { expect(fix('{%- 捕获 myvar -%}', 'zh')).toBe('{%- capture myvar -%}') expect(fix('{%- 捕获myvar %}', 'zh')).toBe('{%- capture myvar %}') }) + + test('[per-file] azure-vnet: premature endif leaves orphan else', () => { + function fixAt(content: string, code: string, relativePath: string) { + return correctTranslatedContentStrings(content, '', { + code, + relativePath, + skipOrphanStripping: true, + }) + } + const path = 'data/reusables/actions/azure-vnet-creating-network-configuration-prereqs.md' + const broken = + '可以{% ifversion ghec%}在企业或组织级别{% endif %}在组织级别{% else %}创建网络配置,从而将 Azure 虚拟网络 (VNET) 用于专用网络。' + const fixed = + '可以{% ifversion ghec %}在企业或组织级别{% else %}在组织级别{% endif %}创建网络配置,从而将 Azure 虚拟网络 (VNET) 用于专用网络。' + expect(fixAt(broken, 'zh', path)).toBe(fixed) + // unchanged if already correct + expect(fixAt(fixed, 'zh', path)).toBe(fixed) + }) + + test('[per-file] ghas-ghec: scrambled ifversion with stray elsif after endif', () => { + function fixAt(content: string, code: string, relativePath: string) { + return correctTranslatedContentStrings(content, '', { + code, + relativePath, + skipOrphanStripping: true, + }) + } + const path = 'data/reusables/gated-features/ghas-ghec.md' + const broken = + '适用于{% data variables.product.prodname_team %}上的{% ifversion fpt or ghec %}账户以及{% data variables.product.prodname_ghe_server %}{% endif %}上的{% data variables.product.prodname_ghe_cloud %}{% elsif ghes %}账户。' + const fixed = + '适用于{% ifversion fpt or ghec %}{% data variables.product.prodname_team %}和{% data variables.product.prodname_ghe_cloud %}上的账户{% elsif ghes %}{% data variables.product.prodname_ghe_server %}上的账户{% endif %}。' + expect(fixAt(broken, 'zh', path)).toBe(fixed) + expect(fixAt(fixed, 'zh', path)).toBe(fixed) + }) + + test('[per-file] scim/after-you-configure-saml: ifversion opener dropped leaving orphan else', () => { + function fixAt(content: string, code: string, relativePath: string) { + return correctTranslatedContentStrings(content, '', { + code, + relativePath, + skipOrphanStripping: true, + }) + } + const path = 'data/reusables/scim/after-you-configure-saml.md' + const broken = + '{% data variables.product.github %}{% else %}{% data variables.location.product_location_enterprise %}{% endif %} 上的{% ifversion fpt or ghec %}企业资源' + const fixed = + '{% ifversion fpt or ghec %}{% data variables.product.github %} 上的企业资源{% else %}{% data variables.location.product_location_enterprise %}{% endif %}' + expect(fixAt(broken, 'zh', path)).toBe(fixed) + expect(fixAt(fixed, 'zh', path)).toBe(fixed) + }) + + test('[per-file] consider-usernames: ifversion ghec opener dropped leaving orphan elsif', () => { + function fixAt(content: string, code: string, relativePath: string) { + return correctTranslatedContentStrings(content, '', { + code, + relativePath, + skipOrphanStripping: true, + }) + } + const path = + 'data/reusables/enterprise_user_management/consider-usernames-for-external-authentication.md' + const broken = + '企业中 {% data variables.product.github %}{% elsif ghes %} 上 {% data variables.location.product_location %}{% endif %} 上每个新个人帐户 {% ifversion ghec %} 的用户名。' + const fixed = + '{% ifversion ghec %}企业中 {% data variables.product.github %}{% elsif ghes %} 上 {% data variables.location.product_location %}{% endif %} 上每个新个人帐户的用户名。' + expect(fixAt(broken, 'zh', path)).toBe(fixed) + expect(fixAt(fixed, 'zh', path)).toBe(fixed) + }) }) // ─── RUSSIAN (ru) ────────────────────────────────────────────────── @@ -836,6 +906,17 @@ describe('correctTranslatedContentStrings', () => { '{% ifversion enterprise-licensing-language %}licenses{% else %}licensed seats{% endif %}', ) }) + + test('fixes doubled plan name before ifversion (ghes ghes ifversion → ifversion ghes)', () => { + // `{% ghes ghes ifversion %}` — plan name appears twice before `ifversion`; + // collapses the duplicate and swaps to canonical `{% ifversion PLAN %}`. + expect(fix('{% ghes ghes ifversion %}', 'ru')).toBe('{% ifversion ghes %}') + expect(fix('{%- ghec ghec ifversion %}', 'ru')).toBe('{%- ifversion ghec %}') + // Does not affect normal word-order swap (single plan name) + expect(fix('{% ghes ifversion %}', 'ru')).toBe('{% ifversion ghes %}') + // Unchanged when already correct + expect(fix('{% ifversion ghes %}', 'ru')).toBe('{% ifversion ghes %}') + }) }) // ─── FRENCH (fr) ─────────────────────────────────────────────────── @@ -1399,6 +1480,24 @@ describe('correctTranslatedContentStrings', () => { '{%- data variables.product.github %}', ) }) + + test('[per-file] hardware-considerations-all-platforms: ifversion ghes opener stripped', () => { + function fixAt(content: string, code: string, relativePath: string) { + return correctTranslatedContentStrings(content, '', { + code, + relativePath, + skipOrphanStripping: true, + }) + } + const path = 'data/reusables/enterprise_installation/hardware-considerations-all-platforms.md' + const broken = + 'werden 200 GB auf dem Stammdateisystem verfügbar sein. Die verbleibenden 200GB{% else %}100GB sind auf dem Stammdateisystem verfügbar.' + const fixed = + 'werden {% ifversion ghes %}200 GB auf dem Stammdateisystem verfügbar sein. Die verbleibenden 200GB{% else %}100GB sind auf dem Stammdateisystem verfügbar.' + expect(fixAt(broken, 'de', path)).toBe(fixed) + // unchanged if already correct + expect(fixAt(fixed, 'de', path)).toBe(fixed) + }) }) describe('Generic fixes (all languages)', () => { @@ -2338,4 +2437,21 @@ Para más información, consulta "[AUTOTITLE](/path)". expect(fix(broken, 'de')).toBe('auf selbst-gehosteten Runnern ausführen.{% endif %}') }) }) + + // ─── SCRAPE-6732: search-scrape failures ───────────────────────────── + // The ru admin landing page failed to scrape with `tag "else" not found` + // because the intro of viewing-and-managing-a-users-saml-access-to-your-enterprise.md + // had an orphaned `{% else %}` before any opening `{% ifversion %}` + // (github/docs-engineering#6732). The corrector runs on the PARSED intro value. + describe('SCRAPE-6732 per-file fixes', () => { + test('ru: viewing-and-managing-a-users-saml-access intro reorders orphaned else', () => { + const broken = + 'Вы можете просматривать и отзывать связанную личность, активные сессии и авторизованные учетные{% else %}данные {% ifversion ghec %}SAML{% endif %} участника предприятия.' + const fixed = + 'Вы можете просматривать и отзывать {% ifversion ghec %}связанную личность, активные сессии и авторизованные учетные данные{% else %}активные сессии SAML{% endif %} участника предприятия.' + expect(fix(broken, 'ru')).toBe(fixed) + // idempotent: the fix only matches the broken form + expect(fix(fixed, 'ru')).toBe(fixed) + }) + }) }) diff --git a/src/links/lib/extract-links.ts b/src/links/lib/extract-links.ts index 2cf850669b12..adc468a18793 100644 --- a/src/links/lib/extract-links.ts +++ b/src/links/lib/extract-links.ts @@ -12,6 +12,8 @@ import { createLogger } from '@/observability/logger' import { allVersions } from '@/versions/lib/all-versions' import { latestStable } from '@/versions/lib/enterprise-server-releases' import { getDataByLanguage } from '@/data-directory/lib/get-data' +import getRedirect from '@/redirects/lib/get-redirect' +import { isArchivedVersionByPath } from '@/archives/lib/is-archived-version' import type { Context, Page } from '@/types' const logger = createLogger(import.meta.url) @@ -447,8 +449,10 @@ export function checkInternalLink( } } - // Strip language prefix and check redirects (which are stored without it) - const langPrefixMatch = resolved.match(/^\/[a-z]{2}\//) + // Strip language prefix and check redirects (which are stored without it). + // Match hyphenated locales too (e.g. /pt-br/, /zh-cn/) so we don't later + // double-prefix them with /en. + const langPrefixMatch = resolved.match(/^\/[a-z]{2}(-[a-z]{2})?\//) if (langPrefixMatch) { const withoutLang = resolved.slice(langPrefixMatch[0].length - 1) if (redirects[withoutLang]) { @@ -460,6 +464,49 @@ export function checkInternalLink( } } + // The path in language-prefixed form, used by the runtime resolvers below. + // Avoid double-prefixing when the link already carried a language code. + const withEn = langPrefixMatch ? resolved : withLang + + // Links into deprecated/archived Enterprise Server versions (e.g. + // /enterprise-server@3.7/... or the legacy /enterprise/2.1/... format) are + // served by the archived enterprise versions system, which isn't loaded into + // pageMap. They resolve fine at runtime, so treat them as valid rather than + // broken. + if (isArchivedVersionByPath(withEn).isArchived) { + return { exists: true, isRedirect: false } + } + + // Fall back to the runtime redirect resolver. It handles algorithmic + // corrections (version-prefix normalization, /admin, /desktop/guides, etc.) + // that the flat redirects map doesn't contain as literal keys. This mirrors + // what the production server actually does, so a link that redirects in + // production is reported as a redirect here instead of a false broken link. + try { + // Only redirects, userLanguage, and pages are read by getRedirect (and the + // resolvers it delegates to), so type the object to those fields rather than + // casting an arbitrary shape to the full Context. + const context: Pick