diff --git a/.github/workflows/triage-unallowed-contributions.yml b/.github/workflows/triage-unallowed-contributions.yml
index c89214f6de..83cb24b5ec 100644
--- a/.github/workflows/triage-unallowed-contributions.yml
+++ b/.github/workflows/triage-unallowed-contributions.yml
@@ -1,7 +1,7 @@
name: Check unallowed file changes
on:
- pull_request:
+ pull_request_target:
paths:
- '.github/workflows/**'
- '.github/CODEOWNERS'
diff --git a/app.json b/app.json
index 576dcda241..2ee1940717 100644
--- a/app.json
+++ b/app.json
@@ -5,6 +5,7 @@
"NPM_CONFIG_PRODUCTION": "true"
},
"buildpacks": [
+ { "url": "https://github.com/DataDog/heroku-buildpack-datadog.git#1.21" },
{ "url": "heroku/nodejs" }
],
"formation": {
diff --git a/assets/images/help/enterprises/add-a-domain-button.png b/assets/images/help/enterprises/add-a-domain-button.png
new file mode 100644
index 0000000000..21b2d4eac0
Binary files /dev/null and b/assets/images/help/enterprises/add-a-domain-button.png differ
diff --git a/assets/images/help/enterprises/verified-domains-tab.png b/assets/images/help/enterprises/verified-domains-tab.png
new file mode 100644
index 0000000000..f88dd13302
Binary files /dev/null and b/assets/images/help/enterprises/verified-domains-tab.png differ
diff --git a/assets/images/help/pull_requests/allow-auto-merge-checkbox.png b/assets/images/help/pull_requests/allow-auto-merge-checkbox.png
new file mode 100644
index 0000000000..7178c8c60b
Binary files /dev/null and b/assets/images/help/pull_requests/allow-auto-merge-checkbox.png differ
diff --git a/assets/images/help/pull_requests/confirm-auto-merge-button.png b/assets/images/help/pull_requests/confirm-auto-merge-button.png
new file mode 100644
index 0000000000..074e879469
Binary files /dev/null and b/assets/images/help/pull_requests/confirm-auto-merge-button.png differ
diff --git a/assets/images/help/pull_requests/disable-auto-merge-button.png b/assets/images/help/pull_requests/disable-auto-merge-button.png
new file mode 100644
index 0000000000..a7f46426b9
Binary files /dev/null and b/assets/images/help/pull_requests/disable-auto-merge-button.png differ
diff --git a/assets/images/help/pull_requests/enable-auto-merge-button.png b/assets/images/help/pull_requests/enable-auto-merge-button.png
new file mode 100644
index 0000000000..2cb159489c
Binary files /dev/null and b/assets/images/help/pull_requests/enable-auto-merge-button.png differ
diff --git a/assets/images/help/pull_requests/enable-auto-merge-drop-down.png b/assets/images/help/pull_requests/enable-auto-merge-drop-down.png
new file mode 100644
index 0000000000..fff94f6b23
Binary files /dev/null and b/assets/images/help/pull_requests/enable-auto-merge-drop-down.png differ
diff --git a/assets/images/help/pull_requests/pull-request-information-fields.png b/assets/images/help/pull_requests/pull-request-information-fields.png
new file mode 100644
index 0000000000..f50ffe93c9
Binary files /dev/null and b/assets/images/help/pull_requests/pull-request-information-fields.png differ
diff --git a/content/github/administering-a-repository/about-protected-branches.md b/content/github/administering-a-repository/about-protected-branches.md
index d67809249a..b56aef9e66 100644
--- a/content/github/administering-a-repository/about-protected-branches.md
+++ b/content/github/administering-a-repository/about-protected-branches.md
@@ -11,12 +11,16 @@ versions:
github-ae: '*'
---
+### About protected branches
+
{% data reusables.pull_requests.about-protected-branches %} You can choose to enforce restrictions on how a pull request is merged into your repository.
Repository owners and people with admin permissions for a repository can enforce certain workflows or requirements, before a collaborator can merge a branch in your repository by creating protected branch rules.
{% data reusables.repositories.branch-rules-example %} For more information, see "[Configuring protected branches](/articles/configuring-protected-branches/)."
+{% data reusables.pull_requests.you-can-auto-merge %}
+
### Prioritization of protected branch rules
If a repository has multiple protected branch rules that affect the same branches, the rules that include a specific branch name have the highest priority. If there is more than one protected branch rule that references the same specific branch name, then the branch rule created first will have higher priority.
diff --git a/content/github/administering-a-repository/configuring-pull-request-merges.md b/content/github/administering-a-repository/configuring-pull-request-merges.md
index 6a34fe2d0d..f42c9d2a9a 100644
--- a/content/github/administering-a-repository/configuring-pull-request-merges.md
+++ b/content/github/administering-a-repository/configuring-pull-request-merges.md
@@ -1,6 +1,6 @@
---
title: Configuring pull request merges
-intro: 'You can configure pull request merges on {% data variables.product.product_location %} to match your workflow and preferences for managing Git history by enabling, disabling, or enforcing standard merge commits, squashed commits, or rebased commits on all pull requests in your repository.'
+intro: 'You can configure pull request merges on {% data variables.product.product_location %} to match your workflow and preferences for managing Git history.'
mapTopic: true
redirect_from:
- /articles/configuring-pull-request-merges
diff --git a/content/github/administering-a-repository/index.md b/content/github/administering-a-repository/index.md
index c3d2b35b54..1f27602bae 100644
--- a/content/github/administering-a-repository/index.md
+++ b/content/github/administering-a-repository/index.md
@@ -39,6 +39,7 @@ versions:
{% link_in_list /about-merge-methods-on-github %}
{% link_in_list /configuring-commit-squashing-for-pull-requests %}
{% link_in_list /configuring-commit-rebasing-for-pull-requests %}
+ {% link_in_list /managing-auto-merge-for-pull-requests-in-your-repository %}
{% link_in_list /managing-the-automatic-deletion-of-branches %}
{% topic_link_in_list /defining-the-mergeability-of-pull-requests %}
{% link_in_list /about-protected-branches %}
diff --git a/content/github/administering-a-repository/managing-auto-merge-for-pull-requests-in-your-repository.md b/content/github/administering-a-repository/managing-auto-merge-for-pull-requests-in-your-repository.md
new file mode 100644
index 0000000000..d1d4dd9af1
--- /dev/null
+++ b/content/github/administering-a-repository/managing-auto-merge-for-pull-requests-in-your-repository.md
@@ -0,0 +1,17 @@
+---
+title: Managing auto-merge for pull requests in your repository
+intro: "You can allow or disallow auto-merge for pull requests in your repository."
+product: '{% data reusables.gated-features.auto-merge %}'
+versions:
+ free-pro-team: '*'
+permissions: People with maintainer permissions can manage auto-merge for pull requests in a repository.
+---
+
+{% data reusables.pull_requests.auto-merge-release-phase %}
+
+If you allow auto-merge for pull requests in your repository, people can configure individual pull requests in the repository to merge automatically when all merge requirements are met. For more information, see "[Automatically merging a pull request](/github/collaborating-with-issues-and-pull-requests/automatically-merging-a-pull-request)."
+
+{% data reusables.repositories.navigate-to-repo %}
+{% data reusables.repositories.sidebar-settings %}
+1. Under "Merge button", select or deselect **Allow auto-merge**.
+ 
\ No newline at end of file
diff --git a/content/github/collaborating-with-issues-and-pull-requests/automatically-merging-a-pull-request.md b/content/github/collaborating-with-issues-and-pull-requests/automatically-merging-a-pull-request.md
new file mode 100644
index 0000000000..c5dcbfa7c4
--- /dev/null
+++ b/content/github/collaborating-with-issues-and-pull-requests/automatically-merging-a-pull-request.md
@@ -0,0 +1,43 @@
+---
+title: Automatically merging a pull request
+intro: 'You can increase development velocity by enabling auto-merge for a pull request so that the pull request will merge automatically when all merge requirements are met.'
+product: '{% data reusables.gated-features.auto-merge %}'
+versions:
+ free-pro-team: '*'
+---
+
+{% data reusables.pull_requests.auto-merge-release-phase %}
+
+### About auto-merge
+
+If you enable auto-merge for a pull request, the pull request will merge automatically when all required reviews are met and status checks have passed. Auto-merge prevents you from waiting around for requirements to be met, so you can move on to other tasks.
+
+Before you can use auto-merge with a pull request, auto-merge must be enabled for the repository. For more information, see "[Managing auto-merge for pull requests in your repository](/github/administering-a-repository/managing-auto-merge-for-pull-requests-in-your-repository)."
+
+You can provide feedback about auto-merge by [contacting us](https://support.github.com/contact/feedback?category=prs-and-code-review&subject=Pull%20request%20auto-merge%20feedback).
+
+### Enabling auto-merge
+
+People with write permissions to a repository can enable auto-merge for a pull request.
+
+{% data reusables.repositories.navigate-to-repo %}
+{% data reusables.repositories.sidebar-pr %}
+1. In the "Pull Requests" list, click the pull request you'd like to auto-merge.
+1. Optionally, to choose a merge method, select the **Enable auto-merge** drop-down menu, then click a merge method. For more information, see "[About pull request merges](/github/collaborating-with-issues-and-pull-requests/about-pull-request-merges)."
+ 
+1. Click **Enable auto-merge**.
+ 
+1. If you chose the merge or squash and merge methods, type a commit message and description and choose the email address you want to author the merge commit.
+ 
+1. Click **Confirm auto-merge**.
+ 
+
+### Disabling auto-merge
+
+People with write permissions to a repository and pull request authors can disable auto-merge for a pull request.
+
+{% data reusables.repositories.navigate-to-repo %}
+{% data reusables.repositories.sidebar-pr %}
+1. In the "Pull Requests" list, click the pull request you'd like to disable auto-merge for.
+1. In the merge box, click **Disable auto-merge**.
+ 
diff --git a/content/github/collaborating-with-issues-and-pull-requests/index.md b/content/github/collaborating-with-issues-and-pull-requests/index.md
index ae4915c002..1e666ca019 100644
--- a/content/github/collaborating-with-issues-and-pull-requests/index.md
+++ b/content/github/collaborating-with-issues-and-pull-requests/index.md
@@ -60,5 +60,6 @@ versions:
{% topic_link_in_list /incorporating-changes-from-a-pull-request %}
{% link_in_list /about-pull-request-merges %}
{% link_in_list /merging-a-pull-request %}
+ {% link_in_list /automatically-merging-a-pull-request %}
{% link_in_list /closing-a-pull-request %}
{% link_in_list /reverting-a-pull-request %}
diff --git a/content/github/collaborating-with-issues-and-pull-requests/merging-a-pull-request.md b/content/github/collaborating-with-issues-and-pull-requests/merging-a-pull-request.md
index 415b3bc262..4b773ebfdf 100644
--- a/content/github/collaborating-with-issues-and-pull-requests/merging-a-pull-request.md
+++ b/content/github/collaborating-with-issues-and-pull-requests/merging-a-pull-request.md
@@ -14,6 +14,8 @@ versions:
In a pull request, you propose that changes you've made on a head branch should be merged into a base branch. {% data reusables.pull_requests.about-protected-branches %} However, there may be restrictions on when you can merge a pull request into a specific branch. For example, you may only be able to merge a pull request into the default branch if required status checks are passing. For more information, see "[About protected branches](/github/administering-a-repository/about-protected-branches)."
+{% data reusables.pull_requests.you-can-auto-merge %}
+
If the pull request has merge conflicts, or if you'd like to test the changes before merging, you can [check out the pull request locally](/articles/checking-out-pull-requests-locally) and merge it using the command line.
You can't merge a draft pull request. For more information about draft pull requests, see "[About pull requests](/articles/about-pull-requests#draft-pull-requests)."
diff --git a/content/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization.md b/content/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization.md
index 8add77b2f3..d2c499bde3 100644
--- a/content/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization.md
+++ b/content/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization.md
@@ -39,6 +39,7 @@ Organization members can have *owner*{% if currentVersion == "free-pro-team@late
| Access the organization audit log | **X** | | |
| Edit the organization's profile page (see "[About your organization's profile](/articles/about-your-organization-s-profile)" for details) | **X** | | |
| Verify the organization's domains (see "[Verifying your organization's domain](/articles/verifying-your-organization-s-domain)" for details) | **X** | | |
+| Restrict email notifications to verified domains (see "[Restricting email notifications to an approved domain](/github/setting-up-and-managing-organizations-and-teams/restricting-email-notifications-to-an-approved-domain)" for details) | **X** | | |
| Delete **all teams** | **X** | | |
| Delete the organization account, including all repositories | **X** | | |
| Create teams (see "[Setting team creation permissions in your organization](/articles/setting-team-creation-permissions-in-your-organization)" for details) | **X** | **X** | |
diff --git a/content/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization.md b/content/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization.md
index 2d70d2590c..2e21db1c13 100644
--- a/content/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization.md
+++ b/content/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization.md
@@ -60,7 +60,8 @@ In addition to managing organization-level settings, organization owners have ad
| [Report abusive or spammy content](/articles/reporting-abuse-or-spam) | **X** | **X** | **X** | **X** | **X** |{% endif %}
| Apply labels | | **X** | **X** | **X** | **X** |
| Create, edit, delete labels | | | **X** | **X** | **X** |
-| Close, reopen, and assign all issues and pull requests | | **X** | **X** | **X** | **X** |
+| Close, reopen, and assign all issues and pull requests | | **X** | **X** | **X** | **X** |{% if currentVersion == "free-pro-team@latest" %}
+| [Enable and disable auto-merge on a pull request](/github/administering-a-repository/managing-auto-merge-for-pull-requests-in-your-repository) | | | **X** | **X** | **X** |{% endif %}
| Apply milestones | | **X** | **X** | **X** | **X** |
| Mark [duplicate issues and pull requests](/articles/about-duplicate-issues-and-pull-requests)| | **X** | **X** | **X** | **X** |
| Request [pull request reviews](/articles/requesting-a-pull-request-review) | | **X** | **X** | **X** | **X** |
diff --git a/content/github/setting-up-and-managing-organizations-and-teams/restricting-email-notifications-to-an-approved-domain.md b/content/github/setting-up-and-managing-organizations-and-teams/restricting-email-notifications-to-an-approved-domain.md
index d4606e3d20..6e0924546a 100644
--- a/content/github/setting-up-and-managing-organizations-and-teams/restricting-email-notifications-to-an-approved-domain.md
+++ b/content/github/setting-up-and-managing-organizations-and-teams/restricting-email-notifications-to-an-approved-domain.md
@@ -9,14 +9,19 @@ versions:
free-pro-team: '*'
---
-When restricted email notifications are enabled in an organization, members can only receive email notifications about organization activity at an email address associated with the organization's verified domain. For more information, see "[Verifying your organization's domain](/articles/verifying-your-organization-s-domain)."
+### About email restrictions
+
+When restricted email notifications are enabled in an organization, members can only use an email address associated with the organization's verified domains to receive email notifications about organization activity. For more information, see "[Verifying your organization's domain](/articles/verifying-your-organization-s-domain)."
Outside collaborators are not subject to restrictions on email notifications for verified domains. For more information on outside collaborators, see "[Permission levels for an organization](/github/setting-up-and-managing-organizations-and-teams/permission-levels-for-an-organization#outside-collaborators)."
+If your organization is owned by an enterprise account, organization members will be able to receive notifications from any domains verified for the enterprise account, in addition to any domains verified for the organization. For more information, see "[Verifying your enterprise account's domain](/github/setting-up-and-managing-your-enterprise/verifying-your-enterprise-accounts-domain)."
+
+### Restricting email notifications to an approved domain
+
{% data reusables.profile.access_profile %}
{% data reusables.profile.access_org %}
{% data reusables.organizations.org_settings %}
{% data reusables.organizations.verified-domains %}
-5. Under "Enforcement preferences", select **Restrict email notifications to domain email**.
- 
+{% data reusables.organizations.restrict-email-notifications %}
6. Click **Save**.
diff --git a/content/github/setting-up-and-managing-organizations-and-teams/verifying-your-organizations-domain.md b/content/github/setting-up-and-managing-organizations-and-teams/verifying-your-organizations-domain.md
index 447f9b758d..db0098a2c9 100644
--- a/content/github/setting-up-and-managing-organizations-and-teams/verifying-your-organizations-domain.md
+++ b/content/github/setting-up-and-managing-organizations-and-teams/verifying-your-organizations-domain.md
@@ -8,46 +8,34 @@ versions:
free-pro-team: '*'
---
+### About domain verification
+
To verify domains on {% data variables.product.product_name %}, you must have owner permissions in the organization. For more information, see "[Permission levels for an organization](/articles/permission-levels-for-an-organization)." You will also need access to modify domain records with your domain hosting service.
After verifying ownership of your organization's domains, a "Verified" badge will display on the organization's profile. If your organization is on {% data variables.product.prodname_ghe_cloud %} and has agreed to the Corporate Terms of Service, organization owners will be able to verify the identity of organization members by viewing each member's email address within the verified domain. For more information, see "[About your organization's profile page](/articles/about-your-organization-s-profile/)" and "[Upgrading to the Corporate Terms of Service](/articles/upgrading-to-the-corporate-terms-of-service)."
-To display a "Verified" badge, the website and email information shown on your organization's profile must match the verified domain or domains. If the website and email address shown on your organization's profile are hosted on different domains, you must verify both domains.
+If your organization is owned by an enterprise account, a "Verified" badge will display on your organization's profile for any domains verified for the enterprise account, in addition to any domains verified for the organization. For more information, see "[Verifying your enterprise account's domain](/github/setting-up-and-managing-your-enterprise/verifying-your-enterprise-accounts-domain)."
-{% note %}
-
-**Note:** If the email address and website shown on your organization's profile use variants of the same domain, you must verify both variants. For example, if your organization's profile shows the website `www.example.com` and the email address `info@example.com`, you would need to verify both `www.example.com` and `example.com`.
-
-{% endnote %}
+{% data reusables.organizations.verified-domains-details %}
On {% data variables.product.prodname_ghe_cloud %}, after verifying ownership of your organization's domain, you can restrict email notifications for the organization to that domain. For more information, see "[Restricting email notifications to an approved domain](/articles/restricting-email-notifications-to-an-approved-domain)."
+### Verifying your organization's domain
+
{% data reusables.profile.access_profile %}
{% data reusables.profile.access_org %}
{% data reusables.organizations.org_settings %}
{% data reusables.organizations.verified-domains %}
5. Click **Add a domain**.

