From cd2a217a77a77c658a55bfbcc35553cd11026df6 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Wed, 17 Mar 2021 10:29:16 -0400 Subject: [PATCH 1/3] do not error if frontmatter includes next GHES release or hardcoded next --- lib/enterprise-server-releases.js | 4 ++++ lib/get-applicable-versions.js | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/enterprise-server-releases.js b/lib/enterprise-server-releases.js index 3e6f83c31a..0e620ec0c5 100644 --- a/lib/enterprise-server-releases.js +++ b/lib/enterprise-server-releases.js @@ -4,6 +4,9 @@ const versionSatisfiesRange = require('./version-satisfies-range') // enterprise-releases/docs/supported-versions.md#release-lifecycle-dates const dates = require('../lib/enterprise-dates.json') +// Some frontmatter may contain the upcoming GHES release number +const next = '3.1' + const supported = [ '3.0', '2.22', @@ -57,6 +60,7 @@ const deprecatedReleasesWithNewFormat = deprecated.filter(version => versionSati const deprecatedReleasesOnDeveloperSite = deprecated.filter(version => versionSatisfiesRange(version, '<=2.16')) module.exports = { + next, supported, deprecated, legacyAssetVersions, diff --git a/lib/get-applicable-versions.js b/lib/get-applicable-versions.js index a05880799e..ec64f109ff 100644 --- a/lib/get-applicable-versions.js +++ b/lib/get-applicable-versions.js @@ -1,4 +1,5 @@ const allVersions = require('./all-versions') +const { next } = require('./enterprise-server-releases') const versionSatisfiesRange = require('./version-satisfies-range') // return an array of versions that an article's product versions encompasses @@ -15,6 +16,8 @@ function getApplicableVersions (frontmatterVersions, filepath) { // get an array like: [ 'free-pro-team@latest', 'enterprise-server@2.21', 'enterprise-cloud@latest' ] const applicableVersions = [] + let nextVersion = false + // where frontmatter is something like: // free-pro-team: '*' // enterprise-server: '>=2.19' @@ -23,6 +26,15 @@ function getApplicableVersions (frontmatterVersions, filepath) { // ^ where each key corresponds to a plan Object.entries(frontmatterVersions) .forEach(([plan, planValue]) => { + // Special handling for frontmatter that evalues to the next GHES release number or a hardcoded `next`: + // we don't want to return it in the applicable versions array or it will become a permalink, + // but we also don't want to throw an error if no other versions are found. + if (planValue !== '*') { + if (versionSatisfiesRange(next, planValue) || planValue === 'next') { + nextVersion = true + } + } + // for each plan (e.g., enterprise-server), get matching versions from allVersions object const relevantVersions = Object.values(allVersions).filter(v => v.plan === plan) @@ -42,7 +54,7 @@ function getApplicableVersions (frontmatterVersions, filepath) { }) }) - if (!applicableVersions.length) { + if (!applicableVersions.length && !nextVersion) { throw new Error(`No applicable versions found for ${filepath}. Please double-check the page's \`versions\` frontmatter.`) } From 5006cdaff269cf93d381a7f2f8cf19930cb143bf Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Wed, 17 Mar 2021 10:30:16 -0400 Subject: [PATCH 2/3] add tests --- .../fixtures/page-versioned-for-ghae-next.md | 5 ++++ ...e-versioned-for-next-enterprise-release.md | 5 ++++ tests/unit/page.js | 30 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 tests/fixtures/page-versioned-for-ghae-next.md create mode 100644 tests/fixtures/page-versioned-for-next-enterprise-release.md diff --git a/tests/fixtures/page-versioned-for-ghae-next.md b/tests/fixtures/page-versioned-for-ghae-next.md new file mode 100644 index 0000000000..7829f629ad --- /dev/null +++ b/tests/fixtures/page-versioned-for-ghae-next.md @@ -0,0 +1,5 @@ +--- +title: Page versioned for next GitHub AE release +versions: + github-ae: 'next' +--- diff --git a/tests/fixtures/page-versioned-for-next-enterprise-release.md b/tests/fixtures/page-versioned-for-next-enterprise-release.md new file mode 100644 index 0000000000..46a30ad849 --- /dev/null +++ b/tests/fixtures/page-versioned-for-next-enterprise-release.md @@ -0,0 +1,5 @@ +--- +title: Page versioned for next Enterprise release +versions: + enterprise-server: '>=3.1' +--- diff --git a/tests/unit/page.js b/tests/unit/page.js index 3843e0abd7..988b278426 100644 --- a/tests/unit/page.js +++ b/tests/unit/page.js @@ -190,6 +190,36 @@ describe('Page class', () => { expect($.text()).not.toBe('This text should render on any actively supported version of Enterprise Server') expect($.text()).toBe('This text should only render on non-Enterprise') }) + + test('support next to-be-released Enterprise Server version in frontmatter', async () => { + // This fixture has `enterprise-server: '>=3.1'` hardcoded in the frontmatter + const page = await Page.init({ + relativePath: 'page-versioned-for-next-enterprise-release.md', + basePath: path.join(__dirname, '../fixtures'), + languageCode: 'en' + }) + // set version to 3.0 + const context = { + currentVersion: 'enterprise-server@3.0', + currentLanguage: 'en' + } + await expect(() => { return page.render(context) }).not.toThrow() + }) + + test('support next GitHub AE version in frontmatter', async () => { + // This fixture has `github-ae: 'next'` hardcoded in the frontmatter + const page = await Page.init({ + relativePath: 'page-versioned-for-ghae-next.md', + basePath: path.join(__dirname, '../fixtures'), + languageCode: 'en' + }) + // set version to @latest + const context = { + currentVersion: 'github-ae@latest', + currentLanguage: 'en' + } + await expect(() => { return page.render(context) }).not.toThrow() + }) }) test('preserves `languageCode`', async () => { From 1d044030919f770f539f2a8b9357c367f5c014f3 Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Wed, 17 Mar 2021 11:58:36 -0400 Subject: [PATCH 3/3] rerun CI