From 38b0eaa50e2602504102d0c3b5b959da16906df1 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 17:01:43 -0500 Subject: [PATCH 001/121] move enterprise release notes data files to subdirectory and add new github-ae subdirectory --- .../{ => enterprise-server}/2-20/0.yml | 0 .../{ => enterprise-server}/2-20/1.yml | 0 .../{ => enterprise-server}/2-20/10.yml | 0 .../{ => enterprise-server}/2-20/11.yml | 0 .../{ => enterprise-server}/2-20/12.yml | 0 .../{ => enterprise-server}/2-20/13.yml | 0 .../{ => enterprise-server}/2-20/14.yml | 0 .../{ => enterprise-server}/2-20/15.yml | 0 .../{ => enterprise-server}/2-20/16.yml | 0 .../{ => enterprise-server}/2-20/17.yml | 0 .../{ => enterprise-server}/2-20/18.yml | 0 .../{ => enterprise-server}/2-20/19.yml | 0 .../{ => enterprise-server}/2-20/2.yml | 0 .../{ => enterprise-server}/2-20/20.yml | 0 .../{ => enterprise-server}/2-20/21.yml | 0 .../{ => enterprise-server}/2-20/22.yml | 0 .../{ => enterprise-server}/2-20/23.yml | 0 .../{ => enterprise-server}/2-20/3.yml | 0 .../{ => enterprise-server}/2-20/4.yml | 0 .../{ => enterprise-server}/2-20/5.yml | 0 .../{ => enterprise-server}/2-20/6.yml | 0 .../{ => enterprise-server}/2-20/7.yml | 0 .../{ => enterprise-server}/2-20/8.yml | 0 .../{ => enterprise-server}/2-20/9.yml | 0 .../{ => enterprise-server}/2-21/0.yml | 0 .../{ => enterprise-server}/2-21/1.yml | 0 .../{ => enterprise-server}/2-21/10.yml | 0 .../{ => enterprise-server}/2-21/11.yml | 0 .../{ => enterprise-server}/2-21/12.yml | 0 .../{ => enterprise-server}/2-21/13.yml | 0 .../{ => enterprise-server}/2-21/14.yml | 0 .../{ => enterprise-server}/2-21/2.yml | 0 .../{ => enterprise-server}/2-21/3.yml | 0 .../{ => enterprise-server}/2-21/4.yml | 0 .../{ => enterprise-server}/2-21/5.yml | 0 .../{ => enterprise-server}/2-21/6.yml | 0 .../{ => enterprise-server}/2-21/7.yml | 0 .../{ => enterprise-server}/2-21/8.yml | 0 .../{ => enterprise-server}/2-21/9.yml | 0 .../{ => enterprise-server}/2-22/0.yml | 0 .../{ => enterprise-server}/2-22/1.yml | 0 .../{ => enterprise-server}/2-22/2.yml | 0 .../{ => enterprise-server}/2-22/3.yml | 0 .../{ => enterprise-server}/2-22/4.yml | 0 .../{ => enterprise-server}/2-22/5.yml | 0 .../{ => enterprise-server}/2-22/6.yml | 0 .../{ => enterprise-server}/3-0/0-rc1.yml | 0 .../{ => enterprise-server}/3-0/0-rc2.yml | 0 .../{ => enterprise-server}/3-0/0.yml | 0 data/release-notes/github-ae/03-21/0.yml | 70 +++++++++++++++++++ 50 files changed, 70 insertions(+) rename data/release-notes/{ => enterprise-server}/2-20/0.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/1.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/10.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/11.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/12.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/13.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/14.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/15.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/16.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/17.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/18.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/19.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/2.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/20.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/21.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/22.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/23.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/3.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/4.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/5.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/6.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/7.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/8.yml (100%) rename data/release-notes/{ => enterprise-server}/2-20/9.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/0.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/1.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/10.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/11.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/12.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/13.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/14.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/2.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/3.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/4.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/5.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/6.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/7.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/8.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/9.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/0.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/1.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/2.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/3.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/4.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/5.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/6.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/0-rc1.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/0-rc2.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/0.yml (100%) create mode 100644 data/release-notes/github-ae/03-21/0.yml diff --git a/data/release-notes/2-20/0.yml b/data/release-notes/enterprise-server/2-20/0.yml similarity index 100% rename from data/release-notes/2-20/0.yml rename to data/release-notes/enterprise-server/2-20/0.yml diff --git a/data/release-notes/2-20/1.yml b/data/release-notes/enterprise-server/2-20/1.yml similarity index 100% rename from data/release-notes/2-20/1.yml rename to data/release-notes/enterprise-server/2-20/1.yml diff --git a/data/release-notes/2-20/10.yml b/data/release-notes/enterprise-server/2-20/10.yml similarity index 100% rename from data/release-notes/2-20/10.yml rename to data/release-notes/enterprise-server/2-20/10.yml diff --git a/data/release-notes/2-20/11.yml b/data/release-notes/enterprise-server/2-20/11.yml similarity index 100% rename from data/release-notes/2-20/11.yml rename to data/release-notes/enterprise-server/2-20/11.yml diff --git a/data/release-notes/2-20/12.yml b/data/release-notes/enterprise-server/2-20/12.yml similarity index 100% rename from data/release-notes/2-20/12.yml rename to data/release-notes/enterprise-server/2-20/12.yml diff --git a/data/release-notes/2-20/13.yml b/data/release-notes/enterprise-server/2-20/13.yml similarity index 100% rename from data/release-notes/2-20/13.yml rename to data/release-notes/enterprise-server/2-20/13.yml diff --git a/data/release-notes/2-20/14.yml b/data/release-notes/enterprise-server/2-20/14.yml similarity index 100% rename from data/release-notes/2-20/14.yml rename to data/release-notes/enterprise-server/2-20/14.yml diff --git a/data/release-notes/2-20/15.yml b/data/release-notes/enterprise-server/2-20/15.yml similarity index 100% rename from data/release-notes/2-20/15.yml rename to data/release-notes/enterprise-server/2-20/15.yml diff --git a/data/release-notes/2-20/16.yml b/data/release-notes/enterprise-server/2-20/16.yml similarity index 100% rename from data/release-notes/2-20/16.yml rename to data/release-notes/enterprise-server/2-20/16.yml diff --git a/data/release-notes/2-20/17.yml b/data/release-notes/enterprise-server/2-20/17.yml similarity index 100% rename from data/release-notes/2-20/17.yml rename to data/release-notes/enterprise-server/2-20/17.yml diff --git a/data/release-notes/2-20/18.yml b/data/release-notes/enterprise-server/2-20/18.yml similarity index 100% rename from data/release-notes/2-20/18.yml rename to data/release-notes/enterprise-server/2-20/18.yml diff --git a/data/release-notes/2-20/19.yml b/data/release-notes/enterprise-server/2-20/19.yml similarity index 100% rename from data/release-notes/2-20/19.yml rename to data/release-notes/enterprise-server/2-20/19.yml diff --git a/data/release-notes/2-20/2.yml b/data/release-notes/enterprise-server/2-20/2.yml similarity index 100% rename from data/release-notes/2-20/2.yml rename to data/release-notes/enterprise-server/2-20/2.yml diff --git a/data/release-notes/2-20/20.yml b/data/release-notes/enterprise-server/2-20/20.yml similarity index 100% rename from data/release-notes/2-20/20.yml rename to data/release-notes/enterprise-server/2-20/20.yml diff --git a/data/release-notes/2-20/21.yml b/data/release-notes/enterprise-server/2-20/21.yml similarity index 100% rename from data/release-notes/2-20/21.yml rename to data/release-notes/enterprise-server/2-20/21.yml diff --git a/data/release-notes/2-20/22.yml b/data/release-notes/enterprise-server/2-20/22.yml similarity index 100% rename from data/release-notes/2-20/22.yml rename to data/release-notes/enterprise-server/2-20/22.yml diff --git a/data/release-notes/2-20/23.yml b/data/release-notes/enterprise-server/2-20/23.yml similarity index 100% rename from data/release-notes/2-20/23.yml rename to data/release-notes/enterprise-server/2-20/23.yml diff --git a/data/release-notes/2-20/3.yml b/data/release-notes/enterprise-server/2-20/3.yml similarity index 100% rename from data/release-notes/2-20/3.yml rename to data/release-notes/enterprise-server/2-20/3.yml diff --git a/data/release-notes/2-20/4.yml b/data/release-notes/enterprise-server/2-20/4.yml similarity index 100% rename from data/release-notes/2-20/4.yml rename to data/release-notes/enterprise-server/2-20/4.yml diff --git a/data/release-notes/2-20/5.yml b/data/release-notes/enterprise-server/2-20/5.yml similarity index 100% rename from data/release-notes/2-20/5.yml rename to data/release-notes/enterprise-server/2-20/5.yml diff --git a/data/release-notes/2-20/6.yml b/data/release-notes/enterprise-server/2-20/6.yml similarity index 100% rename from data/release-notes/2-20/6.yml rename to data/release-notes/enterprise-server/2-20/6.yml diff --git a/data/release-notes/2-20/7.yml b/data/release-notes/enterprise-server/2-20/7.yml similarity index 100% rename from data/release-notes/2-20/7.yml rename to data/release-notes/enterprise-server/2-20/7.yml diff --git a/data/release-notes/2-20/8.yml b/data/release-notes/enterprise-server/2-20/8.yml similarity index 100% rename from data/release-notes/2-20/8.yml rename to data/release-notes/enterprise-server/2-20/8.yml diff --git a/data/release-notes/2-20/9.yml b/data/release-notes/enterprise-server/2-20/9.yml similarity index 100% rename from data/release-notes/2-20/9.yml rename to data/release-notes/enterprise-server/2-20/9.yml diff --git a/data/release-notes/2-21/0.yml b/data/release-notes/enterprise-server/2-21/0.yml similarity index 100% rename from data/release-notes/2-21/0.yml rename to data/release-notes/enterprise-server/2-21/0.yml diff --git a/data/release-notes/2-21/1.yml b/data/release-notes/enterprise-server/2-21/1.yml similarity index 100% rename from data/release-notes/2-21/1.yml rename to data/release-notes/enterprise-server/2-21/1.yml diff --git a/data/release-notes/2-21/10.yml b/data/release-notes/enterprise-server/2-21/10.yml similarity index 100% rename from data/release-notes/2-21/10.yml rename to data/release-notes/enterprise-server/2-21/10.yml diff --git a/data/release-notes/2-21/11.yml b/data/release-notes/enterprise-server/2-21/11.yml similarity index 100% rename from data/release-notes/2-21/11.yml rename to data/release-notes/enterprise-server/2-21/11.yml diff --git a/data/release-notes/2-21/12.yml b/data/release-notes/enterprise-server/2-21/12.yml similarity index 100% rename from data/release-notes/2-21/12.yml rename to data/release-notes/enterprise-server/2-21/12.yml diff --git a/data/release-notes/2-21/13.yml b/data/release-notes/enterprise-server/2-21/13.yml similarity index 100% rename from data/release-notes/2-21/13.yml rename to data/release-notes/enterprise-server/2-21/13.yml diff --git a/data/release-notes/2-21/14.yml b/data/release-notes/enterprise-server/2-21/14.yml similarity index 100% rename from data/release-notes/2-21/14.yml rename to data/release-notes/enterprise-server/2-21/14.yml diff --git a/data/release-notes/2-21/2.yml b/data/release-notes/enterprise-server/2-21/2.yml similarity index 100% rename from data/release-notes/2-21/2.yml rename to data/release-notes/enterprise-server/2-21/2.yml diff --git a/data/release-notes/2-21/3.yml b/data/release-notes/enterprise-server/2-21/3.yml similarity index 100% rename from data/release-notes/2-21/3.yml rename to data/release-notes/enterprise-server/2-21/3.yml diff --git a/data/release-notes/2-21/4.yml b/data/release-notes/enterprise-server/2-21/4.yml similarity index 100% rename from data/release-notes/2-21/4.yml rename to data/release-notes/enterprise-server/2-21/4.yml diff --git a/data/release-notes/2-21/5.yml b/data/release-notes/enterprise-server/2-21/5.yml similarity index 100% rename from data/release-notes/2-21/5.yml rename to data/release-notes/enterprise-server/2-21/5.yml diff --git a/data/release-notes/2-21/6.yml b/data/release-notes/enterprise-server/2-21/6.yml similarity index 100% rename from data/release-notes/2-21/6.yml rename to data/release-notes/enterprise-server/2-21/6.yml diff --git a/data/release-notes/2-21/7.yml b/data/release-notes/enterprise-server/2-21/7.yml similarity index 100% rename from data/release-notes/2-21/7.yml rename to data/release-notes/enterprise-server/2-21/7.yml diff --git a/data/release-notes/2-21/8.yml b/data/release-notes/enterprise-server/2-21/8.yml similarity index 100% rename from data/release-notes/2-21/8.yml rename to data/release-notes/enterprise-server/2-21/8.yml diff --git a/data/release-notes/2-21/9.yml b/data/release-notes/enterprise-server/2-21/9.yml similarity index 100% rename from data/release-notes/2-21/9.yml rename to data/release-notes/enterprise-server/2-21/9.yml diff --git a/data/release-notes/2-22/0.yml b/data/release-notes/enterprise-server/2-22/0.yml similarity index 100% rename from data/release-notes/2-22/0.yml rename to data/release-notes/enterprise-server/2-22/0.yml diff --git a/data/release-notes/2-22/1.yml b/data/release-notes/enterprise-server/2-22/1.yml similarity index 100% rename from data/release-notes/2-22/1.yml rename to data/release-notes/enterprise-server/2-22/1.yml diff --git a/data/release-notes/2-22/2.yml b/data/release-notes/enterprise-server/2-22/2.yml similarity index 100% rename from data/release-notes/2-22/2.yml rename to data/release-notes/enterprise-server/2-22/2.yml diff --git a/data/release-notes/2-22/3.yml b/data/release-notes/enterprise-server/2-22/3.yml similarity index 100% rename from data/release-notes/2-22/3.yml rename to data/release-notes/enterprise-server/2-22/3.yml diff --git a/data/release-notes/2-22/4.yml b/data/release-notes/enterprise-server/2-22/4.yml similarity index 100% rename from data/release-notes/2-22/4.yml rename to data/release-notes/enterprise-server/2-22/4.yml diff --git a/data/release-notes/2-22/5.yml b/data/release-notes/enterprise-server/2-22/5.yml similarity index 100% rename from data/release-notes/2-22/5.yml rename to data/release-notes/enterprise-server/2-22/5.yml diff --git a/data/release-notes/2-22/6.yml b/data/release-notes/enterprise-server/2-22/6.yml similarity index 100% rename from data/release-notes/2-22/6.yml rename to data/release-notes/enterprise-server/2-22/6.yml diff --git a/data/release-notes/3-0/0-rc1.yml b/data/release-notes/enterprise-server/3-0/0-rc1.yml similarity index 100% rename from data/release-notes/3-0/0-rc1.yml rename to data/release-notes/enterprise-server/3-0/0-rc1.yml diff --git a/data/release-notes/3-0/0-rc2.yml b/data/release-notes/enterprise-server/3-0/0-rc2.yml similarity index 100% rename from data/release-notes/3-0/0-rc2.yml rename to data/release-notes/enterprise-server/3-0/0-rc2.yml diff --git a/data/release-notes/3-0/0.yml b/data/release-notes/enterprise-server/3-0/0.yml similarity index 100% rename from data/release-notes/3-0/0.yml rename to data/release-notes/enterprise-server/3-0/0.yml diff --git a/data/release-notes/github-ae/03-21/0.yml b/data/release-notes/github-ae/03-21/0.yml new file mode 100644 index 0000000000..4f2102cfe4 --- /dev/null +++ b/data/release-notes/github-ae/03-21/0.yml @@ -0,0 +1,70 @@ +date: '2021-03-01' +intro: 'March 1, 2021' +sections: + features: + - heading: 'GitHub Actions beta' + notes: + - | + [{% data variables.product.prodname_actions %}](https://github.com/features/actions) is a powerful, flexible solution for CI/CD and workflow automation. {% data variables.product.prodname_actions %} on GHAE uses a new [{% data variables.actions.hosted_runner %}](/github-ae@latest/actions/using-github-hosted-runners/about-ae-hosted-runners), only available on GHAE, that enables you to customize the size, image, and networking configuration of the runners. These all new runners are a finished-service CI compute environment with auto-scaling and management, all taken care of by GitHub. During the beta, use of these powerful new GHAE hosted runners is free of charge. + - heading: 'GitHub Packages beta' + notes: + - | + [{% data variables.product.prodname_registry %}](https://github.com/features/packages) is a package hosting service, natively integrated with GitHub APIs, Actions, and webhooks. Create an [end-to-end DevOps workflow](/github-ae@latest/packages/quickstart) that includes your code, continuous integration, and deployment solutions. During this beta, {% data variables.product.prodname_registry %} is offered free of charge to GitHub AE customers. + - heading: 'GitHub Advanced Security beta' + notes: + - | + {% data variables.product.prodname_GH_advanced_security %} is available in beta and includes both code scanning and secret scanning. During this beta, {% data variables.product.prodname_GH_advanced_security %} features are being offered free of charge to GitHub AE customers. Repository and organization administrators can opt-in to use {% data variables.product.prodname_GH_advanced_security %} in the Security and Analysis tab under settings. + + Learn more about {% data variables.product.prodname_GH_advanced_security %} [code scanning](/github/finding-security-vulnerabilities-and-errors-in-your-code/about-code-scanning) and [secret scanning](/github/administering-a-repository/about-secret-scanning) on {% data variables.product.prodname_ghe_managed %}. + + - heading: Manage teams from your identity provider + notes: + - | + Customers using SCIM (System for Cross-domain Identity Management) can now sync security groups in Azure Active Directory with GitHub teams. Once a team has been linked to a security group, membership will be automatically updated in GitHub when a user is added or removed from their assigned security group. + + - heading: IP allow lists beta + notes: + - | + [GitHub IP allow lists](/admin/configuration/restricting-network-traffic-to-your-enterprise) provide the ability to filter traffic from administrator-specified IP ranges, defined by CIDR notation. The allow list is defined at the enterprise or organization account level in Security > Settings. All traffic that attempts to reach resources within the enterprise account and organizations are filtered by the IP allow lists. This functionality is provided in addition to the ability to request network security group changes that filter traffic to the entirety of the GHAE tenant. + + changes: + - heading: Developer Changes + notes: + - | + [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of GitHub Pages sites from repositories in the organization. This will not unpublish existing sites. + - Repositories that use GitHub Pages can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). + - When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`. + - You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the "Add file" button gives the option to delete the directory. + - It's now easier and faster to [reference issues or pull requests](github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#". + + - heading: Administration changes + notes: + - Enterprise administrators can now publish a mandatory message. The message is shown to all users and they must acknowledge it. This can be used to display important information, terms of service or policies. + - The GitHub App single file path permission can now [support up to ten files](/developers/apps/creating-a-github-app-using-url-parameters). + - When configuring a GitHub App, the authorization callback URL is a required field. Now we will permit the integrator to specify multiple callback URLs. GitHub denies authorization if the callback URL from the request is not listed. + - A [new API endpoint](/rest/reference/apps#create-a-scoped-access-token) enables the exchange of a user to server token for a user to server token scoped to specific repositories. + - Events are now logged in the audit log on [promoting a team member to be a team maintainer and on demoting a team maintainer to be a team member](/admin/user-management/audited-actions#teams). + - The [OAuth device authorization flow](/developers/apps/authorizing-oauth-apps#device-flow) is now supported. This allows any CLI client or developer tool to authenticate using a secondary system. + - A user can no longer delete their account if SCIM provisioning is enabled. + + - heading: Default branch renaming + notes: + - | + Enterprise and organization administrators can now set the default branch name for new repositories. Enterprise administrators can also enforce their choice of default branch name across all organizations or allow individual organizations to choose their own. + + Existing repositories are unaffected by these settings, and their default branch name will not be changed. + + This change is one of many changes GitHub is making to support projects and maintainers that want to rename their default branch. To learn more, see [github/renaming](https://github.com/github/renaming). + + bugs: + - heading: Bug fixes + notes: + - Users can no longer set a backup email address on their profile. Their email address is set through the Identity Provider only. + - GitHub AE can now connect to Azure Boards. + - Version headers were missing from the APIs, and have now been set to “GitHub AE”. + - Links to documentation have been fixed. + + known_issues: + - Audit log forwarding can fail. + - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. + - The link to Packages from a repository page shows an incorrect search page when that repository does not have any packages. \ No newline at end of file From 73e4d88353c69bde323cc60cfb292cee1b078287 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 17:02:01 -0500 Subject: [PATCH 002/121] enable the Admin release notes page in github-ae --- content/admin/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/admin/release-notes.md b/content/admin/release-notes.md index 4010feb879..ee027c4d51 100644 --- a/content/admin/release-notes.md +++ b/content/admin/release-notes.md @@ -1,7 +1,7 @@ --- title: Release notes -intro: The release notes for {{ allVersions[currentVersion].versionTitle }}. layout: release-notes versions: enterprise-server: '*' + github-ae: '*' --- From 4290013f5335ae1663ab4a72e13123c7471e45d8 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 17:02:24 -0500 Subject: [PATCH 003/121] use separate include files for enterprise-server vs. github-ae release notes --- includes/enterprise-server-release-notes.html | 144 +++++++++++++++++ includes/github-ae-release-notes.html | 105 +++++++++++++ layouts/release-notes.html | 145 +----------------- 3 files changed, 255 insertions(+), 139 deletions(-) create mode 100644 includes/enterprise-server-release-notes.html create mode 100644 includes/github-ae-release-notes.html diff --git a/includes/enterprise-server-release-notes.html b/includes/enterprise-server-release-notes.html new file mode 100644 index 0000000000..42c59e8b61 --- /dev/null +++ b/includes/enterprise-server-release-notes.html @@ -0,0 +1,144 @@ +{% assign product = siteTree[currentLanguage][currentVersion].products[currentProduct] %} +{% assign currentVersionObject = allVersions[currentVersion] %} + +
+
+
+ {% if prevRelease %} + + {% octicon "chevron-left" %} {{ prevRelease }} + + {% else %} +
+ {% endif %} + +

{{ currentVersionObject.planTitle }} {{ currentVersionObject.currentRelease }} release notes

+ + {% if nextRelease %} + + {{ nextRelease }} {% octicon "chevron-right" %} + + {% else %} +
+ {% endif %} +
+ +
+ {% for patch in releaseNotes %} +
+
+
+

+ {{ currentVersionObject.versionTitle }}.{{ patch.patchVersion }} +

+ + {% if patch.release_candidate %} + Release Candidate + {% endif %} + + {% if currentVersionObject.plan == "enterprise-server" %} + + Download + + {% endif %} + + +
+ +

{{ patch.date | date: "%B %d, %Y" }}

+
+ +
+
{{ patch.intro }}
+ + {% for section in patch.sections %} +
+
+ {% include release-notes-category-label %} +
+ +
    + {% for note in section[1] %} +
  • + {% if note.heading %} + {% assign slug = note.heading | slugify %} + +

    + {{ note.heading }} +

    + +
      + {% for subNote in note.notes %} +
    • {{ subNote }}
    • + {% endfor %} +
    + {% else %} + {{ note }} + {% endif %} +
  • + {% endfor %} +
+
+ {% endfor %} +
+
+ {% endfor %} +
+
+ + +
\ No newline at end of file diff --git a/includes/github-ae-release-notes.html b/includes/github-ae-release-notes.html new file mode 100644 index 0000000000..a7fb40d154 --- /dev/null +++ b/includes/github-ae-release-notes.html @@ -0,0 +1,105 @@ +{% assign product = siteTree[currentLanguage][currentVersion].products[currentProduct] %} +{% assign currentVersionObject = allVersions[currentVersion] %} + +
+
+
+
+

{{ currentVersionObject.planTitle }} release notes

+
+
+ +
+ {% for patch in releaseNotes %} +
+
+
+

+ {{ currentVersionObject.versionTitle }} {{ patch.version }} +

+ + {% if patch.release_candidate %} + Release Candidate + {% endif %} + + +
+ +

{{ patch.date | date: "%B %d, %Y" }}

+
+ +
+
{{ patch.intro }}
+ + {% for section in patch.sections %} +
+
+ {% include release-notes-category-label %} +
+ +
    + {% for note in section[1] %} +
  • + {% if note.heading %} + {% assign slug = note.heading | slugify %} + +

    + {{ note.heading }} +

    + +
      + {% for subNote in note.notes %} +
    • {{ subNote }}
    • + {% endfor %} +
    + {% else %} + {{ note }} + {% endif %} +
  • + {% endfor %} +
+
+ {% endfor %} +
+
+ {% endfor %} +
+
+ + +
\ No newline at end of file diff --git a/layouts/release-notes.html b/layouts/release-notes.html index 0f3096a615..aef3e7bce5 100644 --- a/layouts/release-notes.html +++ b/layouts/release-notes.html @@ -1,5 +1,3 @@ -{% assign product = siteTree[currentLanguage][currentVersion].products[currentProduct] %} - {% include head %} @@ -11,144 +9,13 @@ {% include header %} {% include deprecation-banner %} -
-
-
- {% if prevRelease %} - - {% octicon "chevron-left" %} {{ prevRelease }} - - {% else %} -
- {% endif %} + {% if allVersions[currentVersion].plan == 'enterprise-server' %} + {% include enterprise-server-release-notes %} + {% endif %} -

{{ currentVersion | version_num }} Release notes

- - {% if nextRelease %} - - {{ nextRelease }} {% octicon "chevron-right" %} - - {% else %} -
- {% endif %} -
- -
- {% for patch in releaseNotes %} -
-
-
-

- {{ allVersions[currentVersion].versionTitle }}.{{ patch.patchVersion }} -

- - {% if patch.release_candidate %} - Release Candidate - {% endif %} - - - Download - - - -
- -

{{ patch.date | date: "%B %d, %Y" }}

-
- -
-
{{ patch.intro }}
- - {% for section in patch.sections %} -
-
- {% include release-notes-category-label %} -
- -
    - {% for note in section[1] %} -
  • - {% if note.heading %} - {% assign slug = note.heading | slugify %} - -

    - {{ note.heading }} -

    - -
      - {% for subNote in note.notes %} -
    • {{ subNote }}
    • - {% endfor %} -
    - {% else %} - {{ note }} - {% endif %} -
  • - {% endfor %} -
-
- {% endfor %} -
-
- {% endfor %} -
-
- - -
+ {% if allVersions[currentVersion].plan == 'github-ae' %} + {% include github-ae-release-notes %} + {% endif %}
{% include small-footer %} From 9111701576fce37e608cfff0e4812c9c33ab6ee3 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 17:03:00 -0500 Subject: [PATCH 004/121] turn Markdown release notes into YML --- data/release-notes/github-ae/03-21/0.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/release-notes/github-ae/03-21/0.yml b/data/release-notes/github-ae/03-21/0.yml index 4f2102cfe4..5b18dd1de1 100644 --- a/data/release-notes/github-ae/03-21/0.yml +++ b/data/release-notes/github-ae/03-21/0.yml @@ -35,7 +35,7 @@ sections: - Repositories that use GitHub Pages can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). - When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`. - You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the "Add file" button gives the option to delete the directory. - - It's now easier and faster to [reference issues or pull requests](github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#". + - It's now easier and faster to [reference issues or pull requests](github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#". - heading: Administration changes notes: @@ -67,4 +67,4 @@ sections: known_issues: - Audit log forwarding can fail. - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. - - The link to Packages from a repository page shows an incorrect search page when that repository does not have any packages. \ No newline at end of file + - The link to Packages from a repository page shows an incorrect search page when that repository does not have any packages. From 97bf3db30e6b4c5c5e4aa7f9d574b40769ce1bc4 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 17:03:14 -0500 Subject: [PATCH 005/121] turn Markdown release notes into YML --- .../admin/overview/github-ae-release-notes.md | 72 ------------------- 1 file changed, 72 deletions(-) delete mode 100644 content/admin/overview/github-ae-release-notes.md diff --git a/content/admin/overview/github-ae-release-notes.md b/content/admin/overview/github-ae-release-notes.md deleted file mode 100644 index 546f72bb1a..0000000000 --- a/content/admin/overview/github-ae-release-notes.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: GitHub AE release notes -intro: March 1, 2021 -versions: - github-ae: '*' ---- - -### Features - -#### {% data variables.product.prodname_actions %} beta - -[{% data variables.product.prodname_actions %}](https://github.com/features/actions) is a powerful, flexible solution for CI/CD and workflow automation. {% data variables.product.prodname_actions %} on GHAE uses a new [{% data variables.actions.hosted_runner %}](/github-ae@latest/actions/using-github-hosted-runners/about-ae-hosted-runners), only available on GHAE, that enables you to customize the size, image, and networking configuration of the runners. These all new runners are a finished-service CI compute environment with auto-scaling and management, all taken care of by GitHub. During the beta, use of these powerful new GHAE hosted runners is free of charge. - -#### {% data variables.product.prodname_registry %} beta - -[{% data variables.product.prodname_registry %}](https://github.com/features/packages) is a package hosting service, natively integrated with GitHub APIs, Actions, and webhooks. Create an [end-to-end DevOps workflow](/github-ae@latest/packages/quickstart) that includes your code, continuous integration, and deployment solutions. During this beta, {% data variables.product.prodname_registry %} is offered free of charge to GitHub AE customers. - -#### {% data variables.product.prodname_GH_advanced_security %} beta - -{% data variables.product.prodname_GH_advanced_security %} is available in beta and includes both code scanning and secret scanning. During this beta, {% data variables.product.prodname_GH_advanced_security %} features are being offered free of charge to GitHub AE customers. Repository and organization administrators can opt-in to use {% data variables.product.prodname_GH_advanced_security %} in the Security and Analysis tab under settings. - -Learn more about {% data variables.product.prodname_GH_advanced_security %} [code scanning](/github/finding-security-vulnerabilities-and-errors-in-your-code/about-code-scanning) and [secret scanning](/github/administering-a-repository/about-secret-scanning) on {% data variables.product.prodname_ghe_managed %}. - -#### Manage teams from your identity provider - -Customers using SCIM (System for Cross-domain Identity Management) can now sync security groups in Azure Active Directory with GitHub teams. Once a team has been linked to a security group, membership will be automatically updated in GitHub when a user is added or removed from their assigned security group. - -#### IP allow lists beta - -[GitHub IP allow lists](/admin/configuration/restricting-network-traffic-to-your-enterprise) provide the ability to filter traffic from administrator-specified IP ranges, defined by CIDR notation. The allow list is defined at the enterprise or organization account level in Security > Settings. All traffic that attempts to reach resources within the enterprise account and organizations are filtered by the IP allow lists. This functionality is provided in addition to the ability to request network security group changes that filter traffic to the entirety of the GHAE tenant. - - -### Changes - -#### Developer changes - -- [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of GitHub Pages sites from repositories in the organization. This will not unpublish existing sites. -- Repositories that use GitHub Pages can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). -- When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`. -- You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the “Add file” button gives the option to delete the directory. -- It’s now easier and faster to [reference issues or pull requests](/github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the “#”. - -##### Administration changes - -- Enterprise administrators can now publish a mandatory message. The message is shown to all users and they must acknowledge it. This can be used to display important information, terms of service or policies. -- The GitHub App single file path permission can now [support up to ten files](/developers/apps/creating-a-github-app-using-url-parameters). -- When configuring a GitHub App, the authorization callback URL is a required field. Now we will permit the integrator to specify multiple callback URLs. GitHub denies authorization if the callback URL from the request is not listed. -- A [new API endpoint](/rest/reference/apps#create-a-scoped-access-token) enables the exchange of a user to server token for a user to server token scoped to specific repositories. -- Events are now logged in the audit log on [promoting a team member to be a team maintainer and on demoting a team maintainer to be a team member](/admin/user-management/audited-actions#teams). -- The [OAuth device authorization flow](/developers/apps/authorizing-oauth-apps#device-flow) is now supported. This allows any CLI client or developer tool to authenticate using a secondary system. -- A user can no longer delete their account if SCIM provisioning is enabled. - -##### Default branch renaming - -Enterprise and organization administrators can now set the default branch name for new repositories. Enterprise administrators can also enforce their choice of default branch name across all organizations or allow individual organizations to choose their own. - -Existing repositories are unaffected by these settings, and their default branch name will not be changed. - -This change is one of many changes GitHub is making to support projects and maintainers that want to rename their default branch. To learn more, see [github/renaming](https://github.com/github/renaming). - - -### Bug fixes -- Users can no longer set a backup email address on their profile. Their email address is set through the Identity Provider only. -- GitHub AE can now connect to Azure Boards. -- Version headers were missing from the APIs, and have now been set to “GitHub AE”. -- Links to documentation have been fixed. - -### Known issues - -- Audit log forwarding can fail. -- Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. -- The link to Packages from a repository page shows an incorrect search page when that repository does not have any packages. From 8eb1e695860bf8525a9eec90e9d056e0cf2a322a Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 17:03:33 -0500 Subject: [PATCH 006/121] separate the middleware for enterprise server vs. github-ae release notes --- lib/release-notes-utils.js | 72 +++++++++++++++++++ .../enterprise-release-notes.js | 72 ++----------------- .../github-ae-release-notes.js | 37 ++++++++++ middleware/index.js | 1 + 4 files changed, 115 insertions(+), 67 deletions(-) create mode 100644 lib/release-notes-utils.js create mode 100644 middleware/contextualizers/github-ae-release-notes.js diff --git a/lib/release-notes-utils.js b/lib/release-notes-utils.js new file mode 100644 index 0000000000..2adaa5c8f6 --- /dev/null +++ b/lib/release-notes-utils.js @@ -0,0 +1,72 @@ +const semver = require('semver') +const renderContent = require('./render-content') + +/** + * Turn { [key]: { notes, intro, date } } + * into [{ version, notes, intro, date }] + */ +function sortPatchKeys (release, version, options = {}) { + const keys = Object.keys(release) + .map(key => { + const keyWithDots = key.replace(/-/g, '.') + return { + version: `${version}.${keyWithDots}`, + patchVersion: keyWithDots, + ...release[key] + } + }) + + return options.semverSort ? semverSort(keys) : keys +} + +function semverSort (keys) { + return keys + .sort((a, b) => { + let aTemp = a.version + let bTemp = b.version + + // There's an RC version here, so doing regular semver + // comparisons won't work. So, we'll convert the incompatible version + // strings to real semver strings, then compare. + const [aBase, aRc] = a.version.split('.rc') + if (aRc) aTemp = `${aBase}-rc.${aRc}` + + const [bBase, bRc] = b.version.split('.rc') + if (bRc) bTemp = `${bBase}-rc.${bRc}` + + if (semver.gt(aTemp, bTemp)) return -1 + if (semver.lt(aTemp, bTemp)) return 1 + return 0 + }) +} + +/** + * Render each note in the given patch, by looping through the + * sections and rendering either `note` or `note.notes` in the + * case of a sub-section + */ +async function renderPatchNotes (patch, ctx) { + // Run the notes through the markdown rendering pipeline + for (const key in patch.sections) { + await Promise.all(patch.sections[key].map(async (noteOrHeading, index) => { + patch.sections[key][index] = typeof noteOrHeading === 'string' + ? await renderContent(noteOrHeading, ctx) + : { + ...noteOrHeading, + notes: await Promise.all(noteOrHeading.notes.map(note => renderContent(note, ctx))) + } + })) + } + + // Also render the patch's intro + if (patch.intro) { + patch.intro = await renderContent(patch.intro, ctx) + } + + return patch +} + +module.exports = { + sortPatchKeys, + renderPatchNotes +} diff --git a/middleware/contextualizers/enterprise-release-notes.js b/middleware/contextualizers/enterprise-release-notes.js index e616f49c18..9aab313df9 100644 --- a/middleware/contextualizers/enterprise-release-notes.js +++ b/middleware/contextualizers/enterprise-release-notes.js @@ -1,68 +1,6 @@ -const semver = require('semver') -const renderContent = require('../../lib/render-content') const patterns = require('../../lib/patterns') const enterpriseReleases = require('../../lib/enterprise-server-releases').supported - -/** - * Turn { [key]: { notes, intro, date } } - * into [{ version, notes, intro, date }] - */ -function sortPatchKeys (release, version) { - const keys = Object.keys(release) - .map(key => { - const keyWithDots = key.replace(/-/g, '.') - return { - version: `${version}.${keyWithDots}`, - patchVersion: keyWithDots, - downloadVersion: `${version}.${keyWithDots.replace(/\.rc\d*$/, '')}`, - ...release[key] - } - }) - return keys - .sort((a, b) => { - let aTemp = a.version - let bTemp = b.version - - // There's an RC version here, so doing regular semver - // comparisons won't work. So, we'll convert the incompatible version - // strings to real semver strings, then compare. - const [aBase, aRc] = a.version.split('.rc') - if (aRc) aTemp = `${aBase}-rc.${aRc}` - - const [bBase, bRc] = b.version.split('.rc') - if (bRc) bTemp = `${bBase}-rc.${bRc}` - - if (semver.gt(aTemp, bTemp)) return -1 - if (semver.lt(aTemp, bTemp)) return 1 - return 0 - }) -} - -/** - * Render each note in the given patch, by looping through the - * sections and rendering either `note` or `note.notes` in the - * case of a sub-section - */ -async function renderPatchNotes (patch, ctx) { - // Run the notes through the markdown rendering pipeline - for (const key in patch.sections) { - await Promise.all(patch.sections[key].map(async (noteOrHeading, index) => { - patch.sections[key][index] = typeof noteOrHeading === 'string' - ? await renderContent(noteOrHeading, ctx) - : { - ...noteOrHeading, - notes: await Promise.all(noteOrHeading.notes.map(note => renderContent(note, ctx))) - } - })) - } - - // Also render the patch's intro - if (patch.intro) { - patch.intro = await renderContent(patch.intro, ctx) - } - - return patch -} +const { sortPatchKeys, renderPatchNotes } = require('../../lib/release-notes-utils') module.exports = async (req, res, next) => { // The `/release-notes` sub-path @@ -76,7 +14,7 @@ module.exports = async (req, res, next) => { const versionString = `${requestedVersion.replace(/\./g, '-')}` - const allReleaseNotes = req.context.site.data['release-notes'] + const allReleaseNotes = req.context.site.data['release-notes']['enterprise-server'] // This version doesn't have any release notes - let's be helpful and redirect // to the notes on `enterprise.github.com` @@ -85,7 +23,7 @@ module.exports = async (req, res, next) => { } const releaseNotes = allReleaseNotes[versionString] - const patches = sortPatchKeys(releaseNotes, requestedVersion) + const patches = sortPatchKeys(releaseNotes, requestedVersion, { semverSort: true }) req.context.releaseNotes = await Promise.all(patches.map(async patch => renderPatchNotes(patch, req.context))) @@ -93,9 +31,9 @@ module.exports = async (req, res, next) => { req.context.releases = enterpriseReleases.map(version => { const ret = { version } if (!req.context.site.data['release-notes']) return ret - const release = req.context.site.data['release-notes'][version.replace(/\./g, '-')] + const release = allReleaseNotes[version.replace(/\./g, '-')] if (!release) return ret - const patches = sortPatchKeys(release, version) + const patches = sortPatchKeys(release, version, { semverSort: true }) return { ...ret, patches } }) diff --git a/middleware/contextualizers/github-ae-release-notes.js b/middleware/contextualizers/github-ae-release-notes.js new file mode 100644 index 0000000000..98ec4d4066 --- /dev/null +++ b/middleware/contextualizers/github-ae-release-notes.js @@ -0,0 +1,37 @@ +const { sortPatchKeys, renderPatchNotes } = require('../../lib/release-notes-utils') + +module.exports = async (req, res, next) => { + // The `/release-notes` sub-path + if (!req.path.endsWith('/release-notes')) return next() + if (!req.context.currentVersion.startsWith('github-ae')) return next() + + const allGhaeReleaseNotes = req.context.site.data['release-notes']['github-ae'] + + // 404 if no release notes can be found + if (!allGhaeReleaseNotes) return next() + + const sortedReleases = Object.keys(allGhaeReleaseNotes) + // Sort the subdirs from most recent date to oldest + .map(release => { + const [month, year] = release.split('-') + return { + name: release, + date: new Date(`20${year}`, month - 1, '1') + } + }) + .sort((releaseEntry1, releaseEntry2) => releaseEntry2.date - releaseEntry1.date) + .map(releaseEntry => releaseEntry.name) + + const sortedNotes = sortedReleases.map(release => sortPatchKeys(allGhaeReleaseNotes[release], release, { semverSort: false })).flat() + + req.context.releaseNotes = await Promise.all(sortedNotes.map(async patch => renderPatchNotes(patch, req.context))) + + // Put together information about other releases + req.context.releases = sortedReleases.map(version => { + const notesPerVersion = allGhaeReleaseNotes[version] + const patches = sortPatchKeys(notesPerVersion, version, { semverSort: false }) + return { version, patches } + }) + + return next() +} diff --git a/middleware/index.js b/middleware/index.js index 6d39616432..f02a0a6815 100644 --- a/middleware/index.js +++ b/middleware/index.js @@ -93,6 +93,7 @@ module.exports = function (app) { // *** Preparation for render-page *** app.use(asyncMiddleware(instrument('./contextualizers/enterprise-release-notes'))) + app.use(asyncMiddleware(instrument('./contextualizers/github-ae-release-notes'))) app.use(instrument('./contextualizers/graphql')) app.use(instrument('./contextualizers/rest')) app.use(instrument('./contextualizers/webhooks')) From 284cfeda4b4655bb567a5c87f75339d22e6c6083 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 17:04:27 -0500 Subject: [PATCH 007/121] rename test file --- tests/routing/{enterprise-release-notes.js => release-notes.js} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename tests/routing/{enterprise-release-notes.js => release-notes.js} (95%) diff --git a/tests/routing/enterprise-release-notes.js b/tests/routing/release-notes.js similarity index 95% rename from tests/routing/enterprise-release-notes.js rename to tests/routing/release-notes.js index 6a8f6c26b3..1f2610e5ea 100644 --- a/tests/routing/enterprise-release-notes.js +++ b/tests/routing/release-notes.js @@ -1,6 +1,6 @@ const { get } = require('../helpers/supertest') -describe('enterprise release notes', () => { +describe('release notes', () => { jest.setTimeout(60 * 1000) beforeAll(async () => { From d9d98341949c98f8d2e798f906c014644139c2d1 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 19:18:39 -0500 Subject: [PATCH 008/121] add basic test --- tests/routing/release-notes.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/routing/release-notes.js b/tests/routing/release-notes.js index 1f2610e5ea..bbf08d1e2a 100644 --- a/tests/routing/release-notes.js +++ b/tests/routing/release-notes.js @@ -16,9 +16,13 @@ describe('release notes', () => { expect(res.headers.location).toBe('https://enterprise.github.com/releases/2.19.0/notes') }) - // We can't write this test until we have real release notes it('renders the release-notes layout if this version\'s release notes are in this repo', async () => { const res = await get('/en/enterprise-server@2.22/admin/release-notes') expect(res.statusCode).toBe(200) }) + + it('renders the release-notes layout for GitHub AE', async () => { + const res = await get('/en/github-ae@latest/admin/release-notes') + expect(res.statusCode).toBe(200) + }) }) From c972cea6f541ecdc6e5549e2f05c276b31806176 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 21:26:53 -0500 Subject: [PATCH 009/121] add comment --- data/release-notes/github-ae/03-21/0.yml | 1 - lib/release-notes-utils.js | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/data/release-notes/github-ae/03-21/0.yml b/data/release-notes/github-ae/03-21/0.yml index 5b18dd1de1..912c491dff 100644 --- a/data/release-notes/github-ae/03-21/0.yml +++ b/data/release-notes/github-ae/03-21/0.yml @@ -1,5 +1,4 @@ date: '2021-03-01' -intro: 'March 1, 2021' sections: features: - heading: 'GitHub Actions beta' diff --git a/lib/release-notes-utils.js b/lib/release-notes-utils.js index 2adaa5c8f6..f9bff37013 100644 --- a/lib/release-notes-utils.js +++ b/lib/release-notes-utils.js @@ -16,6 +16,8 @@ function sortPatchKeys (release, version, options = {}) { } }) + // Versions with numbered releases like GHES 2.22, 3.0, etc. need additional semver sorting; + // Versions with date releases do not. return options.semverSort ? semverSort(keys) : keys } From f34c988352833defafa6ed8062d93d044925bd56 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Tue, 2 Mar 2021 09:12:15 -0500 Subject: [PATCH 010/121] fix broken links --- content/admin/overview/about-upgrades-to-new-releases.md | 2 +- data/release-notes/github-ae/03-21/0.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/admin/overview/about-upgrades-to-new-releases.md b/content/admin/overview/about-upgrades-to-new-releases.md index f25eeb31ca..ca82f56330 100644 --- a/content/admin/overview/about-upgrades-to-new-releases.md +++ b/content/admin/overview/about-upgrades-to-new-releases.md @@ -41,5 +41,5 @@ To upgrade your enterprise to a new release, see "[Release notes](/enterprise-se - [ {% data variables.product.prodname_roadmap %} ]( {% data variables.product.prodname_roadmap_link %} ) in the `github/roadmap` repository {% if currentVersion == "github-ae@latest" %} -- [ {% data variables.product.prodname_ghe_managed %} release notes](/admin/overview/github-ae-release-notes) +- [ {% data variables.product.prodname_ghe_managed %} release notes](/admin/release-notes) {% endif %} diff --git a/data/release-notes/github-ae/03-21/0.yml b/data/release-notes/github-ae/03-21/0.yml index 912c491dff..159d210c58 100644 --- a/data/release-notes/github-ae/03-21/0.yml +++ b/data/release-notes/github-ae/03-21/0.yml @@ -34,7 +34,7 @@ sections: - Repositories that use GitHub Pages can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). - When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`. - You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the "Add file" button gives the option to delete the directory. - - It's now easier and faster to [reference issues or pull requests](github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#". + - It's now easier and faster to [reference issues or pull requests](/github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#". - heading: Administration changes notes: From a65d7e54316c9acac0103af86bf7c318b9ae8807 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Tue, 2 Mar 2021 09:13:26 -0500 Subject: [PATCH 011/121] remove old release notes link --- content/admin/overview/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/admin/overview/index.md b/content/admin/overview/index.md index 607f86a51d..7662c698ae 100644 --- a/content/admin/overview/index.md +++ b/content/admin/overview/index.md @@ -21,4 +21,3 @@ For more information, or to purchase {% data variables.product.prodname_enterpri {% link_in_list /about-upgrades-to-new-releases %} {% link_in_list /system-overview %} {% link_in_list /about-the-github-enterprise-api %} -{% link_in_list /github-ae-release-notes %} From 1b65abf5a9934845f501d8683725608138885afb Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Thu, 4 Mar 2021 13:46:05 -0500 Subject: [PATCH 012/121] incorporate updates from PR #18058 --- data/release-notes/github-ae/03-21/0.yml | 45 ++++++++++++++---------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/data/release-notes/github-ae/03-21/0.yml b/data/release-notes/github-ae/03-21/0.yml index 159d210c58..af278dfa55 100644 --- a/data/release-notes/github-ae/03-21/0.yml +++ b/data/release-notes/github-ae/03-21/0.yml @@ -4,43 +4,46 @@ sections: - heading: 'GitHub Actions beta' notes: - | - [{% data variables.product.prodname_actions %}](https://github.com/features/actions) is a powerful, flexible solution for CI/CD and workflow automation. {% data variables.product.prodname_actions %} on GHAE uses a new [{% data variables.actions.hosted_runner %}](/github-ae@latest/actions/using-github-hosted-runners/about-ae-hosted-runners), only available on GHAE, that enables you to customize the size, image, and networking configuration of the runners. These all new runners are a finished-service CI compute environment with auto-scaling and management, all taken care of by GitHub. During the beta, use of these powerful new GHAE hosted runners is free of charge. + [{% data variables.product.prodname_actions %}](https://github.com/features/actions) is a powerful, flexible solution for CI/CD and workflow automation. For more information, see "[Introduction to {% data variables.product.prodname_actions %}](/actions/learn-github-actions/introduction-to-github-actions)." + + {% data variables.product.prodname_actions %} on {% data variables.product.product_name %} uses a new [{% data variables.actions.hosted_runner %}](/actions/using-github-hosted-runners/about-ae-hosted-runners), only available for {% data variables.product.product_name %}, that enables you to customize the size, image, and networking configuration of the runners. These runners are a finished-service CI compute environment with auto-scaling and management, fully managed by {% data variables.product.company_short %}. During the beta, the use {% data variables.actions.hosted_runner %}s is free of charge. For more information, see "[Adding {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/adding-ae-hosted-runners)." + + Please note that when {% data variables.product.prodname_actions %} is enabled during this upgrade, two organizations named "GitHub Actions" (@**actions** and @**github**) will appear in {% data variables.product.product_location %}. These organizations are required by {% data variables.product.prodname_actions %}. Users named @**ghost** and @**actions** appear as the actors for creation of these organizations in the audit log. - heading: 'GitHub Packages beta' notes: - | - [{% data variables.product.prodname_registry %}](https://github.com/features/packages) is a package hosting service, natively integrated with GitHub APIs, Actions, and webhooks. Create an [end-to-end DevOps workflow](/github-ae@latest/packages/quickstart) that includes your code, continuous integration, and deployment solutions. During this beta, {% data variables.product.prodname_registry %} is offered free of charge to GitHub AE customers. + [{% data variables.product.prodname_registry %}](https://github.com/features/packages) is a package hosting service, natively integrated with {% data variables.product.prodname_actions %}, APIs, and webhooks. Create an [end-to-end DevOps workflow](/github-ae@latest/packages/quickstart) that includes your code, continuous integration, and deployment solutions. During this beta, {% data variables.product.prodname_registry %} is offered free of charge to {% data variables.product.product_name %} customers. - heading: 'GitHub Advanced Security beta' notes: - | - {% data variables.product.prodname_GH_advanced_security %} is available in beta and includes both code scanning and secret scanning. During this beta, {% data variables.product.prodname_GH_advanced_security %} features are being offered free of charge to GitHub AE customers. Repository and organization administrators can opt-in to use {% data variables.product.prodname_GH_advanced_security %} in the Security and Analysis tab under settings. + {% data variables.product.prodname_GH_advanced_security %} is available in beta and includes both code scanning and secret scanning. During this beta, {% data variables.product.prodname_GH_advanced_security %} features are being offered free of charge to {% data variables.product.product_name %} customers. Repository and organization administrators can opt-in to use {% data variables.product.prodname_GH_advanced_security %} in the Security and Analysis tab under settings. Learn more about {% data variables.product.prodname_GH_advanced_security %} [code scanning](/github/finding-security-vulnerabilities-and-errors-in-your-code/about-code-scanning) and [secret scanning](/github/administering-a-repository/about-secret-scanning) on {% data variables.product.prodname_ghe_managed %}. - - heading: Manage teams from your identity provider + - heading: Manage teams from your identity provider (IdP) notes: - | - Customers using SCIM (System for Cross-domain Identity Management) can now sync security groups in Azure Active Directory with GitHub teams. Once a team has been linked to a security group, membership will be automatically updated in GitHub when a user is added or removed from their assigned security group. + Customers using SCIM (System for Cross-domain Identity Management) can now sync security groups in Azure Active Directory with {% data variables.product.company_short %} teams. Once a team has been linked to a security group, membership will be automatically updated in {% data variables.product.product_name %} when a user is added or removed from their assigned security group. - heading: IP allow lists beta notes: - | - [GitHub IP allow lists](/admin/configuration/restricting-network-traffic-to-your-enterprise) provide the ability to filter traffic from administrator-specified IP ranges, defined by CIDR notation. The allow list is defined at the enterprise or organization account level in Security > Settings. All traffic that attempts to reach resources within the enterprise account and organizations are filtered by the IP allow lists. This functionality is provided in addition to the ability to request network security group changes that filter traffic to the entirety of the GHAE tenant. + [{% data variables.product.company_short %} IP allow lists](/admin/configuration/restricting-network-traffic-to-your-enterprise) provide the ability to filter traffic from administrator-specified IP ranges, defined by CIDR notation. The allow list is defined at the enterprise or organization account level in Security > Settings. All traffic that attempts to reach resources within the enterprise account and organizations are filtered by the IP allow lists. This functionality is provided in addition to the ability to request network security group changes that filter traffic to the entirety of the GHAE tenant. changes: - heading: Developer Changes notes: - - | - [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of GitHub Pages sites from repositories in the organization. This will not unpublish existing sites. - - Repositories that use GitHub Pages can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). + - [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of {% data variables.product.prodname_pages %} sites from repositories in the organization. This will not unpublish existing sites. + - Repositories that use {% data variables.product.prodname_pages %} can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). - When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`. - You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the "Add file" button gives the option to delete the directory. - It's now easier and faster to [reference issues or pull requests](/github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#". - heading: Administration changes notes: - - Enterprise administrators can now publish a mandatory message. The message is shown to all users and they must acknowledge it. This can be used to display important information, terms of service or policies. - - The GitHub App single file path permission can now [support up to ten files](/developers/apps/creating-a-github-app-using-url-parameters). - - When configuring a GitHub App, the authorization callback URL is a required field. Now we will permit the integrator to specify multiple callback URLs. GitHub denies authorization if the callback URL from the request is not listed. + - Enterprise owners can now publish a mandatory message. The message is shown to all users and they must acknowledge it. This can be used to display important information, terms of service or policies. + - The {% data variables.product.prodname_github_app%} single file path permission can now [support up to ten files](/developers/apps/creating-a-github-app-using-url-parameters). + - When configuring a {% data variables.product.prodname_github_app%}, the authorization callback URL is a required field. Now we will permit the integrator to specify multiple callback URLs. {% data variables.product.product_name %} denies authorization if the callback URL from the request is not listed. - A [new API endpoint](/rest/reference/apps#create-a-scoped-access-token) enables the exchange of a user to server token for a user to server token scoped to specific repositories. - Events are now logged in the audit log on [promoting a team member to be a team maintainer and on demoting a team maintainer to be a team member](/admin/user-management/audited-actions#teams). - The [OAuth device authorization flow](/developers/apps/authorizing-oauth-apps#device-flow) is now supported. This allows any CLI client or developer tool to authenticate using a secondary system. @@ -49,21 +52,25 @@ sections: - heading: Default branch renaming notes: - | - Enterprise and organization administrators can now set the default branch name for new repositories. Enterprise administrators can also enforce their choice of default branch name across all organizations or allow individual organizations to choose their own. + Enterprise and organization owners can now set the default branch name for new repositories. Enterprise owners can also enforce their choice of default branch name across all organizations or allow individual organizations to choose their own. Existing repositories are unaffected by these settings, and their default branch name will not be changed. - This change is one of many changes GitHub is making to support projects and maintainers that want to rename their default branch. To learn more, see [github/renaming](https://github.com/github/renaming). + This change is one of many changes {% data variables.product.company_short %} is making to support projects and maintainers that want to rename their default branch. To learn more, see [github/renaming](https://github.com/github/renaming). bugs: - heading: Bug fixes notes: - - Users can no longer set a backup email address on their profile. Their email address is set through the Identity Provider only. - - GitHub AE can now connect to Azure Boards. - - Version headers were missing from the APIs, and have now been set to “GitHub AE”. + - Users can no longer set a backup email address on their profile. Their email address is set through the IdP only. + - You can no longer enable two-factor authentication after configuring authentication through your IdP. + - {% data variables.product.product_name %} can now connect to Azure Boards. + - Version headers were missing from the APIs, and have now been set to "GitHub AE." - Links to documentation have been fixed. + - Configuration of audit log forwarding within the enterprise's settings was failing. + - Navigating to gists could result in a 500 error. + - The Support email or URL was failing to save. It now saves after a period of a few minutes. + - Organization level pull request templates were not being applied to all pull requests in the organization. known_issues: - - Audit log forwarding can fail. - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. - - The link to Packages from a repository page shows an incorrect search page when that repository does not have any packages. + - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. From b29722efd3cc6d38d89a14dd889b59672174abd2 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Thu, 4 Mar 2021 14:40:05 -0500 Subject: [PATCH 013/121] lint yaml --- data/release-notes/github-ae/03-21/0.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/data/release-notes/github-ae/03-21/0.yml b/data/release-notes/github-ae/03-21/0.yml index af278dfa55..fa6e171c77 100644 --- a/data/release-notes/github-ae/03-21/0.yml +++ b/data/release-notes/github-ae/03-21/0.yml @@ -33,7 +33,8 @@ sections: changes: - heading: Developer Changes notes: - - [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of {% data variables.product.prodname_pages %} sites from repositories in the organization. This will not unpublish existing sites. + - | + [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of {% data variables.product.prodname_pages %} sites from repositories in the organization. This will not unpublish existing sites. - Repositories that use {% data variables.product.prodname_pages %} can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). - When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`. - You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the "Add file" button gives the option to delete the directory. @@ -63,7 +64,8 @@ sections: notes: - Users can no longer set a backup email address on their profile. Their email address is set through the IdP only. - You can no longer enable two-factor authentication after configuring authentication through your IdP. - - {% data variables.product.product_name %} can now connect to Azure Boards. + - | + {% data variables.product.product_name %} can now connect to Azure Boards. - Version headers were missing from the APIs, and have now been set to "GitHub AE." - Links to documentation have been fixed. - Configuration of audit log forwarding within the enterprise's settings was failing. From c3ed74a1401a94f81570155e654e9794d20b30d2 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 8 Mar 2021 15:02:31 -0500 Subject: [PATCH 014/121] move new GHES patch yml files into enterprise-server subdir --- data/release-notes/{ => enterprise-server}/2-20/24.yml | 0 data/release-notes/{ => enterprise-server}/2-21/15.yml | 0 data/release-notes/{ => enterprise-server}/2-22/7.yml | 0 data/release-notes/{ => enterprise-server}/3-0/1.yml | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename data/release-notes/{ => enterprise-server}/2-20/24.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/15.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/7.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/1.yml (100%) diff --git a/data/release-notes/2-20/24.yml b/data/release-notes/enterprise-server/2-20/24.yml similarity index 100% rename from data/release-notes/2-20/24.yml rename to data/release-notes/enterprise-server/2-20/24.yml diff --git a/data/release-notes/2-21/15.yml b/data/release-notes/enterprise-server/2-21/15.yml similarity index 100% rename from data/release-notes/2-21/15.yml rename to data/release-notes/enterprise-server/2-21/15.yml diff --git a/data/release-notes/2-22/7.yml b/data/release-notes/enterprise-server/2-22/7.yml similarity index 100% rename from data/release-notes/2-22/7.yml rename to data/release-notes/enterprise-server/2-22/7.yml diff --git a/data/release-notes/3-0/1.yml b/data/release-notes/enterprise-server/3-0/1.yml similarity index 100% rename from data/release-notes/3-0/1.yml rename to data/release-notes/enterprise-server/3-0/1.yml From 063e22d1511e1525e69eb0515abe5256c42d3865 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 8 Mar 2021 15:03:34 -0500 Subject: [PATCH 015/121] re-combine release notes middleware --- .../enterprise-release-notes.js | 45 ------------------ .../github-ae-release-notes.js | 37 --------------- middleware/contextualizers/release-notes.js | 47 +++++++++++++++++++ middleware/index.js | 3 +- 4 files changed, 48 insertions(+), 84 deletions(-) delete mode 100644 middleware/contextualizers/enterprise-release-notes.js delete mode 100644 middleware/contextualizers/github-ae-release-notes.js create mode 100644 middleware/contextualizers/release-notes.js diff --git a/middleware/contextualizers/enterprise-release-notes.js b/middleware/contextualizers/enterprise-release-notes.js deleted file mode 100644 index 9aab313df9..0000000000 --- a/middleware/contextualizers/enterprise-release-notes.js +++ /dev/null @@ -1,45 +0,0 @@ -const patterns = require('../../lib/patterns') -const enterpriseReleases = require('../../lib/enterprise-server-releases').supported -const { sortPatchKeys, renderPatchNotes } = require('../../lib/release-notes-utils') - -module.exports = async (req, res, next) => { - // The `/release-notes` sub-path - if (!req.path.endsWith('/release-notes')) return next() - - // ignore paths that don't have an enterprise version number - if (!patterns.getEnterpriseServerNumber.test(req.path)) return next() - - // extract enterprise version from path, e.g. 2.16 - const requestedVersion = req.path.match(patterns.getEnterpriseServerNumber)[1] - - const versionString = `${requestedVersion.replace(/\./g, '-')}` - - const allReleaseNotes = req.context.site.data['release-notes']['enterprise-server'] - - // This version doesn't have any release notes - let's be helpful and redirect - // to the notes on `enterprise.github.com` - if (!allReleaseNotes || !allReleaseNotes[versionString]) { - return res.redirect(`https://enterprise.github.com/releases/${requestedVersion}.0/notes`) - } - - const releaseNotes = allReleaseNotes[versionString] - const patches = sortPatchKeys(releaseNotes, requestedVersion, { semverSort: true }) - - req.context.releaseNotes = await Promise.all(patches.map(async patch => renderPatchNotes(patch, req.context))) - - // Put together information about other releases - req.context.releases = enterpriseReleases.map(version => { - const ret = { version } - if (!req.context.site.data['release-notes']) return ret - const release = allReleaseNotes[version.replace(/\./g, '-')] - if (!release) return ret - const patches = sortPatchKeys(release, version, { semverSort: true }) - return { ...ret, patches } - }) - - const releaseIndex = enterpriseReleases.findIndex(release => release === requestedVersion) - req.context.nextRelease = enterpriseReleases[releaseIndex - 1] - req.context.prevRelease = enterpriseReleases[releaseIndex + 1] - - return next() -} diff --git a/middleware/contextualizers/github-ae-release-notes.js b/middleware/contextualizers/github-ae-release-notes.js deleted file mode 100644 index 98ec4d4066..0000000000 --- a/middleware/contextualizers/github-ae-release-notes.js +++ /dev/null @@ -1,37 +0,0 @@ -const { sortPatchKeys, renderPatchNotes } = require('../../lib/release-notes-utils') - -module.exports = async (req, res, next) => { - // The `/release-notes` sub-path - if (!req.path.endsWith('/release-notes')) return next() - if (!req.context.currentVersion.startsWith('github-ae')) return next() - - const allGhaeReleaseNotes = req.context.site.data['release-notes']['github-ae'] - - // 404 if no release notes can be found - if (!allGhaeReleaseNotes) return next() - - const sortedReleases = Object.keys(allGhaeReleaseNotes) - // Sort the subdirs from most recent date to oldest - .map(release => { - const [month, year] = release.split('-') - return { - name: release, - date: new Date(`20${year}`, month - 1, '1') - } - }) - .sort((releaseEntry1, releaseEntry2) => releaseEntry2.date - releaseEntry1.date) - .map(releaseEntry => releaseEntry.name) - - const sortedNotes = sortedReleases.map(release => sortPatchKeys(allGhaeReleaseNotes[release], release, { semverSort: false })).flat() - - req.context.releaseNotes = await Promise.all(sortedNotes.map(async patch => renderPatchNotes(patch, req.context))) - - // Put together information about other releases - req.context.releases = sortedReleases.map(version => { - const notesPerVersion = allGhaeReleaseNotes[version] - const patches = sortPatchKeys(notesPerVersion, version, { semverSort: false }) - return { version, patches } - }) - - return next() -} diff --git a/middleware/contextualizers/release-notes.js b/middleware/contextualizers/release-notes.js new file mode 100644 index 0000000000..7b70af9148 --- /dev/null +++ b/middleware/contextualizers/release-notes.js @@ -0,0 +1,47 @@ +const enterpriseReleases = require('../../lib/enterprise-server-releases').supported +const { sortReleasesByDate, sortPatchKeys, renderPatchNotes, getAllReleases } = require('../../lib/release-notes-utils') + +module.exports = async (req, res, next) => { + // The `/release-notes` sub-path + if (!req.path.endsWith('/release-notes')) return next() + + const [requestedPlan, requestedRelease] = req.context.currentVersion.split('@') + const releaseNotesPerPlan = req.context.site.data['release-notes'][requestedPlan] + + // 404 if no release notes can be found + if (!releaseNotesPerPlan) return next() + + // Release notes handling differs if version has numbered releases (like GHES) or not (like GHAE) + const hasNumberedReleases = !(requestedRelease === 'latest') + + // GHES gets handled here... + if (hasNumberedReleases) { + const currentReleaseNotes = releaseNotesPerPlan[`${requestedRelease.replace(/\./g, '-')}`] + + if (!currentReleaseNotes) { + // If the GHES version doesn't have any release notes, let's be helpful and redirect to `enterprise.github.com` + return requestedPlan === 'enterprise-server' + ? res.redirect(`https://enterprise.github.com/releases/${requestedRelease}.0/notes`) + : next() + } + + const patches = sortPatchKeys(currentReleaseNotes, requestedRelease, { semverSort: hasNumberedReleases }) + req.context.releaseNotes = await Promise.all(patches.map(async patch => renderPatchNotes(patch, req.context))) + req.context.releases = getAllReleases(enterpriseReleases, releaseNotesPerPlan, hasNumberedReleases) + + const releaseIndex = enterpriseReleases.findIndex(release => release === requestedRelease) + req.context.nextRelease = enterpriseReleases[releaseIndex - 1] + req.context.prevRelease = enterpriseReleases[releaseIndex + 1] + } + + // GHAE gets handled here... + if (!hasNumberedReleases) { + const sortedReleases = sortReleasesByDate(releaseNotesPerPlan) + const sortedNotes = sortedReleases.map(release => sortPatchKeys(releaseNotesPerPlan[release], release, { semverSort: false })).flat() + + req.context.releaseNotes = await Promise.all(sortedNotes.map(async patch => renderPatchNotes(patch, req.context))) + req.context.releases = getAllReleases(sortedReleases, releaseNotesPerPlan, hasNumberedReleases) + } + + return next() +} diff --git a/middleware/index.js b/middleware/index.js index f02a0a6815..c31ee0b2fe 100644 --- a/middleware/index.js +++ b/middleware/index.js @@ -92,8 +92,7 @@ module.exports = function (app) { app.get('/_500', asyncMiddleware(instrument('./trigger-error'))) // *** Preparation for render-page *** - app.use(asyncMiddleware(instrument('./contextualizers/enterprise-release-notes'))) - app.use(asyncMiddleware(instrument('./contextualizers/github-ae-release-notes'))) + app.use(asyncMiddleware(instrument('./contextualizers/release-notes'))) app.use(instrument('./contextualizers/graphql')) app.use(instrument('./contextualizers/rest')) app.use(instrument('./contextualizers/webhooks')) From 1e76d6dc262cb330423ce540992e988ca024e2e3 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 8 Mar 2021 15:03:51 -0500 Subject: [PATCH 016/121] add some more shared functions for release notes middleware --- lib/release-notes-utils.js | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/lib/release-notes-utils.js b/lib/release-notes-utils.js index 45e6a6fb1c..6e52b21ffd 100644 --- a/lib/release-notes-utils.js +++ b/lib/release-notes-utils.js @@ -70,7 +70,31 @@ async function renderPatchNotes (patch, ctx) { return patch } -module.exports = { - sortPatchKeys, - renderPatchNotes +function sortReleasesByDate (releaseNotes) { + return Object.keys(releaseNotes) + .map(release => { + const [month, year] = release.split('-') + return { + name: release, + date: new Date(`20${year}`, month - 1, '1') + } + }) + .sort((releaseEntry1, releaseEntry2) => releaseEntry2.date - releaseEntry1.date) + .map(releaseEntry => releaseEntry.name) +} + +function getAllReleases (releases, releaseNotesPerPlan, hasNumberedReleases) { + return releases.map(version => { + const release = releaseNotesPerPlan[version.replace(/\./g, '-')] + if (!release) return { version } + const patches = sortPatchKeys(release, version, { semverSort: hasNumberedReleases }) + return { version, patches } + }) +} + +module.exports = { + sortReleasesByDate, + sortPatchKeys, + renderPatchNotes, + getAllReleases } From dc540f1c0df71f642564412a8f2c328f11b016da Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Thu, 6 May 2021 16:01:51 -0400 Subject: [PATCH 017/121] move the new GHES release notes into the subdir --- data/release-notes/{ => enterprise-server}/2-21/16.yml | 0 data/release-notes/{ => enterprise-server}/2-21/17.yml | 0 data/release-notes/{ => enterprise-server}/2-21/18.yml | 0 data/release-notes/{ => enterprise-server}/2-21/19.yml | 0 data/release-notes/{ => enterprise-server}/2-21/20.yml | 0 data/release-notes/{ => enterprise-server}/2-22/10.yml | 0 data/release-notes/{ => enterprise-server}/2-22/11.yml | 0 data/release-notes/{ => enterprise-server}/2-22/12.yml | 0 data/release-notes/{ => enterprise-server}/2-22/8.yml | 0 data/release-notes/{ => enterprise-server}/2-22/9.yml | 0 data/release-notes/{ => enterprise-server}/3-0/2.yml | 0 data/release-notes/{ => enterprise-server}/3-0/3.yml | 0 data/release-notes/{ => enterprise-server}/3-0/4.yml | 0 data/release-notes/{ => enterprise-server}/3-0/5.yml | 0 data/release-notes/{ => enterprise-server}/3-0/6.yml | 0 data/release-notes/{ => enterprise-server}/3-1/0-rc1.yml | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename data/release-notes/{ => enterprise-server}/2-21/16.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/17.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/18.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/19.yml (100%) rename data/release-notes/{ => enterprise-server}/2-21/20.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/10.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/11.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/12.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/8.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/9.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/2.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/3.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/4.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/5.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/6.yml (100%) rename data/release-notes/{ => enterprise-server}/3-1/0-rc1.yml (100%) diff --git a/data/release-notes/2-21/16.yml b/data/release-notes/enterprise-server/2-21/16.yml similarity index 100% rename from data/release-notes/2-21/16.yml rename to data/release-notes/enterprise-server/2-21/16.yml diff --git a/data/release-notes/2-21/17.yml b/data/release-notes/enterprise-server/2-21/17.yml similarity index 100% rename from data/release-notes/2-21/17.yml rename to data/release-notes/enterprise-server/2-21/17.yml diff --git a/data/release-notes/2-21/18.yml b/data/release-notes/enterprise-server/2-21/18.yml similarity index 100% rename from data/release-notes/2-21/18.yml rename to data/release-notes/enterprise-server/2-21/18.yml diff --git a/data/release-notes/2-21/19.yml b/data/release-notes/enterprise-server/2-21/19.yml similarity index 100% rename from data/release-notes/2-21/19.yml rename to data/release-notes/enterprise-server/2-21/19.yml diff --git a/data/release-notes/2-21/20.yml b/data/release-notes/enterprise-server/2-21/20.yml similarity index 100% rename from data/release-notes/2-21/20.yml rename to data/release-notes/enterprise-server/2-21/20.yml diff --git a/data/release-notes/2-22/10.yml b/data/release-notes/enterprise-server/2-22/10.yml similarity index 100% rename from data/release-notes/2-22/10.yml rename to data/release-notes/enterprise-server/2-22/10.yml diff --git a/data/release-notes/2-22/11.yml b/data/release-notes/enterprise-server/2-22/11.yml similarity index 100% rename from data/release-notes/2-22/11.yml rename to data/release-notes/enterprise-server/2-22/11.yml diff --git a/data/release-notes/2-22/12.yml b/data/release-notes/enterprise-server/2-22/12.yml similarity index 100% rename from data/release-notes/2-22/12.yml rename to data/release-notes/enterprise-server/2-22/12.yml diff --git a/data/release-notes/2-22/8.yml b/data/release-notes/enterprise-server/2-22/8.yml similarity index 100% rename from data/release-notes/2-22/8.yml rename to data/release-notes/enterprise-server/2-22/8.yml diff --git a/data/release-notes/2-22/9.yml b/data/release-notes/enterprise-server/2-22/9.yml similarity index 100% rename from data/release-notes/2-22/9.yml rename to data/release-notes/enterprise-server/2-22/9.yml diff --git a/data/release-notes/3-0/2.yml b/data/release-notes/enterprise-server/3-0/2.yml similarity index 100% rename from data/release-notes/3-0/2.yml rename to data/release-notes/enterprise-server/3-0/2.yml diff --git a/data/release-notes/3-0/3.yml b/data/release-notes/enterprise-server/3-0/3.yml similarity index 100% rename from data/release-notes/3-0/3.yml rename to data/release-notes/enterprise-server/3-0/3.yml diff --git a/data/release-notes/3-0/4.yml b/data/release-notes/enterprise-server/3-0/4.yml similarity index 100% rename from data/release-notes/3-0/4.yml rename to data/release-notes/enterprise-server/3-0/4.yml diff --git a/data/release-notes/3-0/5.yml b/data/release-notes/enterprise-server/3-0/5.yml similarity index 100% rename from data/release-notes/3-0/5.yml rename to data/release-notes/enterprise-server/3-0/5.yml diff --git a/data/release-notes/3-0/6.yml b/data/release-notes/enterprise-server/3-0/6.yml similarity index 100% rename from data/release-notes/3-0/6.yml rename to data/release-notes/enterprise-server/3-0/6.yml diff --git a/data/release-notes/3-1/0-rc1.yml b/data/release-notes/enterprise-server/3-1/0-rc1.yml similarity index 100% rename from data/release-notes/3-1/0-rc1.yml rename to data/release-notes/enterprise-server/3-1/0-rc1.yml From a45d23d770dad1315ad5fa4242481f5459fda520 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Thu, 6 May 2021 16:26:14 -0400 Subject: [PATCH 018/121] resolve the conflict --- layouts/release-notes.html | 153 ------------------------------------- 1 file changed, 153 deletions(-) diff --git a/layouts/release-notes.html b/layouts/release-notes.html index 6842f71667..04fb0fd8a4 100644 --- a/layouts/release-notes.html +++ b/layouts/release-notes.html @@ -9,7 +9,6 @@ {% include header %} {% include deprecation-banner %} -<<<<<<< HEAD {% if allVersions[currentVersion].plan == 'enterprise-server' %} {% include enterprise-server-release-notes %} {% endif %} @@ -17,158 +16,6 @@ {% if allVersions[currentVersion].plan == 'github-ae' %} {% include github-ae-release-notes %} {% endif %} -======= -
-
-
- {% if prevRelease %} - - {% octicon "chevron-left" %} {{ prevRelease }} - - {% else %} -
- {% endif %} - -

{{ currentVersion | version_num }} Release notes

- - {% if nextRelease %} - - {{ nextRelease }} {% octicon "chevron-right" %} - - {% else %} -
- {% endif %} -
- -
- {% for patch in releaseNotes %} -
-
-
-

- {{ allVersions[currentVersion].versionTitle }}.{{ patch.patchVersion }} -

- - {% if patch.release_candidate %} - Release Candidate - {% endif %} - - - Download - - - -
- -

{{ patch.date | date: "%B %d, %Y" }}

- - {% if patch.version != latestPatch and allVersions[currentVersion].currentRelease == latestRelease %} -

{% data ui.header.notices.ghes_release_notes_upgrade_patch_only %}

- {% endif %} - - {% if patch.version == latestPatch and allVersions[currentVersion].currentRelease != latestRelease %} -

{% data ui.header.notices.ghes_release_notes_upgrade_release_only %}

- {% endif %} - - {% if patch.version != latestPatch and allVersions[currentVersion].currentRelease != latestRelease %} -

{% data ui.header.notices.ghes_release_notes_upgrade_patch_and_release %}

- {% endif %} -
- -
-
{{ patch.intro }}
- - {% for section in patch.sections %} -
-
- {% include release-notes-category-label %} -
- -
    - {% for note in section[1] %} -
  • - {% if note.heading %} - {% assign slug = note.heading | slugify %} - -

    - {{ note.heading }} -

    - -
      - {% for subNote in note.notes %} -
    • {{ subNote }}
    • - {% endfor %} -
    - {% else %} - {{ note }} - {% endif %} -
  • - {% endfor %} -
-
- {% endfor %} -
-
- {% endfor %} -
-
- - -
->>>>>>> 94b8e0f8eda50d22b5bfa2c22f3d1adde9031025 {% include support-section %} {% include small-footer %} From e03226799957a8e553824a5940ade9df53856f28 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Thu, 6 May 2021 16:48:21 -0400 Subject: [PATCH 019/121] incorporate primer and other updates to the release notes layouts --- includes/enterprise-server-release-notes.html | 36 ++++++++++++------- includes/github-ae-release-notes.html | 20 +++++------ 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/includes/enterprise-server-release-notes.html b/includes/enterprise-server-release-notes.html index 55747f64e0..9afb58dc06 100644 --- a/includes/enterprise-server-release-notes.html +++ b/includes/enterprise-server-release-notes.html @@ -3,7 +3,7 @@ \ No newline at end of file +
diff --git a/includes/github-ae-release-notes.html b/includes/github-ae-release-notes.html index ca2b0f10cc..eb1f1f476b 100644 --- a/includes/github-ae-release-notes.html +++ b/includes/github-ae-release-notes.html @@ -3,7 +3,7 @@
-
+

{{ currentVersionObject.planTitle }} release notes

@@ -11,15 +11,15 @@
{% for patch in releaseNotes %} -
-
+
+

{{ currentVersionObject.versionTitle }} {{ patch.version }}

{% if patch.release_candidate %} - Release Candidate + Release Candidate {% endif %}
-

{{ patch.date | date: "%B %d, %Y" }}

+

{{ patch.date | date: "%B %d, %Y" }}

@@ -69,7 +69,7 @@
-
\ No newline at end of file + From 6578e9e1643e45a4637238e23694dfb1921f5a66 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 7 May 2021 17:32:26 -0400 Subject: [PATCH 020/121] update the UI text --- data/ui.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/data/ui.yml b/data/ui.yml index d09500f704..ce8f150437 100644 --- a/data/ui.yml +++ b/data/ui.yml @@ -18,10 +18,15 @@ header: please visit our English documentation. early_access: 📣 Please do not share this URL publicly. This page contains content about an early access feature. - ghes_release_notes_use_latest: Please use the latest release for the latest security, performance, and bug fixes. - ghes_release_notes_upgrade_patch_only: 📣 This is not the latest patch release of Enterprise Server. {% data ui.header.notices.ghes_release_notes_use_latest %} - ghes_release_notes_upgrade_release_only: 📣 This is not the latest release of Enterprise Server. {% data ui.header.notices.ghes_release_notes_use_latest %} - ghes_release_notes_upgrade_patch_and_release: 📣 This is not the latest patch release of this release series, and this is not the latest release of Enterprise Server. {% data ui.header.notices.ghes_release_notes_use_latest %} + release_notes_use_latest: Please use the latest release for the latest security, performance, and bug fixes. + # GHES release notes + ghes_release_notes_upgrade_patch_only: 📣 This is not the latest patch release of Enterprise Server. {% data ui.header.notices.release_notes_use_latest %} + ghes_release_notes_upgrade_release_only: 📣 This is not the latest release of Enterprise Server. {% data ui.header.notices.release_notes_use_latest %} + ghes_release_notes_upgrade_patch_and_release: 📣 This is not the latest patch release of this release series, and this is not the latest release of Enterprise Server. {% data ui.header.notices.release_notes_use_latest %} + # GHAE release notes + ghae_release_notes_upgrade: 📣 This is not the latest release of GitHub AE. {% data ui.header.notices.release_notes_use_latest %} +release_notes: + banner_text: These changes will roll out over the next one week. search: need_help: Need help? placeholder: Search topics, products... From e7af68968f79cd4df95abac881443c2e02748b72 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 7 May 2021 17:32:54 -0400 Subject: [PATCH 021/121] use the new naming scheme --- .../github-ae/2021-03/2021-03-03.yml | 80 +++++++++++++++++++ .../{03-21/0.yml => 2021-06/2021-06-01.yml} | 4 +- .../github-ae/2021-06/2021-06-07.yml | 80 +++++++++++++++++++ 3 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 data/release-notes/github-ae/2021-03/2021-03-03.yml rename data/release-notes/github-ae/{03-21/0.yml => 2021-06/2021-06-01.yml} (99%) create mode 100644 data/release-notes/github-ae/2021-06/2021-06-07.yml diff --git a/data/release-notes/github-ae/2021-03/2021-03-03.yml b/data/release-notes/github-ae/2021-03/2021-03-03.yml new file mode 100644 index 0000000000..b200f8dafc --- /dev/null +++ b/data/release-notes/github-ae/2021-03/2021-03-03.yml @@ -0,0 +1,80 @@ +date: '2021-03-03' +friendlyDate: 'March 3, 2021' +title: 'Week of March 3, 2021' +sections: + features: + - heading: 'GitHub Actions beta' + notes: + - | + [{% data variables.product.prodname_actions %}](https://github.com/features/actions) is a powerful, flexible solution for CI/CD and workflow automation. For more information, see "[Introduction to {% data variables.product.prodname_actions %}](/actions/learn-github-actions/introduction-to-github-actions)." + + {% data variables.product.prodname_actions %} on {% data variables.product.product_name %} uses a new [{% data variables.actions.hosted_runner %}](/actions/using-github-hosted-runners/about-ae-hosted-runners), only available for {% data variables.product.product_name %}, that enables you to customize the size, image, and networking configuration of the runners. These runners are a finished-service CI compute environment with auto-scaling and management, fully managed by {% data variables.product.company_short %}. During the beta, the use {% data variables.actions.hosted_runner %}s is free of charge. For more information, see "[Adding {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/adding-ae-hosted-runners)." + + Please note that when {% data variables.product.prodname_actions %} is enabled during this upgrade, two organizations named "GitHub Actions" (@**actions** and @**github**) will appear in {% data variables.product.product_location %}. These organizations are required by {% data variables.product.prodname_actions %}. Users named @**ghost** and @**actions** appear as the actors for creation of these organizations in the audit log. + - heading: 'GitHub Packages beta' + notes: + - | + [{% data variables.product.prodname_registry %}](https://github.com/features/packages) is a package hosting service, natively integrated with {% data variables.product.prodname_actions %}, APIs, and webhooks. Create an [end-to-end DevOps workflow](/github-ae@latest/packages/quickstart) that includes your code, continuous integration, and deployment solutions. During this beta, {% data variables.product.prodname_registry %} is offered free of charge to {% data variables.product.product_name %} customers. + - heading: 'GitHub Advanced Security beta' + notes: + - | + {% data variables.product.prodname_GH_advanced_security %} is available in beta and includes both code scanning and secret scanning. During this beta, {% data variables.product.prodname_GH_advanced_security %} features are being offered free of charge to {% data variables.product.product_name %} customers. Repository and organization administrators can opt-in to use {% data variables.product.prodname_GH_advanced_security %} in the Security and Analysis tab under settings. + + Learn more about {% data variables.product.prodname_GH_advanced_security %} [code scanning](/github/finding-security-vulnerabilities-and-errors-in-your-code/about-code-scanning) and [secret scanning](/github/administering-a-repository/about-secret-scanning) on {% data variables.product.prodname_ghe_managed %}. + + - heading: Manage teams from your identity provider (IdP) + notes: + - | + Customers using SCIM (System for Cross-domain Identity Management) can now sync security groups in Azure Active Directory with {% data variables.product.company_short %} teams. Once a team has been linked to a security group, membership will be automatically updated in {% data variables.product.product_name %} when a user is added or removed from their assigned security group. + + - heading: IP allow lists beta + notes: + - | + [{% data variables.product.company_short %} IP allow lists](/admin/configuration/restricting-network-traffic-to-your-enterprise) provide the ability to filter traffic from administrator-specified IP ranges, defined by CIDR notation. The allow list is defined at the enterprise or organization account level in Security > Settings. All traffic that attempts to reach resources within the enterprise account and organizations are filtered by the IP allow lists. This functionality is provided in addition to the ability to request network security group changes that filter traffic to the entirety of the GHAE tenant. + + changes: + - heading: Developer Changes + notes: + - | + [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of {% data variables.product.prodname_pages %} sites from repositories in the organization. This will not unpublish existing sites. + - Repositories that use {% data variables.product.prodname_pages %} can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). + - When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`. + - You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the "Add file" button gives the option to delete the directory. + - It's now easier and faster to [reference issues or pull requests](/github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#". + + - heading: Administration changes + notes: + - Enterprise owners can now publish a mandatory message. The message is shown to all users and they must acknowledge it. This can be used to display important information, terms of service or policies. + - The {% data variables.product.prodname_github_app%} single file path permission can now [support up to ten files](/developers/apps/creating-a-github-app-using-url-parameters). + - When configuring a {% data variables.product.prodname_github_app%}, the authorization callback URL is a required field. Now we will permit the integrator to specify multiple callback URLs. {% data variables.product.product_name %} denies authorization if the callback URL from the request is not listed. + - A [new API endpoint](/rest/reference/apps#create-a-scoped-access-token) enables the exchange of a user to server token for a user to server token scoped to specific repositories. + - Events are now logged in the audit log on [promoting a team member to be a team maintainer and on demoting a team maintainer to be a team member](/admin/user-management/audited-actions#teams). + - The [OAuth device authorization flow](/developers/apps/authorizing-oauth-apps#device-flow) is now supported. This allows any CLI client or developer tool to authenticate using a secondary system. + - A user can no longer delete their account if SCIM provisioning is enabled. + + - heading: Default branch renaming + notes: + - | + Enterprise and organization owners can now set the default branch name for new repositories. Enterprise owners can also enforce their choice of default branch name across all organizations or allow individual organizations to choose their own. + + Existing repositories are unaffected by these settings, and their default branch name will not be changed. + + This change is one of many changes {% data variables.product.company_short %} is making to support projects and maintainers that want to rename their default branch. To learn more, see [github/renaming](https://github.com/github/renaming). + + bugs: + - heading: Bug fixes + notes: + - Users can no longer set a backup email address on their profile. Their email address is set through the IdP only. + - You can no longer enable two-factor authentication after configuring authentication through your IdP. + - | + {% data variables.product.product_name %} can now connect to Azure Boards. + - Version headers were missing from the APIs, and have now been set to "GitHub AE." + - Links to documentation have been fixed. + - Configuration of audit log forwarding within the enterprise's settings was failing. + - Navigating to gists could result in a 500 error. + - The Support email or URL was failing to save. It now saves after a period of a few minutes. + - Organization level pull request templates were not being applied to all pull requests in the organization. + + known_issues: + - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. + - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. diff --git a/data/release-notes/github-ae/03-21/0.yml b/data/release-notes/github-ae/2021-06/2021-06-01.yml similarity index 99% rename from data/release-notes/github-ae/03-21/0.yml rename to data/release-notes/github-ae/2021-06/2021-06-01.yml index fa6e171c77..fddea403c5 100644 --- a/data/release-notes/github-ae/03-21/0.yml +++ b/data/release-notes/github-ae/2021-06/2021-06-01.yml @@ -1,4 +1,6 @@ -date: '2021-03-01' +date: '2021-06-01' +friendlyDate: 'June 1, 2021' +title: 'Week of June 1, 2021' sections: features: - heading: 'GitHub Actions beta' diff --git a/data/release-notes/github-ae/2021-06/2021-06-07.yml b/data/release-notes/github-ae/2021-06/2021-06-07.yml new file mode 100644 index 0000000000..86cb89bf1d --- /dev/null +++ b/data/release-notes/github-ae/2021-06/2021-06-07.yml @@ -0,0 +1,80 @@ +date: '2021-06-07' +friendlyDate: 'June 7, 2021' +title: 'Week of June 7, 2021' +sections: + features: + - heading: 'GitHub Actions beta' + notes: + - | + [{% data variables.product.prodname_actions %}](https://github.com/features/actions) is a powerful, flexible solution for CI/CD and workflow automation. For more information, see "[Introduction to {% data variables.product.prodname_actions %}](/actions/learn-github-actions/introduction-to-github-actions)." + + {% data variables.product.prodname_actions %} on {% data variables.product.product_name %} uses a new [{% data variables.actions.hosted_runner %}](/actions/using-github-hosted-runners/about-ae-hosted-runners), only available for {% data variables.product.product_name %}, that enables you to customize the size, image, and networking configuration of the runners. These runners are a finished-service CI compute environment with auto-scaling and management, fully managed by {% data variables.product.company_short %}. During the beta, the use {% data variables.actions.hosted_runner %}s is free of charge. For more information, see "[Adding {% data variables.actions.hosted_runner %}s](/actions/using-github-hosted-runners/adding-ae-hosted-runners)." + + Please note that when {% data variables.product.prodname_actions %} is enabled during this upgrade, two organizations named "GitHub Actions" (@**actions** and @**github**) will appear in {% data variables.product.product_location %}. These organizations are required by {% data variables.product.prodname_actions %}. Users named @**ghost** and @**actions** appear as the actors for creation of these organizations in the audit log. + - heading: 'GitHub Packages beta' + notes: + - | + [{% data variables.product.prodname_registry %}](https://github.com/features/packages) is a package hosting service, natively integrated with {% data variables.product.prodname_actions %}, APIs, and webhooks. Create an [end-to-end DevOps workflow](/github-ae@latest/packages/quickstart) that includes your code, continuous integration, and deployment solutions. During this beta, {% data variables.product.prodname_registry %} is offered free of charge to {% data variables.product.product_name %} customers. + - heading: 'GitHub Advanced Security beta' + notes: + - | + {% data variables.product.prodname_GH_advanced_security %} is available in beta and includes both code scanning and secret scanning. During this beta, {% data variables.product.prodname_GH_advanced_security %} features are being offered free of charge to {% data variables.product.product_name %} customers. Repository and organization administrators can opt-in to use {% data variables.product.prodname_GH_advanced_security %} in the Security and Analysis tab under settings. + + Learn more about {% data variables.product.prodname_GH_advanced_security %} [code scanning](/github/finding-security-vulnerabilities-and-errors-in-your-code/about-code-scanning) and [secret scanning](/github/administering-a-repository/about-secret-scanning) on {% data variables.product.prodname_ghe_managed %}. + + - heading: Manage teams from your identity provider (IdP) + notes: + - | + Customers using SCIM (System for Cross-domain Identity Management) can now sync security groups in Azure Active Directory with {% data variables.product.company_short %} teams. Once a team has been linked to a security group, membership will be automatically updated in {% data variables.product.product_name %} when a user is added or removed from their assigned security group. + + - heading: IP allow lists beta + notes: + - | + [{% data variables.product.company_short %} IP allow lists](/admin/configuration/restricting-network-traffic-to-your-enterprise) provide the ability to filter traffic from administrator-specified IP ranges, defined by CIDR notation. The allow list is defined at the enterprise or organization account level in Security > Settings. All traffic that attempts to reach resources within the enterprise account and organizations are filtered by the IP allow lists. This functionality is provided in addition to the ability to request network security group changes that filter traffic to the entirety of the GHAE tenant. + + changes: + - heading: Developer Changes + notes: + - | + [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of {% data variables.product.prodname_pages %} sites from repositories in the organization. This will not unpublish existing sites. + - Repositories that use {% data variables.product.prodname_pages %} can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites). + - When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`. + - You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the "Add file" button gives the option to delete the directory. + - It's now easier and faster to [reference issues or pull requests](/github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#". + + - heading: Administration changes + notes: + - Enterprise owners can now publish a mandatory message. The message is shown to all users and they must acknowledge it. This can be used to display important information, terms of service or policies. + - The {% data variables.product.prodname_github_app%} single file path permission can now [support up to ten files](/developers/apps/creating-a-github-app-using-url-parameters). + - When configuring a {% data variables.product.prodname_github_app%}, the authorization callback URL is a required field. Now we will permit the integrator to specify multiple callback URLs. {% data variables.product.product_name %} denies authorization if the callback URL from the request is not listed. + - A [new API endpoint](/rest/reference/apps#create-a-scoped-access-token) enables the exchange of a user to server token for a user to server token scoped to specific repositories. + - Events are now logged in the audit log on [promoting a team member to be a team maintainer and on demoting a team maintainer to be a team member](/admin/user-management/audited-actions#teams). + - The [OAuth device authorization flow](/developers/apps/authorizing-oauth-apps#device-flow) is now supported. This allows any CLI client or developer tool to authenticate using a secondary system. + - A user can no longer delete their account if SCIM provisioning is enabled. + + - heading: Default branch renaming + notes: + - | + Enterprise and organization owners can now set the default branch name for new repositories. Enterprise owners can also enforce their choice of default branch name across all organizations or allow individual organizations to choose their own. + + Existing repositories are unaffected by these settings, and their default branch name will not be changed. + + This change is one of many changes {% data variables.product.company_short %} is making to support projects and maintainers that want to rename their default branch. To learn more, see [github/renaming](https://github.com/github/renaming). + + bugs: + - heading: Bug fixes + notes: + - Users can no longer set a backup email address on their profile. Their email address is set through the IdP only. + - You can no longer enable two-factor authentication after configuring authentication through your IdP. + - | + {% data variables.product.product_name %} can now connect to Azure Boards. + - Version headers were missing from the APIs, and have now been set to "GitHub AE." + - Links to documentation have been fixed. + - Configuration of audit log forwarding within the enterprise's settings was failing. + - Navigating to gists could result in a 500 error. + - The Support email or URL was failing to save. It now saves after a period of a few minutes. + - Organization level pull request templates were not being applied to all pull requests in the organization. + + known_issues: + - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. + - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. From f11632f1c5c270029cb2ae8dc4dbe8cc74604da3 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 7 May 2021 17:34:31 -0400 Subject: [PATCH 022/121] update the utils --- lib/release-notes-utils.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/release-notes-utils.js b/lib/release-notes-utils.js index 6e52b21ffd..b62397e688 100644 --- a/lib/release-notes-utils.js +++ b/lib/release-notes-utils.js @@ -12,6 +12,7 @@ function sortPatchKeys (release, version, options = {}) { return { version: `${version}.${keyWithDots}`, patchVersion: keyWithDots, + release: version, // TODO this naming :/ we are not currently using this value, but we may want to. ...release[key] } }) @@ -19,8 +20,10 @@ function sortPatchKeys (release, version, options = {}) { .filter(key => !key.deprecated) // Versions with numbered releases like GHES 2.22, 3.0, etc. need additional semver sorting; - // Versions with date releases do not. - return options.semverSort ? semverSort(keys) : keys + // Versions with date releases need to be sorted by date. + return options.semverSort + ? semverSort(keys) + : keys.sort((a, b) => new Date(b.date) - new Date(a.date)) } function semverSort (keys) { @@ -73,7 +76,7 @@ async function renderPatchNotes (patch, ctx) { function sortReleasesByDate (releaseNotes) { return Object.keys(releaseNotes) .map(release => { - const [month, year] = release.split('-') + const [year, month] = release.split('-') return { name: release, date: new Date(`20${year}`, month - 1, '1') From b1e1a3835fe121df0f24033420ac704988d37036 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 7 May 2021 17:34:43 -0400 Subject: [PATCH 023/121] update the middleware --- middleware/contextualizers/release-notes.js | 24 +++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/middleware/contextualizers/release-notes.js b/middleware/contextualizers/release-notes.js index 7b70af9148..72131d9371 100644 --- a/middleware/contextualizers/release-notes.js +++ b/middleware/contextualizers/release-notes.js @@ -1,7 +1,7 @@ -const enterpriseReleases = require('../../lib/enterprise-server-releases').supported +const { supported, latest } = require('../../lib/enterprise-server-releases') const { sortReleasesByDate, sortPatchKeys, renderPatchNotes, getAllReleases } = require('../../lib/release-notes-utils') -module.exports = async (req, res, next) => { +module.exports = async function releaseNotesContext (req, res, next) { // The `/release-notes` sub-path if (!req.path.endsWith('/release-notes')) return next() @@ -27,11 +27,14 @@ module.exports = async (req, res, next) => { const patches = sortPatchKeys(currentReleaseNotes, requestedRelease, { semverSort: hasNumberedReleases }) req.context.releaseNotes = await Promise.all(patches.map(async patch => renderPatchNotes(patch, req.context))) - req.context.releases = getAllReleases(enterpriseReleases, releaseNotesPerPlan, hasNumberedReleases) + req.context.releases = getAllReleases(supported, releaseNotesPerPlan, hasNumberedReleases) - const releaseIndex = enterpriseReleases.findIndex(release => release === requestedRelease) - req.context.nextRelease = enterpriseReleases[releaseIndex - 1] - req.context.prevRelease = enterpriseReleases[releaseIndex + 1] + const releaseIndex = supported.findIndex(release => release === requestedRelease) + req.context.nextRelease = supported[releaseIndex - 1] + req.context.prevRelease = supported[releaseIndex + 1] + + req.context.latestPatch = patches[0].version + req.context.latestRelease = latest } // GHAE gets handled here... @@ -41,6 +44,15 @@ module.exports = async (req, res, next) => { req.context.releaseNotes = await Promise.all(sortedNotes.map(async patch => renderPatchNotes(patch, req.context))) req.context.releases = getAllReleases(sortedReleases, releaseNotesPerPlan, hasNumberedReleases) + // do some date format massaging, since we want the friendly date to render as the "version" + .map(r => { + const d = r.patches[0].friendlyDate.split(' ') + d.splice(1, 1) + r.version = d.join(' ') + return r + }) + + req.context.latestPatch = sortedNotes[0].date } return next() From 6e259f5b17638831f2ce0e968eaba0ba9cb28383 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 7 May 2021 17:34:50 -0400 Subject: [PATCH 024/121] update the include file --- includes/github-ae-release-notes.html | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/includes/github-ae-release-notes.html b/includes/github-ae-release-notes.html index eb1f1f476b..e4cda6d223 100644 --- a/includes/github-ae-release-notes.html +++ b/includes/github-ae-release-notes.html @@ -11,11 +11,11 @@
{% for patch in releaseNotes %} -
-
+
+

- {{ currentVersionObject.versionTitle }} {{ patch.version }} + {{ patch.title }}

{% if patch.release_candidate %} @@ -27,7 +27,11 @@
-

{{ patch.date | date: "%B %d, %Y" }}

+

{{ patch.friendlyDate }} - {% data ui.release_notes.banner_text %}

+ + {% if patch.date != latestPatch %} +

{% data ui.header.notices.ghae_release_notes_upgrade %}

+ {% endif %}
@@ -86,12 +90,11 @@
    {% for patch in release.patches %} - {% endfor %} From 7ae3bf204a483324796762c4b2b9bab5df89ae88 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 7 May 2021 19:59:32 -0400 Subject: [PATCH 025/121] remove the upgrade banner for AE --- data/ui.yml | 2 -- includes/github-ae-release-notes.html | 4 ---- 2 files changed, 6 deletions(-) diff --git a/data/ui.yml b/data/ui.yml index ce8f150437..f9d3aed091 100644 --- a/data/ui.yml +++ b/data/ui.yml @@ -23,8 +23,6 @@ header: ghes_release_notes_upgrade_patch_only: 📣 This is not the latest patch release of Enterprise Server. {% data ui.header.notices.release_notes_use_latest %} ghes_release_notes_upgrade_release_only: 📣 This is not the latest release of Enterprise Server. {% data ui.header.notices.release_notes_use_latest %} ghes_release_notes_upgrade_patch_and_release: 📣 This is not the latest patch release of this release series, and this is not the latest release of Enterprise Server. {% data ui.header.notices.release_notes_use_latest %} - # GHAE release notes - ghae_release_notes_upgrade: 📣 This is not the latest release of GitHub AE. {% data ui.header.notices.release_notes_use_latest %} release_notes: banner_text: These changes will roll out over the next one week. search: diff --git a/includes/github-ae-release-notes.html b/includes/github-ae-release-notes.html index e4cda6d223..5f355a098b 100644 --- a/includes/github-ae-release-notes.html +++ b/includes/github-ae-release-notes.html @@ -28,10 +28,6 @@

{{ patch.friendlyDate }} - {% data ui.release_notes.banner_text %}

- - {% if patch.date != latestPatch %} -

{% data ui.header.notices.ghae_release_notes_upgrade %}

- {% endif %}
From 0510a1aa1a0559b716298b0fb02280c1d4f6b2eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9A=A1=20Aditya=20Patel=20=E2=9A=A1?= <52347812+adityatheoctocatdev@users.noreply.github.com> Date: Tue, 11 May 2021 11:13:13 +0530 Subject: [PATCH 026/121] updated the link to release of `apache/log4j` #6165 --- .../personalizing-your-profile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/github/setting-up-and-managing-your-github-profile/personalizing-your-profile.md b/content/github/setting-up-and-managing-your-github-profile/personalizing-your-profile.md index 9aa7e88e7f..0f3deff66c 100644 --- a/content/github/setting-up-and-managing-your-github-profile/personalizing-your-profile.md +++ b/content/github/setting-up-and-managing-your-github-profile/personalizing-your-profile.md @@ -212,7 +212,7 @@ If you authored any commit(s) present in the commit history for the listed tag o | [HdrHistogram/HdrHistogram](https://github.com/HdrHistogram/HdrHistogram) | 2.1.9 | [HdrHistogram-2.1.9](https://github.com/HdrHistogram/HdrHistogram/releases/tag/HdrHistogram-2.1.9) | | [locationtech/spatial4j](https://github.com/locationtech/spatial4j) | 0.7 | [spatial4j-0.7](https://github.com/locationtech/spatial4j/releases/tag/spatial4j-0.7) | | [locationtech/jts](https://github.com/locationtech/jts) | 1.15.0 | [jts-1.15.0](https://github.com/locationtech/jts/releases/tag/jts-1.15.0) | -| [apache/log4j](https://github.com/apache/log4j) | 2.11 | [v1_2_11](https://github.com/apache/log4j/releases/tag/v1_2_11) | +| [apache/log4j](https://github.com/apache/log4j) | 2.11 | [log4j-2.11.0](https://github.com/apache/logging-log4j2/releases/tag/log4j-2.11.0) | ### Further reading From e867442ebf518c1dd2f8cc1d46307f58fdb1176b Mon Sep 17 00:00:00 2001 From: Rachael Sewell Date: Wed, 12 May 2021 19:02:20 -0700 Subject: [PATCH 027/121] remove left column github ae release notes (#19282) --- data/release-notes/github-ae/2021-03/2021-03-03.yml | 6 ++++-- data/release-notes/github-ae/2021-06/2021-06-01.yml | 6 ++++-- data/release-notes/github-ae/2021-06/2021-06-07.yml | 6 ++++-- includes/github-ae-release-notes.html | 8 ++------ 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/data/release-notes/github-ae/2021-03/2021-03-03.yml b/data/release-notes/github-ae/2021-03/2021-03-03.yml index b200f8dafc..fd30087352 100644 --- a/data/release-notes/github-ae/2021-03/2021-03-03.yml +++ b/data/release-notes/github-ae/2021-03/2021-03-03.yml @@ -76,5 +76,7 @@ sections: - Organization level pull request templates were not being applied to all pull requests in the organization. known_issues: - - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. - - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. + - heading: Known issues + notes: + - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. + - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. diff --git a/data/release-notes/github-ae/2021-06/2021-06-01.yml b/data/release-notes/github-ae/2021-06/2021-06-01.yml index fddea403c5..8bb2184947 100644 --- a/data/release-notes/github-ae/2021-06/2021-06-01.yml +++ b/data/release-notes/github-ae/2021-06/2021-06-01.yml @@ -76,5 +76,7 @@ sections: - Organization level pull request templates were not being applied to all pull requests in the organization. known_issues: - - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. - - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. + - heading: Known issues + notes: + - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. + - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. diff --git a/data/release-notes/github-ae/2021-06/2021-06-07.yml b/data/release-notes/github-ae/2021-06/2021-06-07.yml index 86cb89bf1d..b8d80b5b3c 100644 --- a/data/release-notes/github-ae/2021-06/2021-06-07.yml +++ b/data/release-notes/github-ae/2021-06/2021-06-07.yml @@ -76,5 +76,7 @@ sections: - Organization level pull request templates were not being applied to all pull requests in the organization. known_issues: - - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. - - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. + - heading: Known issues + notes: + - Geographic location data is not shown in the audit log. Location information can otherwise be discerned from the IP address associated with each event. + - The link to {% data variables.product.prodname_registry %} from a repository page shows an incorrect search page when that repository does not have any packages. diff --git a/includes/github-ae-release-notes.html b/includes/github-ae-release-notes.html index 5f355a098b..3c5195033c 100644 --- a/includes/github-ae-release-notes.html +++ b/includes/github-ae-release-notes.html @@ -34,12 +34,8 @@
{{ patch.intro }}
{% for section in patch.sections %} -
-
- {% include release-notes-category-label %} -
- -