From 4ae8d8faa79d6dbf9ae78f8d366a66ae85ee45ec Mon Sep 17 00:00:00 2001 From: Daniel George Holz Date: Wed, 17 Feb 2021 12:49:17 +0000 Subject: [PATCH 01/14] Call out how PATs with `write:packages` scope also require `repo` scope --- .../authenticate_with_pat_for_container_registry.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/data/reusables/package_registry/authenticate_with_pat_for_container_registry.md b/data/reusables/package_registry/authenticate_with_pat_for_container_registry.md index 3e17856823..8a9304385a 100644 --- a/data/reusables/package_registry/authenticate_with_pat_for_container_registry.md +++ b/data/reusables/package_registry/authenticate_with_pat_for_container_registry.md @@ -1,7 +1,13 @@ {% if currentVersion == "free-pro-team@latest" %} If you want to authenticate to {% data variables.product.prodname_github_container_registry %} in a {% data variables.product.prodname_actions %} workflow, then you must use a personal access token (PAT). The `GITHUB_TOKEN` does not currently have the required permissions. During the {% data variables.product.prodname_github_container_registry %} beta, the only supported form of authentication is the PAT. -PATs can grant broad access to your account. We recommend selecting only the necessary read, write, or delete `package` scope when creating a PAT to authenticate to the {% data variables.product.prodname_container_registry %}. Avoid including the `repo` scope in a PAT used by a GitHub Actions workflow because it gives unnecessary additional access. +PATs can grant broad access to your account. You should select only the necessary `read:packages`, `write:packages`, or `delete:packages` scope when creating a PAT to authenticate to the {% data variables.product.prodname_container_registry %}. + +{% warning %} + +**Note:** Granting the `write:packages` scope on the PAT also grants the `repo` scope! If you save this PAT for use from an Action, any collaborators can configure an Actions workflow to use this PAT to get full permissions to all repositories accessable from the PAT owner's account. We recommend creating a separate account with access only to the specific repositories that want to push Docker images (see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)"). + +{% endwarning %} If you'd like to use the {% data variables.product.prodname_container_registry %} in actions during the beta, follow our security best practices for PAT use at "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)." From 68496a6368d71dbace97c2ce453dcf46ebd93251 Mon Sep 17 00:00:00 2001 From: Daniel George Holz Date: Wed, 17 Feb 2021 12:50:42 +0000 Subject: [PATCH 02/14] Call out how `write:packages` implies `repo` on a PAT --- .../authenticate-to-container-registry-steps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/reusables/package_registry/authenticate-to-container-registry-steps.md b/data/reusables/package_registry/authenticate-to-container-registry-steps.md index bc748abafc..a6883363b6 100644 --- a/data/reusables/package_registry/authenticate-to-container-registry-steps.md +++ b/data/reusables/package_registry/authenticate-to-container-registry-steps.md @@ -1,7 +1,7 @@ 1. Create a new personal access token (PAT) with the appropriate scopes for the tasks you want to accomplish. If your organization requires SSO, you must enable SSO for your new token. {% warning %} - **Note:** If you select the `write:packages` scope, deselect the `repo` scope when creating the PAT. Adding a PAT with the `repo` scope as a secret in your repository allows the credential to be accessible to all collaborators in the repository. This gives unnecessary additional access when a PAT with the `repo` scope is used within an action. For more information on security best practices for actions, see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)." + **Note:** Granting the `write:packages` scope on the PAT also grants the `repo` scope! If you save this PAT for use from an Action, any collaborators can configure an Actions workflow to use this PAT to get full permissions to all repositories accessable from the PAT owner's account. We recommend creating a separate account with access only to the specific repositories that want to push Docker images (see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)"). {% endwarning %} From ddcde4ba89879e524b03f5b9222bdb0cb60a6524 Mon Sep 17 00:00:00 2001 From: Vlad GURDIGA Date: Fri, 19 Mar 2021 11:40:26 +0200 Subject: [PATCH 03/14] Clarifying CNAME file instructions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To prevent confusion around “CNAME” as a DNS term vs. “CNAME” as a file name, I’m using the term “domain name.” --- .../troubleshooting-custom-domains-and-github-pages.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages.md b/content/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages.md index 1c6c9279c0..376abf5139 100644 --- a/content/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages.md +++ b/content/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages.md @@ -23,8 +23,8 @@ Then, make sure the _CNAME_ file is formatted correctly. - The _CNAME_ filename must be all uppercase. - The _CNAME_ file can contain only one domain. To point multiple domains to your site, you must set up a redirect through your DNS provider. -- The _CNAME_ entry must be the bare domain. For example, `www.example.com`,`blog.example.com`, or `example.com`. -- The _CNAME_ entry can only be used once on {% data variables.product.product_name %}. For example, if another repository's _CNAME_ file contains `example.com`, you cannot use `example.com` in the _CNAME_ file for your repository. +- The _CNAME_ file must contain the domain name only. For example, `www.example.com`, `blog.example.com`, or `example.com`. +- The domain name must be unique across {% data variables.product.product_name %}. For example, if another repository's _CNAME_ file contains `example.com`, you cannot use `example.com` in the _CNAME_ file for your repository. ### DNS misconfiguration From 5ee9876534b1af3f16f8d75c0cc6cf4626c5d5c4 Mon Sep 17 00:00:00 2001 From: Sarah Edwards Date: Tue, 30 Mar 2021 09:00:48 -0700 Subject: [PATCH 04/14] enterprise plans support environments on private repos (#18497) --- content/actions/reference/environments.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/actions/reference/environments.md b/content/actions/reference/environments.md index 7ce48e112e..d0e0ca0360 100644 --- a/content/actions/reference/environments.md +++ b/content/actions/reference/environments.md @@ -16,7 +16,7 @@ versions: You can configure environments with protection rules and secrets. When a workflow job references an environment, the job won't start until all of the environment's protection rules pass. A job also cannot access secrets that are defined in an environment until all the environment protection rules pass. {% if currentVersion == "free-pro-team@latest" %} -Environment protection rules and environment secrets are only available on public repositories. If you convert a repository from public to private, any configured protection rules or environment secrets will be ignored, and you will not be able to configure any environments. If you convert your repository back to public, you will have access to any previously configured protection rules and environment secrets. +Environment protection rules and environment secrets are only available on public repositories and private repositories on an enterprise plan. If you convert a repository from public to private on a non-enterprise plan, any configured protection rules or environment secrets will be ignored, and you will not be able to configure any environments. If you convert your repository back to public, you will have access to any previously configured protection rules and environment secrets. {% endif %} #### Environment protection rules From 3ae481ea7b2b32ad1e266e97e735d3f6d06f513a Mon Sep 17 00:00:00 2001 From: Laura Coursen Date: Tue, 30 Mar 2021 12:38:13 -0500 Subject: [PATCH 05/14] Add webhook events for discussions (#18442) --- .../webhook-events-and-payloads.md | 54 +++++ data/reusables/webhooks/discussion_desc.md | 1 + .../webhooks/discussions-webhooks-beta.md | 5 + data/reusables/webhooks/org_desc_graphql.md | 1 + data/reusables/webhooks/repo_desc_graphql.md | 1 + .../dotcom/discussion.created.payload.json | 181 +++++++++++++++ .../discussion_comment.created.payload.json | 214 ++++++++++++++++++ 7 files changed, 457 insertions(+) create mode 100644 data/reusables/webhooks/discussion_desc.md create mode 100644 data/reusables/webhooks/discussions-webhooks-beta.md create mode 100644 data/reusables/webhooks/org_desc_graphql.md create mode 100644 data/reusables/webhooks/repo_desc_graphql.md create mode 100644 lib/webhooks/static/dotcom/discussion.created.payload.json create mode 100644 lib/webhooks/static/dotcom/discussion_comment.created.payload.json diff --git a/content/developers/webhooks-and-events/webhook-events-and-payloads.md b/content/developers/webhooks-and-events/webhook-events-and-payloads.md index 7ff7b44c42..e2a9c0974c 100644 --- a/content/developers/webhooks-and-events/webhook-events-and-payloads.md +++ b/content/developers/webhooks-and-events/webhook-events-and-payloads.md @@ -337,6 +337,60 @@ Key | Type | Description {{ webhookPayloadsForCurrentVersion.deployment_status }} +{% if currentVersion == "free-pro-team@latest" %} +### discussion + +{% data reusables.webhooks.discussions-webhooks-beta %} + +Activity related to a discussion. For more information, see the "[Using the GraphQL API for discussions](/graphql/guides/using-the-graphql-api-for-discussions)." +#### Availability + +- Repository webhooks +- Organization webhooks +- {% data variables.product.prodname_github_app %}s with the `discussions` permission + +#### Webhook payload object + +Key | Type | Description +----|------|------------- +`action` |`string` | The action performed. Can be `created`, `edited`, `deleted`, `pinned`, `unpinned`, `locked`, `unlocked`, `transferred`, `category_changed`, `answered`, or `unanswered`. +{% data reusables.webhooks.discussion_desc %} +{% data reusables.webhooks.repo_desc_graphql %} +{% data reusables.webhooks.org_desc_graphql %} +{% data reusables.webhooks.sender_desc %} + +#### Webhook payload example + +{{ webhookPayloadsForCurrentVersion.discussion.created }} + +### discussion_comment + +{% data reusables.webhooks.discussions-webhooks-beta %} + +Activity related to a comment in a discussion. For more information, see "[Using the GraphQL API for discussions](/graphql/guides/using-the-graphql-api-for-discussions)." + +#### Availability + +- Repository webhooks +- Organization webhooks +- {% data variables.product.prodname_github_app %}s with the `discussions` permission + +#### Webhook payload object + +Key | Type | Description +----|------|------------- +`action` |`string` | The action performed. Can be `created`, `edited`, or `deleted`. +`comment` | `object` | The [`discussion comment`](/graphql/guides/using-the-graphql-api-for-discussions#discussioncomment) resource. +{% data reusables.webhooks.discussion_desc %} +{% data reusables.webhooks.repo_desc_graphql %} +{% data reusables.webhooks.org_desc_graphql %} +{% data reusables.webhooks.sender_desc %} + +#### Webhook payload example + +{{ webhookPayloadsForCurrentVersion.discussion_comment.created }} +{% endif %} + {% if enterpriseServerVersions contains currentVersion or currentVersion == "github-ae@latest" %} ### enterprise diff --git a/data/reusables/webhooks/discussion_desc.md b/data/reusables/webhooks/discussion_desc.md new file mode 100644 index 0000000000..1b221660e0 --- /dev/null +++ b/data/reusables/webhooks/discussion_desc.md @@ -0,0 +1 @@ +`discussion` | `object` | The [`discussion`](/graphql/guides/using-the-graphql-api-for-discussions#discussion) resource. \ No newline at end of file diff --git a/data/reusables/webhooks/discussions-webhooks-beta.md b/data/reusables/webhooks/discussions-webhooks-beta.md new file mode 100644 index 0000000000..2033ca20ea --- /dev/null +++ b/data/reusables/webhooks/discussions-webhooks-beta.md @@ -0,0 +1,5 @@ +{% note %} + +**Note:** Webhook events for {% data variables.product.prodname_discussions %} are currently in beta and subject to change. + +{% endnote %} \ No newline at end of file diff --git a/data/reusables/webhooks/org_desc_graphql.md b/data/reusables/webhooks/org_desc_graphql.md new file mode 100644 index 0000000000..4bd5d803b1 --- /dev/null +++ b/data/reusables/webhooks/org_desc_graphql.md @@ -0,0 +1 @@ +`organization` | `object` | Webhook payloads contain the [`organization`](/graphql/reference/objects#organization) object when the webhook is configured for an organization or the event occurs from activity in a repository owned by an organization. diff --git a/data/reusables/webhooks/repo_desc_graphql.md b/data/reusables/webhooks/repo_desc_graphql.md new file mode 100644 index 0000000000..7cfc041ade --- /dev/null +++ b/data/reusables/webhooks/repo_desc_graphql.md @@ -0,0 +1 @@ +`repository` | `object` | The [`repository`](/graphql/reference/objects#repository) where the event occurred. \ No newline at end of file diff --git a/lib/webhooks/static/dotcom/discussion.created.payload.json b/lib/webhooks/static/dotcom/discussion.created.payload.json new file mode 100644 index 0000000000..9739b04f3c --- /dev/null +++ b/lib/webhooks/static/dotcom/discussion.created.payload.json @@ -0,0 +1,181 @@ +{ + "action": "created", + "discussion": { + "repository_url": "https://api.github.com/repos/octo-org/octo-repo", + "category": { + "id": 32784361, + "repository_id": 17273051, + "emoji": ":speech_balloon:", + "name": "General", + "description": "Chat about anything and everything here", + "created_at": "2021-03-24T12:41:54.000-05:00", + "updated_at": "2021-03-24T12:41:54.000-05:00", + "slug": "general", + "is_answerable": false + }, + "answer_html_url": null, + "answer_chosen_at": null, + "answer_chosen_by": null, + "html_url": "https://github.com/octo-org/octo-repo/discussions/90", + "id": 3297442, + "node_id": "MDEwOkRpc2N1c3Npb24zMjk3NDQy", + "number": 90, + "title": "Welcome to discussions!", + "user": { + "login": "Codertocat", + "id": 21031067, + "node_id": "MDQ6VXNlcjIxMDMxMDY3", + "avatar_url": "https://avatars1.githubusercontent.com/u/21031067?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Codertocat", + "html_url": "https://github.com/Codertocat", + "followers_url": "https://api.github.com/users/Codertocat/followers", + "following_url": "https://api.github.com/users/Codertocat/following{/other_user}", + "gists_url": "https://api.github.com/users/Codertocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Codertocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Codertocat/subscriptions", + "organizations_url": "https://api.github.com/users/Codertocat/orgs", + "repos_url": "https://api.github.com/users/Codertocat/repos", + "events_url": "https://api.github.com/users/Codertocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/Codertocat/received_events", + "type": "User", + "site_admin": false + }, + "state": "open", + "locked": false, + "comments": 0, + "created_at": "2021-03-29T14:16:08Z", + "updated_at": "2021-03-29T14:16:08Z", + "author_association": "COLLABORATOR", + "active_lock_reason": null, + "body": "We're glad to have you here!" + }, + "repository": { + "id": 17273051, + "node_id": "MDEwOlJlcG9zaXRvcnkxNzI3MzA1MQ==", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octo-org", + "id": 6811672, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=", + "avatar_url": "https://avatars.githubusercontent.com/u/6811672?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/octo-org", + "html_url": "https://github.com/octo-org", + "followers_url": "https://api.github.com/users/octo-org/followers", + "following_url": "https://api.github.com/users/octo-org/following{/other_user}", + "gists_url": "https://api.github.com/users/octo-org/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octo-org/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octo-org/subscriptions", + "organizations_url": "https://api.github.com/users/octo-org/orgs", + "repos_url": "https://api.github.com/users/octo-org/repos", + "events_url": "https://api.github.com/users/octo-org/events{/privacy}", + "received_events_url": "https://api.github.com/users/octo-org/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": "My first repo on GitHub!", + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments", + "created_at": "2014-02-28T02:42:51Z", + "updated_at": "2021-03-11T14:54:13Z", + "pushed_at": "2021-03-11T14:54:10Z", + "git_url": "git://github.com/octo-org/octo-repo.git", + "ssh_url": "org-6811672@github.com:octo-org/octo-repo.git", + "clone_url": "https://github.com/octo-org/octo-repo.git", + "svn_url": "https://github.com/octo-org/octo-repo", + "homepage": "", + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "JavaScript", + "has_issues": true, + "has_projects": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 39, + "license": null, + "forks": 0, + "open_issues": 39, + "watchers": 0, + "default_branch": "main" + }, + "organization": { + "login": "octo-org", + "id": 6811672, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=", + "url": "https://api.github.com/orgs/octo-org", + "repos_url": "https://api.github.com/orgs/octo-org/repos", + "events_url": "https://api.github.com/orgs/octo-org/events", + "hooks_url": "https://api.github.com/orgs/octo-org/hooks", + "issues_url": "https://api.github.com/orgs/octo-org/issues", + "members_url": "https://api.github.com/orgs/octo-org/members{/member}", + "public_members_url": "https://api.github.com/orgs/octo-org/public_members{/member}", + "avatar_url": "https://avatars.githubusercontent.com/u/6811672?v=4", + "description": "Working better together!" + }, + "sender": { + "login": "Codertocat", + "id": 21031067, + "node_id": "MDQ6VXNlcjIxMDMxMDY3", + "avatar_url": "https://avatars1.githubusercontent.com/u/21031067?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Codertocat", + "html_url": "https://github.com/Codertocat", + "followers_url": "https://api.github.com/users/Codertocat/followers", + "following_url": "https://api.github.com/users/Codertocat/following{/other_user}", + "gists_url": "https://api.github.com/users/Codertocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Codertocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Codertocat/subscriptions", + "organizations_url": "https://api.github.com/users/Codertocat/orgs", + "repos_url": "https://api.github.com/users/Codertocat/repos", + "events_url": "https://api.github.com/users/Codertocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/Codertocat/received_events", + "type": "User", + "site_admin": false + } +} \ No newline at end of file diff --git a/lib/webhooks/static/dotcom/discussion_comment.created.payload.json b/lib/webhooks/static/dotcom/discussion_comment.created.payload.json new file mode 100644 index 0000000000..03f7b4f387 --- /dev/null +++ b/lib/webhooks/static/dotcom/discussion_comment.created.payload.json @@ -0,0 +1,214 @@ +{ + "action": "created", + "comment": { + "id": 544078, + "node_id": "MDE3OkRpc2N1c3Npb25Db21tZW50NTQ0MDc4", + "html_url": "https://github.com/octo-org/octo-repo/discussions/90#discussioncomment-544078", + "parent_id": null, + "child_comment_count": 0, + "repository_url": "octo-org/octo-repo", + "discussion_id": 3297442, + "author_association": "COLLABORATOR", + "user": { + "login": "Codertocat", + "id": 21031067, + "node_id": "MDQ6VXNlcjIxMDMxMDY3", + "avatar_url": "https://avatars1.githubusercontent.com/u/21031067?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Codertocat", + "html_url": "https://github.com/Codertocat", + "followers_url": "https://api.github.com/users/Codertocat/followers", + "following_url": "https://api.github.com/users/Codertocat/following{/other_user}", + "gists_url": "https://api.github.com/users/Codertocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Codertocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Codertocat/subscriptions", + "organizations_url": "https://api.github.com/users/Codertocat/orgs", + "repos_url": "https://api.github.com/users/Codertocat/repos", + "events_url": "https://api.github.com/users/Codertocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/Codertocat/received_events", + "type": "User", + "site_admin": false + }, + "created_at": "2021-03-29T14:16:31Z", + "updated_at": "2021-03-29T14:16:31Z", + "body": "I have so many questions to ask you!" + }, + "discussion": { + "repository_url": "https://api.github.com/repos/octo-org/octo-repo", + "category": { + "id": 32784361, + "repository_id": 17273051, + "emoji": ":speech_balloon:", + "name": "General", + "description": "Chat about anything and everything here", + "created_at": "2021-03-24T12:41:54.000-05:00", + "updated_at": "2021-03-24T12:41:54.000-05:00", + "slug": "general", + "is_answerable": false + }, + "answer_html_url": null, + "answer_chosen_at": null, + "answer_chosen_by": null, + "html_url": "https://github.com/octo-org/octo-repo/discussions/90", + "id": 3297442, + "node_id": "MDEwOkRpc2N1c3Npb24zMjk3NDQy", + "number": 90, + "title": "Welcome to discussions!", + "user": { + "login": "Codertocat", + "id": 14935376, + "node_id": "MDQ6VXNlcjE0OTM1Mzc2", + "avatar_url": "https://avatars.githubusercontent.com/u/14935376?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Codertocat", + "html_url": "https://github.com/Codertocat", + "followers_url": "https://api.github.com/users/Codertocat/followers", + "following_url": "https://api.github.com/users/Codertocat/following{/other_user}", + "gists_url": "https://api.github.com/users/Codertocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Codertocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Codertocat/subscriptions", + "organizations_url": "https://api.github.com/users/Codertocat/orgs", + "repos_url": "https://api.github.com/users/Codertocat/repos", + "events_url": "https://api.github.com/users/Codertocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/Codertocat/received_events", + "type": "User", + "site_admin": true + }, + "state": "open", + "locked": false, + "comments": 1, + "created_at": "2021-03-29T14:16:08Z", + "updated_at": "2021-03-29T14:16:31Z", + "author_association": "COLLABORATOR", + "active_lock_reason": null, + "body": "We're glad to have you here!" + }, + "repository": { + "id": 17273051, + "node_id": "MDEwOlJlcG9zaXRvcnkxNzI3MzA1MQ==", + "name": "octo-repo", + "full_name": "octo-org/octo-repo", + "private": true, + "owner": { + "login": "octo-org", + "id": 6811672, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=", + "avatar_url": "https://avatars.githubusercontent.com/u/6811672?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/octo-org", + "html_url": "https://github.com/octo-org", + "followers_url": "https://api.github.com/users/octo-org/followers", + "following_url": "https://api.github.com/users/octo-org/following{/other_user}", + "gists_url": "https://api.github.com/users/octo-org/gists{/gist_id}", + "starred_url": "https://api.github.com/users/octo-org/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/octo-org/subscriptions", + "organizations_url": "https://api.github.com/users/octo-org/orgs", + "repos_url": "https://api.github.com/users/octo-org/repos", + "events_url": "https://api.github.com/users/octo-org/events{/privacy}", + "received_events_url": "https://api.github.com/users/octo-org/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/octo-org/octo-repo", + "description": "My first repo on GitHub!", + "fork": false, + "url": "https://api.github.com/repos/octo-org/octo-repo", + "forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks", + "keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams", + "hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks", + "issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}", + "events_url": "https://api.github.com/repos/octo-org/octo-repo/events", + "assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}", + "branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}", + "tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags", + "blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages", + "stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers", + "contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors", + "subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers", + "subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription", + "commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}", + "compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges", + "archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads", + "issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}", + "pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}", + "releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}", + "deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments", + "created_at": "2014-02-28T02:42:51Z", + "updated_at": "2021-03-11T14:54:13Z", + "pushed_at": "2021-03-11T14:54:10Z", + "git_url": "git://github.com/octo-org/octo-repo.git", + "ssh_url": "org-6811672@github.com:octo-org/octo-repo.git", + "clone_url": "https://github.com/octo-org/octo-repo.git", + "svn_url": "https://github.com/octo-org/octo-repo", + "homepage": "", + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "JavaScript", + "has_issues": true, + "has_projects": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 39, + "license": null, + "forks": 0, + "open_issues": 39, + "watchers": 0, + "default_branch": "main" + }, + "organization": { + "login": "octo-org", + "id": 6811672, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=", + "url": "https://api.github.com/orgs/octo-org", + "repos_url": "https://api.github.com/orgs/octo-org/repos", + "events_url": "https://api.github.com/orgs/octo-org/events", + "hooks_url": "https://api.github.com/orgs/octo-org/hooks", + "issues_url": "https://api.github.com/orgs/octo-org/issues", + "members_url": "https://api.github.com/orgs/octo-org/members{/member}", + "public_members_url": "https://api.github.com/orgs/octo-org/public_members{/member}", + "avatar_url": "https://avatars.githubusercontent.com/u/6811672?v=4", + "description": "Working better together!" + }, + "sender": { + "login": "Codertocat", + "id": 21031067, + "node_id": "MDQ6VXNlcjIxMDMxMDY3", + "avatar_url": "https://avatars1.githubusercontent.com/u/21031067?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Codertocat", + "html_url": "https://github.com/Codertocat", + "followers_url": "https://api.github.com/users/Codertocat/followers", + "following_url": "https://api.github.com/users/Codertocat/following{/other_user}", + "gists_url": "https://api.github.com/users/Codertocat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Codertocat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Codertocat/subscriptions", + "organizations_url": "https://api.github.com/users/Codertocat/orgs", + "repos_url": "https://api.github.com/users/Codertocat/repos", + "events_url": "https://api.github.com/users/Codertocat/events{/privacy}", + "received_events_url": "https://api.github.com/users/Codertocat/received_events", + "type": "User", + "site_admin": false + } +} From ca73a4af196d4757584e384966ab7824bfb78ea4 Mon Sep 17 00:00:00 2001 From: Victor B <39555268+victorbnl@users.noreply.github.com> Date: Tue, 30 Mar 2021 18:54:17 +0100 Subject: [PATCH 06/14] Missing bundle install in testing pages locally (#4412) --- .../testing-your-github-pages-site-locally-with-jekyll.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/github/working-with-github-pages/testing-your-github-pages-site-locally-with-jekyll.md b/content/github/working-with-github-pages/testing-your-github-pages-site-locally-with-jekyll.md index d24b5f19f7..32331bae67 100644 --- a/content/github/working-with-github-pages/testing-your-github-pages-site-locally-with-jekyll.md +++ b/content/github/working-with-github-pages/testing-your-github-pages-site-locally-with-jekyll.md @@ -30,6 +30,7 @@ Before you can use Jekyll to test a site, you must: {% data reusables.command_line.open_the_multi_os_terminal %} {% data reusables.pages.navigate-publishing-source %} +3. Run `bundle install`. 3. Run your Jekyll site locally. ```shell $ bundle exec jekyll serve From 47e2bb5aa6bbf2652bfd94a87b9229c0cf3856fd Mon Sep 17 00:00:00 2001 From: Laura Coursen Date: Tue, 30 Mar 2021 13:12:22 -0500 Subject: [PATCH 07/14] Use more specific product name variable --- .../troubleshooting-custom-domains-and-github-pages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages.md b/content/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages.md index 376abf5139..1ac902330c 100644 --- a/content/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages.md +++ b/content/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages.md @@ -24,7 +24,7 @@ Then, make sure the _CNAME_ file is formatted correctly. - The _CNAME_ filename must be all uppercase. - The _CNAME_ file can contain only one domain. To point multiple domains to your site, you must set up a redirect through your DNS provider. - The _CNAME_ file must contain the domain name only. For example, `www.example.com`, `blog.example.com`, or `example.com`. -- The domain name must be unique across {% data variables.product.product_name %}. For example, if another repository's _CNAME_ file contains `example.com`, you cannot use `example.com` in the _CNAME_ file for your repository. +- The domain name must be unique across all {% data variables.product.prodname_pages %} sites. For example, if another repository's _CNAME_ file contains `example.com`, you cannot use `example.com` in the _CNAME_ file for your repository. ### DNS misconfiguration From 6901cfb5493d3483ccf078ffc0cf2c0eefaed010 Mon Sep 17 00:00:00 2001 From: Brett Westover Date: Tue, 30 Mar 2021 11:41:54 -0700 Subject: [PATCH 08/14] add intro note about downloads being disabled (#18499) --- data/release-notes/2-21/17.yml | 1 + data/release-notes/2-22/9.yml | 1 + data/release-notes/3-0/3.yml | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/data/release-notes/2-21/17.yml b/data/release-notes/2-21/17.yml index 83825f2056..4f4ba8f132 100644 --- a/data/release-notes/2-21/17.yml +++ b/data/release-notes/2-21/17.yml @@ -1,4 +1,5 @@ date: '2021-03-23' +intro: Downloads have been disabled due to a major bug affecting multiple customers. A fix will be available in the next patch. sections: security_fixes: - '**HIGH:** A remote code execution vulnerability was identified in GitHub Enterprise Server that could be exploited when building a GitHub Pages site. User-controlled configuration options used by GitHub Pages were not sufficiently restricted and made it possible to override environment variables leading to code execution on the GitHub Enterprise Server instance. To exploit this vulnerability, an attacker would need permission to create and build a GitHub Pages site on the GitHub Enterprise Server instance. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.0.3 and was fixed in 3.0.3, 2.22.9, and 2.21.17. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned CVE-2021-22864.' diff --git a/data/release-notes/2-22/9.yml b/data/release-notes/2-22/9.yml index c64c545261..e567dad9ef 100644 --- a/data/release-notes/2-22/9.yml +++ b/data/release-notes/2-22/9.yml @@ -1,4 +1,5 @@ date: '2021-03-23' +intro: Downloads have been disabled due to a major bug affecting multiple customers. A fix will be available in the next patch. sections: security_fixes: - '**HIGH:** A remote code execution vulnerability was identified in GitHub Enterprise Server that could be exploited when building a GitHub Pages site. User-controlled configuration options used by GitHub Pages were not sufficiently restricted and made it possible to override environment variables leading to code execution on the GitHub Enterprise Server instance. To exploit this vulnerability, an attacker would need permission to create and build a GitHub Pages site on the GitHub Enterprise Server instance. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.0.3 and was fixed in 3.0.3, 2.22.9, and 2.21.17. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned CVE-2021-22864.' diff --git a/data/release-notes/3-0/3.yml b/data/release-notes/3-0/3.yml index 2828755e4f..6efc42ff59 100644 --- a/data/release-notes/3-0/3.yml +++ b/data/release-notes/3-0/3.yml @@ -1,5 +1,5 @@ date: '2021-03-23' -intro: The minimum infrastructure requirements have increased for {% data variables.product.prodname_ghe_server %} 3.0+. For more information, see "[About minimum requirements for GitHub Enterprise Server 3.0 and later](/admin/enterprise-management/upgrading-github-enterprise-server#about-minimum-requirements-for-github-enterprise-server-30-and-later)." +intro: Downloads have been disabled due to a major bug affecting multiple customers. A fix will be available in the next patch. sections: security_fixes: - '**HIGH:** A remote code execution vulnerability was identified in GitHub Enterprise Server that could be exploited when building a GitHub Pages site. User-controlled configuration options used by GitHub Pages were not sufficiently restricted and made it possible to override environment variables leading to code execution on the GitHub Enterprise Server instance. To exploit this vulnerability, an attacker would need permission to create and build a GitHub Pages site on the GitHub Enterprise Server instance. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.0.3 and was fixed in 3.0.3, 2.22.9, and 2.21.17. This vulnerability was reported via the GitHub Bug Bounty program and has been assigned CVE-2021-22864.' From d06ec38f60a3da8ab3afec5552a4be7f4b26c059 Mon Sep 17 00:00:00 2001 From: Junko Suzuki Date: Wed, 31 Mar 2021 05:25:54 +0900 Subject: [PATCH 09/14] Update known issues for 3.0 series (#18485) Co-authored-by: Ethan Palm <56270045+ethanpalm@users.noreply.github.com> --- data/release-notes/3-0/0.yml | 1 + data/release-notes/3-0/1.yml | 1 + data/release-notes/3-0/2.yml | 1 + data/release-notes/3-0/3.yml | 1 + 4 files changed, 4 insertions(+) diff --git a/data/release-notes/3-0/0.yml b/data/release-notes/3-0/0.yml index e6fcc56191..dbab40a44b 100644 --- a/data/release-notes/3-0/0.yml +++ b/data/release-notes/3-0/0.yml @@ -131,6 +131,7 @@ sections: - Dependency graph fails to parse `setup.py` Python manifest files, resulting in HTTP 500 errors in logs. This, combined with the duplicated logging issue, results in increased root volume utilization. - A race condition can cause dependency graph database migrations to appear to fail. - Instances with a custom timezone that were upgraded from an earlier release of GitHub Enterprise Server may have incorrect timestamps in the web UI. + - Old builds of Pages are not cleaned up, which could fill up the user disk (`/data/user/`). deprecations: - heading: Deprecation of GitHub Enterprise Server 2.19 diff --git a/data/release-notes/3-0/1.yml b/data/release-notes/3-0/1.yml index 596affb9a0..c78862e536 100644 --- a/data/release-notes/3-0/1.yml +++ b/data/release-notes/3-0/1.yml @@ -43,6 +43,7 @@ sections: - 'reStructuredText (RST) rendering in the web UI may fail and instead display raw RST markup text.' - 'Dependency graph fails to parse `yarn.lock` Javascript manifest files, resulting in HTTP 500 errors in logs.' - 'Instances with a custom timezone that were upgraded from an earlier release of GitHub Enterprise Server may have incorrect timestamps in the web UI.' + - 'Old builds of Pages are not cleaned up, which could fill up the user disk (`/data/user/`).' - | Users may experience assets such as avatars not loading, or a failure to push/pull code. This may be caused by a PID mismatch in the `haproxy-cluster-proxy` service. To determine if you have an affected instance: diff --git a/data/release-notes/3-0/2.yml b/data/release-notes/3-0/2.yml index a4a2bf0e16..266143486d 100644 --- a/data/release-notes/3-0/2.yml +++ b/data/release-notes/3-0/2.yml @@ -29,6 +29,7 @@ sections: - When maintenance mode is enabled, some services continue to be listed as "active processes". The services identified are expected to run during maintenance mode. If you experience this issue and are unsure, contact [GitHub Enterprise Support](https://enterprise.githubsupport.com/hc/en-us) or [GitHub Premium Support](https://premium.githubsupport.com/). - Jupyter Notebook rendering in the web UI may fail if the notebook includes non-ASCII UTF-8 characters. - reStructuredText (RST) rendering in the web UI may fail and instead display raw RST markup text. + - Old builds of Pages are not cleaned up, which could fill up the user disk (`/data/user/`). - | Users may experience assets such as avatars not loading, or a failure to push/pull code. This may be caused by a PID mismatch in the `haproxy-cluster-proxy` service. To determine if you have an affected instance: diff --git a/data/release-notes/3-0/3.yml b/data/release-notes/3-0/3.yml index 6efc42ff59..09b90b287c 100644 --- a/data/release-notes/3-0/3.yml +++ b/data/release-notes/3-0/3.yml @@ -28,6 +28,7 @@ sections: - When maintenance mode is enabled, some services continue to be listed as "active processes". The services identified are expected to run during maintenance mode. If you experience this issue and are unsure, contact [GitHub Enterprise Support](https://enterprise.githubsupport.com/hc/en-us) or [GitHub Premium Support](https://premium.githubsupport.com/). - Jupyter Notebook rendering in the web UI may fail if the notebook includes non-ASCII UTF-8 characters. - reStructuredText (RST) rendering in the web UI may fail and instead display raw RST markup text. + - Old builds of Pages are not cleaned up, which could fill up the user disk (`/data/user/`). - | Log rotation may fail to signal services to transition to new log files, leading to older log files continuing to be used, and eventual root disk space exhaustion. To remedy and/or prevent this issue, run the following commands in the [administrative shell](https://docs.github.com/en/enterprise-server/admin/configuration/accessing-the-administrative-shell-ssh) (SSH), or contact [GitHub Enterprise Support](https://enterprise.githubsupport.com/hc/en-us) or [GitHub Premium Support](https://premium.githubsupport.com/) for assistance: From b1ff6c16ae76c056c1c00e5d0f372c0411e8d185 Mon Sep 17 00:00:00 2001 From: Ethan Palm <56270045+ethanpalm@users.noreply.github.com> Date: Tue, 30 Mar 2021 16:34:13 -0400 Subject: [PATCH 10/14] [March 30] Desktop 2.7: Cherry-picking commits (#18378) * Create "Cherry-picking a commit" * Fix filename * Add link to git-cherry-pick documentation in glossary * Initial outline * Cherry-picking article * Incorporate reviewer feedback --- assets/images/help/desktop/cherry-picking.png | Bin 0 -> 91388 bytes .../cherry-picking-a-commit.md | 23 ++++++++++++++++++ .../index.md | 1 + data/glossaries/external.yml | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 assets/images/help/desktop/cherry-picking.png create mode 100644 content/desktop/contributing-and-collaborating-using-github-desktop/cherry-picking-a-commit.md diff --git a/assets/images/help/desktop/cherry-picking.png b/assets/images/help/desktop/cherry-picking.png new file mode 100644 index 0000000000000000000000000000000000000000..53831e8afe170266f08570fe5f653a3075eea1af GIT binary patch literal 91388 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 literal 0 HcmV?d00001 diff --git a/content/desktop/contributing-and-collaborating-using-github-desktop/cherry-picking-a-commit.md b/content/desktop/contributing-and-collaborating-using-github-desktop/cherry-picking-a-commit.md new file mode 100644 index 0000000000..9b54e40276 --- /dev/null +++ b/content/desktop/contributing-and-collaborating-using-github-desktop/cherry-picking-a-commit.md @@ -0,0 +1,23 @@ +--- +title: Cherry-picking a commit +intro: You can pick a specific commit on one branch and copy the commit to another branch. +versions: + free-pro-team: '*' +--- + +### About Git cherry-pick + +You can cherry-pick a commit on one branch to create a copy of the commit with the same changes on another branch. If you commit changes to the wrong branch or want to make the same changes to another branch, you can cherry-pick the commit to apply the changes to another branch. You can also use cherry-picking to apply specific changes before you are ready to create or merge a pull request. For example, if you commit a bug fix to a feature branch, you can cherry-pick the commit with the bug fix to other branches of your project. + +You can also use cherry-picking when collaborating with a team. Some projects incorporate contributions by cherry-picking commits. For more information, see [Distributed Git - Maintaining a Project](https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#_rebase_cherry_pick) in the Git documentation. + +### Cherry-picking a commit + +{% data reusables.desktop.current-branch-menu %} +2. In the list of branches, click the branch that has the commit that you want to cherry-pick. +{% data reusables.desktop.history-tab %} +4. Drag the commit that you want to cherry-pick to the {% octicon "git-branch" aria-label="The branch icon" %} **Current Branch** menu and drop the commit on the branch that you want to copy the commit to. + ![Dragging a commit to another branch in the Current Branch menu](/assets/images/help/desktop/cherry-picking.png) + +### Further reading +- [git-cherry-pick](https://git-scm.com/docs/git-cherry-pick) in the Git documentation diff --git a/content/desktop/contributing-and-collaborating-using-github-desktop/index.md b/content/desktop/contributing-and-collaborating-using-github-desktop/index.md index 2e0f6b62fd..6156c18c83 100644 --- a/content/desktop/contributing-and-collaborating-using-github-desktop/index.md +++ b/content/desktop/contributing-and-collaborating-using-github-desktop/index.md @@ -22,6 +22,7 @@ versions: {% link_in_list /stashing-changes %} {% link_in_list /pushing-changes-to-github %} {% link_in_list /reverting-a-commit %} + {% link_in_list /cherry-picking-a-commit %} {% link_in_list /managing-tags %} {% link_in_list /viewing-the-branch-history %} {% topic_link_in_list /working-with-your-remote-repository-on-github-or-github-enterprise %} diff --git a/data/glossaries/external.yml b/data/glossaries/external.yml index 2b3295b411..6040ee6388 100644 --- a/data/glossaries/external.yml +++ b/data/glossaries/external.yml @@ -91,7 +91,7 @@ working tree is pointing to a new branch. - term: cherry-picking description: >- - To choose a subset of changes from a series of changes (typically commits) and record them as a new series of changes on top of a different codebase. In Git, this is performed by the `git cherry-pick` command to extract the change introduced by an existing commit on another branch and to record it based on the tip of the current branch as a new commit. + To choose a subset of changes from a series of changes (typically commits) and record them as a new series of changes on top of a different codebase. In Git, this is performed by the `git cherry-pick` command to extract the change introduced by an existing commit on another branch and to record it based on the tip of the current branch as a new commit. For more information, see [git-cherry-pick](https://git-scm.com/docs/git-cherry-pick) in the Git documentation. - term: child team description: >- Within nested teams, the subteam that inherits the parent team's access From d8e0b29fcd414657dedee482b9190bb5532bc041 Mon Sep 17 00:00:00 2001 From: "James M. Greene" Date: Tue, 30 Mar 2021 15:40:28 -0500 Subject: [PATCH 11/14] Use node-redis for soft-purging cache on deploy (#18474) * Use [node-]redis as a direct dependency * Extract Redis client creation to its own module * Attach extensive logging in the Redis client creation module * Allow the rate limiter to pass requests when Redis is disconnected * Update rate-limit-redis * Default error input to empty object for formatRedisError method * Provide a name for the rate limiter's Redis client * Include redis-mock, exclude ioredis/ioredis-mock * Remove unused RedisAccessor#exists method * Switch RedisAccessor to use redis/redis-mock * Provide a name for logging on the Redis page cache * Remove extraneous trailing space from Redis logging prefix Our updated use of console.* will already be adding a space after the prefix * Replace ioredis-mock with redis-mock in tests * Revert removal of ioredis dependency * Bind Redis client to async promisified methods * Extract former RedisAccessor constructor tests to new create-client tests * Update RedisAccessor tests to work with the callback-based redis client * Handle formatting Redis errors (or not) with more resiliency * Remove ioredis as a dependency * Update Redis soft-purging script to use node-redis * Do more promisifying for less ugly code * Add comment explaining TTL of -1 * Make the script executable --- package-lock.json | 56 ++---------- package.json | 1 - script/purge-redis-pages.js | 164 +++++++++++++++++++++++------------- 3 files changed, 112 insertions(+), 109 deletions(-) mode change 100644 => 100755 script/purge-redis-pages.js diff --git a/package-lock.json b/package-lock.json index e891d6fabb..eae384d420 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7962,11 +7962,6 @@ "mimic-response": "^1.0.0" } }, - "cluster-key-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", - "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==" - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -13438,43 +13433,6 @@ "loose-envify": "^1.0.0" } }, - "ioredis": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.24.4.tgz", - "integrity": "sha512-v28xxBENyTmReC6lVTL7EkAPjVF8cuGtDEjGDi1Z2n7htsC2WdiDceZrCIPeuPiLa6kDFWHb1Y8O0upZROsMgA==", - "requires": { - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.1", - "denque": "^1.1.0", - "lodash.defaults": "^4.2.0", - "lodash.flatten": "^4.4.0", - "p-map": "^2.1.0", - "redis-commands": "1.7.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "redis-commands": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", - "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" - } - } - }, "ip-regex": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", @@ -18188,7 +18146,8 @@ "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true }, "lodash.filter": { "version": "4.6.0", @@ -18199,7 +18158,8 @@ "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true }, "lodash.foreach": { "version": "4.5.0", @@ -19681,7 +19641,8 @@ "p-map": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true }, "p-queue": { "version": "6.2.1", @@ -22475,11 +22436,6 @@ "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", "dev": true }, - "standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" - }, "start-server-and-test": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.12.0.tgz", diff --git a/package.json b/package.json index 57dab2f197..3fb34066e8 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,6 @@ "hot-shots": "^8.2.0", "html-entities": "^1.2.1", "imurmurhash": "^0.1.4", - "ioredis": "^4.24.4", "is-url": "^1.2.4", "js-cookie": "^2.2.1", "js-yaml": "^3.14.0", diff --git a/script/purge-redis-pages.js b/script/purge-redis-pages.js old mode 100644 new mode 100755 index 13f9ad98c3..0f0d429ef9 --- a/script/purge-redis-pages.js +++ b/script/purge-redis-pages.js @@ -8,7 +8,10 @@ // // [end-readme] -const Redis = require('ioredis') +require('dotenv').config() + +const { promisify } = require('util') +const createClient = require('../lib/redis/create-client') const { REDIS_URL, HEROKU_RELEASE_VERSION, HEROKU_PRODUCTION_APP } = process.env const isHerokuProd = HEROKU_PRODUCTION_APP === 'true' @@ -42,68 +45,109 @@ console.log({ purgeRenderedPageCache() function purgeRenderedPageCache () { - const redisClient = new Redis(REDIS_URL, { - db: pageCacheDatabaseNumber, - - // Only add this configuration for TLS-enabled REDIS_URL values. - // Otherwise, it breaks for local Redis instances without TLS enabled. - ...REDIS_URL.startsWith('rediss://') && { - tls: { - // Required for production Heroku Redis - rejectUnauthorized: false - } - } + const redisClient = createClient({ + url: REDIS_URL, + db: pageCacheDatabaseNumber }) - let totalKeyCount = 0 + let iteration = 0 + let potentialKeyCount = 0 + let totalKeyCount = 0 - // Create a readable stream (object mode) for the SCAN cursor - const scanStream = redisClient.scanStream({ - match: keyScanningPattern, - count: scanSetSize - }) + // Promise wrappers + const scanAsync = promisify(redisClient.scan).bind(redisClient) + const quitAsync = promisify(redisClient.quit).bind(redisClient) - scanStream.on('end', function () { - console.log(`Done purging keys; affected total: ${totalKeyCount}`) - console.log(`Time elapsed: ${Date.now() - startTime} ms`) + // Run it! + return scan() - // This seems to be unexpectedly necessary - process.exit(0) - }) + // + // Define other subroutines + // - scanStream.on('error', function (error) { - console.error('An unexpected error occurred!\n' + error.stack) - console.error('\nAborting...') - process.exit(1) - }) + async function scan (cursor = '0') { + try { + // [0]: Update the cursor position for the next scan + // [1]: Get the SCAN result for this iteration + const [nextCursor, keys] = await scanAsync( + cursor, + 'MATCH', keyScanningPattern, + 'COUNT', scanSetSize.toString() + ) - scanStream.on('data', async function (keys) { - console.log(`[Iteration ${iteration++}] Received ${keys.length} keys...`) + console.log(`\n[Iteration ${iteration++}] Received ${keys.length} keys...`) - // NOTE: It is possible for a SCAN cursor iteration to return 0 keys when - // using a MATCH because it is applied after the elements are retrieved - if (keys.length === 0) return + if (dryRun) { + console.log(`DRY RUN! This iteration might have set TTL for up to ${keys.length} keys:\n - ${keys.join('\n - ')}`) + } - if (dryRun) { - console.log(`DRY RUN! This iteration might have set TTL for up to ${keys.length} keys:\n - ${keys.join('\n - ')}`) - return + // NOTE: It is possible for a SCAN cursor iteration to return 0 keys when + // using a MATCH because it is applied after the elements are retrieved + // + // Remember: more or less than COUNT or no keys may be returned + // See http://redis.io/commands/scan#the-count-option + // Also, SCAN may return the same key multiple times + // See http://redis.io/commands/scan#scan-guarantees + // Additionally, you should always have the code that uses the keys + // before the code checking the cursor. + if (keys.length > 0) { + if (dryRun) { + potentialKeyCount += keys.length + } else { + totalKeyCount += await updateTtls(keys) + } + } + + // From : + // 'An iteration starts when the cursor is set to 0, + // and terminates when the cursor returned by the server is 0.' + if (nextCursor === '0') { + const dryRunTrailer = dryRun ? ` (potentially up to ${potentialKeyCount})` : '' + console.log(`\nDone purging keys; affected total: ${totalKeyCount}${dryRunTrailer}`) + console.log(`Time elapsed: ${Date.now() - startTime} ms`) + + // Close the connection + await quitAsync() + return + } + + // Tail recursion + return scan(nextCursor) + } catch (error) { + console.error('An unexpected error occurred!\n' + error.stack) + console.error('\nAborting...') + process.exit(1) + } + } + + // Find existing TTLs to ensure we aren't extending the TTL if it's already set + async function getTtls (keys) { + const pttlPipeline = redisClient.batch() + keys.forEach(key => pttlPipeline.pttl(key)) + + const pttlPipelineExecAsync = promisify(pttlPipeline.exec).bind(pttlPipeline) + const pttlResults = await pttlPipelineExecAsync() + + if (pttlResults == null || pttlResults.length === 0) { + throw new Error('PTTL results were empty') } - // Pause the SCAN stream while we set a TTL on these keys - scanStream.pause() + return pttlResults + } - // Find existing TTLs to ensure we aren't extending the TTL if it's already set - // PTTL mykey // only operate on -1 result values or those greater than ONE_HOUR_FROM_NOW - const pttlPipeline = redisClient.pipeline() - keys.forEach(key => pttlPipeline.pttl(key)) - const pttlResults = await pttlPipeline.exec() + async function updateTtls (keys) { + const pttlResults = await getTtls(keys) - // Update pertinent keys to have TTLs set + // Find pertinent keys to have TTLs set let updatingKeyCount = 0 - const pexpireAtPipeline = redisClient.pipeline() + const pexpireAtPipeline = redisClient.batch() + keys.forEach((key, i) => { - const [error, pttl] = pttlResults[i] - const needsShortenedTtl = error == null && (pttl === -1 || pttl > expirationDuration) + // Only operate on -1 result values or those greater than ONE_HOUR_FROM_NOW + const pttl = pttlResults[i] + // A TTL of -1 means the entry was not configured with any TTL (expiration) + // currently and will remain as a permanent entry unless a TTL is added + const needsShortenedTtl = pttl === -1 || pttl > expirationDuration const isOldKey = !HEROKU_RELEASE_VERSION || !key.startsWith(`${HEROKU_RELEASE_VERSION}:`) if (needsShortenedTtl && isOldKey) { @@ -112,17 +156,21 @@ function purgeRenderedPageCache () { } }) - // Only update TTLs if there are records worth updating - if (updatingKeyCount > 0) { - // Set all the TTLs - const pexpireAtResults = await pexpireAtPipeline.exec() - const updatedResults = pexpireAtResults.filter(([error, result]) => error == null && result === 1) + console.log(`Purging ${updatingKeyCount} keys...`) - // Count only the entries whose TTLs were successfully updated - totalKeyCount += updatedResults.length + // Only update TTLs if there are records worth updating + if (updatingKeyCount === 0) return + + // Set all the TTLs + const pexpireAtPipelineExecAsync = promisify(pexpireAtPipeline.exec).bind(pexpireAtPipeline) + const pexpireAtResults = await pexpireAtPipelineExecAsync() + + if (pttlResults == null || pttlResults.length === 0) { + throw new Error('PEXPIREAT results were empty') } - // Resume the SCAN stream - scanStream.resume() - }) + // Count only the entries whose TTLs were successfully updated + const updatedResults = pexpireAtResults.filter((result) => result === 1) + return updatedResults.length + } } From ada9718306805a449fbe2cdc9cb1969d3df88258 Mon Sep 17 00:00:00 2001 From: jmarlena <6732600+jmarlena@users.noreply.github.com> Date: Tue, 30 Mar 2021 21:32:20 -0700 Subject: [PATCH 12/14] Apply suggestions from code review --- .../authenticate-to-container-registry-steps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/reusables/package_registry/authenticate-to-container-registry-steps.md b/data/reusables/package_registry/authenticate-to-container-registry-steps.md index a6883363b6..d5e173f71e 100644 --- a/data/reusables/package_registry/authenticate-to-container-registry-steps.md +++ b/data/reusables/package_registry/authenticate-to-container-registry-steps.md @@ -1,7 +1,7 @@ 1. Create a new personal access token (PAT) with the appropriate scopes for the tasks you want to accomplish. If your organization requires SSO, you must enable SSO for your new token. {% warning %} - **Note:** Granting the `write:packages` scope on the PAT also grants the `repo` scope! If you save this PAT for use from an Action, any collaborators can configure an Actions workflow to use this PAT to get full permissions to all repositories accessable from the PAT owner's account. We recommend creating a separate account with access only to the specific repositories that want to push Docker images (see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)"). + **Note:** By default, when you select the `write:packages` scope for your personal access token (PAT) in the user interface, the `repo` scope will also be selected. The `repo` scope offers unnecessary and broad access, which we recommend you avoid using for GitHub Actions workflows in particular. For more information, see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)." As a workaround, you can select just the `write:packages` scope for your PAT in the user interface with this url: `https://github.com/settings/tokens/new?scopes=write:packages`. {% endwarning %} From e60b9505c0cb1545a4007f8cb9d63611a1c3eef4 Mon Sep 17 00:00:00 2001 From: jmarlena <6732600+jmarlena@users.noreply.github.com> Date: Tue, 30 Mar 2021 21:39:52 -0700 Subject: [PATCH 13/14] Apply suggestions from code review --- .../authenticate_with_pat_for_container_registry.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/data/reusables/package_registry/authenticate_with_pat_for_container_registry.md b/data/reusables/package_registry/authenticate_with_pat_for_container_registry.md index 8a9304385a..37224f712e 100644 --- a/data/reusables/package_registry/authenticate_with_pat_for_container_registry.md +++ b/data/reusables/package_registry/authenticate_with_pat_for_container_registry.md @@ -5,7 +5,11 @@ PATs can grant broad access to your account. You should select only the necessar {% warning %} -**Note:** Granting the `write:packages` scope on the PAT also grants the `repo` scope! If you save this PAT for use from an Action, any collaborators can configure an Actions workflow to use this PAT to get full permissions to all repositories accessable from the PAT owner's account. We recommend creating a separate account with access only to the specific repositories that want to push Docker images (see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)"). +**Note:** * By default, when you select the `write:packages` scope for your personal access token (PAT) in the user interface, the `repo` scope will also be selected. The `repo` scope offers unnecessary and broad access, which we recommend you avoid using for GitHub Actions workflows in particular. + +If you save this PAT for use from an action, any collaborators can configure a GitHub Actions workflow to use this PAT to get full permissions to all repositories accessible from the PAT owner's account. For more information, see "[Security hardening for GitHub Actions](/actions/getting-started-with-github-actions/security-hardening-for-github-actions#considering-cross-repository-access)." + +As a workaround, you can select just the `write:packages` scope for your PAT in the user interface with this url: `https://github.com/settings/tokens/new?scopes=write:packages` and other desired scopes such as the `delete: packages` scope. Or you can create a separate account with access only to specific repositories that push Docker images. {% endwarning %} From 5b163a296def5e329a2b7dfecd463c7a3fe9dc4a Mon Sep 17 00:00:00 2001 From: Lucas Alves Date: Wed, 31 Mar 2021 11:01:10 -0300 Subject: [PATCH 14/14] Fix incorrect operator from the environment variables article (#4863) --- content/actions/reference/environment-variables.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/actions/reference/environment-variables.md b/content/actions/reference/environment-variables.md index dd45eafec2..3acefddf75 100644 --- a/content/actions/reference/environment-variables.md +++ b/content/actions/reference/environment-variables.md @@ -22,6 +22,7 @@ versions: To set custom environment variables, you need to specify the variables in the workflow file. You can define environment variables for a step, job, or entire workflow using the [`jobs..steps[*].env`](/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsenv), [`jobs..env`](/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idenv), and [`env`](/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#env) keywords. For more information, see "[Workflow syntax for {% data variables.product.prodname_dotcom %}](/articles/workflow-syntax-for-github-actions/#jobsjob_idstepsenv)." +{% raw %} ```yaml jobs: weekday_job: @@ -30,13 +31,14 @@ jobs: DAY_OF_WEEK: Mon steps: - name: "Hello world when it's Monday" - if: env.DAY_OF_WEEK == 'Mon' + if: ${{ env.DAY_OF_WEEK == 'Mon' }} run: echo "Hello $FIRST_NAME $middle_name $Last_Name, today is Monday!" env: FIRST_NAME: Mona middle_name: The Last_Name: Octocat ``` +{% endraw %} To use the value of an environment variable in a workflow file, you should use the [`env` context](/actions/reference/context-and-expression-syntax-for-github-actions#env-context). If you want to use the value of an environment variable inside a runner, you can use the runner operating system's normal method for reading environment variables.