From e5ccb3e0510e8974ccc96d0954a11acd24f22459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominykas=20Blyz=CC=8Ce=CC=87?= Date: Wed, 1 Nov 2023 21:16:21 +0200 Subject: [PATCH 1/7] feat: update Node.js release schedule (cherry picked from commit 41a3e8e0904c270f223c4817264d7eda638f55cc) --- .../schedule.json | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/actions/prepare-node-test-matrix-action/schedule.json b/.github/actions/prepare-node-test-matrix-action/schedule.json index 853060b..c1cf00e 100644 --- a/.github/actions/prepare-node-test-matrix-action/schedule.json +++ b/.github/actions/prepare-node-test-matrix-action/schedule.json @@ -100,7 +100,7 @@ "lts": "2022-10-25", "maintenance": "2023-10-18", "end": "2025-04-30", - "codename": "" + "codename": "Hydrogen" }, "v19": { "start": "2022-10-18", @@ -112,6 +112,30 @@ "lts": "2023-10-24", "maintenance": "2024-10-22", "end": "2026-04-30", + "codename": "Iron" + }, + "v21": { + "start": "2023-10-17", + "maintenance": "2024-04-01", + "end": "2024-06-01" + }, + "v22": { + "start": "2024-04-23", + "lts": "2024-10-29", + "maintenance": "2025-10-21", + "end": "2027-04-30", + "codename": "" + }, + "v23": { + "start": "2024-10-15", + "maintenance": "2025-04-01", + "end": "2025-06-01" + }, + "v24": { + "start": "2025-04-22", + "lts": "2025-10-28", + "maintenance": "2026-10-20", + "end": "2028-04-30", "codename": "" } } From 3d05fadf8c157c492cd40fb8989cb8ac9f7779f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominykas=20Blyz=CC=8Ce=CC=87?= Date: Wed, 1 Nov 2023 21:24:36 +0200 Subject: [PATCH 2/7] test: remove GITHUB_OUTPUT env var during tests GITHUB_OUTPUT belongs to the action which executes these tests - we don't want to affect it. There will be a follow up to set GITHUB_OUTPUT to something temporary, so that we can actually test things end-to-end, under real-life conditions. (cherry picked from commit 554b17cd105fc5922b55f0538539f53f8ae7de82) --- .github/actions/prepare-node-test-matrix-action/test/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/actions/prepare-node-test-matrix-action/test/index.js b/.github/actions/prepare-node-test-matrix-action/test/index.js index e817df4..f5dcb4f 100644 --- a/.github/actions/prepare-node-test-matrix-action/test/index.js +++ b/.github/actions/prepare-node-test-matrix-action/test/index.js @@ -41,6 +41,8 @@ exports.getOutput = function (now, pkg) { exports.main = function () { + delete process.env.GITHUB_OUTPUT; + const originalEnv = { ...process.env }; // does not fail with defaults, cannot assert, as output is dependent on date From 53bb3aff84b3d854232b25be63308e4c9147a97e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominykas=20Blyz=CC=8Ce=CC=87?= Date: Wed, 1 Nov 2023 21:43:20 +0200 Subject: [PATCH 3/7] test: modernize prepare-dynamic-steps tests to use node:test (cherry picked from commit 8b89dd8da163e5272327d67e2b40589995173f14) --- .../actions/prepare-dynamic-steps/.gitignore | 1 - .../prepare-dynamic-steps/test/index.js | 43 +++++++++---------- 2 files changed, 21 insertions(+), 23 deletions(-) delete mode 100644 .github/actions/prepare-dynamic-steps/.gitignore diff --git a/.github/actions/prepare-dynamic-steps/.gitignore b/.github/actions/prepare-dynamic-steps/.gitignore deleted file mode 100644 index d36977d..0000000 --- a/.github/actions/prepare-dynamic-steps/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.tmp diff --git a/.github/actions/prepare-dynamic-steps/test/index.js b/.github/actions/prepare-dynamic-steps/test/index.js index c85e47e..310f5a0 100644 --- a/.github/actions/prepare-dynamic-steps/test/index.js +++ b/.github/actions/prepare-dynamic-steps/test/index.js @@ -1,14 +1,11 @@ 'use strict'; -process.on('unhandledRejection', (err) => { +const Assert = require('node:assert'); +const Fs = require('node:fs'); +const Os = require('node:os'); +const Path = require('node:path'); +const { describe, it, beforeEach } = require('node:test'); - throw err; -}); - - -const Assert = require('assert'); -const Fs = require('fs'); -const Path = require('path'); const PrepareDynamicStepsAction = require('..'); @@ -20,34 +17,36 @@ runs: - run: echo ohai again `; - -exports.main = function () { +describe('PrepareDynamicStepsAction', () => { const originalEnv = { ...process.env }; - const tmpFolder = Path.join(__dirname, '.tmp', `${Date.now()}`); + let tmpFolder; + + beforeEach(() => { - try { + tmpFolder = Fs.mkdtempSync(`${Os.tmpdir()}${Path.sep}prepare-dynamic-steps-action-test-`); Fs.mkdirSync(tmpFolder, { recursive: true }); process.chdir(tmpFolder); + }); + + it('creates a file when INPUT_STEPS contains valid yaml', () => { process.env = { ...originalEnv, INPUT_PATH: 'test1', INPUT_STEPS: '- run: echo ohai\n- run: echo ohai again' }; PrepareDynamicStepsAction.main(); Assert.strictEqual(Fs.readFileSync(Path.join(tmpFolder, '.github', 'tmp', 'test1', 'action.yaml')).toString().trim(), expectedResult1.trim()); + }); + + it('throws when INPUT_STEPS contains invalid yaml', () => { process.env = { ...originalEnv, INPUT_PATH: 'test2', INPUT_STEPS: '- item\n-invalid' }; Assert.throws(() => PrepareDynamicStepsAction.main(), { message: 'Invalid `steps` - unable to parse YAML.' }); + }); + + it('throws when INPUT_STEPS does not contain an array', () => { process.env = { ...originalEnv, INPUT_PATH: 'test3', INPUT_STEPS: 'not an array' }; Assert.throws(() => PrepareDynamicStepsAction.main(), { message: 'Invalid `steps` - not an array.' }); - } - finally { - Fs.rmSync(Path.join(__dirname, '.tmp'), { recursive: true }); - } -}; - - -if (require.main === module) { - exports.main(); -} + }); +}); From 7b2bf10c24c4f8e53a407c0c4862b68f30d7606b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominykas=20Blyz=CC=8Ce=CC=87?= Date: Wed, 1 Nov 2023 22:07:35 +0200 Subject: [PATCH 4/7] test: modernize prepare-node-test-matrix-action tests to use node:test (cherry picked from commit 177e4359270221f3b20b3fc6b727a7fc1927a53e) --- .../test/index.js | 491 ++++++++++-------- 1 file changed, 267 insertions(+), 224 deletions(-) diff --git a/.github/actions/prepare-node-test-matrix-action/test/index.js b/.github/actions/prepare-node-test-matrix-action/test/index.js index f5dcb4f..6577003 100644 --- a/.github/actions/prepare-node-test-matrix-action/test/index.js +++ b/.github/actions/prepare-node-test-matrix-action/test/index.js @@ -1,12 +1,9 @@ 'use strict'; -process.on('unhandledRejection', (err) => { - - throw err; -}); +const Assert = require('node:assert'); +const { describe, it } = require('node:test'); -const Assert = require('assert'); const PrepareNodeTextMatrixAction = require('../index'); @@ -28,7 +25,8 @@ exports.getOutput = function (now, pkg) { PrepareNodeTextMatrixAction.main({ now, pkg, - debug: () => {} + debug: () => { + } }); } finally { @@ -38,226 +36,271 @@ exports.getOutput = function (now, pkg) { return output; }; - -exports.main = function () { +describe('PrepareNodeTextMatrixAction', () => { delete process.env.GITHUB_OUTPUT; const originalEnv = { ...process.env }; - // does not fail with defaults, cannot assert, as output is dependent on date - - Assert.ok(exports.getOutput()); - - // input validation - - Assert.throws(() => exports.getOutput(new Date('2021-10-08'), {})); - Assert.throws(() => exports.getOutput(new Date('2021-10-08'), { engines: {} })); - - process.env = { ...originalEnv, 'INPUT_UPGRADE-POLICY': 'no-such-policy' }; - Assert.throws(() => exports.getOutput()); - - // node version ranges - - process.env = { ...originalEnv }; - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '*' } }), [ - '::set-output name=node-version::[12,10,8,6,4]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14 || ^12 || ^10' } }), [ - '::set-output name=node-version::[12,10]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2010-07-01'), { engines: { node: '*' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::4', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - - - // matrices based on policies on a certain date - - process.env = { ...originalEnv, 'INPUT_UPGRADE-POLICY': 'lts' }; - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[12,10]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":15,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":16,"runs-on":null,"experimental":"experimental"},{"node-version":15,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":16,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,14,12,10]', - '::set-output name=lts-latest::16', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":17,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - - - process.env = { ...originalEnv, 'INPUT_UPGRADE-POLICY': 'lts/strict' }; - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[12,10]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,14,12,10]', - '::set-output name=lts-latest::16', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - - - process.env = { ...originalEnv, 'INPUT_UPGRADE-POLICY': 'all' }; - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,13,12,11,10]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[15,14,13,12,11,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,15,14,13,12,11,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,15,14,13,12,11,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[17,16,15,14,13,12,11,10]', - '::set-output name=lts-latest::16', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' - ]); - - // runs-on - default value ('ubuntu-latest', case insensitive) - process.env = { ...originalEnv, 'INPUT_RUNS-ON': 'ubuntu-LATEST' }; - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - - // runs-on - simple comma separated list - process.env = { ...originalEnv, 'INPUT_RUNS-ON': 'ubuntu-latest, windows-latest, macos-latest' }; - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', - '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - - // runs-on - YAML - process.env = { ...originalEnv, 'INPUT_RUNS-ON': '- ubuntu-latest\n- windows-latest\n- macos-latest\n' }; - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', - '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"}]', - '::set-output name=exclude::[]' - ]); - - // includes - sets missing `experimental`, sets missing `runs-on` - process.env = { ...originalEnv, 'INPUT_RUNS-ON': '- ubuntu-latest\n- windows-latest\n- macos-latest\n', 'INPUT_INCLUDE': '- node-version: 15\n runs-on: ubuntu-latest\n- node-version: 13' }; - Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', - '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"},{"node-version":15,"runs-on":"ubuntu-latest","experimental":null},{"node-version":13,"runs-on":"ubuntu-latest","experimental":null},{"node-version":13,"runs-on":"windows-latest","experimental":null},{"node-version":13,"runs-on":"macos-latest","experimental":null}]', - '::set-output name=exclude::[]' - ]); - - // excludes non-LTS experimental when explicitly requested - process.env = { ...originalEnv, 'INPUT_RUNS-ON': '- ubuntu-latest\n- windows-latest\n- macos-latest\n', 'INPUT_EXCLUDE': '- node-version: 17\n runs-on: ubuntu-latest' }; - Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,14,12,10]', - '::set-output name=lts-latest::16', - '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', - // node 17 on ubuntu latest explicitly excluded - '::set-output name=include::[{"node-version":17,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":17,"runs-on":"macos-latest","experimental":"experimental"}]', - '::set-output name=exclude::[{"node-version":17,"runs-on":"ubuntu-latest"}]' - ]); -}; - - -if (require.main === module) { - exports.main(); -} + it('does not fail with defaults, cannot assert, as output is dependent on date', () => { + + Assert.ok(exports.getOutput()); + }); + + it('throws when `engines` undefined', () => { + + Assert.throws(() => exports.getOutput(new Date('2021-10-08'), {}), { message: '`engines.node` range not defined in `package.json`.' }); + Assert.throws(() => exports.getOutput(new Date('2021-10-08'), { engines: {} }), { message: '`engines.node` range not defined in `package.json`.' }); + }); + + it('throws when upgrade policy is invalid', () => { + + process.env = { + ...originalEnv, + 'INPUT_UPGRADE-POLICY': 'no-such-policy' + }; + Assert.throws(() => exports.getOutput(), { message: 'No such upgrade policy: no-such-policy' }); + }); + + it('includes correct version ranges based on date', () => { + + process.env = { + ...originalEnv + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ + '::set-output name=node-version::[]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '*' } }), [ + '::set-output name=node-version::[12,10,8,6,4]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14 || ^12 || ^10' } }), [ + '::set-output name=node-version::[12,10]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2010-07-01'), { engines: { node: '*' } }), [ + '::set-output name=node-version::[]', + '::set-output name=lts-latest::4', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + }); + + it('constructs correct matrix for `lts` policy', () => { + + process.env = { + ...originalEnv, + 'INPUT_UPGRADE-POLICY': 'lts' + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[12,10]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[14,12,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":15,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[14,12,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":16,"runs-on":null,"experimental":"experimental"},{"node-version":15,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[14,12,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":16,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[16,14,12,10]', + '::set-output name=lts-latest::16', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":17,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + }); + + it('constructs correct matrix for `lts/strict` policy', () => { + + process.env = { + ...originalEnv, + 'INPUT_UPGRADE-POLICY': 'lts/strict' + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[12,10]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[14,12,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[14,12,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[14,12,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[16,14,12,10]', + '::set-output name=lts-latest::16', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + }); + + it('constructs correct matrix for `all` policy', () => { + + process.env = { + ...originalEnv, + 'INPUT_UPGRADE-POLICY': 'all' + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[14,13,12,11,10]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[15,14,13,12,11,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[16,15,14,13,12,11,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[16,15,14,13,12,11,10]', + '::set-output name=lts-latest::14', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[17,16,15,14,13,12,11,10]', + '::set-output name=lts-latest::16', + '::set-output name=runs-on::[null]', + '::set-output name=include::[]', + '::set-output name=exclude::[]' + ]); + }); + + it('recognizes the default runs-on value regardless of case', () => { + + process.env = { + ...originalEnv, + 'INPUT_RUNS-ON': 'ubuntu-LATEST' + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ + '::set-output name=node-version::[]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::[null]', + '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + }); + + it('sets runs-on from a simple comma separated list', () => { + + process.env = { + ...originalEnv, + 'INPUT_RUNS-ON': 'ubuntu-latest, windows-latest, macos-latest' + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ + '::set-output name=node-version::[]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', + '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + }); + + it('sets runs-on from a YAML array', () => { + + process.env = { + ...originalEnv, + 'INPUT_RUNS-ON': '- ubuntu-latest\n- windows-latest\n- macos-latest\n' + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ + '::set-output name=node-version::[]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', + '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"}]', + '::set-output name=exclude::[]' + ]); + }); + + it('ensures `experimental` and `runs-on` values are set when they are missing in the `include` matrix', () => { + + process.env = { + ...originalEnv, + 'INPUT_RUNS-ON': '- ubuntu-latest\n- windows-latest\n- macos-latest\n', + 'INPUT_INCLUDE': '- node-version: 15\n runs-on: ubuntu-latest\n- node-version: 13' + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ + '::set-output name=node-version::[]', + '::set-output name=lts-latest::12', + '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', + '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"},{"node-version":15,"runs-on":"ubuntu-latest","experimental":null},{"node-version":13,"runs-on":"ubuntu-latest","experimental":null},{"node-version":13,"runs-on":"windows-latest","experimental":null},{"node-version":13,"runs-on":"macos-latest","experimental":null}]', + '::set-output name=exclude::[]' + ]); + }); + + it('excludes non-LTS experimental when explicitly requested', () => { + + process.env = { + ...originalEnv, + 'INPUT_RUNS-ON': '- ubuntu-latest\n- windows-latest\n- macos-latest\n', + 'INPUT_EXCLUDE': '- node-version: 17\n runs-on: ubuntu-latest' + }; + Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ + '::set-output name=node-version::[16,14,12,10]', + '::set-output name=lts-latest::16', + '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', + // node 17 on ubuntu latest explicitly excluded + '::set-output name=include::[{"node-version":17,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":17,"runs-on":"macos-latest","experimental":"experimental"}]', + '::set-output name=exclude::[{"node-version":17,"runs-on":"ubuntu-latest"}]' + ]); + }); +}); From 299f9ad50e9c4763c576342d4fd3e9dd3c223619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominykas=20Blyz=CC=8Ce=CC=87?= Date: Wed, 1 Nov 2023 22:11:43 +0200 Subject: [PATCH 5/7] refactor: modernize (cherry picked from commit c0bc1dc46c58c541ce7c308730a8f30deff4305d) --- .github/actions/prepare-dynamic-steps/index.js | 10 ++-------- .../actions/prepare-node-test-matrix-action/index.js | 10 ++-------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/.github/actions/prepare-dynamic-steps/index.js b/.github/actions/prepare-dynamic-steps/index.js index a04ca3a..e0720ae 100644 --- a/.github/actions/prepare-dynamic-steps/index.js +++ b/.github/actions/prepare-dynamic-steps/index.js @@ -1,14 +1,8 @@ 'use strict'; -process.on('unhandledRejection', (err) => { - - throw err; -}); - - const ActionsCore = require('@actions/core'); -const Fs = require('fs'); -const Path = require('path'); +const Fs = require('node:fs'); +const Path = require('node:path'); const Yaml = require('yaml'); diff --git a/.github/actions/prepare-node-test-matrix-action/index.js b/.github/actions/prepare-node-test-matrix-action/index.js index d417493..8540530 100644 --- a/.github/actions/prepare-node-test-matrix-action/index.js +++ b/.github/actions/prepare-node-test-matrix-action/index.js @@ -1,13 +1,7 @@ 'use strict'; -process.on('unhandledRejection', (err) => { - - throw err; -}); - - const ActionsCore = require('@actions/core'); -const Path = require('path'); +const Path = require('node:path'); const Schedule = require('./schedule.json'); // https://raw.githubusercontent.com/nodejs/Release/master/schedule.json const Semver = require('semver'); const Yaml = require('yaml'); @@ -57,7 +51,7 @@ internals.normalizeRunsOn = function (runsOnInput) { exports.main = function ({ now = new Date(), pkg = Package, debug = console.info } = {}) { - if (!pkg.engines || !pkg.engines.node) { + if (!pkg?.engines?.node) { throw new Error('`engines.node` range not defined in `package.json`.'); } From f707e475c5b58295773852c4ebd651d9cd100644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominykas=20Blyz=CC=8Ce=CC=87?= Date: Wed, 1 Nov 2023 22:17:26 +0200 Subject: [PATCH 6/7] test: change assertions to remove the github ::set-output prefix This will make it simpler to refactor the tests to rely on GITHUB_OUTPUT variable again, instead of hijacking the stdout. (cherry picked from commit ebed8dea2ec84154b8dd3a8be09ba89ac45c6231) --- .../test/index.js | 243 +++++++++--------- 1 file changed, 122 insertions(+), 121 deletions(-) diff --git a/.github/actions/prepare-node-test-matrix-action/test/index.js b/.github/actions/prepare-node-test-matrix-action/test/index.js index 6577003..1a1c9a5 100644 --- a/.github/actions/prepare-node-test-matrix-action/test/index.js +++ b/.github/actions/prepare-node-test-matrix-action/test/index.js @@ -17,7 +17,8 @@ exports.getOutput = function (now, pkg) { line = line.trim(); if (line) { - output.push(line); + Assert.equal(line.slice(0, 13), '::set-output '); + output.push(line.slice(13)); } }; @@ -68,32 +69,32 @@ describe('PrepareNodeTextMatrixAction', () => { ...originalEnv }; Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[]', + 'name=lts-latest::12', + 'name=runs-on::[null]', + 'name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '*' } }), [ - '::set-output name=node-version::[12,10,8,6,4]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[12,10,8,6,4]', + 'name=lts-latest::12', + 'name=runs-on::[null]', + 'name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14 || ^12 || ^10' } }), [ - '::set-output name=node-version::[12,10]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[12,10]', + 'name=lts-latest::12', + 'name=runs-on::[null]', + 'name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2010-07-01'), { engines: { node: '*' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::4', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[]', + 'name=lts-latest::4', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); }); @@ -104,39 +105,39 @@ describe('PrepareNodeTextMatrixAction', () => { 'INPUT_UPGRADE-POLICY': 'lts' }; Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[12,10]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[12,10]', + 'name=lts-latest::12', + 'name=runs-on::[null]', + 'name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":15,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[14,12,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[{"node-version":15,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":16,"runs-on":null,"experimental":"experimental"},{"node-version":15,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[14,12,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[{"node-version":16,"runs-on":null,"experimental":"experimental"},{"node-version":15,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":16,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[14,12,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[{"node-version":16,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,14,12,10]', - '::set-output name=lts-latest::16', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":17,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[16,14,12,10]', + 'name=lts-latest::16', + 'name=runs-on::[null]', + 'name=include::[{"node-version":17,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); }); @@ -147,39 +148,39 @@ describe('PrepareNodeTextMatrixAction', () => { 'INPUT_UPGRADE-POLICY': 'lts/strict' }; Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[12,10]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[12,10]', + 'name=lts-latest::12', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[14,12,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[14,12,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,12,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[14,12,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,14,12,10]', - '::set-output name=lts-latest::16', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[16,14,12,10]', + 'name=lts-latest::16', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); }); @@ -190,39 +191,39 @@ describe('PrepareNodeTextMatrixAction', () => { 'INPUT_UPGRADE-POLICY': 'all' }; Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[14,13,12,11,10]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[14,13,12,11,10]', + 'name=lts-latest::12', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2020-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[15,14,13,12,11,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[15,14,13,12,11,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-05-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,15,14,13,12,11,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[16,15,14,13,12,11,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-07-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,15,14,13,12,11,10]', - '::set-output name=lts-latest::14', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[16,15,14,13,12,11,10]', + 'name=lts-latest::14', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[17,16,15,14,13,12,11,10]', - '::set-output name=lts-latest::16', - '::set-output name=runs-on::[null]', - '::set-output name=include::[]', - '::set-output name=exclude::[]' + 'name=node-version::[17,16,15,14,13,12,11,10]', + 'name=lts-latest::16', + 'name=runs-on::[null]', + 'name=include::[]', + 'name=exclude::[]' ]); }); @@ -233,11 +234,11 @@ describe('PrepareNodeTextMatrixAction', () => { 'INPUT_RUNS-ON': 'ubuntu-LATEST' }; Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::[null]', - '::set-output name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[]', + 'name=lts-latest::12', + 'name=runs-on::[null]', + 'name=include::[{"node-version":14,"runs-on":null,"experimental":"experimental"}]', + 'name=exclude::[]' ]); }); @@ -248,11 +249,11 @@ describe('PrepareNodeTextMatrixAction', () => { 'INPUT_RUNS-ON': 'ubuntu-latest, windows-latest, macos-latest' }; Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', - '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[]', + 'name=lts-latest::12', + 'name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', + 'name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"}]', + 'name=exclude::[]' ]); }); @@ -263,11 +264,11 @@ describe('PrepareNodeTextMatrixAction', () => { 'INPUT_RUNS-ON': '- ubuntu-latest\n- windows-latest\n- macos-latest\n' }; Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', - '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"}]', - '::set-output name=exclude::[]' + 'name=node-version::[]', + 'name=lts-latest::12', + 'name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', + 'name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"}]', + 'name=exclude::[]' ]); }); @@ -279,11 +280,11 @@ describe('PrepareNodeTextMatrixAction', () => { 'INPUT_INCLUDE': '- node-version: 15\n runs-on: ubuntu-latest\n- node-version: 13' }; Assert.deepStrictEqual(exports.getOutput(new Date('2020-07-01'), { engines: { node: '^14' } }), [ - '::set-output name=node-version::[]', - '::set-output name=lts-latest::12', - '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', - '::set-output name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"},{"node-version":15,"runs-on":"ubuntu-latest","experimental":null},{"node-version":13,"runs-on":"ubuntu-latest","experimental":null},{"node-version":13,"runs-on":"windows-latest","experimental":null},{"node-version":13,"runs-on":"macos-latest","experimental":null}]', - '::set-output name=exclude::[]' + 'name=node-version::[]', + 'name=lts-latest::12', + 'name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', + 'name=include::[{"node-version":14,"runs-on":"ubuntu-latest","experimental":"experimental"},{"node-version":14,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":14,"runs-on":"macos-latest","experimental":"experimental"},{"node-version":15,"runs-on":"ubuntu-latest","experimental":null},{"node-version":13,"runs-on":"ubuntu-latest","experimental":null},{"node-version":13,"runs-on":"windows-latest","experimental":null},{"node-version":13,"runs-on":"macos-latest","experimental":null}]', + 'name=exclude::[]' ]); }); @@ -295,12 +296,12 @@ describe('PrepareNodeTextMatrixAction', () => { 'INPUT_EXCLUDE': '- node-version: 17\n runs-on: ubuntu-latest' }; Assert.deepStrictEqual(exports.getOutput(new Date('2021-11-01'), { engines: { node: '^10' } }), [ - '::set-output name=node-version::[16,14,12,10]', - '::set-output name=lts-latest::16', - '::set-output name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', + 'name=node-version::[16,14,12,10]', + 'name=lts-latest::16', + 'name=runs-on::["ubuntu-latest","windows-latest","macos-latest"]', // node 17 on ubuntu latest explicitly excluded - '::set-output name=include::[{"node-version":17,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":17,"runs-on":"macos-latest","experimental":"experimental"}]', - '::set-output name=exclude::[{"node-version":17,"runs-on":"ubuntu-latest"}]' + 'name=include::[{"node-version":17,"runs-on":"windows-latest","experimental":"experimental"},{"node-version":17,"runs-on":"macos-latest","experimental":"experimental"}]', + 'name=exclude::[{"node-version":17,"runs-on":"ubuntu-latest"}]' ]); }); }); From b70b07f4062081864def05778459ef4444719004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominykas=20Bly=C5=BE=C4=97?= Date: Mon, 6 Nov 2023 11:34:09 +0200 Subject: [PATCH 7/7] Update .github/actions/prepare-node-test-matrix-action/index.js Co-authored-by: Manuel Spigolon --- .github/actions/prepare-node-test-matrix-action/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/prepare-node-test-matrix-action/index.js b/.github/actions/prepare-node-test-matrix-action/index.js index 8540530..b183478 100644 --- a/.github/actions/prepare-node-test-matrix-action/index.js +++ b/.github/actions/prepare-node-test-matrix-action/index.js @@ -51,7 +51,7 @@ internals.normalizeRunsOn = function (runsOnInput) { exports.main = function ({ now = new Date(), pkg = Package, debug = console.info } = {}) { - if (!pkg?.engines?.node) { + if (!pkg.engines?.node) { throw new Error('`engines.node` range not defined in `package.json`.'); }