wazuh-dashboard/scripts/upgrade_chromedriver.js
Miki 1c0ffeeb5b
Add support for Node.js >=14.20.1 <19 (#4071)
* Bump Node.js requirements to 18

Signed-off-by: Miki <miki@amazon.com>

* Replace `lmdb-store` with `lmdb`

Signed-off-by: Miki <miki@amazon.com>
Co-authored-by: Anan Zhuang <ananzh@amazon.com>

* Bump `elastic-apm-node` to the latest minor

Signed-off-by: Miki <miki@amazon.com>

* Replace webpack and plugins with a patched version that uses xxhash64
* Use `xxhash64` as the hashing algorithm of webpack
* Upgrade `globby`
* Remove `fibers`

Signed-off-by: Miki <miki@amazon.com>

* Replace `fs.rmdir` with `fs.rm` in cross-platform tests

Signed-off-by: Miki <miki@amazon.com>

* Increase listener limit

Signed-off-by: Miki <miki@amazon.com>
Co-authored-by: Anan Zhuang <ananzh@amazon.com>

* Add promise-stripping serializer

Signed-off-by: Miki <miki@amazon.com>

* Bump heap for CI

Signed-off-by: Miki <miki@amazon.com>

* Correct use of fs/promises in @osd/pm

Signed-off-by: Miki <miki@amazon.com>

* Use fs/promise in plugin post-install cleanup

Signed-off-by: Miki <miki@amazon.com>

* Set the test server's host to `0.0.0.0`

Signed-off-by: Miki <miki@amazon.com>

* Sync `.node-version` file

Signed-off-by: Miki <miki@amazon.com>

* Support both `isPrimary`, for Node 18, and `isMaster`, for Node 14

Signed-off-by: Miki <miki@amazon.com>

* Add types when using `isDeepStrictEqual`

Signed-off-by: Miki <miki@amazon.com>
Co-authored-by: Anan Zhuang <ananzh@amazon.com>

* Add names to `SchemaError` to log more specific errors

Signed-off-by: Miki <miki@amazon.com>

* Fix failing vega visualization tests outside the CI

Signed-off-by: Miki <miki@amazon.com>

* Fix snapshot of errors thrown for undefined accessors

Signed-off-by: Miki <miki@amazon.com>

* Fix flakiness of log_rotator

Signed-off-by: Miki <miki@amazon.com>

* Fix asynchronous `fs` usafe in plugin discover

Signed-off-by: Miki <miki@amazon.com>

* Fix mocks in @osd/optimizer

Signed-off-by: Miki <miki@amazon.com>

* Fix memory leaks caused by setting states on unloaded components

Signed-off-by: Miki <miki@amazon.com>
Co-authored-by: Anan Zhuang <ananzh@amazon.com>

* Bump Node in Dockerfile

Signed-off-by: Miki <miki@amazon.com>
Co-authored-by: Anan Zhuang <ananzh@amazon.com>

* Remove the response `close` event as an indicator of the requesting finishing

https://github.com/opensearch-project/OpenSearch-Dashboards/issues/3601#issuecomment-1515110477

Signed-off-by: Miki <miki@amazon.com>
Co-authored-by: Anan Zhuang <ananzh@amazon.com>

* [BWC] Timeout after 3 mins of waiting for OSD to be running in tests

Signed-off-by: Miki <miki@amazon.com>

* Make build use the same node version that tests are run against

Signed-off-by: Miki <miki@amazon.com>

* Make Node resolve DNS by IPv4 first
* This is helpful to resolve `locahost` to `127.0.0.1`

Signed-off-by: Miki <miki@amazon.com>

* Standardize patterns used by plugin discovery
* Enhance absolute path serialization on  Windows

Signed-off-by: Miki <amoo_miki@yahoo.com>

* Mock fetch in SenseEditor tests

Signed-off-by: Miki <amoo_miki@yahoo.com>

* Restore node-sass usage to fix build performance

* `sass-loader@10` is the last version that supports webpack@4
* `sass` is extremely slow when using the legacy API (`render`) and to use the "Modern API" (`compileStringAsync`), `sass-loader@13` would be needed.
* The performance of `sass@10` is made acceptable only with `fibers` but that is deprecated and doesn't work on Node 18

Signed-off-by: Anan Zhuang <ananzh@amazon.com>
Signed-off-by: Miki <miki@amazon.com>

* Revert "[CI] setup Chrome and utilize binary path (#3997)"

This reverts commit 0188d052

Signed-off-by: Miki <miki@amazon.com>

* Prevent fast-fail while running functional test in CI

Signed-off-by: Miki <miki@amazon.com>

* Revert "Temporarily hardcode chromedriver to 112.0.0 to enable all ftr tests (#3976)"

This reverts commit 5ea0cbe25223e24badfe27f79813ee313c9af0b0.

Signed-off-by: Miki <miki@amazon.com>

* Save Cypress results artifacts during CI

Signed-off-by: Miki <miki@amazon.com>

* Add missing required dependency on `set-value`

* Also force all to ^4.1.0 due to a vulnerability fixed in 3.1.0.

Signed-off-by: Miki <miki@amazon.com>

* Prevent multiple calls to bootstrap's shutdown

Signed-off-by: Miki <miki@amazon.com>

* Use Node 18.16.0 in distributions

* Bump jest-canvas-mock to fix failing tests
* Extend Node engines versions

Signed-off-by: Miki <miki@amazon.com>

* Normalize test snapshots across Node 14, 16, and 18

Signed-off-by: Miki <miki@amazon.com>

* Update CHANGELOG for Node.js >=14.20.1 <19 support

Signed-off-by: Miki <miki@amazon.com>

---------

Signed-off-by: Miki <miki@amazon.com>
Signed-off-by: Miki <amoo_miki@yahoo.com>
Signed-off-by: Anan Zhuang <ananzh@amazon.com>
Co-authored-by: Anan Zhuang <ananzh@amazon.com>
2023-05-26 11:40:09 -07:00

123 lines
3.4 KiB
JavaScript

/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Upgrades the chromedriver dev-dependency to the one supported by the version of Google Chrome
* installed on the machine.
*
* Usage: node scripts/upgrade_chromedriver.js [--install]
*/
/* eslint no-restricted-syntax: 0 */
const { execSync, spawnSync } = require('child_process');
const { createReadStream, createWriteStream, unlinkSync, renameSync, existsSync } = require('fs');
const { createInterface } = require('readline');
if (!process.argv.includes(__filename)) {
console.error('Usage: node scripts/upgrade_chromedriver.js [--install]');
process.exit(1);
}
const versionCheckCommands = [];
switch (process.platform) {
case 'win32':
versionCheckCommands.push(
'powershell "(Get-Item \\"$Env:Programfiles/Google/Chrome/Application/chrome.exe\\").VersionInfo.FileVersion"'
);
break;
case 'darwin':
versionCheckCommands.push(
'/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --version'
);
break;
default:
versionCheckCommands.push(
...[
'/usr/bin',
'/usr/local/bin',
'/usr/sbin',
'/usr/local/sbin',
'/opt/bin',
'/usr/bin/X11',
'/usr/X11R6/bin',
].flatMap((loc) =>
[
'google-chrome --version',
'google-chrome-stable --version',
'chromium --version',
'chromium-browser --version',
].map((cmd) => `${loc}/${cmd}`)
)
);
}
let versionCheckOutput;
versionCheckCommands.some((cmd) => {
try {
console.log(cmd);
versionCheckOutput = execSync(cmd, { encoding: 'utf8' })?.trim?.();
return true;
} catch (e) {
console.log('Failed to get version using', cmd);
}
});
// Versions 90+
const majorVersion = versionCheckOutput?.match?.(/(?:^|\s)(9\d|\d{3})\./)?.[1];
if (majorVersion) {
if (process.argv.includes('--install')) {
console.log(`Installing chromedriver@^${majorVersion}`);
spawnSync(`yarn add --dev chromedriver@^${majorVersion}`, {
stdio: 'inherit',
cwd: process.cwd(),
shell: true,
});
} else {
console.log(`Upgrading to chromedriver@^${majorVersion}`);
let upgraded = false;
const writeStream = createWriteStream('package.json.upgrading-chromedriver', { flags: 'w' });
const rl = createInterface({
input: createReadStream('package.json'),
crlfDelay: Infinity,
});
rl.on('line', (line) => {
if (line.includes('"chromedriver": "')) {
line = line.replace(
/"chromedriver":\s*"[~^]?\d[\d.]*\d"/,
`"chromedriver": "^${majorVersion}"`
);
upgraded = true;
}
writeStream.write(line + '\n', 'utf8');
});
rl.on('close', () => {
writeStream.end();
if (upgraded) {
// Remove any previous backups
if (existsSync('package.json.bak')) unlinkSync('package.json.bak');
renameSync('package.json', 'package.json.bak');
renameSync('package.json.upgrading-chromedriver', 'package.json');
console.log(`Backed up package.json and updated chromedriver to ${majorVersion}`);
} else {
unlinkSync('package.json.upgrading-chromedriver');
console.error(
`Failed to update chromedriver to ${majorVersion}. Try adding the \`--install\` switch.`
);
}
});
}
} else {
console.debug(versionCheckOutput);
console.error(`Failed to extract the version of the installed Google Chrome.`);
}