Skip to content

Commit 47b8d59

Browse files
updating Remote Console version compatibility check logic (#110)
* updating Remote Console version compatibility check logic * updating error message payload
1 parent be3716f commit 47b8d59

File tree

4 files changed

+72
-10
lines changed

4 files changed

+72
-10
lines changed

electron/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/node_modules
22
/app/web
33
/app/staged-themes
4+
/app/webui.json
45
/wktui.log
56
/wktui-*.log
67
/.docker

electron/app/js/wlRemoteConsoleUtils.js

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@ const { getLogger } = require('./wktLogging');
1818
const osUtils = require('./osUtils');
1919
const { sendToWindow } = require('./windowUtils');
2020
const { spawnDaemonChildProcess } = require('./childProcessExecutor');
21+
const { wlRemoteConsoleFrontendVersion } = require('../webui.json');
2122

22-
// TODO - Change this to the correct version once the RC version changes to 2.3.0...
23-
const MIN_VERSION = '2.2.0';
24-
const MIN_VERSION_COMPONENTS = MIN_VERSION.split('.').map((item) => { return Number(item); });
2523
let _wlRemoteConsoleChildProcess;
2624

2725

@@ -98,7 +96,7 @@ async function setWebLogicRemoteConsoleHomeAndStart(currentWindow, rcHome) {
9896
startWebLogicRemoteConsoleBackend(currentWindow, true).then(() => resolve() );
9997
} else {
10098
const message = i18n.t('wrc-version-incompatible-message',
101-
{ rcVersion: isCompatibleResult['version'], minVersion: MIN_VERSION });
99+
{ backendVersion: isCompatibleResult['version'], frontendVersion: wlRemoteConsoleFrontendVersion });
102100
dialog.showErrorBox(title, message);
103101
return resolve();
104102
}
@@ -167,7 +165,7 @@ async function _getWebLogicRemoteConsoleHome(skipVersionCheck = false) {
167165
resolve(rcHome);
168166
} else {
169167
const message = i18n.t('wrc-version-incompatible-message',
170-
{ rcVersion: isCompatibleResult['version'], minVersion: MIN_VERSION });
168+
{ backendVersion: isCompatibleResult['version'], frontendVersion: wlRemoteConsoleFrontendVersion });
171169
reject(new Error(message));
172170
}
173171
}).catch(err => reject(err));
@@ -344,6 +342,8 @@ async function _verifyVersionCompatibility(packageJsonFile, executablePath) {
344342
if (packageJson.version) {
345343
result['version'] = packageJson.version;
346344
result['isCompatible'] = _verifyVersionNumberCompatibility(packageJson.version);
345+
getLogger().debug('Remote Console Compatibility check found wrc-jet-pack %s and backend version %s to %s compatible.',
346+
wlRemoteConsoleFrontendVersion, packageJson.version, result['isCompatible'] ? 'be' : 'not be');
347347
resolve(result);
348348
} else {
349349
const message = i18n.t('wrc-package-json-missing-version', { packageJsonFile: packageJsonFile });
@@ -379,19 +379,30 @@ async function _verifyVersionCompatibility(packageJsonFile, executablePath) {
379379
}
380380
}
381381

382-
function _verifyVersionNumberCompatibility(actualVersion) {
383-
const versionComponents = actualVersion.split('.').map((item) => { return Number(item); });
382+
// The agreed contract with the WebLogic Remote Console team is that the
383+
// frontend and backend version numbers <major>.<minor> versions must be the
384+
// same. As such, we will ignore the patch level and any qualifiers.
385+
//
386+
function _verifyVersionNumberCompatibility(backendVersion) {
387+
const frontendVersionComponents =
388+
_stripVersionQualifiers(wlRemoteConsoleFrontendVersion).split('.').map((item) => { return Number(item); });
389+
const backendVersionComponents =
390+
_stripVersionQualifiers(backendVersion).split('.').map((item) => { return Number(item); });
384391

385392
let versionIsCompatible = true;
386-
for (let i = 0; i < 3; i++) {
387-
if (versionComponents[i] < MIN_VERSION_COMPONENTS[i]) {
393+
for (let i = 0; i < 2; i++) {
394+
if (backendVersionComponents[i] !== frontendVersionComponents[i]) {
388395
versionIsCompatible = false;
389396
break;
390397
}
391398
}
392399
return versionIsCompatible;
393400
}
394401

402+
function _stripVersionQualifiers(version) {
403+
return version.split('-')[0];
404+
}
405+
395406
async function _getLocationFromPreferencesFile() {
396407
const autoPrefsLocation = path.join(app.getPath('appData'), 'weblogic-remote-console', 'auto-prefs.json');
397408

electron/app/locales/en/electron.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@
384384
"wrc-package-json-missing-version": "Unable to determine the WebLogic Remote Console version because the {{packageJsonFile}} file was missing the version element.",
385385
"wrc-package-json-existence-check-failed": "Unable to determine the WebLogic Remote Console version because the existence check for {{packageJsonFile}} failed: {{error}}.",
386386
"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.",
387-
"wrc-version-incompatible-message": "The WebLogic Remote Console version {{rcVersion}} does not meet the minimum version requirement of {{minVersion}}.",
387+
"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.",
388388
"wrc-version-verification-failed": "Unable to start the WebLogic Remote Console backend because an error occurred while trying to determine the version compatibility: {{error}}",
389389
"wrc-home-not-exist": "Unable to start the WebLogic Remote Console backend because the configured location {{rcHome}} does not exist."
390390
}

webui/scripts/hooks/after_build.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ const path = require('path');
1515
const purgeLocations = [
1616
path.normalize(path.join(__dirname, '..', '..', 'web', 'test'))
1717
];
18+
19+
const webuiJsonDirectory = path.normalize(path.join(__dirname, '..', '..', 'web'));
20+
const webuiJsonFile = path.join(webuiJsonDirectory, 'webui.json');
21+
1822
const sourceDirectories = [
1923
path.normalize(path.join(__dirname, '..', '..', 'web'))
2024
// path.normalize(path.join(__dirname, '..', '..', 'staged-themes'))
@@ -31,6 +35,11 @@ module.exports = function (configObj) {
3135
}
3236
}
3337

38+
// Write the webui.json file that contains data
39+
// that the electron side needs during startup.
40+
//
41+
const webuiJsonCreated = await generateWebuiJsonFile(webuiJsonDirectory);
42+
3443
if (configObj.buildType === 'release') {
3544
console.log('Consolidating files for building the release');
3645
for (const sourceDirectory of sourceDirectories) {
@@ -39,7 +48,14 @@ module.exports = function (configObj) {
3948
await copyDirectoryRecursively(sourceDirectory, targetDirectory);
4049
}
4150
}
51+
} else {
52+
if (webuiJsonCreated) {
53+
await copyFileToDirectory(webuiJsonFile, targetDirectory);
54+
}
4255
}
56+
57+
58+
4359
resolve(configObj);
4460
});
4561
};
@@ -85,3 +101,37 @@ async function isDirectory(path) {
85101

86102
return !result ? result: result.isDirectory();
87103
}
104+
105+
async function generateWebuiJsonFile() {
106+
const contents = {
107+
// This default value should never be required once the npm dependency actually exists.
108+
wlRemoteConsoleFrontendVersion: getRemoteConsoleFrontendVersion() || '2.3.0',
109+
};
110+
111+
if (!fs.existsSync(targetDirectory)) {
112+
await mkdir(targetDirectory);
113+
}
114+
115+
return new Promise((resolve, reject) => {
116+
fsPromises.writeFile(webuiJsonFile, JSON.stringify(contents, null, 2), {
117+
encoding: 'utf8',
118+
mode: 0o644
119+
}).then(() => {
120+
resolve(true)
121+
}).catch(err => {
122+
console.error(`Failed to write ${webuiJsonFile} file: ${err}`);
123+
resolve(false);
124+
});
125+
});
126+
}
127+
128+
function getRemoteConsoleFrontendVersion() {
129+
let version;
130+
try {
131+
const packageLock = require('../../package-lock.json');
132+
version = packageLock?.packages?.['node_modules/@oracle/wrc-jet-pack']?.version;
133+
} catch {
134+
// fall through to return undefined...
135+
}
136+
return version;
137+
}

0 commit comments

Comments
 (0)