From fdf98c66810b9af4da3a9747d3bfa606b4512470 Mon Sep 17 00:00:00 2001 From: Robert Patrick Date: Fri, 4 Mar 2022 16:49:41 -0600 Subject: [PATCH 1/2] updating Remote Console version compatibility check logic --- electron/.gitignore | 1 + electron/app/js/wlRemoteConsoleUtils.js | 29 +++++++++----- electron/app/locales/en/electron.json | 2 +- webui/scripts/hooks/after_build.js | 50 +++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/electron/.gitignore b/electron/.gitignore index 400fdc4fc..b6997571e 100644 --- a/electron/.gitignore +++ b/electron/.gitignore @@ -1,6 +1,7 @@ /node_modules /app/web /app/staged-themes +/app/webui.json /wktui.log /wktui-*.log /.docker diff --git a/electron/app/js/wlRemoteConsoleUtils.js b/electron/app/js/wlRemoteConsoleUtils.js index c7021da6a..154495ea4 100644 --- a/electron/app/js/wlRemoteConsoleUtils.js +++ b/electron/app/js/wlRemoteConsoleUtils.js @@ -18,10 +18,8 @@ const { getLogger } = require('./wktLogging'); const osUtils = require('./osUtils'); const { sendToWindow } = require('./windowUtils'); const { spawnDaemonChildProcess } = require('./childProcessExecutor'); +const { wlRemoteConsoleFrontendVersion } = require('../webui.json'); -// TODO - Change this to the correct version once the RC version changes to 2.3.0... -const MIN_VERSION = '2.2.0'; -const MIN_VERSION_COMPONENTS = MIN_VERSION.split('.').map((item) => { return Number(item); }); let _wlRemoteConsoleChildProcess; @@ -98,7 +96,7 @@ async function setWebLogicRemoteConsoleHomeAndStart(currentWindow, rcHome) { startWebLogicRemoteConsoleBackend(currentWindow, true).then(() => resolve() ); } else { const message = i18n.t('wrc-version-incompatible-message', - { rcVersion: isCompatibleResult['version'], minVersion: MIN_VERSION }); + { rcVersion: isCompatibleResult['version'], minVersion: wlRemoteConsoleFrontendVersion }); dialog.showErrorBox(title, message); return resolve(); } @@ -167,7 +165,7 @@ async function _getWebLogicRemoteConsoleHome(skipVersionCheck = false) { resolve(rcHome); } else { const message = i18n.t('wrc-version-incompatible-message', - { rcVersion: isCompatibleResult['version'], minVersion: MIN_VERSION }); + { backendVersion: isCompatibleResult['version'], frontendVersion: wlRemoteConsoleFrontendVersion }); reject(new Error(message)); } }).catch(err => reject(err)); @@ -344,6 +342,8 @@ async function _verifyVersionCompatibility(packageJsonFile, executablePath) { if (packageJson.version) { result['version'] = packageJson.version; result['isCompatible'] = _verifyVersionNumberCompatibility(packageJson.version); + getLogger().debug('Remote Console Compatibility check found wrc-jet-pack %s and backend version %s to %s compatible.', + wlRemoteConsoleFrontendVersion, packageJson.version, result['isCompatible'] ? 'be' : 'not be'); resolve(result); } else { const message = i18n.t('wrc-package-json-missing-version', { packageJsonFile: packageJsonFile }); @@ -379,12 +379,19 @@ async function _verifyVersionCompatibility(packageJsonFile, executablePath) { } } -function _verifyVersionNumberCompatibility(actualVersion) { - const versionComponents = actualVersion.split('.').map((item) => { return Number(item); }); +// The agreed contract with the WebLogic Remote Console team is that the +// frontend and backend version numbers . versions must be the +// same. As such, we will ignore the patch level and any qualifiers. +// +function _verifyVersionNumberCompatibility(backendVersion) { + const frontendVersionComponents = + _stripVersionQualifiers(wlRemoteConsoleFrontendVersion).split('.').map((item) => { return Number(item); }); + const backendVersionComponents = + _stripVersionQualifiers(backendVersion).split('.').map((item) => { return Number(item); }); let versionIsCompatible = true; - for (let i = 0; i < 3; i++) { - if (versionComponents[i] < MIN_VERSION_COMPONENTS[i]) { + for (let i = 0; i < 2; i++) { + if (backendVersionComponents[i] !== frontendVersionComponents[i]) { versionIsCompatible = false; break; } @@ -392,6 +399,10 @@ function _verifyVersionNumberCompatibility(actualVersion) { return versionIsCompatible; } +function _stripVersionQualifiers(version) { + return version.split('-')[0]; +} + async function _getLocationFromPreferencesFile() { const autoPrefsLocation = path.join(app.getPath('appData'), 'weblogic-remote-console', 'auto-prefs.json'); diff --git a/electron/app/locales/en/electron.json b/electron/app/locales/en/electron.json index 4d068d3db..04fb31738 100644 --- a/electron/app/locales/en/electron.json +++ b/electron/app/locales/en/electron.json @@ -384,7 +384,7 @@ "wrc-package-json-missing-version": "Unable to determine the WebLogic Remote Console version because the {{packageJsonFile}} file was missing the version element.", "wrc-package-json-existence-check-failed": "Unable to determine the WebLogic Remote Console version because the existence check for {{packageJsonFile}} failed: {{error}}.", "wrc-app-image-file-version-no-match": "Unable to determine the WebLogic Remote Console version because the location {{rcHome}} AppImage file name {{filename}} does not match the expected filename pattern needed to extract the version number.", - "wrc-version-incompatible-message": "The WebLogic Remote Console version {{rcVersion}} does not meet the minimum version requirement of {{minVersion}}.", + "wrc-version-incompatible-message": "The installed WebLogic Remote Console version {{backendVersion}} is not compatible with the WebLogic Kubernetes Toolkit UI embedded Model Design view component version {{frontendVersion}} because the major and minor versions do not match.", "wrc-version-verification-failed": "Unable to start the WebLogic Remote Console backend because an error occurred while trying to determine the version compatibility: {{error}}", "wrc-home-not-exist": "Unable to start the WebLogic Remote Console backend because the configured location {{rcHome}} does not exist." } diff --git a/webui/scripts/hooks/after_build.js b/webui/scripts/hooks/after_build.js index e86910170..af1118f7a 100644 --- a/webui/scripts/hooks/after_build.js +++ b/webui/scripts/hooks/after_build.js @@ -15,6 +15,10 @@ const path = require('path'); const purgeLocations = [ path.normalize(path.join(__dirname, '..', '..', 'web', 'test')) ]; + +const webuiJsonDirectory = path.normalize(path.join(__dirname, '..', '..', 'web')); +const webuiJsonFile = path.join(webuiJsonDirectory, 'webui.json'); + const sourceDirectories = [ path.normalize(path.join(__dirname, '..', '..', 'web')) // path.normalize(path.join(__dirname, '..', '..', 'staged-themes')) @@ -31,6 +35,11 @@ module.exports = function (configObj) { } } + // Write the webui.json file that contains data + // that the electron side needs during startup. + // + const webuiJsonCreated = await generateWebuiJsonFile(webuiJsonDirectory); + if (configObj.buildType === 'release') { console.log('Consolidating files for building the release'); for (const sourceDirectory of sourceDirectories) { @@ -39,7 +48,14 @@ module.exports = function (configObj) { await copyDirectoryRecursively(sourceDirectory, targetDirectory); } } + } else { + if (webuiJsonCreated) { + await copyFileToDirectory(webuiJsonFile, targetDirectory); + } } + + + resolve(configObj); }); }; @@ -85,3 +101,37 @@ async function isDirectory(path) { return !result ? result: result.isDirectory(); } + +async function generateWebuiJsonFile() { + const contents = { + // This default value should never be required once the npm dependency actually exists. + wlRemoteConsoleFrontendVersion: getRemoteConsoleFrontendVersion() || '2.3.0', + }; + + if (!fs.existsSync(targetDirectory)) { + await mkdir(targetDirectory); + } + + return new Promise((resolve, reject) => { + fsPromises.writeFile(webuiJsonFile, JSON.stringify(contents, null, 2), { + encoding: 'utf8', + mode: 0o644 + }).then(() => { + resolve(true) + }).catch(err => { + console.error(`Failed to write ${webuiJsonFile} file: ${err}`); + resolve(false); + }); + }); +} + +function getRemoteConsoleFrontendVersion() { + let version; + try { + const packageLock = require('../../package-lock.json'); + version = packageLock?.packages?.['node_modules/@oracle/wrc-jet-pack']?.version; + } catch { + // fall through to return undefined... + } + return version; +} From 3b284aa23f619c7ff7791b140ef9d56480f7c01d Mon Sep 17 00:00:00 2001 From: Robert Patrick Date: Fri, 4 Mar 2022 17:15:50 -0600 Subject: [PATCH 2/2] updating error message payload --- electron/app/js/wlRemoteConsoleUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electron/app/js/wlRemoteConsoleUtils.js b/electron/app/js/wlRemoteConsoleUtils.js index 154495ea4..fd1363ca9 100644 --- a/electron/app/js/wlRemoteConsoleUtils.js +++ b/electron/app/js/wlRemoteConsoleUtils.js @@ -96,7 +96,7 @@ async function setWebLogicRemoteConsoleHomeAndStart(currentWindow, rcHome) { startWebLogicRemoteConsoleBackend(currentWindow, true).then(() => resolve() ); } else { const message = i18n.t('wrc-version-incompatible-message', - { rcVersion: isCompatibleResult['version'], minVersion: wlRemoteConsoleFrontendVersion }); + { backendVersion: isCompatibleResult['version'], frontendVersion: wlRemoteConsoleFrontendVersion }); dialog.showErrorBox(title, message); return resolve(); }