-6. In the domain field, type the domain you'd like to verify, then click **Add domain**.
-
-7. Follow the instructions under **Add a DNS TXT record** to create a DNS TXT record with your domain hosting service. It may take up to 72 hours for your DNS configuration to change. Once your DNS configuration has changed, continue to the next step.
-
-
- {% tip %}
-
- **Tip:** You can confirm your DNS configuration has changed by running the `dig` command on the command line. In the example command, replace `ORGANIZATION` with the name of your organization, and `example.com` with the domain you'd like to verify. You should see your new TXT record listed in the command output.
-
+{% data reusables.organizations.add-domain %}
+{% data reusables.organizations.add-dns-txt-record %}
+1. Wait for your DNS configuration to change, which may take up to 72 hours. You can confirm your DNS configuration has changed by running the `dig` command on the command line, replacing `ORGANIZATION` with the name of your organization and `example.com` with the domain you'd like to verify. You should see your new TXT record listed in the command output.
```shell
$ dig _github-challenge-ORGANIZATION.example.com +nostats +nocomments +nocmd TXT
```
-
- {% endtip %}
-
8. After confirming your TXT record is added to your DNS, navigate to the Verified domains tab in your organization's settings. You can follow steps one through four above to locate the Verified domains tab.

-9. Next to the domain that's pending verification, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}, then click **Continue verifying**.
-
-10. Click **Verify domain**.
-
+{% data reusables.organizations.continue-verifying-domain %}
11. Optionally, once the "Verified" badge is visible on your organization's profile page, you can delete the TXT entry from the DNS record at your domain hosting service.

