diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cf44724103e..e6a3a124e436 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +======= # CHANGELOG Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) @@ -16,7 +17,6 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - [CVE-2022-25912] Bumps simple-git from 3.4.0 to 3.15.0 ([#3036](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/3036)) ### 📈 Features/Enhancements - - [MD] Support legacy client for data source ([#2204](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2204)) - [MD] Add data source signing support ([#2510](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2510)) - [Plugin Helpers] Facilitate version changes ([#2398](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2398)) @@ -48,6 +48,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - [I18n] Register ru, ru-RU locale ([#2817](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2817)) - Add yarn opensearch arg to setup plugin dependencies ([#2544](https://github.com/opensearch-project/OpenSearch-Dashboards/issues/2544)) - [Multi DataSource] Test the connection to an external data source when creating or updating ([#2973](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2973)) +- Ability to start OS Dashboards with a newer and compatible nodejs version ([#2091](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/2091)) ### 🐛 Bug Fixes diff --git a/src/setup_node_env/node_version_validator.js b/src/setup_node_env/node_version_validator.js index 504d0970ecf6..f3ba6e7c9103 100644 --- a/src/setup_node_env/node_version_validator.js +++ b/src/setup_node_env/node_version_validator.js @@ -37,18 +37,41 @@ var rawRequiredVersion = (pkg && pkg.engines && pkg.engines.node) || null; var requiredVersion = rawRequiredVersion ? 'v' + rawRequiredVersion : rawRequiredVersion; var currentVersionMajorMinorPatch = currentVersion.match(/^v(\d+)\.(\d+)\.(\d+)/); var requiredVersionMajorMinorPatch = requiredVersion.match(/^v(\d+)\.(\d+)\.(\d+)/); + +var version = { + current: { + major: currentVersionMajorMinorPatch[1], + minor: parseInt(currentVersionMajorMinorPatch[2], 10), + patch: parseInt(currentVersionMajorMinorPatch[3], 10), + }, + required: { + major: requiredVersionMajorMinorPatch[1], + minor: parseInt(requiredVersionMajorMinorPatch[2], 10), + patch: parseInt(requiredVersionMajorMinorPatch[3], 10), + }, +}; + var isVersionValid = - currentVersionMajorMinorPatch[1] === requiredVersionMajorMinorPatch[1] && - currentVersionMajorMinorPatch[2] === requiredVersionMajorMinorPatch[2] && - parseInt(currentVersionMajorMinorPatch[3], 10) >= parseInt(requiredVersionMajorMinorPatch[3], 10); + version.current.major === version.required.major && + version.current.minor === version.required.minor && + version.current.patch >= version.required.patch; + +var isMinorValid = + version.current.major === version.required.major && + version.current.minor > version.required.minor; // Validates current the NodeJS version compatibility when OpenSearch Dashboards starts. -if (!isVersionValid) { +if (!isVersionValid && !isMinorValid) { var errorMessage = `OpenSearch Dashboards was built with ${requiredVersion} and does not support the current Node.js version ${currentVersion}. ` + `Please use Node.js ${requiredVersion} or a higher patch version.`; - // Actions to apply when validation fails: error report + exit. console.error(errorMessage); process.exit(1); +} else if (isMinorValid) { + // Validates Minor version of the NodeJS + var warnMessage = + `You're using an untested version of Node.js. OpenSearch Dashboards has been tested to work with Node.js ` + + `${requiredVersion}. Your current version is ${currentVersion}.`; + console.warn(warnMessage); } diff --git a/src/setup_node_env/node_version_validator.test.js b/src/setup_node_env/node_version_validator.test.js index cb3639154c6c..d19e6e726ca0 100644 --- a/src/setup_node_env/node_version_validator.test.js +++ b/src/setup_node_env/node_version_validator.test.js @@ -64,8 +64,8 @@ describe('NodeVersionValidator', function () { ); }); - it('should run the script WITH error if the minor version is higher', function (done) { - testValidateNodeVersion(done, requiredNodeVersionWithDiff(0, +1, 0), true); + it('should run the script WITH warning message if the minor version is higher', function (done) { + testValidateNodeVersion(done, requiredNodeVersionWithDiff(0, +1, 0), false, true); }); it('should run the script WITH error if the minor version is lower', function (done) { @@ -87,12 +87,13 @@ function requiredNodeVersionWithDiff(majorDiff, minorDiff, patchDiff) { return `v${major}.${minor}.${patch}`; } -function testValidateNodeVersion(done, versionToTest, expectError = false) { +function testValidateNodeVersion(done, versionToTest, expectError = false, expectWarning = false) { var processVersionOverwrite = `Object.defineProperty(process, 'version', { value: '${versionToTest}', writable: true });`; var command = `node -e "${processVersionOverwrite}require('./node_version_validator.js')"`; exec(command, { cwd: __dirname }, function (error, _stdout, stderr) { expect(stderr).toBeDefined(); + if (expectError) { expect(error.code).toBe(1); @@ -101,6 +102,13 @@ function testValidateNodeVersion(done, versionToTest, expectError = false) { `Please use Node.js ${REQUIRED_NODE_JS_VERSION} or a higher patch version.\n`; expect(stderr).toStrictEqual(speficicErrorMessage); + } else if (expectWarning) { + expect(error).toBeNull(); + + var speficicWarningMessage = + `You're using an untested version of Node.js. OpenSearch Dashboards has been tested to work with Node.js ` + + `${REQUIRED_NODE_JS_VERSION}. Your current version is ${versionToTest}.\n`; + expect(stderr).toStrictEqual(speficicWarningMessage); } else { expect(error).toBeNull(); expect(stderr).toHaveLength(0);