From 585d9e8a038b28e62e39f14fb64741cb6e7e2274 Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Tue, 26 Sep 2023 11:35:19 -0700 Subject: [PATCH 01/13] Update OpenAPI Description (#43338) --- src/github-apps/lib/config.json | 2 +- src/rest/data/fpt-2022-11-28/schema.json | 8 ++++---- src/rest/data/ghae/schema.json | 8 ++++---- src/rest/data/ghec-2022-11-28/schema.json | 8 ++++---- src/rest/data/ghes-3.10-2022-11-28/schema.json | 8 ++++---- src/rest/data/ghes-3.6/schema.json | 8 ++++---- src/rest/data/ghes-3.7/schema.json | 8 ++++---- src/rest/data/ghes-3.8/schema.json | 8 ++++---- src/rest/data/ghes-3.9-2022-11-28/schema.json | 8 ++++---- src/rest/lib/config.json | 2 +- src/webhooks/lib/config.json | 2 +- 11 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/github-apps/lib/config.json b/src/github-apps/lib/config.json index cc03cff154..e5af0051eb 100644 --- a/src/github-apps/lib/config.json +++ b/src/github-apps/lib/config.json @@ -60,5 +60,5 @@ "2022-11-28" ] }, - "sha": "1b91b04f33ca9cd793951478139283ed4f540421" + "sha": "cd15105abbd188f1d9bc5ac730932fff9fe5cd8e" } \ No newline at end of file diff --git a/src/rest/data/fpt-2022-11-28/schema.json b/src/rest/data/fpt-2022-11-28/schema.json index e8db26345d..f482c43884 100644 --- a/src/rest/data/fpt-2022-11-28/schema.json +++ b/src/rest/data/fpt-2022-11-28/schema.json @@ -136129,7 +136129,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

", + "descriptionHTML": "

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -137698,7 +137698,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -138996,7 +138996,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

If there are more than 1000 check suites on a single git reference, this endpoint will limit check runs to the 1000 most recent check suites. To iterate over all possible check runs, use the List check suites for a Git reference endpoint and provide the check_suite_id parameter to the List check runs in a check suite endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -147492,7 +147492,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

\n

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

", + "descriptionHTML": "

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghae/schema.json b/src/rest/data/ghae/schema.json index 450067f092..6669c21798 100644 --- a/src/rest/data/ghae/schema.json +++ b/src/rest/data/ghae/schema.json @@ -100935,7 +100935,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

", + "descriptionHTML": "

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -102504,7 +102504,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -103802,7 +103802,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

If there are more than 1000 check suites on a single git reference, this endpoint will limit check runs to the 1000 most recent check suites. To iterate over all possible check runs, use the List check suites for a Git reference endpoint and provide the check_suite_id parameter to the List check runs in a check suite endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -112298,7 +112298,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

\n

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

", + "descriptionHTML": "

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghec-2022-11-28/schema.json b/src/rest/data/ghec-2022-11-28/schema.json index 76db13dcfd..d0fb0b5a87 100644 --- a/src/rest/data/ghec-2022-11-28/schema.json +++ b/src/rest/data/ghec-2022-11-28/schema.json @@ -146433,7 +146433,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

", + "descriptionHTML": "

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -148002,7 +148002,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -149300,7 +149300,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

If there are more than 1000 check suites on a single git reference, this endpoint will limit check runs to the 1000 most recent check suites. To iterate over all possible check runs, use the List check suites for a Git reference endpoint and provide the check_suite_id parameter to the List check runs in a check suite endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -157796,7 +157796,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

\n

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

", + "descriptionHTML": "

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.10-2022-11-28/schema.json b/src/rest/data/ghes-3.10-2022-11-28/schema.json index e2b674a055..faaad605f7 100644 --- a/src/rest/data/ghes-3.10-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.10-2022-11-28/schema.json @@ -142460,7 +142460,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

", + "descriptionHTML": "

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -144029,7 +144029,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -145327,7 +145327,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

If there are more than 1000 check suites on a single git reference, this endpoint will limit check runs to the 1000 most recent check suites. To iterate over all possible check runs, use the List check suites for a Git reference endpoint and provide the check_suite_id parameter to the List check runs in a check suite endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -153823,7 +153823,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

\n

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

", + "descriptionHTML": "

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.6/schema.json b/src/rest/data/ghes-3.6/schema.json index 9545fd5bb8..058492780e 100644 --- a/src/rest/data/ghes-3.6/schema.json +++ b/src/rest/data/ghes-3.6/schema.json @@ -135811,7 +135811,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

", + "descriptionHTML": "

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -137380,7 +137380,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -138678,7 +138678,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

If there are more than 1000 check suites on a single git reference, this endpoint will limit check runs to the 1000 most recent check suites. To iterate over all possible check runs, use the List check suites for a Git reference endpoint and provide the check_suite_id parameter to the List check runs in a check suite endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -146869,7 +146869,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

\n

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

", + "descriptionHTML": "

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.7/schema.json b/src/rest/data/ghes-3.7/schema.json index f4edceb45a..42c22494af 100644 --- a/src/rest/data/ghes-3.7/schema.json +++ b/src/rest/data/ghes-3.7/schema.json @@ -136782,7 +136782,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

", + "descriptionHTML": "

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -138351,7 +138351,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -139649,7 +139649,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

If there are more than 1000 check suites on a single git reference, this endpoint will limit check runs to the 1000 most recent check suites. To iterate over all possible check runs, use the List check suites for a Git reference endpoint and provide the check_suite_id parameter to the List check runs in a check suite endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -147855,7 +147855,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

\n

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

", + "descriptionHTML": "

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.8/schema.json b/src/rest/data/ghes-3.8/schema.json index b82adbce64..79b34185ef 100644 --- a/src/rest/data/ghes-3.8/schema.json +++ b/src/rest/data/ghes-3.8/schema.json @@ -140113,7 +140113,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

", + "descriptionHTML": "

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -141682,7 +141682,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -142980,7 +142980,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

If there are more than 1000 check suites on a single git reference, this endpoint will limit check runs to the 1000 most recent check suites. To iterate over all possible check runs, use the List check suites for a Git reference endpoint and provide the check_suite_id parameter to the List check runs in a check suite endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -151186,7 +151186,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

\n

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

", + "descriptionHTML": "

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/data/ghes-3.9-2022-11-28/schema.json b/src/rest/data/ghes-3.9-2022-11-28/schema.json index 33ff59e548..94e111f3cb 100644 --- a/src/rest/data/ghes-3.9-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.9-2022-11-28/schema.json @@ -141267,7 +141267,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

", + "descriptionHTML": "

Updates a check run for a specific commit in a repository. Your GitHub App must have the checks:write permission to edit check runs.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -142836,7 +142836,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a check suite using its id. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

", "statusCodes": [ { "httpStatusCode": "200", @@ -144134,7 +144134,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

", + "descriptionHTML": "

Lists check runs for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to get check runs. OAuth apps and authenticated users must have the repo scope to get check runs in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array.

\n

If there are more than 1000 check suites on a single git reference, this endpoint will limit check runs to the 1000 most recent check suites. To iterate over all possible check runs, use the List check suites for a Git reference endpoint and provide the check_suite_id parameter to the List check runs in a check suite endpoint.

", "statusCodes": [ { "httpStatusCode": "200", @@ -152560,7 +152560,7 @@ } ], "previews": [], - "descriptionHTML": "

Note: The Checks API only looks for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

\n

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

", + "descriptionHTML": "

Lists check suites for a commit ref. The ref can be a SHA, branch name, or a tag name. GitHub Apps must have the checks:read permission on a private repository or pull access to a public repository to list check suites. OAuth apps and authenticated users must have the repo scope to get check suites in a private repository.

\n

Note: The endpoints to manage checks only look for pushes in the repository where the check suite or check run were created. Pushes to a branch in a forked repository are not detected and return an empty pull_requests array and a null value for head_branch.

", "statusCodes": [ { "httpStatusCode": "200", diff --git a/src/rest/lib/config.json b/src/rest/lib/config.json index 8f000c48c8..1001766c12 100644 --- a/src/rest/lib/config.json +++ b/src/rest/lib/config.json @@ -36,5 +36,5 @@ ] } }, - "sha": "1b91b04f33ca9cd793951478139283ed4f540421" + "sha": "cd15105abbd188f1d9bc5ac730932fff9fe5cd8e" } \ No newline at end of file diff --git a/src/webhooks/lib/config.json b/src/webhooks/lib/config.json index 6ebb613f88..460f7b0450 100644 --- a/src/webhooks/lib/config.json +++ b/src/webhooks/lib/config.json @@ -1,3 +1,3 @@ { - "sha": "1b91b04f33ca9cd793951478139283ed4f540421" + "sha": "cd15105abbd188f1d9bc5ac730932fff9fe5cd8e" } \ No newline at end of file From 4a232167008745e0b38bc8a75c64f0df95414cc1 Mon Sep 17 00:00:00 2001 From: Hector Alfaro Date: Tue, 26 Sep 2023 14:36:04 -0400 Subject: [PATCH 02/13] Show hovercards at small widths (#43320) --- src/links/components/LinkPreviewPopover.tsx | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/links/components/LinkPreviewPopover.tsx b/src/links/components/LinkPreviewPopover.tsx index 0acf6ce8dd..a0107493fc 100644 --- a/src/links/components/LinkPreviewPopover.tsx +++ b/src/links/components/LinkPreviewPopover.tsx @@ -309,6 +309,8 @@ function fillPopover( popover.style.top = `${top - popover.offsetHeight - 10}px` } + popover.style.setProperty('top', popover.style.top, 'important') + if (callback) { callback(popover) } @@ -410,16 +412,7 @@ export function LinkPreviewPopover() { }, []) useEffect(() => { - // If the current window is too narrow, the popover is not useful. - // Since this is tested on every event callback here in the handler, - // if the window width has changed since the mount, the number - // will change accordingly. - const wideEnough = window.innerWidth > 767 - function showPopover(event: MouseEvent) { - if (!wideEnough) { - return - } const target = event.currentTarget as HTMLLinkElement popoverShow(target) From 3dcd32f0b8ab093f52878e7e51a6acb6dc379afd Mon Sep 17 00:00:00 2001 From: Hector Alfaro Date: Tue, 26 Sep 2023 14:38:51 -0400 Subject: [PATCH 03/13] Create a more secure script to toggle GHAE feature flags (#42944) Co-authored-by: Kevin Heis --- .../scripts/toggle-ghae-feature-flags.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/versions/scripts/toggle-ghae-feature-flags.js b/src/versions/scripts/toggle-ghae-feature-flags.js index 5d252b66fe..ffcecc2894 100755 --- a/src/versions/scripts/toggle-ghae-feature-flags.js +++ b/src/versions/scripts/toggle-ghae-feature-flags.js @@ -4,8 +4,8 @@ import fs from 'fs' import path from 'path' import { program } from 'commander' import walk from 'walk-sync' -import { execSync } from 'child_process' - +import { execSync, execFileSync } from 'child_process' +import { escapeRegExp } from 'lodash-es' import frontmatter from '../../../lib/read-frontmatter.js' const scriptName = new URL(import.meta.url).pathname.split('/').pop() @@ -76,11 +76,12 @@ if (options.toggleFlags) { if (options.toggleFlags) { // Refuse to proceed if repository has uncommitted changes. - const localChangesCount = execSync( - `git status ${contentDir} ${reusablesDir} ${dataDir} --porcelain=v1 2>/dev/null | wc -l`, - ).toString() + const cmd = 'git' + const args = ['status', contentDir, reusablesDir, dataDir, '--porcelain=v1'] + const localChangesCount = execFileSync(cmd, args).toString().trim() - if (localChangesCount > 0) { + // localChangesCount can return an empty line, this conditional ignores that scenario + if (localChangesCount && localChangesCount.split(/\n/g).length > 0) { console.log("Error: refusing to proceed due to uncommitted changes (review 'git status')") process.exit(1) } @@ -235,7 +236,7 @@ if (options.showFlags) { allFlags[flag].forEach((file) => { const fileContent = fs.readFileSync(file, 'utf8') const { data } = frontmatter(fileContent) - const liquidReplacementRegExp = new RegExp(`${plan}-${flag}`, 'g') + const liquidReplacementRegExp = new RegExp(`${plan}-${escapeRegExp(flag)}`, 'g') let newContent if (file.endsWith('.md')) { @@ -250,7 +251,7 @@ if (options.showFlags) { } fs.writeFileSync(file, frontmatter.stringify(newContent, data, { lineWidth: 10000 })) } else if (file.endsWith('.yml')) { - const yamlReplacementRegExp = new RegExp(`${plan}: ['"]+${flag}['"]+`, 'g') + const yamlReplacementRegExp = new RegExp(`${plan}: ['"]+${escapeRegExp(flag)}['"]+`, 'g') // Update versions in YAML files for feature-based versioning. @@ -296,7 +297,9 @@ if (options.showFlags) { // Check out any file that had syntax adjusted, but didn't contain one // or more feature flags to toggle. - execSync(`git checkout --quiet ${contentDir} ${reusablesDir} ${dataDir}`) + const cmd = 'git' + const args = ['checkout', '--quiet', contentDir, reusablesDir, dataDir] + execFileSync(cmd, args) }) if (commitCount > 0) { From 34e67bea8b52c65b09c537853f4b82c3447359ff Mon Sep 17 00:00:00 2001 From: Isaac Brown <101839405+isaacmbrown@users.noreply.github.com> Date: Tue, 26 Sep 2023 19:53:52 +0100 Subject: [PATCH 04/13] Add a "hover cards" article to document accessibility feature (#41766) Co-authored-by: github-actions Co-authored-by: Laura Coursen Co-authored-by: Hector Alfaro --- assets/images/help/docs/hover-card.png | Bin 0 -> 71157 bytes .../learning-about-github/index.md | 1 + .../using-hover-cards-on-github-docs.md | 24 ++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 assets/images/help/docs/hover-card.png create mode 100644 content/get-started/learning-about-github/using-hover-cards-on-github-docs.md diff --git a/assets/images/help/docs/hover-card.png b/assets/images/help/docs/hover-card.png new file mode 100644 index 0000000000000000000000000000000000000000..328c12e8d910e40190d41b6ff2e48d4c78a39f88 GIT binary patch literal 71157 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
v+`<a^%eAfLFdaX#`Xe&Eef!n>DUluh z{Rn#A2LpGH)RZ$eB|O_s$umFvM!Qw~?a!4fTs#j72mJ$pLs*j(N>N@w@7BeB|M?Nf z=iXIfXPGT4L5C47=xhA3s zn!QDYMpd2FLUbB?SdA5dE%nsnjuhaI4!y9U+RD|f!dz{zB?vGF?AC4ogEmrw zA7fgzcRyBjc{Z$mpYgN-#9L*;^M!Tg9R(xLAA1C+`h4HqLN^`_K9k*w zJT}Vwm}lq@_j0T!Sr6O#RFTj9Fs#Iddo@W2I~PUtKV7gqYPxKU5XJN>M({S&3RFh> zo?$8bGPL~nq9M&_Ufj8>jilcQd`>Th*LrP%~`unMJfE>XU$ zzIwk#3{9P;;T1?iVb!}~dp=BE(7|Cir3_jKTD_wDW3{Y($O9~Fj(u=Dwh)FT!DD4k zoA8^=)){J9{$g0>%07OXCtmn?aF||sEOLU7Wx{HZdqdeIA92o`Sk#)FOu{wQ;PaDI zj=PH)ldwMKY$MQjuvOvqkL0R6g_^kkk&Hrujv5W?cMS~<_9m)Nh+2pEJ^d zhu0`XR%g@K!TvXAi=ers8Uga%(&?eWc3cSgbzK6{EmjylNTdBHPt}VTFG;VF?!=@i#-h!`l4tDKj2;Jle$L?f>sB) zFEvvgT0_Xo-<;qzQk;`;XG{lNxz|a(-_hh@HUv^7K;rnDIl|PR0^Tx#Gxp~_pRPU3 zGEBdMd=WOK)}V|4StceUWBBM-K7mw0`6Ii9T8MzL%g=7Q8xPSQ2+1m{nd^CpOsFp; zl{FX=u}Y2d$^*$5el_l)`vSG}MUzkW==2B)(M#-r&gzw!*QbOU)>P(3uZ{|W7)mOq zI#rTCzEHMo%lw@BYW~Kdaix*P4SU4?NH^G~iGPj}8D|M20B&E!%3l{d^DWajgx5`s z`aYILVi`NxV0n2$(4EYI%vn8IXh8Yiq4v%+=gXn zDCH*0H{Nl~YA=Ly-Ol(_PMvaB(&JEtOdceLWYg~qy$*&C9(yi|^$Jq4(wEU3Rz-nL`De{N z?X%7)!5f*eNOqBrF(G`(X>GW#M-K(Dp+1>unh^gLzlZkQekq}>bzw0S*f+|xcCSt* zoDM1%hl{meLn6$$G`o0_O}lTR;?v$pBdRyQN`;g7;j^NV5zsvnYOR#7CAbFh`Fnv|{6=8fE#ijkuW* zZo;$p{Esv$g;;L{W*Rwkrbyw#05<)DJWI2LUcl{kl5#X1oBrfeEj5@iu~Vo)^_rso z4+-%LtO<=P6RiT)NzEbDR@Al~gz1UM8-7wWimB5#YmNS`dRNkL;%zZx>L~4zKa&@Eed(asw4*Hd7t5J5>;#Zy$b?mmr%^j5G*DLUwlCe~mooTz(4VSuv z_GDGwL=)86vTbTX57($42TEZ#+Oq0Z_Sj}|sC+xh3=dFHY%--Q>Do3J`H}Lg``_$w zO?Buil=?_gio`pP7eZx;TI60^z~}x}%gjk=Z3_qb{8I6Y##~EhjyqAZDHimxXp3Sg z%r}8xxmwugy}K~xQu3KyL6B@)oTl+1&;*YnX1wxOPGevk)6T;7W4>yCt-&8-0dhnx>} zb9DmR&aq}5zkAO`BOq|6?TO2X?wvJT&)Iu{nH`q!F&_v1CQ#mYk^>TOgJ5bq7D3T$ zWAcG8rWc8GUb_4YgD~dXz+5OS{qoNs3rnJepSbvDtJUW@(X*!>ljKJJC(NoFZUqn$ z-JmY+88kBiW*V`$VZNC6cfk(I6)FozM9=?fZUEo(A-Y0Y_--m*qLaV?3z)-sqgJel zmrSpKLz0}dbZ{Fl(+xo6|ep$@0^USrXbnSv)hTB^zM`&l(xmvR4sR!+;U#cu;nm zzLAz-&@aA57f+2$hhz`tE3t`eZ96#%iVQ1M0+u(PVCRUBw_C}DgRL*dMQwIsK8zJ6_w4dAK!#9kFj z<*Fg(GaH%uG<>Xc{Kb5xh|oc8WUDLP%7${L-9=$6%>s$beS5f2Meulch1+@4&)V1K zeG%gv+{KKXahLOao3l|n%7QDO#)8MBRrvF0(OX~}uYvPH zX|bG3z{SpQRT6UeiR+VfRunJrsN?NCv=nDmXgrZSz?vOK^j|_f-7S)n{Mrp&@0F?5&1{2pREq!U}{v)EH)~CQLu~YV9^N zMxNK9Q{mZ;58
|XOA=Ks!Zd`kFU-==<<^@G)cFoP-pX7{W9UdkfUxbAg-&u=_? z9jO7pU8ACqBi_&)53yU-78exAkiksj1vSx#Ifn?5CYk&$r=n%+i} z4WPm|-I#qTjA~mEm~4She*3SUx002j#q&>MA8gf=;~jSs&p%hQrCrqR zz2^z-Hew@0Lk#Wy`T??*VQ_a#Q)%zr(0hoqc9;+YkDZ;ENVPMb#Wc>lOX_^wut02z zoV`yY6_XHlzcrk!V7l>eF+m{w0Kt^>@MugV@4NqOnML=sDf}c(3WyU2t5>@?#ZxGz zP=csVGv+@#s&r7h$IbZvcd&C9Hnb)HjTYwtvT%p)6Y6_?gbnOGenZCRhSmA}c+&3= zTV-gUC1BQ}b!flREZsCvSEs#y^YXT7J%H)yzVlf(hC+C4b{)Wn#g`UH)=JK!%uPcg zWt#)B$pugK)-!$k#W^fKmwQwI71ayb(dz%Qg0iQt5w95&{k{3$2aqD61^3c|h@|mV z)zl=@So8}t?O;ZZEZoo{rUE&f_MAl z^$Lg4J2T6-27YIf&T|@Ckp%^`w>%*w*}l+bRha)^92u$E*Z&?Q)_pSezf%ViLp_Ym za9EY{9Fs7Tp>hLB_<{8- z^ciMb`upkW{$!AoKGhAa+IdsTdChw_k|Nt9>*HM|E6w)ens#hM)Q{KXM`}$AG5jW5E@|RQ2Qny1qUVXPj1rvIIxvwhE+eEiR2LW2Hx#`viW zibMY?(q2)h^7Gwc)qiXi*OGKRIT@D+pbiWyZKq<+x7%sb+bX)cOu%~D*iLLLJW*wh zbuA5z;ZFBhkG<|3*KuA|R`NCI+}xai!GAQw=#-!Ne^T3xOm>XpjQgZ)Oe)}|Y||*N z^mx0QLr|RU^9%GR1ocy}@{}Xx=m!ptKHxxwh0srdJL#4Z5g24Krh>lLZx-}DvuM|X zyF-!wqn}517bA-?L?8N20$}`Slj4}exuu^#AO3UdA5YDHWE3$J8?)XP{fm_>CUs*U zAu=o~>UCmL61Bzn4@N%s16oDCeOl+=Tnj_FrEc#jE1-pOwxZv20`B$)*dNgCuYp#H zTOQ=w591%jajxH(4#XtB4E$@!*V=t06%^26DF2X%;vW1@JQ4HlaiE{tD2Oz*v>50N zDGxb-^|oh=rty)R@xlgf`_qym{U1eva?3a)BmmmHOC08#BjjJe(5eXPJnccpHe;_*5u; zXX|$Uq^_wM6+sc8{ljI1aiAvfVUuD5*7@8{1HoX-AaMYR>bVTlnJiWtQ}gg>;XMC; z9zql1WQo&pOk7}++nk+|@$PEnXKMiPIihT<+BFM`i}`V&r(w@mRe|=T2=MVnC5mD9 zM@w~up8S=M2W3?S5&r)Eg0NTryiW4rzpt}7LKpZrS zn+!xcoh&z$eJY-8cD0o5X|JwUb~{>B@tKS#WEVrUll-HZ@C3&E-;0#|`yy!c;Pfy@ zTtqVW1gLJK9X3V4&Ci=r!zXG*fisD-CCi*89B91IUCGT{Re(8Z=)xWFPxi7PaqgYw z-R$K3M2EFD@98q~Tao4P`=Ea~L5JP{6`<}g{`}wX!-L%ZdJP{aU}saNIV^uThig|G ziK_cp)xZws`YDMaA|<_2 z_WME;Mc(ZHFpRCEaGL@%WzMbsq+0G-nH8R~xUuIjyitk$S!Gwr&nEt3rDfDZQ+<@+IpBzB*1D+o8e@prJ!jz0AOOkN{<&(6 zmHZc(30NarR8HDq_)+o&-wrIbwQSkV*M3clIk4EMvT}>0n&yU1ZxD?mzhgEzyUP7z#lhszO_l6yMh=PLmM|I}P>M}hA z1qEO0>p87&NOYhdBPh$#^jsnVFc?4;j!D5HxC%LY%3Obt!ht1}p}eERt!jjF&<{$C zZKZL4A8(TCY3GV-U0rIZ6{t?Ui1Ky;j8Mnv*#?euo<2{)o;i1GoCtWPp7PAyFWIf@ zd);Xu|Jb^o@s_LH$s0rW5td4x)O-QO)&d+!(7M|S*#=K>4x|0>^vM=`8&ipCb=!j< z`M=H`F<&DX1=fp3X|$4u#3?YzxG!Wo|Nd-O`1$k07K1SMUx2zdTbg|75g~Zmg^*;1 zRJvB7%QIDFDD3=nyBl3M&Lz)*1MWt6Ugbe#&= zWt4g2e3X?S@bS>_KX?uwKy!fKMHn5fSJ(XjfujHQb}^LSpZwFUg+h1k7W?VGbt~3I z9VkdNQ}2XgEqwyrBhi|_sp(+1PImr*15MS?5GeUS^j7u)7aBpd%m=9qDX}m!`}zfy zAS#hYI_j^36%9p<3`Rhb^9A5*pYKUKgT>f)D$NQVy7@|droY&BAeMx|+}sIWV9WD( znNDyg-N`X?GY-WQ@V90xYNBO$-VVDpihrZM8PY|^s6ZlIdhlcZ%BCQii9bLMG2ko* zGX0tT?<=wC;NpmZv}Q?hWcTN$RWEGpXYjN*3HLc(AK1;{rOc7+yU3SE3j3Kk$W-9u zyl2AewIqmY&cu*W;%Yj#U)_Czpg(!ctl4a4w1iuU!Hl*hv%xxNw=naK-|1gW29{k) zdG*(^VjjMrp+Fk|`>=0H99ZTeB0i4+IvH8j*qGTatQ9crVE#s2>rDp)d6BPL6= z<|ZqR_S6gv(p$T`^7=3?+xf4O(fHBv#VlAeJC%5&+|cAL!O6+V#X(91Bl$)R3F~4c zd)uvwf!^_Qof$$2eze$nSnEZUIUn!ZFHGXwKL&i|Uys9wf|dzog}o)y$1tBw{P=$+ z#n=|tz>6g77b;LqSe0*LObpbLrJD437S@7qV68*z?&#fIe?;RT9pV=FgxkDlrGir4 zM&D_Ul;s8(&VhzyiT7(d*lB-4(!aQyT!$l=T!xt3zW=1JK|g;~`t2eV_q45~#mJ!G zG5CS4*uT0&`#N;pg@DW|A&h(nF2#EJfP=U3hY`=fqkxtu)_?%98x(c(7KKB2ugekV z;Q9Iobt!KLRmI3O?h4BOt-DL`K~}Tmbcc=>RHs-X&Ql=y*JA?GF~S&yqvS!{y35v= z+Yk6{oc^8GEaE|`RYB@#S5XW1Xr>x-;#b&D8iPsQAQEPsY_nsePJ8X z8q+@w&hn3ku?80dLJL6-Y3QHgTQDS;g?u3WmY%DECuS}4OQ<3ld%7oA_BU^%lY4nb z`29SBZ*Fl{`c*IkS>t?+YCaxx+-{Wk?h;=&J<0cv#4>VF+GuE`mQ+@LBd!F9(oFW3 zS2s!&<*64cafH3?>Ms3!w=Z6-aI|yhQ${^pt;|#6y5S(&|1!)+#yd!l_1&LD@e~mD zA}=3-C-X`m(abG~om6h>u$smLTBW8?_Pef0con^w= zK}2Mc?JJBdoonM;pyl!!DlIWGBWoY|*Q-bKD^<1SO0Z+AfY!n7(f+Al-a5NQd2YOO z*NN*kLCtu6&A7j@fUxKel24$(x`(+VQ2n5t&Z_1w)&z5p1(2G=(C^MS-gqIUE8f3E zCG@!ci7vW<_-Z8YT=%{FJ?EOr4SAoNn^B*`q#BK)eJH-lIN1(Fo@Oc0Gd8ZB% zuzK2oY{7o-=(w*w1Hq91-M;iO$9dxG4REC1PsA#*S6CXCG=6F>fK#0#GFut<@vT*7bmh`8C`Z0#RvmaN={@5YtaJq#nJ z<20cI7gw=d%od$K#3C6Jnt>tSNQv9-?{DZVLb0HG`Rjs*_I`O!ymZ}kuGN_Xqy9#e z^A!h5D4t&CzTS;3F~c=iNr)((ik+NF<{_T782&N6G%LU-!80DqHy-mp115TQkl_5G z4M!;@gxogMu!lG@xYzs^6nWWZ0 zAMX3 ze!S<7Q5RCdF( zt5?a9^`6GX#=*F2SH>Xo*#5FLI64E1M!heN%71PsON@#CuHnttT%_w#Sh5 zRj09z!%25#71w_9_R&r@+n6CdsrwXYV{WyT_?9Btt%$`mp|z^UgVw_~1oC~Vdnobf z8b^xZ_tHL`pfb~cfa6zpS|1b|;fmGQASawN8@QPrwn#W3%t`*17DbMmH#!SxXx}h` zL$V)o(`J@wBTqLRU}40Db!OsmT_b)@Fi3GK4(G)<{$e>Y;!1Q8gMl?2=r=52aLSX7 zAd?aVo*ym1tu_|WGQb8*=m3}i7;GGUfNLfYJXUbD_zI)(k9+koM)$FeWhwX-O*`wP z!wp$qU0D;=wCaAIM7*aQXodsA8??Z=6$BI_N!-c#mmlD~rw$KEdQuaCB7%w(7pt+> zi`AbZyYKm)Fn|Gt!1L2g=IrbFu@Ck4oe`bpSWvpc!htgY#n8s<`#;7$&`Ym1Mu)a+!6OQQLzHM%w6$v~v$#_>+1!$R-4>5I_ZpyWA*)9$vWMb7GbmIcb;V zzGRHSK{E#SVuE|P_^KPSa6~mtf7|Nnt|misCn0H0NXEvJ;R@5sFARRZF~$xLSQdj( z_IoX~SJuc#MKXNX_j|?Qg`V-t7xj=s{dJ2ODl$zc$l57m{#&k zkG3%c898f;+CS=a^)x31XKGGoRX6n+z$%VqB1IS6>87$VFvbZflr756PKRosZWHoS zq2DX$C|;|V+FBkPdV^k@)YxN^w$hVJraCj-H+}L=HosdXIf;AN^l-jn_y29a*m|;( zFf_?^FGD~1|B!Fj{rx+|2R6mLJy|PxD*SyF*zh(@a&T9Mlqn3%K_AdFA=HjX<-(Wl znV0c>onh^8d|#YpP>b7!lQT<#MRBAUj3!#Y$V}}8pLzhtZq9%mf*B}RL{(z2xIH&q zK~Qwm^g9BlMzfVT1Ssl+&APIz(^C-6Sn&vAG*0^X?hr! ztQ!_f;V@k?lyFcAh<9AK!`ODFs&|rry1e2=XvgW%B? zy>AjdU%R#)hTV%r_^2hVTa)Ts!)^qUe`qXzMS_r*(M358`igu`z4F6U2xvhaKWXdw zS7r$#NS5i&EmCemEQ?+UniaDbs0h?>CBdGNv^7W#fUfdc157EbakKbqz7XmEr+k> z0IFh!?gQz>;qFp4HL`Lxyul zD^}s$8ak1Vm7g85^yu4e9D;E7iJw5a$L|WX+vfC&!Gs%T|5|i3DO+hVpsTKi_wjxQ zQ$sE!UPsyPF7trDw`?lDlCgm4T#k6_`U<^N!=;Stac^N5+3!2w@JP_7qJ@L(+LnR$ zBgoS>;yM~uIyDAgC-Tk_C$_%h4PO<7l15?3`5a{28DLv@ySt1I>ry<*&mdacmie~4 z>b(*N=?;5*Z0INH8|9n|{2Tx<5I4VHE@tw2Ef=l4NqwW6ESCev?=#S^60v~gG)3bJmV@{9=6*}rzG*I+uef4uZ0Y!$vG%x= z4aIYIrp&m!@g>B8p|?25lfC#O_Wxy5roJU8_hcPZQI})^#9;`e1{1St-*Cv(UFV^u zc;sg{CG(+P%dcS5qLD26nmdL2zh6>4QAl2sS~<0`x_^a{SC_h#<~*0*ieqo_zZ&BEC4Jamj_gV7^eHX% zrwa!qK?NME;ogX_Q`06GMO>_Lvrn+hySc}KTfveQfvZ}^KjcDD!pE)K5mr*bYJB99>BtodurE10d@ z7;TbM{D1Vs8l@-e8<{)G3&Dg^3RfDVO|CUuNsu@q%Qs1(_B9Ht%@Y~Ge%Tz^aVZM{zoMX+j<-3DQD^u&)xnZ;+!P7N==6ApM&OLkX&NdEtDZPPYf42I@FP3Z6 znTsRQVx|J{6HwW1&GoL@cdO^Enter to follow the link directly, or you can press Alt+ (Windows/Linux) or Option+ (Mac) to open the hover card. + +With the hover card open, you can press Enter to follow the link, or you can press Esc to close the hover card. From 05bd510fda2ad62ec453d9faebd46bb7bd451d13 Mon Sep 17 00:00:00 2001 From: Allan Guigou <34221163+AllanGuigou@users.noreply.github.com> Date: Tue, 26 Sep 2023 15:02:36 -0400 Subject: [PATCH 05/13] Update section-using-concurrency-jobs.md (#40919) Co-authored-by: Joe Clark <31087804+jc-clark@users.noreply.github.com> Co-authored-by: jc-clark --- data/reusables/actions/actions-group-concurrency.md | 5 ++++- .../actions/jobs/section-using-concurrency-jobs.md | 6 ------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/data/reusables/actions/actions-group-concurrency.md b/data/reusables/actions/actions-group-concurrency.md index a8c47bf599..a38c87ed0d 100644 --- a/data/reusables/actions/actions-group-concurrency.md +++ b/data/reusables/actions/actions-group-concurrency.md @@ -2,7 +2,10 @@ When a concurrent job or workflow is queued, if another job or workflow using th {% note %} -**Note:** The concurrency group name is case insensitive. For example, `prod` and `Prod` will be treated as the same concurrency group. +**Notes:** + +- The concurrency group name is case insensitive. For example, `prod` and `Prod` will be treated as the same concurrency group. +- Ordering is not guaranteed for jobs or runs using concurrency groups, they are handled in the order that they are processed. {% endnote %} diff --git a/data/reusables/actions/jobs/section-using-concurrency-jobs.md b/data/reusables/actions/jobs/section-using-concurrency-jobs.md index 81aaf28d60..9bda5ba7d4 100644 --- a/data/reusables/actions/jobs/section-using-concurrency-jobs.md +++ b/data/reusables/actions/jobs/section-using-concurrency-jobs.md @@ -1,9 +1,3 @@ -{% note %} - -**Note:** When concurrency is specified at the job level, order is not guaranteed for jobs or runs that queue within 5 minutes of each other. - -{% endnote %} - You can use `jobs..concurrency` to ensure that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. Allowed expression contexts: [`github`](/actions/learn-github-actions/contexts#github-context), [`inputs`](/actions/learn-github-actions/contexts#inputs-context), [`vars`](/actions/learn-github-actions/contexts#vars-context), [`needs`](/actions/learn-github-actions/contexts#needs-context), [`strategy`](/actions/learn-github-actions/contexts#strategy-context), and [`matrix`](/actions/learn-github-actions/contexts#matrix-context). For more information about expressions, see "[AUTOTITLE](/actions/learn-github-actions/expressions)." You can also specify `concurrency` at the workflow level. For more information, see [`concurrency`](/actions/using-workflows/workflow-syntax-for-github-actions#concurrency). From c4aa4e982936c9124f1925be434ce3480c979edf Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 26 Sep 2023 15:06:27 -0400 Subject: [PATCH 06/13] Measure repeat backend calls for the same pageinfo (#43341) Co-authored-by: Robert Sese <734194+rsese@users.noreply.github.com> --- src/pageinfo/middleware.js | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/pageinfo/middleware.js b/src/pageinfo/middleware.js index 8399d5891f..741091210f 100644 --- a/src/pageinfo/middleware.js +++ b/src/pageinfo/middleware.js @@ -83,6 +83,22 @@ const pageinfoMiddleware = (req, res, next) => { return next() } +// THIS IS AN EXPERIMENT. THIS CODE WILL BE DELETED IN THE NEAR FUTURE. +// The cache-control headers (and surrogate-control) are set to be +// aggressive. That means that in theory, after a deployment, when Fastly +// has been purged accordingly, the next time a pageinfo is requested, +// it'll come here to the backend code and produce the JSON response, +// and once it's done it once, it won't be needed again, because, +// in theory, the CDN will have cached it. +// But pageinfo requests are very frequent. So frequent that sometimes, +// the delay of CDN is longer than the chance of it being requested again +// from the backend. This can possibly still happen even with a origin +// shield. +// In this experiment we want to measure how often this happens. +// We are going to test how often the CDN requests the *same* pageinfo from the +// backend. +const CACHEABLE_PATHNAMES = new Map() + router.get( '/v1', validationMiddleware, @@ -159,8 +175,20 @@ router.get( intro, } - const tags = ['version:v1', `pathname:${pathname}`] - statsd.increment('api.pageinfo', 1, tags) + const tags = [ + // According to https://docs.datadoghq.com/getting_started/tagging/#define-tags + // the max length of a tag is 200 characters. Most of ours are less than + // that but we truncate just to be safe. + `pathname:${pathname}`.slice(0, 200), + ] + statsd.increment('pageinfo.lookup', 1, tags) + + // See lengthy comment above about the experiment and the + // CACHEABLE_PATHNAMES global Map object. + if (CACHEABLE_PATHNAMES.has(pathname)) { + statsd.increment('pageinfo.cacheable', CACHEABLE_PATHNAMES.get(pathname), tags) + } + CACHEABLE_PATHNAMES.set(pathname, (CACHEABLE_PATHNAMES.get(pathname) || 0) + 1) defaultCacheControl(res) From 6951c34454d16704effe64cf80fdba352f9e3681 Mon Sep 17 00:00:00 2001 From: Robert Sese <734194+rsese@users.noreply.github.com> Date: Tue, 26 Sep 2023 17:19:28 -0500 Subject: [PATCH 07/13] guard against bad 'enterprise-server@' match when checking ghes version (#43352) --- src/archives/lib/is-archived-version.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/archives/lib/is-archived-version.js b/src/archives/lib/is-archived-version.js index ed801679dd..a99099b56a 100644 --- a/src/archives/lib/is-archived-version.js +++ b/src/archives/lib/is-archived-version.js @@ -21,7 +21,7 @@ export function isArchivedVersionByPath(pathToCheck) { // extract enterprise version from path, e.g. 2.16 const requestedVersion = pathToCheck.includes('enterprise-server@') - ? pathToCheck.match(patterns.getEnterpriseServerNumber)[1] + ? pathToCheck.match(patterns.getEnterpriseServerNumber)?.[1] : pathToCheck.match(patterns.getEnterpriseVersionNumber)[1] // bail if the request version is not deprecated From 7388ce07be8b6f8065f6e2bd880d96735e54a0bc Mon Sep 17 00:00:00 2001 From: cjfryer <106983702+cjfryer@users.noreply.github.com> Date: Wed, 27 Sep 2023 00:19:41 +0100 Subject: [PATCH 08/13] Correct case of github.event.review.state (#28303) Co-authored-by: Sarah Edwards --- .../actions/using-workflows/events-that-trigger-workflows.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/actions/using-workflows/events-that-trigger-workflows.md b/content/actions/using-workflows/events-that-trigger-workflows.md index 80dc9c1907..33383a477a 100644 --- a/content/actions/using-workflows/events-that-trigger-workflows.md +++ b/content/actions/using-workflows/events-that-trigger-workflows.md @@ -763,7 +763,7 @@ on: jobs: approved: - if: github.event.review.state == 'approved' + if: github.event.review.state == 'APPROVED' runs-on: ubuntu-latest steps: - run: echo "This PR was approved" From 3a07a9619f386e2550545581edf887652324d989 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 27 Sep 2023 08:17:05 +0000 Subject: [PATCH 09/13] =?UTF-8?q?=F0=9F=A4=96=20src/ghes-releases/lib/ente?= =?UTF-8?q?rprise-dates.json=20update=20(#43336)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: heiskr Co-authored-by: Matt Pollard --- src/ghes-releases/lib/enterprise-dates.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ghes-releases/lib/enterprise-dates.json b/src/ghes-releases/lib/enterprise-dates.json index f831add605..46f66ea5ec 100644 --- a/src/ghes-releases/lib/enterprise-dates.json +++ b/src/ghes-releases/lib/enterprise-dates.json @@ -121,7 +121,7 @@ }, "3.6": { "releaseDate": "2022-07-26", - "deprecationDate": "2023-09-12" + "deprecationDate": "2023-09-25" }, "3.7": { "releaseDate": "2022-10-25", From 08aabefa3d78eef7fe1a4d904fd4495f8c698a7d Mon Sep 17 00:00:00 2001 From: Aaron Dewes Date: Wed, 27 Sep 2023 10:29:14 +0200 Subject: [PATCH 10/13] Add RustRover to the list of supported IDEs for Copilot (#28504) Co-authored-by: Jules <19994093+jules-p@users.noreply.github.com> --- content/copilot/getting-started-with-github-copilot.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/copilot/getting-started-with-github-copilot.md b/content/copilot/getting-started-with-github-copilot.md index 5b10df27d5..24ec584ca9 100644 --- a/content/copilot/getting-started-with-github-copilot.md +++ b/content/copilot/getting-started-with-github-copilot.md @@ -47,6 +47,7 @@ If you use a JetBrains IDE, you can view and incorporate suggestions from {% dat - PyCharm (Professional, Community, Educational) - Rider - RubyMine + - RustRover - WebStorm For more information, see the [JetBrains IDEs](https://www.jetbrains.com/products/) tool finder. From 17e64b5452a61c43c91f4154bde9b933450c293e Mon Sep 17 00:00:00 2001 From: Sophie <29382425+sophietheking@users.noreply.github.com> Date: Wed, 27 Sep 2023 10:40:52 +0200 Subject: [PATCH 11/13] Fix numbered list in "Troubleshooting the 2 GB push limit" (#43365) --- .../using-git/troubleshooting-the-2-gb-push-limit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/get-started/using-git/troubleshooting-the-2-gb-push-limit.md b/content/get-started/using-git/troubleshooting-the-2-gb-push-limit.md index 367cbf2955..be0bc566b7 100644 --- a/content/get-started/using-git/troubleshooting-the-2-gb-push-limit.md +++ b/content/get-started/using-git/troubleshooting-the-2-gb-push-limit.md @@ -29,7 +29,7 @@ You can avoid hitting the limit by breaking your push into smaller parts, each o git log --oneline --reverse refs/heads/BRANCH-NAME | awk 'NR % 1000 == 0' ``` - This command reveals every 1000th commit. You can increase or decrease the number to adjust the step size. + This command reveals every 1000th commit. You can increase or decrease the number to adjust the step size. 1. Push each of these commits one at a time to your {% data variables.product.prodname_dotcom %} hosted repository. From 1929ebdaa0875a708e61a3960f3e287f3cb27d0b Mon Sep 17 00:00:00 2001 From: Matt Pollard Date: Wed, 27 Sep 2023 16:54:21 +0200 Subject: [PATCH 12/13] Revise documentation on system logs for GitHub Enterprise Server (#35254) --- .../using-ldap.md | 4 + .../troubleshooting-saml-authentication.md | 8 +- .../about-system-logs.md | 199 +++++++++++++++--- .../enterprise-server/3-10/0.yml | 2 +- .../release-notes/enterprise-server/3-9/0.yml | 2 +- 5 files changed, 177 insertions(+), 38 deletions(-) diff --git a/content/admin/identity-and-access-management/using-ldap-for-enterprise-iam/using-ldap.md b/content/admin/identity-and-access-management/using-ldap-for-enterprise-iam/using-ldap.md index 289ad80890..28e3fbae13 100644 --- a/content/admin/identity-and-access-management/using-ldap-for-enterprise-iam/using-ldap.md +++ b/content/admin/identity-and-access-management/using-ldap-for-enterprise-iam/using-ldap.md @@ -219,3 +219,7 @@ You can also [use the API to trigger a manual sync](/rest/enterprise-admin#ldap) If [LDAP Sync is enabled](#enabling-ldap-sync), removing a user's LDAP credentials will suspend their account after the next synchronization run. If LDAP Sync is **not** enabled, you must manually suspend the {% data variables.product.prodname_ghe_server %} account after you remove the LDAP credentials. For more information, see "[AUTOTITLE](/admin/user-management/managing-users-in-your-enterprise/suspending-and-unsuspending-users)". + +## About logging for LDAP + +Log events for LDAP appear in systemd journal logs on {% data variables.location.product_location %}. You'll find events related to LDAP operations in the logs for `github-unicorn` and `github-resqued`. For more information, see "[AUTOTITLE](/admin/monitoring-managing-and-updating-your-instance/monitoring-your-appliance/about-system-logs#journal-logs-for-the-github-application)." diff --git a/content/admin/identity-and-access-management/using-saml-for-enterprise-iam/troubleshooting-saml-authentication.md b/content/admin/identity-and-access-management/using-saml-for-enterprise-iam/troubleshooting-saml-authentication.md index 9cba2b8512..18ca663d86 100644 --- a/content/admin/identity-and-access-management/using-saml-for-enterprise-iam/troubleshooting-saml-authentication.md +++ b/content/admin/identity-and-access-management/using-saml-for-enterprise-iam/troubleshooting-saml-authentication.md @@ -20,7 +20,7 @@ topics: ## About problems with SAML authentication -{% data variables.product.product_name %} logs error messages for failed SAML authentication in the {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}logs{% elsif ghes < 3.9 %}authentication log{% endif %} at {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}_/var/log/github/unicorn.log_ or _/var/log/github/resqued.log_{% elsif ghes < 3.9 %}_/var/log/github/auth.log_{% endif %}. You can review responses in {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}these log files{% elsif ghes < 3.9 %}this log file{% endif %}, and you can also configure more verbose logging. +{% data variables.product.product_name %} logs error messages for failed SAML authentication in the {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}systemd journal logs{% elsif ghes < 3.9 %}authentication log at{% endif %} {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}for the `github-unicorn` container{% elsif ghes < 3.9 %}_/var/log/github/auth.log_{% endif %}. You can review responses in {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}this log{% elsif ghes < 3.9 %}this log file{% endif %}, and you can also configure more verbose logging. For more information about SAML response requirements, see "[AUTOTITLE](/admin/identity-and-access-management/using-saml-for-enterprise-iam/saml-configuration-reference#saml-response-requirements)." @@ -42,12 +42,14 @@ You can configure {% data variables.product.product_name %} to write verbose deb {% data reusables.enterprise-accounts.options-tab %} 1. Under "SAML debugging", select the drop-down and click **Enabled**. 1. Attempt to sign into {% data variables.location.product_location %} through your SAML IdP. -1. Review the debug output in {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}_/var/log/github/unicorn.log_ or _/var/log/github/resqued.log_{% elsif ghes < 3.9 %}_/var/log/github/auth.log_{% endif %} on {% data variables.location.product_location %}. +1. Review the debug output in {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}the systemd journal for `github-unicorn`{% elsif ghes < 3.9 %}_/var/log/github/auth.log_{% endif %} on {% data variables.location.product_location %}. {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}For more information, see "[AUTOTITLE](/admin/monitoring-managing-and-updating-your-instance/monitoring-your-appliance/about-system-logs#system-logs-in-the-systemd-journal-for-github-enterprise-server)."{% endif %} 1. When you're done troubleshooting, select the drop-down and click **Disabled**. ## Decoding responses -Some output in {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}_/var/log/github/unicorn.log_ or _/var/log/github/resqued.log_{% elsif ghes < 3.9 %}_/var/log/github/auth.log_{% endif %} may be Base64-encoded. You can access the administrative shell and use the `base64` utility on {% data variables.location.product_location %} to decode these responses. For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/accessing-the-administrative-shell-ssh)." +Some output in {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}the systemd journal for `github-unicorn`{% elsif ghes < 3.9 %}_/var/log/github/auth.log_{% endif %} may be Base64-encoded. You can access the administrative shell and use the `base64` utility on {% data variables.location.product_location %} to decode these responses. For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/accessing-the-administrative-shell-ssh)." + +To decode the output, run the following command, replacing ENCODED_OUTPUT with the encoded output from the log. ```shell base64 --decode ENCODED_OUTPUT diff --git a/content/admin/monitoring-managing-and-updating-your-instance/monitoring-your-instance/about-system-logs.md b/content/admin/monitoring-managing-and-updating-your-instance/monitoring-your-instance/about-system-logs.md index bff7f2d5cb..f2ed604a15 100644 --- a/content/admin/monitoring-managing-and-updating-your-instance/monitoring-your-instance/about-system-logs.md +++ b/content/admin/monitoring-managing-and-updating-your-instance/monitoring-your-instance/about-system-logs.md @@ -1,6 +1,6 @@ --- title: About system logs -intro: '{% data variables.product.product_name %} keeps error and message logs for system events. Logs are useful for identifying user, application and system-level actions and exceptions.' +intro: 'To help administrators understand activity and errors, {% data variables.product.product_name %} stores system logs.' versions: ghes: '*' type: overview @@ -14,55 +14,188 @@ redirect_from: - /admin/monitoring-managing-and-updating-your-instance/monitoring-your-appliance/about-system-logs --- -## System logs +## About system logs for {% data variables.product.product_name %} -By default, system logs for {% data variables.product.product_name %} are automatically rotated every 24 hours and are retained for seven days. System logs include system-level events, application logs, and Git events data. As log files are often being written to and can be large in size, it may be beneficial to extract and parse relevant log entries on a host separate to your {% data variables.product.prodname_ghe_server %} instance. +To trace, review, and troubleshoot activity and exceptions on {% data variables.location.product_location %}, you can review system logs. Your instance stores the following two types of system logs. -You can forward system logs to a third-party system or server for longer retention. For more information see "[AUTOTITLE](/admin/monitoring-activity-in-your-enterprise/exploring-user-activity/log-forwarding)." +- Plain text log files on disk, stored by syslog or specific services +- Binary log files, stored by journald -In addition to reviewing your system logs, you can monitor activity in your enterprise in other ways, such as viewing audit logs, push logs and managing global webhooks. For more information, see "[AUTOTITLE](/admin/monitoring-activity-in-your-enterprise)." +By default, {% data variables.product.product_name %} rotates system logs automatically every 24 hours and retains rotated logs for seven days. System logs include system-level events, application logs, and data about Git events. Because log files are written often and can be large in size, you may prefer to extract and parse log entries on a host separate from {% data variables.location.product_location %}. -## Types of logs +People with administrative SSH access to a {% data variables.product.product_name %} instance can access and read system logs. For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/accessing-the-administrative-shell-ssh)." -Listed below are the main logs used by the {% data variables.product.product_name %} appliance and their functions: +You can forward system logs and audit logs to an external system for analysis or longer retention. For more information see "[AUTOTITLE](/admin/monitoring-activity-in-your-enterprise/exploring-user-activity/log-forwarding)" and "[AUTOTITLE](/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise)." -| Path | Description​ | -|------|-------------| -| `/var/log/github/audit.log` | Audited user, repository and system events. -| `/var/log/github/resqued.log` | Details about background jobs{% ifversion opentelemetry-and-otel-log-migration-phase-1 %}, including jobs that involve authentication{% endif %}. -| `/var/log/github/unicorn.log` | API and web interface traffic{% ifversion opentelemetry-and-otel-log-migration-phase-1 %}, including authentication attempts{% endif %}. -| `/var/log/github/exceptions.log` | Application-level errors. -| `/var/log/haproxy.log` | All IP traffic reaching the appliance. -| `/var/log/hookshot/resqued.log` | Webhook delivery and failures. -{%- ifversion ghes < 3.9 %} -| `/var/log/github/auth.log` | Authentication requests, whether through built in, LDAP, CAS or SAML methods. +In addition to reviewing your system logs, you can monitor activity on your instance in other ways. For example, you can review audit logs and push logs, or configure global webhooks. For more information, see "[AUTOTITLE](/admin/monitoring-activity-in-your-enterprise)." + +{% note %} + +**Note**: The following lists of logs are not intended to be comprehensive. + +{% endnote %} + +## System log files + +{% data variables.product.product_name %} writes several categories of system logs to the instance's disk in plain text. People with administrative SSH access to the instance can parse these files using Linux command-line tools such as `cat`, `tail`, `head`, `less`, and `more`. + +{%- ifversion ghes < 3.10 %} +- [Log files for authentication](#log-files-for-authentication) {%- endif %} -| `/var/log/github/gitauth.log` | All Git authentication requests. +- [Log files for databases](#log-files-for-databases) +- [Log files for the {% data variables.product.prodname_dotcom %} application](#log-files-for-the-github-application) +- [Log files for the HTTP server](#log-files-for-the-http-server) +- [Log files for instance configuration](#log-files-for-instance-configuration) +- [Log files for the {% data variables.enterprise.management_console %}](#log-files-for-themanagement-console) +- [Log files for search](#log-files-for-search) +- [Log files for storage](#log-files-for-storage) +- [Log files for webhooks](#log-files-for-webhooks) +- [Log files for system services](#log-files-for-system-services) -Git activity and authentication requests are processed by the `babeld` service. +{% ifversion ghes < 3.10 %} -Several {% data variables.product.product_name %} services, such as the `babeld` service, are containerized. Containerized logs are written to the `systemd journal`, and can be queried at any time using the `journalctl` command. +### Log files for authentication -## Audited system events +The following log files contain events from services that provide authentication functionality for your instance. -All entries from the `audit.log` file use and can be filtered with the `github_audit` keyword. +| Path | Description | +| :- | :- | +|
/var/log/github/auth.log
| Records authentication requests to the {% data variables.product.prodname_dotcom %} application on your instance. | +|
/var/log/github/ldap-sync.log
| If LDAP is configured for the instance and LDAP Sync is enabled, records events associated with LDAP sync. For more information, see "[AUTOTITLE](/admin/identity-and-access-management/using-ldap-for-enterprise-iam/using-ldap#enabling-ldap-sync)." | +|
/var/log/github/ldap.log
| If LDAP is configured for the instance, records events associated with LDAP. For more information, see "[AUTOTITLE](/admin/identity-and-access-management/using-ldap-for-enterprise-iam/using-ldap)." | -For example, this entry shows that a new repository was created. +{% endif %} -```text -Oct 26 01:42:08 github-ent github_audit: {:created_at=>1351215728326, :actor_ip=>"10.0.0.51", :data=>{}, :user=>"some-user", :repo=>"some-user/some-repository", :actor=>"some-user", :actor_id=>2, :user_id=>2, :action=>"repo.create", :repo_id=>1, :from=>"repositories#create"} +### Log files for databases + +The following log files record events from database services on your instance. + +| Path | Description | +| :- | :- | +|
/var/log/mysql/mysql.log
| Records events related to the instance's MySQL database. | +|
/var/log/mysql/mysql.err
| Records errors related to the instance's MySQL database. | + +### Log files for the {% data variables.product.prodname_dotcom %} application + +The following log files record events from the {% data variables.product.prodname_dotcom %} application on your instance. + +| Path | Description | +| :- | :- | +|
/var/log/github/audit.log
| Records user, repository, and system events for activity in the {% data variables.product.prodname_dotcom %} application on your instance. You can filter entries in the log using the `github_audit` keyword. | +|
/var/log/github/exceptions.log
| Records exceptions that the {% data variables.product.prodname_dotcom %} application encounters. | +|
/var/log/github/gitauth.log
| Records Git authentication requests using HTTPS or SSH. The `babeld` service processes all Git authentication requests and activity. | +|
/var/log/github/production.log
| Records internal events for the {% data variables.product.prodname_dotcom %} application. For requests to the website, includes the controller action that responded. May contain entries with different structures, depending on the origin of the job or request. | + +### Log files for the HTTP server + +The following log files record events from the instance's HTTP server. + +| Path | Description | +| :- | :- | +|
/var/log/nginx/error.log*
| Records errors for web requests. | +|
/var/log/nginx/gist.log
| Records HTTP requests related to gists. For more information, see "[AUTOTITLE](/get-started/writing-on-github/editing-and-sharing-content-with-gists/creating-gists)." | +|
/var/log/nginx/gist.error.log
| Records errors related to HTTP requests for gists. | +|
/var/log/nginx/github.log
| Records HTTP requests to the {% data variables.product.prodname_dotcom %} application. | +|
/var/log/nginx/github.error.log
| Records errors associated with HTTP requests. | +|
/var/log/nginx/pages.log
| Records HTTP requests associated with {% data variables.product.prodname_pages %}. For more information, see "[AUTOTITLE](/pages/getting-started-with-github-pages/about-github-pages)." | +|
/var/log/nginx/pages.error.log
| Records errors related to HTTP requests for {% data variables.product.prodname_pages %}. | +{%- ifversion ghes < 3.7 %} +|
/var/log/nginx/render.log
| Records HTTP requests associated with the `render` service, which renders content in the web UI such as GeoJSON, Jupyter notebooks, PDF, PSD, Solidworks, and SVG. | +|
/var/log/nginx/render.error.log
| Records errors associated with HTTP requests for the `render` service. | +{%- endif %} + +### Log files for the {% data variables.enterprise.management_console %} + +The following log files contain events from your instance's {% data variables.enterprise.management_console %}. For more information, see "[AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/about-the-management-console)." + +| Path | Description | +| :- | :- | +{%- ifversion ghes > 3.6 %} +|
/var/log/enterprise-manage/audit.log
| Records activity in the instance's {% data variables.enterprise.management_console %}. | +{%- endif %} +|
/var/log/enterprise-manage/unicorn.log
| Records HTTP and HTTPS operations that administrators perform in the {% data variables.enterprise.management_console %} using the web UI or REST API. | + +### Log files for instance configuration + +The following log files contain events related to the configuration of your instance. + +| Path | Description | +| :- | :- | +|
/data/user/common/ghe-config.log
| Records events associated with each configuration run. If a configuration run fails, output to the log stops. This log also records information about migrations that run during the process of upgrading an instance's software. For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/command-line-utilities#ghe-config-apply)." | + +### Log files for search + +The following log files contain events from services that provide search functionality for your instance. + +| Path | Description | +| :- | :- | +|
/var/log/elasticsearch/github-enterprise.log
| Records events associated with the Elasticsearch service, which your instance uses to provide search services. | + +### Log files for webhooks + +The following log files contain events from the service that delivers webhook payloads for your instance. For more information, see "[AUTOTITLE](/webhooks-and-events/webhooks/about-webhooks)." + +| Path | Description | +| :- | :- | +|
/var/log/hookshot/resqued.log
| Records webhook deliveries and failures from your instance. | +|
/var/log/hookshot/unicorn.log
| Records webhook events that are triggered on your instance. | + +### Log files for system services + +The following logs contain events from system services on your instance. + +| Path | Description | +| :- | :- | +|
/var/log/coredumps.log
| Records information about system processes that terminate unexpectedly. | +|
/var/log/boot.log
| Records information about the instance's boot process. | +|
/var/log/chrony/
| This directory contains logs related to Network Time Protocol (NTP) synchronization and the instance's system clock. For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/configuring-time-synchronization)." | +|
/var/log/haproxy.log
| Records all web and API requests to the instance. For HTTP connections, entries include the URL that the client requested, as well as the HTTP method for the request. | +|
/var/log/ssh-console-audit.log
| Records commands that administrators run using the administrative shell (SSH). For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/accessing-the-administrative-shell-ssh)." | +|
/var/log/mail-replies/metroplex.log
| Records information about mail that your instance receives. For more information, see "[AUTOTITLE](/admin/configuration/configuring-your-enterprise/configuring-email-for-notifications)." | + +## System logs in the systemd journal + +Several {% data variables.product.product_name %} services, such as the `babeld` service, are containerized. {% data variables.product.product_name %} writes system logs for these services to the systemd journal in a binary format. + +People with administrative SSH access to the instance can parse these logs using the `journalctl` command. For more information, see [journalctl(1)](http://man7.org/linux/man-pages/man1/journalctl.1.html) in the online Linux manual pages. + +To view logs in the systemd journal, run the following command, replacing SERVICE-NAME with a service name from the following list of logs. + +```shell +journalctl -t SERVICE-NAME ``` -This example shows that commits were pushed to a repository. +- [Journal logs for the {% data variables.product.prodname_dotcom %} application](#journal-logs-for-the-github-application) +- [Journal logs for Git](#journal-logs-for-git) +- [Journal logs for storage](#journal-logs-for-storage) -```text -Oct 26 02:19:31 github-ent github_audit: { "pid":22860, "ppid":22859, "program":"receive-pack", "git_dir":"/data/repositories/some-user/some-repository.git", "hostname":"github-ent", "pusher":"some-user", "real_ip":"10.0.0.51", "user_agent":"git/1.7.10.4", "repo_id":1, "repo_name":"some-user/some-repository", "transaction_id":"b031b7dc7043c87323a75f7a92092ef1456e5fbaef995c68", "frontend_ppid":1, "repo_public":true, "user_name":"some-user", "user_login":"some-user", "frontend_pid":18238, "frontend":"github-ent", "user_email":"some-user@github.example.com", "user_id":2, "pgroup":"github-ent_22860", "status":"post_receive_hook", "features":" report-status side-band-64k", "received_objects":3, "receive_pack_size":243, "non_fast_forward":false, "current_ref":"refs/heads/main" } -``` +### Journal logs for the {% data variables.product.prodname_dotcom %} application -## Support bundles +The following logs record events from the {% data variables.product.prodname_dotcom %} application on your instance. -The support bundle includes system logs and all audit information is logged to the `audit.log` file in the `github-logs` directory. For more information, see "[AUTOTITLE](/support/contacting-github-support/providing-data-to-github-support)." +| Service name | Description | +| :- | :- | +|
github-resqued
| Records events related to background jobs. {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}If the job involves built-in or external authentication, this log includes information about the request.

If the instance uses LDAP authentication and LDAP Sync is enabled, events for LDAP Sync appear in this log. For more information, see "[AUTOTITLE](/admin/identity-and-access-management/using-ldap-for-enterprise-iam/using-ldap#enabling-ldap-sync)."{% endif %} | +|
github-unicorn
| Records HTTP and HTTPS operations that users perform in the instance's web UI or via the APIs. {% ifversion opentelemetry-and-otel-log-migration-phase-1 %}If the operation involves built-in or external authentication, this log includes information about the request.

If debug logging is enabled for LDAP or SAML authentication, the debug-level information for authenticated requests appear in this log. For more information, see "[AUTOTITLE](/admin/identity-and-access-management/using-ldap-for-enterprise-iam/using-ldap)" or "[AUTOTITLE](/admin/identity-and-access-management/using-saml-for-enterprise-iam/troubleshooting-saml-authentication#configuring-saml-debugging)."{% endif %} | -## Further reading +### Journal logs for Git -- [Linux man page for the `journalctl` command](https://man7.org/linux/man-pages/man1/journalctl.1.html) +The following logs contain events related to Git activity on your instance. + +| Service name | Description | +| :- | :- | +|
babeld
| Records events for all Git activity on the instance, including authentication to access the repository. | +|
codeload
| Records events for activity related to the generation or retrieval of code archives for repositories on the instance. | +|
gpgverify
| Records events related to commit signature verification. For more information, see "[AUTOTITLE](/authentication/managing-commit-signature-verification/about-commit-signature-verification)." | + +### Journal logs for storage + +The following logs contain events from services that store or retrieve data on your instance. + +| Service name | Description | +| :- | :- | +|
alambic
| Records events related to the storage and retrieval of files, such as {% data variables.large_files.product_name_short %} objects, avatar images, file attachments from comments in the web UI, and release archives. | + +## About system logs in support bundles + +If you generate a support bundle, the file includes system logs. For more information, see "[AUTOTITLE](/support/contacting-github-support/providing-data-to-github-support)." diff --git a/data/release-notes/enterprise-server/3-10/0.yml b/data/release-notes/enterprise-server/3-10/0.yml index e17422c763..41ad66927b 100644 --- a/data/release-notes/enterprise-server/3-10/0.yml +++ b/data/release-notes/enterprise-server/3-10/0.yml @@ -214,7 +214,7 @@ sections: - `log_message`, `msg`, or `message` is now `Body`. - `now` is now `Timestamp`. - Custom field names such as `gh.repo.id` or `graphql.operation.name` use semantic names. - - Log statements that the instance would previously write to `auth.log`, `ldap.log`, or `ldap-sync.log` now appear in containerized logs for `github-unicorn` if the statement originated from a web request, or in logs for `github-resqued` if the statement originated from a background job. + - Log statements that the instance would previously write to `auth.log`, `ldap.log`, or `ldap-sync.log` now appear in containerized logs for `github-unicorn` if the statement originated from a web request, or in logs for `github-resqued` if the statement originated from a background job. For more information about containerized logs, see "[AUTOTITLE](/admin/monitoring-managing-and-updating-your-instance/monitoring-your-appliance/about-system-logs#system-logs-in-the-systemd-journal)." For a full list of field mappings, download the [OpenTelemetry attribute mapping CSV for GitHub Enterprise Server 3.9](/assets/ghes-3.9-opentelemetry-attribute-mappings.csv) and the [OpenTelemetry attribute mapping CSV for GitHub Enterprise Server 3.10](/assets/ghes-3.10-opentelemetry-attribute-mappings.csv). This change is part of GitHub's gradual migration to internal semantic conventions for [OpenTelemetry](https://opentelemetry.io/), and additional field names will change in upcoming releases. diff --git a/data/release-notes/enterprise-server/3-9/0.yml b/data/release-notes/enterprise-server/3-9/0.yml index e6e6d496c6..d23b5e9099 100644 --- a/data/release-notes/enterprise-server/3-9/0.yml +++ b/data/release-notes/enterprise-server/3-9/0.yml @@ -296,7 +296,7 @@ sections: - `log_message`, `msg`, or `message` is now `Body`. - `now` is now `Timestamp`. - Custom field names such as `gh.repo.id` or `graphql.operation.name` use semantic names. - - Log statements that the instance would previously write to `auth.log`, `ldap.log`, or `ldap-sync.log` now appear in containerized logs for `github-unicorn` if the statement originated from a web request, or in logs for `github-resqued` if the statement originated from a background job. + - Log statements that the instance would previously write to `auth.log`, `ldap.log`, or `ldap-sync.log` now appear in containerized logs for `github-unicorn` if the statement originated from a web request, or in logs for `github-resqued` if the statement originated from a background job. For more information about containerized logs, see "[AUTOTITLE](/admin/monitoring-managing-and-updating-your-instance/monitoring-your-appliance/about-system-logs#system-logs-in-the-systemd-journal)." For a full list of field mappings, download the [OpenTelemetry attribute mapping CSV](/assets/ghes-3.9-opentelemetry-attribute-mappings.csv). This change is part of GitHub's gradual migration to internal semantic conventions for [OpenTelemetry](https://opentelemetry.io/), and additional field names will change in upcoming releases. From febb03a578b442ed746ca87bb797c8eb326405e1 Mon Sep 17 00:00:00 2001 From: Jess Bees Date: Wed, 27 Sep 2023 11:20:24 -0400 Subject: [PATCH 13/13] Update IP allow list docs to indicate when Pages needs configuration (#43124) Co-authored-by: Matt Pollard --- ...rk-traffic-to-your-enterprise-with-an-ip-allow-list.md | 8 ++++++++ ...managing-allowed-ip-addresses-for-your-organization.md | 8 ++++++++ data/reusables/pages/ip-allow-list-pages.md | 3 +++ 3 files changed, 19 insertions(+) create mode 100644 data/reusables/pages/ip-allow-list-pages.md diff --git a/content/admin/configuration/hardening-security-for-your-enterprise/restricting-network-traffic-to-your-enterprise-with-an-ip-allow-list.md b/content/admin/configuration/hardening-security-for-your-enterprise/restricting-network-traffic-to-your-enterprise-with-an-ip-allow-list.md index 162de125ae..bafb1c1edf 100644 --- a/content/admin/configuration/hardening-security-for-your-enterprise/restricting-network-traffic-to-your-enterprise-with-an-ip-allow-list.md +++ b/content/admin/configuration/hardening-security-for-your-enterprise/restricting-network-traffic-to-your-enterprise-with-an-ip-allow-list.md @@ -200,3 +200,11 @@ To ensure seamless use of the OIDC CAP while still applying the policy to OAuth ## Using {% data variables.product.prodname_actions %} with an IP allow list {% data reusables.actions.ip-allow-list-self-hosted-runners %} + +{% ifversion not ghae %} + +## Using {% data variables.product.prodname_pages %} with an IP allow list + +{% data reusables.pages.ip-allow-list-pages %} + +{% endif %} diff --git a/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization.md b/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization.md index 1a1f7e81ae..b3e36dbde5 100644 --- a/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization.md +++ b/content/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization.md @@ -115,3 +115,11 @@ For more information about how to create an allow list for a {% data variables.p ## Using {% data variables.product.prodname_actions %} with an IP allow list {% data reusables.actions.ip-allow-list-self-hosted-runners %} + +{% ifversion not ghae %} + +## Using {% data variables.product.prodname_pages %} with an IP allow list + +{% data reusables.pages.ip-allow-list-pages %} + +{% endif %} diff --git a/data/reusables/pages/ip-allow-list-pages.md b/data/reusables/pages/ip-allow-list-pages.md new file mode 100644 index 0000000000..c2a4399a3f --- /dev/null +++ b/data/reusables/pages/ip-allow-list-pages.md @@ -0,0 +1,3 @@ +If you use a custom {% data variables.product.prodname_actions %} workflow as a publishing source for your {% data variables.product.prodname_pages %} site, to permit the runner to connect and build the site, you must configure a rule for your IP allow list. + +If you don't use a custom workflow, the build runner will have access to the repository for the {% data variables.product.prodname_pages %} site by default. For more information about publishing sources, see "[Configuring a publishing source for your GitHub Pages site](/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site)."