diff --git a/content/github/setting-up-and-managing-your-enterprise/index.md b/content/github/setting-up-and-managing-your-enterprise/index.md
index 54e9cb2241..6d144e7ecc 100644
--- a/content/github/setting-up-and-managing-your-enterprise/index.md
+++ b/content/github/setting-up-and-managing-your-enterprise/index.md
@@ -34,6 +34,8 @@ versions:
{% link_in_list /enforcing-team-policies-in-your-enterprise-account %}
{% link_in_list /enforcing-security-settings-in-your-enterprise-account %}
{% link_in_list /configuring-saml-single-sign-on-and-scim-for-your-enterprise-account-using-okta %}
+ {% link_in_list /verifying-your-enterprise-accounts-domain %}
+ {% link_in_list /restricting-email-notifications-for-your-enterprise-account-to-approved-domains %}
{% link_in_list /enforcing-a-policy-on-dependency-insights-in-your-enterprise-account %}
{% link_in_list /enforcing-github-actions-policies-in-your-enterprise-account %}
{% link_in_list /configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-enterprise-account %}
diff --git a/content/github/setting-up-and-managing-your-enterprise/restricting-email-notifications-for-your-enterprise-account-to-approved-domains.md b/content/github/setting-up-and-managing-your-enterprise/restricting-email-notifications-for-your-enterprise-account-to-approved-domains.md
new file mode 100644
index 0000000000..e02bb0e7c0
--- /dev/null
+++ b/content/github/setting-up-and-managing-your-enterprise/restricting-email-notifications-for-your-enterprise-account-to-approved-domains.md
@@ -0,0 +1,26 @@
+---
+title: Restricting email notifications for your enterprise account to approved domains
+intro: "You can prevent your enterprise's information from leaking into personal accounts by restricting email notifications about activity in organizations owned by your enterprise account to verified domains."
+product: '{% data reusables.gated-features.enterprise-accounts %}'
+versions:
+ free-pro-team: '*'
+permissions: Enterprise owners can restrict email notifications for an enterprise account.
+---
+
+{% data reusables.enterprise-accounts.verifying-domains-release-phase %}
+
+### About email restrictions for your enterprise account
+
+When you restrict email notifications to verified domains, enterprise members can only use an email address associated with a verified domain to receive email notifications about activity in organizations owned by your enterprise account. The domains can be inherited from the enterprise account or configured for the specific organization. For more information about email restrictions for organizations, see "[Restricting email notifications to an approved domain](/github/setting-up-and-managing-organizations-and-teams/restricting-email-notifications-to-an-approved-domain)."
+
+If email restrictions are enabled for an enterprise account, organization owners cannot disable email restrictions for any organization owned by the enterprise account. If changes occur that result in an organization having no verified domains, either inherited from an enterprise account that owns the organization or for the specific organization, email restrictions will be disabled for the organization.
+
+### Restricting email notifications for your enterprise account
+
+Before you can restrict email notifications for your enterprise account, you must verify at least one domain for the enterprise account. For more information, see "[Verifying your enterprise account's domain](/github/setting-up-and-managing-your-enterprise/verifying-your-enterprise-accounts-domain)."
+
+{% data reusables.enterprise-accounts.access-enterprise %}
+{% data reusables.enterprise-accounts.settings-tab %}
+{% data reusables.enterprise-accounts.verified-domains-tab %}
+{% data reusables.organizations.restrict-email-notifications %}
+1. Click **Save**.
diff --git a/content/github/setting-up-and-managing-your-enterprise/verifying-your-enterprise-accounts-domain.md b/content/github/setting-up-and-managing-your-enterprise/verifying-your-enterprise-accounts-domain.md
new file mode 100644
index 0000000000..7ff5dfb144
--- /dev/null
+++ b/content/github/setting-up-and-managing-your-enterprise/verifying-your-enterprise-accounts-domain.md
@@ -0,0 +1,44 @@
+---
+title: Verifying your enterprise account's domain
+intro: 'You can confirm the identity of organizations owned by your enterprise account by verifying ownership of your domain names with {% data variables.product.company_short %}.'
+product: '{% data reusables.gated-features.enterprise-accounts %}'
+versions:
+ free-pro-team: '*'
+permissions: Enterprise owners can verify an enterprise account's domain.
+redirect_from:
+ - /github/articles/verifying-your-enterprise-accounts-domain
+ - /early-access/github/articles/verifying-your-enterprise-accounts-domain
+---
+
+{% data reusables.enterprise-accounts.verifying-domains-release-phase %}
+
+### About domain verification
+
+You can confirm that the websites and email addresses listed on the profiles of any organization owned by your enterprise account are controlled by your enterprise by verifying the domains. Verified domains for an enterprise account apply to every organization owned by the enterprise account, and organization owners can verify additional domains for their organizations. For more information, see "[Verifying your organization's domain](/github/setting-up-and-managing-organizations-and-teams/verifying-your-organizations-domain)."
+
+After you verify ownership of your enterprise account's domains, a "Verified" badge will display on the profile of each organization that has the domain listed on its profile. {% data reusables.organizations.verified-domains-details %}
+
+Organization owners will be able to verify the identity of organization members by viewing each member's email address within the verified domain.
+
+After you verify domains for your enterprise account, you can restrict email notifications to verified domains for all the organizations owned by your enterprise account. For more information, see "[Restricting email notifications for your enterprise account to approved domains](/github/setting-up-and-managing-your-enterprise/restricting-email-notifications-for-your-enterprise-account-to-approved-domains)."
+
+Even if you don't restrict email notifications for the enterprise account, if an organization owner has restricted email notifications for the organization, organization members will be able to receive notifications from any domains verified for the enterprise account, in addition to any domains verified for the organization. For more information about restricting notifications for an organization, see "[Restricting email notifications to an approved domain](/github/setting-up-and-managing-organizations-and-teams/restricting-email-notifications-to-an-approved-domain)."
+
+### Verifying your enterprise account's domain
+
+To verify your enterprise account's domain, you must have access to modify domain records with your domain hosting service.
+
+{% data reusables.enterprise-accounts.access-enterprise %}
+{% data reusables.enterprise-accounts.settings-tab %}
+{% data reusables.enterprise-accounts.verified-domains-tab %}
+1. Click **Add a domain**.
+ 
+{% data reusables.organizations.add-domain %}
+{% data reusables.organizations.add-dns-txt-record %}
+1. Wait for your DNS configuration to change, which may take up to 72 hours. You can confirm your DNS configuration has changed by running the `dig` command on the command line, replacing `ENTERPRISE-ACCOUNT` with the name of your enterprise account, and `example.com` with the domain you'd like to verify. You should see your new TXT record listed in the command output.
+ ```shell
+ dig _github-challenge-ENTERPRISE-ACCOUNT.example.com +nostats +nocomments +nocmd TXT
+ ```
+{% data reusables.organizations.continue-verifying-domain %}
+1. Optionally, after the "Verified" badge is visible on your organizations' profiles, delete the TXT entry from the DNS record at your domain hosting service.
+
\ No newline at end of file
diff --git a/content/github/setting-up-and-managing-your-github-user-account/permission-levels-for-a-user-account-repository.md b/content/github/setting-up-and-managing-your-github-user-account/permission-levels-for-a-user-account-repository.md
index da5ecd4f3a..bc054f2a2a 100644
--- a/content/github/setting-up-and-managing-your-github-user-account/permission-levels-for-a-user-account-repository.md
+++ b/content/github/setting-up-and-managing-your-github-user-account/permission-levels-for-a-user-account-repository.md
@@ -44,7 +44,8 @@ The repository owner has full control of the repository. In addition to the acti
| Define code owners for the repository | "[About code owners](/github/creating-cloning-and-archiving-repositories/about-code-owners)" |
| Archive the repository | "[About archiving repositories](/github/creating-cloning-and-archiving-repositories/about-archiving-repositories)" |{% if currentVersion == "free-pro-team@latest" %}
| Create security advisories | "[About {% data variables.product.prodname_security_advisories %}](/github/managing-security-vulnerabilities/about-github-security-advisories)" |
-| Display a sponsor button | "[Displaying a sponsor button in your repository](/github/administering-a-repository/displaying-a-sponsor-button-in-your-repository)" |{% endif %}
+| Display a sponsor button | "[Displaying a sponsor button in your repository](/github/administering-a-repository/displaying-a-sponsor-button-in-your-repository)" |
+| Allow or disallow auto-merge for pull requests | "[Managing auto-merge for pull requests in your repository](/github/administering-a-repository/managing-auto-merge-for-pull-requests-in-your-repository)" | {% endif %}
### Collaborator access for a repository owned by a user account
@@ -66,7 +67,8 @@ Collaborators can also perform the following actions.
| Manage labels for issues and pull requests in the repository | "[Labeling issues and pull requests](/github/managing-your-work-on-github/labeling-issues-and-pull-requests)" |
| Manage milestones for issues and pull requests in the repository | "[Creating and editing milestones for issues and pull requests](/github/managing-your-work-on-github/creating-and-editing-milestones-for-issues-and-pull-requests)" |
| Mark an issue or pull request in the repository as a duplicate | "[About duplicate issues and pull requests](/github/managing-your-work-on-github/about-duplicate-issues-and-pull-requests)" |
-| Create, merge, and close pull requests in the repository | "[Proposing changes to your work with pull requests](/github/collaborating-with-issues-and-pull-requests/proposing-changes-to-your-work-with-pull-requests)" |
+| Create, merge, and close pull requests in the repository | "[Proposing changes to your work with pull requests](/github/collaborating-with-issues-and-pull-requests/proposing-changes-to-your-work-with-pull-requests)" |{% if currentVersion == "free-pro-team@latest" %}
+| Enable and disable auto-merge for a pull request | "[Automatically merging a pull request](/github/collaborating-with-issues-and-pull-requests/automatically-merging-a-pull-request)"{% endif %}
| Apply suggested changes to pull requests in the repository |"[Incorporating feedback in your pull request](/github/collaborating-with-issues-and-pull-requests/incorporating-feedback-in-your-pull-request)" |
| Create a pull request from a fork of the repository | "[Creating a pull request from a fork](/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork)" |
| Submit a review on a pull request that affects the mergeability of the pull request | "[Reviewing proposed changes in a pull request](/github/collaborating-with-issues-and-pull-requests/reviewing-proposed-changes-in-a-pull-request)" |
diff --git a/data/reusables/enterprise-accounts/verified-domains-tab.md b/data/reusables/enterprise-accounts/verified-domains-tab.md
new file mode 100644
index 0000000000..b1252abc23
--- /dev/null
+++ b/data/reusables/enterprise-accounts/verified-domains-tab.md
@@ -0,0 +1,2 @@
+1. Under "Settings", click **Verified domains**.
+ 
\ No newline at end of file
diff --git a/data/reusables/enterprise-accounts/verifying-domains-release-phase.md b/data/reusables/enterprise-accounts/verifying-domains-release-phase.md
new file mode 100644
index 0000000000..331fb63c15
--- /dev/null
+++ b/data/reusables/enterprise-accounts/verifying-domains-release-phase.md
@@ -0,0 +1,5 @@
+{% note %}
+
+**Note:** Verifying an enterprise account's domain is currently in beta and subject to change.
+
+{% endnote %}
\ No newline at end of file
diff --git a/data/reusables/gated-features/auto-merge.md b/data/reusables/gated-features/auto-merge.md
new file mode 100644
index 0000000000..72a58ba07d
--- /dev/null
+++ b/data/reusables/gated-features/auto-merge.md
@@ -0,0 +1 @@
+Auto-merge for pull requests is available in public repositories with {% data variables.product.prodname_free_user %} and {% data variables.product.prodname_free_team %} for organizations, and in public and private repositories with {% data variables.product.prodname_pro %}, {% data variables.product.prodname_team %}, and {% data variables.product.prodname_ghe_cloud %}. {% if currentVersion == "free-pro-team@latest" %}{% data reusables.gated-features.more-info %}{% endif %}
\ No newline at end of file
diff --git a/data/reusables/organizations/add-dns-txt-record.md b/data/reusables/organizations/add-dns-txt-record.md
new file mode 100644
index 0000000000..521dc35263
--- /dev/null
+++ b/data/reusables/organizations/add-dns-txt-record.md
@@ -0,0 +1,2 @@
+1. Follow the instructions under **Add a DNS TXT record** to create a DNS TXT record with your domain hosting service.
+ 
\ No newline at end of file
diff --git a/data/reusables/organizations/add-domain.md b/data/reusables/organizations/add-domain.md
new file mode 100644
index 0000000000..9f0b45e444
--- /dev/null
+++ b/data/reusables/organizations/add-domain.md
@@ -0,0 +1,2 @@
+1. In the domain field, type the domain you'd like to verify, then click **Add domain**.
+ 
\ No newline at end of file
diff --git a/data/reusables/organizations/continue-verifying-domain.md b/data/reusables/organizations/continue-verifying-domain.md
new file mode 100644
index 0000000000..dbe6ad6560
--- /dev/null
+++ b/data/reusables/organizations/continue-verifying-domain.md
@@ -0,0 +1,4 @@
+9. To the right of the domain that's pending verification, click {% octicon "kebab-horizontal" aria-label="The horizontal kebab icon" %}, then click **Continue verifying**.
+
+10. Click **Verify domain**.
+
\ No newline at end of file
diff --git a/data/reusables/organizations/restrict-email-notifications.md b/data/reusables/organizations/restrict-email-notifications.md
new file mode 100644
index 0000000000..28887fa67c
--- /dev/null
+++ b/data/reusables/organizations/restrict-email-notifications.md
@@ -0,0 +1,2 @@
+1. Under "Enforcement preferences", select **Restrict email notifications to domain email**.
+ 
\ No newline at end of file
diff --git a/data/reusables/organizations/verified-domains-details.md b/data/reusables/organizations/verified-domains-details.md
new file mode 100644
index 0000000000..da065f8dd0
--- /dev/null
+++ b/data/reusables/organizations/verified-domains-details.md
@@ -0,0 +1 @@
+To display a "Verified" badge, the website and email information shown on an organization's profile must match the verified domain or domains. If the website and email address shown on your organization's profile are hosted on different domains, you must verify both domains. If the website and email address use variants of the same domain, you must verify both variants. For example, if the profile shows the website `www.example.com` and the email address `info@example.com`, you would need to verify both `www.example.com` and `example.com`.
\ No newline at end of file
diff --git a/data/reusables/pull_requests/auto-merge-release-phase.md b/data/reusables/pull_requests/auto-merge-release-phase.md
new file mode 100644
index 0000000000..1dd38f1187
--- /dev/null
+++ b/data/reusables/pull_requests/auto-merge-release-phase.md
@@ -0,0 +1,5 @@
+{% note %}
+
+**Note:** Auto-merge for pull requests is currently in beta and subject to change.
+
+{% endnote %}
\ No newline at end of file
diff --git a/data/reusables/pull_requests/you-can-auto-merge.md b/data/reusables/pull_requests/you-can-auto-merge.md
new file mode 100644
index 0000000000..410aec2a8e
--- /dev/null
+++ b/data/reusables/pull_requests/you-can-auto-merge.md
@@ -0,0 +1,3 @@
+{% if currentVersion == "free-pro-team@latest" %}
+You can configure a pull request to merge automatically when all merge requirements are met. For more information, see "[Automatically merging a pull request](/github/collaborating-with-issues-and-pull-requests/automatically-merging-a-pull-request)."
+{% endif %}
\ No newline at end of file
diff --git a/lib/data-directory.js b/lib/data-directory.js
index 17bb7c60b4..845452591f 100644
--- a/lib/data-directory.js
+++ b/lib/data-directory.js
@@ -1,15 +1,12 @@
const assert = require('assert')
-const fs = require('fs').promises
+const fs = require('fs')
const path = require('path')
const walk = require('walk-sync')
-const { mapLimit } = require('async')
const yaml = require('js-yaml')
const { isRegExp, set } = require('lodash')
const filenameToKey = require('./filename-to-key')
-const FILE_READ_LIMIT = 100
-
-module.exports = async function dataDirectory (dir, opts = {}) {
+module.exports = function dataDirectory (dir, opts = {}) {
const defaultOpts = {
preprocess: (content) => { return content },
ignorePatterns: [/README\.md$/i],
@@ -42,10 +39,9 @@ module.exports = async function dataDirectory (dir, opts = {}) {
// ignore files that don't have a whitelisted file extension
return opts.extensions.includes(path.extname(filename).toLowerCase())
})
- const files = await mapLimit(
- filenames,
- FILE_READ_LIMIT,
- async filename => [filename, await fs.readFile(filename, 'utf8')]
+
+ const files = filenames.map(
+ filename => [filename, fs.readFileSync(filename, 'utf8')]
)
files.forEach(([filename, fileContent]) => {
// derive `foo.bar.baz` object key from `foo/bar/baz.yml` filename
diff --git a/lib/page.js b/lib/page.js
index 2316358f07..933dec7051 100644
--- a/lib/page.js
+++ b/lib/page.js
@@ -1,5 +1,5 @@
const assert = require('assert')
-const fs = require('fs').promises
+const fs = require('fs')
const path = require('path')
const cheerio = require('cheerio')
const patterns = require('./patterns')
@@ -23,13 +23,13 @@ const slash = require('slash')
const statsd = require('./statsd')
class Page {
- static async init (opts) {
- opts = await Page.read(opts)
+ static init (opts) {
+ opts = Page.read(opts)
if (!opts) return
return new Page(opts)
}
- static async read (opts) {
+ static read (opts) {
assert(opts.relativePath, 'relativePath is required')
assert(opts.basePath, 'basePath is required')
@@ -39,7 +39,7 @@ class Page {
// Per https://nodejs.org/api/fs.html#fs_fs_exists_path_callback
// its better to read and handle errors than to check access/stats first
try {
- const raw = await fs.readFile(fullPath, 'utf8')
+ const raw = fs.readFileSync(fullPath, 'utf8')
return { ...opts, relativePath, fullPath, raw }
} catch (err) {
if (err.code === 'ENOENT') return false
diff --git a/lib/pages.js b/lib/pages.js
index b3449ee92c..7a90065e62 100644
--- a/lib/pages.js
+++ b/lib/pages.js
@@ -2,21 +2,16 @@ const path = require('path')
const walk = require('walk-sync').entries
const Page = require('./page')
const languages = require('./languages')
-const { mapLimit } = require('async')
-const FILE_READ_LIMIT = 100
-
-async function loadPageList () {
+function loadPageList () {
// load english pages
const englishPath = path.join(__dirname, '..', languages.en.dir, 'content')
const englishPaths = walk(englishPath, {
globs: ['**/*.md'],
ignore: ['**/README.md']
})
- const englishPages = await mapLimit(
- englishPaths,
- FILE_READ_LIMIT,
- async opts => await Page.read({
+ const englishPages = englishPaths.map(
+ opts => Page.read({
...opts,
languageCode: languages.en.code
})
@@ -34,11 +29,10 @@ async function loadPageList () {
}))
})
.flat()
- const localizedPages = await mapLimit(
- localizedPaths,
- FILE_READ_LIMIT,
- async ({ basePath, relativePath, languageCode }) =>
- await Page.read({ basePath, relativePath, languageCode })
+
+ const localizedPages = localizedPaths.map(
+ ({ basePath, relativePath, languageCode }) =>
+ Page.read({ basePath, relativePath, languageCode })
)
// Build out the list of prepared pages
@@ -64,8 +58,8 @@ function createMapFromArray (pageList) {
return pageMap
}
-async function loadPageMap (pageList) {
- const pages = pageList || await loadPageList()
+function loadPageMap (pageList) {
+ const pages = pageList || loadPageList()
return createMapFromArray(pages)
}
diff --git a/lib/statsd.js b/lib/statsd.js
index 22e61e1208..b2bbf68c08 100644
--- a/lib/statsd.js
+++ b/lib/statsd.js
@@ -9,6 +9,7 @@ module.exports = new StatsD({
prefix: 'docs.',
mock,
globalTags: {
- app: 'docs'
+ app: 'docs',
+ heroku_app: process.env.HEROKU_APP_NAME
}
})
diff --git a/lib/warm-server.js b/lib/warm-server.js
index 36cf5e7416..cb5e03837c 100644
--- a/lib/warm-server.js
+++ b/lib/warm-server.js
@@ -7,10 +7,10 @@ const loadSiteTree = require('./site-tree')
// Instrument these functions so that
// it's wrapped in a timer that reports to Datadog
const dog = {
- loadPages: statsd.asyncTimer(loadPages, 'load_pages'),
- loadPageMap: statsd.asyncTimer(loadPageMap, 'load_page_map'),
+ loadPages: statsd.timer(loadPages, 'load_pages'),
+ loadPageMap: statsd.timer(loadPageMap, 'load_page_map'),
loadRedirects: statsd.asyncTimer(loadRedirects, 'load_redirects'),
- loadSiteData: statsd.asyncTimer(loadSiteData, 'load_site_data'),
+ loadSiteData: statsd.timer(loadSiteData, 'load_site_data'),
loadSiteTree: statsd.asyncTimer(loadSiteTree, 'load_site_tree')
}
diff --git a/package-lock.json b/package-lock.json
index 53465f4809..7b0505168a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5271,7 +5271,7 @@
},
"agentkeepalive": {
"version": "2.2.0",
- "resolved": "http://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-2.2.0.tgz",
"integrity": "sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8="
},
"aggregate-error": {
@@ -5417,7 +5417,7 @@
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"requires": {
"sprintf-js": "~1.0.2"
}
@@ -5547,7 +5547,8 @@
"async": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
+ "dev": true
},
"async-each": {
"version": "1.0.3",
@@ -6794,7 +6795,7 @@
},
"brfs": {
"version": "1.6.1",
- "resolved": "http://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
+ "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
"integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
"requires": {
"quote-stream": "^1.0.1",
@@ -9421,7 +9422,7 @@
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"requires": {
"is-arrayish": "^0.2.1"
}
@@ -12559,7 +12560,7 @@
"dependencies": {
"mkdirp": {
"version": "0.3.0",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz",
"integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4="
},
"nopt": {
@@ -17685,7 +17686,7 @@
},
"magic-string": {
"version": "0.22.5",
- "resolved": "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
"integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
"requires": {
"vlq": "^0.2.2"
diff --git a/package.json b/package.json
index 77b1e6913a..8f064dac0f 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,6 @@
"@primer/css": "^15.1.0",
"@primer/octicons": "^11.0.0",
"algoliasearch": "^3.35.1",
- "async": "^3.2.0",
"babel-loader": "^8.1.0",
"babel-preset-env": "^1.7.0",
"browser-date-formatter": "^3.0.3",
@@ -95,6 +94,7 @@
"devDependencies": {
"@actions/core": "^1.2.6",
"ajv": "^6.11.0",
+ "async": "^3.2.0",
"await-sleep": "0.0.1",
"aws-sdk": "^2.610.0",
"babel-eslint": "^10.1.0",