From 38b0eaa50e2602504102d0c3b5b959da16906df1 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 1 Mar 2021 17:01:43 -0500 Subject: [PATCH 01/41] 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 02/41] 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 03/41] 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 04/41] 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 05/41] 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 06/41] 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 07/41] 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 08/41] 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 09/41] 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 10/41] 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 11/41] 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 12/41] 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 13/41] 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 14/41] 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 15/41] 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 16/41] 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 17/41] 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 18/41] 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 19/41] 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 20/41] 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 21/41] 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 22/41] 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 23/41] 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 24/41] 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 25/41] 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 e867442ebf518c1dd2f8cc1d46307f58fdb1176b Mon Sep 17 00:00:00 2001 From: Rachael Sewell Date: Wed, 12 May 2021 19:02:20 -0700 Subject: [PATCH 26/41] 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 %} -
- -
    +
    +
      {% for note in section[1] %}
    • {% if note.heading %} From de7d02af930ad232ce6e2b2b4025a53f716b180d Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 24 May 2021 11:59:55 -0400 Subject: [PATCH 27/41] more merge-related updates --- content/admin/index.md | 11 ----------- .../release-notes/{ => enterprise-server}/2-21/16.yml | 0 .../release-notes/{ => enterprise-server}/2-21/17.yml | 0 .../release-notes/{ => enterprise-server}/2-21/18.yml | 0 .../release-notes/{ => enterprise-server}/2-21/19.yml | 0 .../release-notes/{ => enterprise-server}/2-21/20.yml | 0 .../release-notes/{ => enterprise-server}/2-21/21.yml | 0 .../release-notes/{ => enterprise-server}/2-22/10.yml | 0 .../release-notes/{ => enterprise-server}/2-22/11.yml | 0 .../release-notes/{ => enterprise-server}/2-22/12.yml | 0 .../release-notes/{ => enterprise-server}/2-22/13.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-0/7.yml | 0 .../{ => enterprise-server}/3-1/0-rc1.yml | 0 middleware/contextualizers/release-notes.js | 9 ++++++--- 21 files changed, 6 insertions(+), 14 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-21/21.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/13.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-0/7.yml (100%) rename data/release-notes/{ => enterprise-server}/3-1/0-rc1.yml (100%) diff --git a/content/admin/index.md b/content/admin/index.md index 8bc62e9e4b..f59c4615c4 100644 --- a/content/admin/index.md +++ b/content/admin/index.md @@ -50,14 +50,3 @@ children: - /release-notes - /all-releases --- - - - - - - - - - - - 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-21/21.yml b/data/release-notes/enterprise-server/2-21/21.yml similarity index 100% rename from data/release-notes/2-21/21.yml rename to data/release-notes/enterprise-server/2-21/21.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/13.yml b/data/release-notes/enterprise-server/2-22/13.yml similarity index 100% rename from data/release-notes/2-22/13.yml rename to data/release-notes/enterprise-server/2-22/13.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-0/7.yml b/data/release-notes/enterprise-server/3-0/7.yml similarity index 100% rename from data/release-notes/3-0/7.yml rename to data/release-notes/enterprise-server/3-0/7.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 diff --git a/middleware/contextualizers/release-notes.js b/middleware/contextualizers/release-notes.js index 351341aafa..724d780d79 100644 --- a/middleware/contextualizers/release-notes.js +++ b/middleware/contextualizers/release-notes.js @@ -18,7 +18,7 @@ module.exports = async (req, res, next) => { if (hasNumberedReleases) { const currentReleaseNotes = releaseNotesPerPlan[`${requestedRelease.replace(/\./g, '-')}`] - if (!currentReleaseNotes) { + if (!currentReleaseNotes && req.path.endsWith('/release-notes')) { // 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`) @@ -29,8 +29,11 @@ module.exports = async (req, res, next) => { req.context.releaseNotes = await Promise.all(patches.map(async patch => renderPatchNotes(patch, req.context))) req.context.releases = getAllReleases(supported, releaseNotesPerPlan, hasNumberedReleases) - req.context.releases.firstPreviousRelease = all[all.findIndex(v => v === version) + 1] - req.context.releases.secondPreviousRelease = all[all.findIndex(v => v === req.context.releases.firstPreviousRelease) + 1] + // Add firstPreviousRelease and secondPreviousRelease convenience props for use in includes/product-releases.html + req.context.releases.forEach(release => { + release.firstPreviousRelease = all[all.findIndex(v => v === release.version) + 1] + release.secondPreviousRelease = all[all.findIndex(v => v === release.firstPreviousRelease) + 1] + }) const releaseIndex = supported.findIndex(release => release === requestedRelease) req.context.nextRelease = supported[releaseIndex - 1] From dc448556908a1170ff467bf92b2292c97ae71fbd Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 24 May 2021 12:39:33 -0400 Subject: [PATCH 28/41] preserve deprecated release notes --- middleware/contextualizers/release-notes.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/middleware/contextualizers/release-notes.js b/middleware/contextualizers/release-notes.js index 71d3e951de..ff3112024c 100644 --- a/middleware/contextualizers/release-notes.js +++ b/middleware/contextualizers/release-notes.js @@ -1,6 +1,15 @@ -const { all, supported, latest } = require('../../lib/enterprise-server-releases') +const semver = require('semver') +const { all, latest, firstReleaseNote } = require('../../lib/enterprise-server-releases') const { sortReleasesByDate, sortPatchKeys, renderPatchNotes, getAllReleases } = require('../../lib/release-notes-utils') +// Display all GHES release notes, regardless of deprecation status, +// starting with the first release notes in 2.20 +const supported = all.filter(release => { + return semver.gte( + semver.coerce(release), semver.coerce(firstReleaseNote) + ) && release !== '11.10.340' + }) + module.exports = async function releaseNotesContext (req, res, next) { // The `/release-notes` sub-path if (!(req.path.endsWith('/release-notes') || req.path.endsWith('/admin'))) return next() From eb6ad755e1c22e809e85a482848b55e9afd6cee3 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 24 May 2021 12:40:27 -0400 Subject: [PATCH 29/41] render the header-level version picker on release notes --- includes/header-version-switcher.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/header-version-switcher.html b/includes/header-version-switcher.html index af5aebb0e1..b0b6b847a7 100644 --- a/includes/header-version-switcher.html +++ b/includes/header-version-switcher.html @@ -1,5 +1,5 @@ -{% if page.relativePath == 'index.md' or page.layout == 'product-landing' or page.layout == 'product-sublanding' %} +{% if page.relativePath == 'index.md' or page.layout == 'product-landing' or page.layout == 'product-sublanding' or page.layout == 'release-notes' %} {% if page.permalinks and page.permalinks.length > 1 %}
      From 0379ba843651bbc7c0ce363f3d7615b21547ca55 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 24 May 2021 13:46:55 -0400 Subject: [PATCH 30/41] lint --- middleware/contextualizers/release-notes.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/middleware/contextualizers/release-notes.js b/middleware/contextualizers/release-notes.js index ff3112024c..2a54833aab 100644 --- a/middleware/contextualizers/release-notes.js +++ b/middleware/contextualizers/release-notes.js @@ -5,10 +5,10 @@ const { sortReleasesByDate, sortPatchKeys, renderPatchNotes, getAllReleases } = // Display all GHES release notes, regardless of deprecation status, // starting with the first release notes in 2.20 const supported = all.filter(release => { - return semver.gte( - semver.coerce(release), semver.coerce(firstReleaseNote) - ) && release !== '11.10.340' - }) + return semver.gte( + semver.coerce(release), semver.coerce(firstReleaseNote) + ) && release !== '11.10.340' +}) module.exports = async function releaseNotesContext (req, res, next) { // The `/release-notes` sub-path From 580797b60f1d07b18b9b7e819a06c23c12cdb06c Mon Sep 17 00:00:00 2001 From: Matt Pollard Date: Fri, 28 May 2021 10:24:07 +0200 Subject: [PATCH 31/41] Relocate new Enterprise Server notes from main --- data/release-notes/{ => enterprise-server}/2-21/22.yml | 0 data/release-notes/{ => enterprise-server}/2-22/14.yml | 0 data/release-notes/{ => enterprise-server}/3-0/8.yml | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename data/release-notes/{ => enterprise-server}/2-21/22.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/14.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/8.yml (100%) diff --git a/data/release-notes/2-21/22.yml b/data/release-notes/enterprise-server/2-21/22.yml similarity index 100% rename from data/release-notes/2-21/22.yml rename to data/release-notes/enterprise-server/2-21/22.yml diff --git a/data/release-notes/2-22/14.yml b/data/release-notes/enterprise-server/2-22/14.yml similarity index 100% rename from data/release-notes/2-22/14.yml rename to data/release-notes/enterprise-server/2-22/14.yml diff --git a/data/release-notes/3-0/8.yml b/data/release-notes/enterprise-server/3-0/8.yml similarity index 100% rename from data/release-notes/3-0/8.yml rename to data/release-notes/enterprise-server/3-0/8.yml From 85ab2d46c27d4cb60a447ae8e4a9e88304a6148c Mon Sep 17 00:00:00 2001 From: Matt Pollard Date: Fri, 28 May 2021 10:24:15 +0200 Subject: [PATCH 32/41] Delete dummy notes for GitHub AE --- .../github-ae/2021-06/2021-06-01.yml | 82 ------------------- .../github-ae/2021-06/2021-06-07.yml | 82 ------------------- 2 files changed, 164 deletions(-) delete mode 100644 data/release-notes/github-ae/2021-06/2021-06-01.yml delete mode 100644 data/release-notes/github-ae/2021-06/2021-06-07.yml 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 deleted file mode 100644 index 8bb2184947..0000000000 --- a/data/release-notes/github-ae/2021-06/2021-06-01.yml +++ /dev/null @@ -1,82 +0,0 @@ -date: '2021-06-01' -friendlyDate: 'June 1, 2021' -title: 'Week of June 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. 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: - - 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 deleted file mode 100644 index b8d80b5b3c..0000000000 --- a/data/release-notes/github-ae/2021-06/2021-06-07.yml +++ /dev/null @@ -1,82 +0,0 @@ -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: - - 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. From 9fe786e9c0fcb1dff4ec0a91a222979ec0eb64f4 Mon Sep 17 00:00:00 2001 From: Matt Pollard Date: Fri, 28 May 2021 10:33:52 +0200 Subject: [PATCH 33/41] Include unified release notes on landing page --- content/admin/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/admin/index.md b/content/admin/index.md index f59c4615c4..183ead35e5 100644 --- a/content/admin/index.md +++ b/content/admin/index.md @@ -22,7 +22,7 @@ featuredLinks: - '{% if currentVersion == "github-ae@latest" %}/admin/user-management/customizing-user-messages-for-your-enterprise{% endif %}' - '{% if currentVersion == "github-ae@latest" %}/admin/github-actions/getting-started-with-github-actions-for-github-ae{% endif %}' popular: - - '{% if currentVersion == "github-ae@latest" %}/admin/overview/github-ae-release-notes{% endif %}' + - /admin/release-notes - '{% if enterpriseServerVersions contains currentVersion %}/github/getting-started-with-github/setting-up-a-trial-of-github-enterprise-server{% endif %}' - '{% if enterpriseServerVersions contains currentVersion %}/admin/installation{% endif %}' - '{% if currentVersion == "github-ae@latest" %}/admin/authentication/configuring-authentication-and-provisioning-for-your-enterprise-using-azure-ad{% endif %}' From b3bb93df2302acb0437a2cf8b82b7d2689805e95 Mon Sep 17 00:00:00 2001 From: Matt Pollard Date: Fri, 28 May 2021 10:47:01 +0200 Subject: [PATCH 34/41] Rely on "Supported releases" for Enterprise Server --- content/admin/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/admin/index.md b/content/admin/index.md index 183ead35e5..4c0e68c0a6 100644 --- a/content/admin/index.md +++ b/content/admin/index.md @@ -22,7 +22,7 @@ featuredLinks: - '{% if currentVersion == "github-ae@latest" %}/admin/user-management/customizing-user-messages-for-your-enterprise{% endif %}' - '{% if currentVersion == "github-ae@latest" %}/admin/github-actions/getting-started-with-github-actions-for-github-ae{% endif %}' popular: - - /admin/release-notes + - '{% if currentVersion == "github-ae@latest" %}/admin/release-notes{% endif %}' - '{% if enterpriseServerVersions contains currentVersion %}/github/getting-started-with-github/setting-up-a-trial-of-github-enterprise-server{% endif %}' - '{% if enterpriseServerVersions contains currentVersion %}/admin/installation{% endif %}' - '{% if currentVersion == "github-ae@latest" %}/admin/authentication/configuring-authentication-and-provisioning-for-your-enterprise-using-azure-ad{% endif %}' From 09bbeef176cdf155cd62bbb409bf3e66073aca2e Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 28 May 2021 09:30:22 -0400 Subject: [PATCH 35/41] add redirect from /admin/overview/github-ae-release-notes --- content/admin/release-notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/admin/release-notes.md b/content/admin/release-notes.md index 85c54e5fef..da80bfef2a 100644 --- a/content/admin/release-notes.md +++ b/content/admin/release-notes.md @@ -7,4 +7,6 @@ versions: topics: - Enterprise - Upgrades +redirect_from: + - /admin/overview/github-ae-release-notes --- From 8e325d33922b0da65300417fae48540a0a84610c Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 28 May 2021 09:53:39 -0400 Subject: [PATCH 36/41] incorporate the latest patches for GHES --- data/release-notes/{ => enterprise-server}/2-21/22.yml | 0 data/release-notes/{ => enterprise-server}/2-22/14.yml | 0 data/release-notes/{ => enterprise-server}/3-0/8.yml | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename data/release-notes/{ => enterprise-server}/2-21/22.yml (100%) rename data/release-notes/{ => enterprise-server}/2-22/14.yml (100%) rename data/release-notes/{ => enterprise-server}/3-0/8.yml (100%) diff --git a/data/release-notes/2-21/22.yml b/data/release-notes/enterprise-server/2-21/22.yml similarity index 100% rename from data/release-notes/2-21/22.yml rename to data/release-notes/enterprise-server/2-21/22.yml diff --git a/data/release-notes/2-22/14.yml b/data/release-notes/enterprise-server/2-22/14.yml similarity index 100% rename from data/release-notes/2-22/14.yml rename to data/release-notes/enterprise-server/2-22/14.yml diff --git a/data/release-notes/3-0/8.yml b/data/release-notes/enterprise-server/3-0/8.yml similarity index 100% rename from data/release-notes/3-0/8.yml rename to data/release-notes/enterprise-server/3-0/8.yml From d9e5b026bd0ec3737e4ede648f70d31a0853e3f8 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 28 May 2021 11:31:24 -0400 Subject: [PATCH 37/41] add schema specific to GHAE release notes --- .../schemas/ghae-release-notes-schema.js | 71 +++++++++++++++++++ ...schema.js => ghes-release-notes-schema.js} | 0 2 files changed, 71 insertions(+) create mode 100644 tests/helpers/schemas/ghae-release-notes-schema.js rename tests/helpers/schemas/{release-notes-schema.js => ghes-release-notes-schema.js} (100%) diff --git a/tests/helpers/schemas/ghae-release-notes-schema.js b/tests/helpers/schemas/ghae-release-notes-schema.js new file mode 100644 index 0000000000..4fcbc5e939 --- /dev/null +++ b/tests/helpers/schemas/ghae-release-notes-schema.js @@ -0,0 +1,71 @@ +const section = { + anyOf: [ + { + type: 'array', + items: { type: 'string' }, + minItems: 1 + }, + { + type: 'object', + properties: { + heading: { + type: 'string', + required: true + }, + notes: { + type: 'array', + items: { type: 'string' }, + required: true, + minItems: 1 + } + } + } + ] +} + +module.exports = { + properties: { + intro: { + type: 'string' + }, + date: { + type: 'string', + format: 'date', + required: true + }, + friendlyDate: { + type: 'string', + required: true + }, + title: { + type: 'string', + required: true + }, + currentWeek: { + type: 'boolean', + required: true + }, + release_candidate: { + type: 'boolean', + default: false + }, + deprecated: { + type: 'boolean', + default: false + }, + sections: { + required: true, + type: 'object', + minProperties: 1, + properties: [ + 'bugs', + 'known_issues', + 'features', + 'changes', + 'deprecations', + 'security_fixes', + 'backups' + ].reduce((prev, curr) => ({ ...prev, [curr]: section }), {}) + } + } +} diff --git a/tests/helpers/schemas/release-notes-schema.js b/tests/helpers/schemas/ghes-release-notes-schema.js similarity index 100% rename from tests/helpers/schemas/release-notes-schema.js rename to tests/helpers/schemas/ghes-release-notes-schema.js From 70f7384b75abaf818efdaed798e7e35fdf09aa3b Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 28 May 2021 11:31:46 -0400 Subject: [PATCH 38/41] add READMEs --- .../release-notes/enterprise-server/README.md | 37 +++++++++++++++++++ data/release-notes/github-ae/README.md | 35 ++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 data/release-notes/enterprise-server/README.md create mode 100644 data/release-notes/github-ae/README.md diff --git a/data/release-notes/enterprise-server/README.md b/data/release-notes/enterprise-server/README.md new file mode 100644 index 0000000000..5a488316c8 --- /dev/null +++ b/data/release-notes/enterprise-server/README.md @@ -0,0 +1,37 @@ +# Release notes for GitHub Enterprise Server + +Rendered here: https://docs.github.com/en/enterprise-server@latest/admin/release-notes + +## How it works + +### Placeholder content file + +A content file exists in `content/admin/release-notes.md`. It has a special frontmatter property `layout: release-notes` and no Markdown content. The source of the release notes comes from YAML data. + +### YAML source + +The source data for the release notes lives in this directory (`data/release-notes/enterprise-server`). + +The directories are named by GHES release number (with a hyphen instead of a period). + +The YAML files in each directory are named by patch number. Some patch filenames may end with `-rc.yml`, which means it's a release candidate. A release candidate file also requires `release_candidate: true` in the YAML data. + +Release notes of deprecated GHES versions (see `lib/enterprise-server-releases.js`) are **not** removed from the site and will always be displayed alongside currently supported versions. + +Note that patch files can be deprecated individually (i.e., hidden on the docs site) by an optional `deprecated: true` property. + +### Middleware processing + +The YAML data is processed and sorted by `middleware/contextualizers/release-notes.js` and added to the `context` object. + +### Layouts + +The `context` object data is rendered by `layouts/release-notes.html` and `includes/enterprise-server-release-notes.html`. + +The release notes page has a custom design with CSS in `stylesheets/release-notes.scss` and client-side JavaScript in `javascripts/release-notes.js`. + +### Schema + +The schema that validates the YAML data lives in `tests/helpers/schemas/ghes-release-notes-schema.js`. See the schema file to find out the required and optional properties. + +The schema is exercised by a test in `tests/linting/lint-files.js`. The test will fail if the data does not pass validation. diff --git a/data/release-notes/github-ae/README.md b/data/release-notes/github-ae/README.md new file mode 100644 index 0000000000..b20276bebd --- /dev/null +++ b/data/release-notes/github-ae/README.md @@ -0,0 +1,35 @@ +# Release notes for GitHub AE + +Rendered here: https://docs.github.com/en/github-ae@latest/admin/release-notes + +## How it works + +### Placeholder content file + +A content file exists in `content/admin/release-notes.md`. It has a special frontmatter property `layout: release-notes` and no Markdown content. The source of the release notes comes from YAML data. + +### YAML source + +The source data for the release notes lives in this directory (`data/release-notes/github-ae`). + +The directories are named by month. The YAML files are named by the data of a weekly release. + +A boolean property called `currentWeek` must be set in each YAML file. No more than one file at a time can have this property set to true. + +Note that patch files can be deprecated individually (i.e., hidden on the docs site) by an optional `deprecated: true` property. + +### Middleware processing + +The YAML data is processed and sorted by `middleware/contextualizers/release-notes.js` and added to the `context` object. + +### Layouts + +The `context` object data is rendered by `layouts/release-notes.html` and `includes/github-ae-release-notes.html`. + +The release notes page has a custom design with CSS in `stylesheets/release-notes.scss` and client-side JavaScript in `javascripts/release-notes.js`. + +### Schema + +The schema that validates the YAML data lives in `tests/helpers/schemas/ghae-release-notes-schema.js`. See the schema file to find out the required and optional properties. + +The schema is exercised by a test in `tests/linting/lint-files.js`. The test will fail if the data does not pass validation. From 49166811f5e6a6789f99bdb56f018731d65fb93c Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 28 May 2021 11:32:41 -0400 Subject: [PATCH 39/41] exercise the GHAE schema in lint-files --- tests/linting/lint-files.js | 87 ++++++++++++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 12 deletions(-) diff --git a/tests/linting/lint-files.js b/tests/linting/lint-files.js index 8db8a1c03e..5fcc88f212 100644 --- a/tests/linting/lint-files.js +++ b/tests/linting/lint-files.js @@ -10,7 +10,8 @@ const readFileAsync = require('../../lib/readfile-async') const frontmatter = require('../../lib/frontmatter') const languages = require('../../lib/languages') const { tags } = require('../../lib/liquid-tags/extended-markdown') -const ghesReleaseNotesSchema = require('../helpers/schemas/release-notes-schema') +const ghesReleaseNotesSchema = require('../helpers/schemas/ghes-release-notes-schema') +const ghaeReleaseNotesSchema = require('../helpers/schemas/ghae-release-notes-schema') const learningTracksSchema = require('../helpers/schemas/learning-tracks-schema') const renderContent = require('../../lib/render-content') const { execSync } = require('child_process') @@ -22,7 +23,8 @@ const contentDir = path.join(rootDir, 'content') const reusablesDir = path.join(rootDir, 'data/reusables') const variablesDir = path.join(rootDir, 'data/variables') const glossariesDir = path.join(rootDir, 'data/glossaries') -const ghesReleaseNotesDir = path.join(rootDir, 'data/release-notes') +const ghesReleaseNotesDir = path.join(rootDir, 'data/release-notes/enterprise-server') +const ghaeReleaseNotesDir = path.join(rootDir, 'data/release-notes/github-ae') const learningTracks = path.join(rootDir, 'data/learning-tracks') const languageCodes = Object.keys(languages) @@ -171,7 +173,7 @@ const yamlWalkOptions = { } // different lint rules apply to different content types -let mdToLint, ymlToLint, releaseNotesToLint, learningTracksToLint +let mdToLint, ymlToLint, ghesReleaseNotesToLint, ghaeReleaseNotesToLint, learningTracksToLint if (!process.env.TEST_TRANSLATION) { // compile lists of all the files we want to lint @@ -201,7 +203,12 @@ if (!process.env.TEST_TRANSLATION) { // GHES release notes const ghesReleaseNotesYamlAbsPaths = walk(ghesReleaseNotesDir, yamlWalkOptions).sort() const ghesReleaseNotesYamlRelPaths = ghesReleaseNotesYamlAbsPaths.map(p => slash(path.relative(rootDir, p))) - releaseNotesToLint = zip(ghesReleaseNotesYamlRelPaths, ghesReleaseNotesYamlAbsPaths) + ghesReleaseNotesToLint = zip(ghesReleaseNotesYamlRelPaths, ghesReleaseNotesYamlAbsPaths) + + // GHAE release notes + const ghaeReleaseNotesYamlAbsPaths = walk(ghaeReleaseNotesDir, yamlWalkOptions).sort() + const ghaeReleaseNotesYamlRelPaths = ghaeReleaseNotesYamlAbsPaths.map(p => slash(path.relative(rootDir, p))) + ghaeReleaseNotesToLint = zip(ghaeReleaseNotesYamlRelPaths, ghaeReleaseNotesYamlAbsPaths) // Learning tracks const learningTracksYamlAbsPaths = walk(learningTracks, yamlWalkOptions).sort() @@ -216,7 +223,7 @@ if (!process.env.TEST_TRANSLATION) { console.log(`Found ${changedFilesRelPaths.length} translated files.`) - const { mdRelPaths = [], ymlRelPaths = [], releaseNotesRelPaths = [], learningTracksRelPaths = [] } = groupBy(changedFilesRelPaths, (path) => { + const { mdRelPaths = [], ymlRelPaths = [], ghesReleaseNotesRelPaths = [], ghaeReleaseNotesRelPaths = [], learningTracksRelPaths = [] } = groupBy(changedFilesRelPaths, (path) => { // separate the changed files to different groups if (path.endsWith('README.md')) { return 'throwAway' @@ -224,8 +231,10 @@ if (!process.env.TEST_TRANSLATION) { return 'mdRelPaths' } else if (path.match(/\/data\/(variables|glossaries)\//i)) { return 'ymlRelPaths' - } else if (path.match(/\/data\/release-notes\//i)) { - return 'releaseNotesRelPaths' + } else if (path.match(/\/data\/release-notes\/enterprise-server/i)) { + return 'ghesReleaseNotesRelPaths' + } else if (path.match(/\/data\/release-notes\/github-ae/i)) { + return 'ghaeReleaseNotesRelPaths' } else if (path.match(/\data\/learning-tracks/)) { return 'learningTracksRelPaths' } else { @@ -234,14 +243,15 @@ if (!process.env.TEST_TRANSLATION) { } }) - const [mdTuples, ymlTuples, releaseNotesTuples, learningTracksTuples] = [mdRelPaths, ymlRelPaths, releaseNotesRelPaths, learningTracksRelPaths].map(relPaths => { + const [mdTuples, ymlTuples, ghesReleaseNotesTuples, ghaeReleaseNotesTuples, learningTracksTuples] = [mdRelPaths, ymlRelPaths, ghesReleaseNotesRelPaths, ghaeReleaseNotesRelPaths, learningTracksRelPaths].map(relPaths => { const absPaths = relPaths.map(p => path.join(rootDir, p)) return zip(relPaths, absPaths) }) mdToLint = mdTuples ymlToLint = ymlTuples - releaseNotesToLint = releaseNotesTuples + ghesReleaseNotesToLint = ghesReleaseNotesTuples + ghaeReleaseNotesToLint = ghaeReleaseNotesTuples learningTracksToLint = learningTracksTuples } @@ -661,9 +671,9 @@ describe('lint yaml content', () => { ) }) -describe('lint release notes', () => { - if (releaseNotesToLint.length < 1) return - describe.each(releaseNotesToLint)( +describe('lint GHES release notes', () => { + if (ghesReleaseNotesToLint.length < 1) return + describe.each(ghesReleaseNotesToLint)( '%s', (yamlRelPath, yamlAbsPath) => { let dictionary @@ -707,6 +717,59 @@ describe('lint release notes', () => { ) }) +describe('lint GHAE release notes', () => { + if (ghaeReleaseNotesToLint.length < 1) return + const currentWeeksFound = [] + describe.each(ghaeReleaseNotesToLint)( + '%s', + (yamlRelPath, yamlAbsPath) => { + let dictionary + + beforeAll(async () => { + const fileContents = await readFileAsync(yamlAbsPath, 'utf8') + dictionary = yaml.load(fileContents, { filename: yamlRelPath }) + }) + + it('matches the schema', () => { + const { errors } = revalidator.validate(dictionary, ghaeReleaseNotesSchema) + const errorMessage = errors.map(error => `- [${error.property}]: ${error.actual}, ${error.message}`).join('\n') + expect(errors.length, errorMessage).toBe(0) + }) + + it('does not have more than one yaml file with currentWeek set to true', () => { + if (dictionary.currentWeek) currentWeeksFound.push(yamlRelPath) + const errorMessage = `Found more than one file with currentWeek set to true: ${currentWeeksFound.join('\n')}` + expect(currentWeeksFound.length, errorMessage).not.toBeGreaterThan(1) + }) + + it('contains valid liquid', () => { + const { intro, sections } = dictionary + let toLint = { intro } + for (const key in sections) { + const section = sections[key] + const label = `sections.${key}` + section.forEach((part) => { + if (Array.isArray(part)) { + toLint = { ...toLint, ...{ [label]: section.join('\n') } } + } else { + for (const prop in section) { + toLint = { ...toLint, ...{ [`${label}.${prop}`]: section[prop] } } + } + } + }) + } + + for (const key in toLint) { + if (!toLint[key]) continue + expect(() => renderContent.liquid.parse(toLint[key]), `${key} contains invalid liquid`) + .not + .toThrow() + } + }) + } + ) +}) + describe('lint learning tracks', () => { if (learningTracksToLint.length < 1) return describe.each(learningTracksToLint)( From 0909729193deedc53911b4c93dd592989e5f0d8c Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Fri, 28 May 2021 11:33:06 -0400 Subject: [PATCH 40/41] change the banner text depending on whether the currentWeek prop is set to true or false in the YAML --- data/release-notes/github-ae/2021-03/2021-03-03.yml | 1 + data/release-notes/github-ae/2021-06/2021-06-01.yml | 1 + data/release-notes/github-ae/2021-06/2021-06-07.yml | 1 + data/ui.yml | 3 ++- includes/github-ae-release-notes.html | 8 ++++++-- 5 files changed, 11 insertions(+), 3 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 fd30087352..7185cd78c4 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 @@ -1,6 +1,7 @@ date: '2021-03-03' friendlyDate: 'March 3, 2021' title: 'Week of March 3, 2021' +currentWeek: false sections: features: - heading: 'GitHub Actions beta' 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 8bb2184947..da92905b56 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 @@ -1,6 +1,7 @@ date: '2021-06-01' friendlyDate: 'June 1, 2021' title: 'Week of June 1, 2021' +currentWeek: false 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 index b8d80b5b3c..c9bbfd5edb 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 @@ -1,6 +1,7 @@ date: '2021-06-07' friendlyDate: 'June 7, 2021' title: 'Week of June 7, 2021' +currentWeek: false sections: features: - heading: 'GitHub Actions beta' diff --git a/data/ui.yml b/data/ui.yml index b4b60c9502..f2bb008dea 100644 --- a/data/ui.yml +++ b/data/ui.yml @@ -24,7 +24,8 @@ header: 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 %} release_notes: - banner_text: These changes will roll out over the next one week. + banner_text_current: These changes will roll out over the next one week. + banner_text_past: These changes rolled out to enterprises during the week of search: need_help: Need help? placeholder: Search topics, products... diff --git a/includes/github-ae-release-notes.html b/includes/github-ae-release-notes.html index a0cfb1498b..7446f4babc 100644 --- a/includes/github-ae-release-notes.html +++ b/includes/github-ae-release-notes.html @@ -26,8 +26,12 @@ Print
      - -

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

      + {% if patch.currentWeek %} + {% assign bannerText = site.data.ui.release_notes.banner_text_current %} + {% else %} + {% assign bannerText = site.data.ui.release_notes.banner_text_past | append: " " | append: patch.friendlyDate | append: "." %} + {% endif %} +

      {{ patch.friendlyDate }} - {{ bannerText }}

      From a55796928eb086c949ee1415ca203d16853dbae8 Mon Sep 17 00:00:00 2001 From: Mike Surowiec Date: Fri, 28 May 2021 12:49:31 -0700 Subject: [PATCH 41/41] fix: sidebar active class (#19630) --- components/product/SidebarProduct.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/product/SidebarProduct.tsx b/components/product/SidebarProduct.tsx index ca9b01bf44..a4472a6a49 100644 --- a/components/product/SidebarProduct.tsx +++ b/components/product/SidebarProduct.tsx @@ -39,7 +39,7 @@ export const SidebarProduct = () => { const isStandaloneCategory = childPage.page.documentType === 'article' const childTitle = childPage.renderedShortTitle || childPage.renderedFullTitle - const isActive = routePath.includes(routePath) + const isActive = routePath.includes(childPage.href) const isCurrent = routePath === childPage.href return (