mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
chore(NA): bump node into v20 (#173461)
Closes https://github.com/elastic/kibana/issues/173334 This is a reattempt of doing what was planned on https://github.com/elastic/kibana/pull/162696 after solving the bottlenecks we discovered previously. --------- Co-authored-by: Jonathan Budzenski <jon@elastic.co>
This commit is contained in:
parent
ce71d12d32
commit
c6f9d9881e
29 changed files with 98 additions and 114 deletions
|
@ -88,7 +88,7 @@ steps:
|
|||
- exit_status: -1
|
||||
agents:
|
||||
queue: n2-2
|
||||
timeout_in_minutes: 30
|
||||
timeout_in_minutes: 60
|
||||
if: "build.env('RELEASE_BUILD') == null || build.env('RELEASE_BUILD') == '' || build.env('RELEASE_BUILD') == 'false'"
|
||||
retry:
|
||||
automatic:
|
||||
|
|
|
@ -1 +1 @@
|
|||
18.18.2
|
||||
20.10.0
|
||||
|
|
2
.nvmrc
2
.nvmrc
|
@ -1 +1 @@
|
|||
18.18.2
|
||||
20.10.0
|
||||
|
|
|
@ -22,13 +22,13 @@ load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "yarn_install
|
|||
# Setup the Node.js toolchain for the architectures we want to support
|
||||
node_repositories(
|
||||
node_repositories = {
|
||||
"18.18.2-darwin_amd64": ("node-v18.18.2-darwin-x64.tar.gz", "node-v18.18.2-darwin-x64", "5bb8da908ed590e256a69bf2862238c8a67bc4600119f2f7721ca18a7c810c0f"),
|
||||
"18.18.2-darwin_arm64": ("node-v18.18.2-darwin-arm64.tar.gz", "node-v18.18.2-darwin-arm64", "9f982cc91b28778dd8638e4f94563b0c2a1da7aba62beb72bd427721035ab553"),
|
||||
"18.18.2-linux_arm64": ("node-v18.18.2-linux-arm64.tar.xz", "node-v18.18.2-linux-arm64", "8a5a03f6a742159c9aa0ae3a99b368cd938cf62f3a5522a2e5acbe6313710efe"),
|
||||
"18.18.2-linux_amd64": ("node-v18.18.2-linux-x64.tar.xz", "node-v18.18.2-linux-x64", "f7cf590bc7153f3beaa9e1138d00e50d74df223f0bec61f63e7df65f7315b76a"),
|
||||
"18.18.2-windows_amd64": ("node-v18.18.2-win-x64.zip", "node-v18.18.2-win-x64", "3bb0e51e579a41a22b3bf6cb2f3e79c03801aa17acbe0ca00fc555d1282e7acd"),
|
||||
"20.10.0-darwin_amd64": ("node-v20.10.0-darwin-x64.tar.gz", "node-v20.10.0-darwin-x64", "5ff5e8abd3eea6e5f507eb6677554f5b2188eedef654096aa4168a9941e91a32"),
|
||||
"20.10.0-darwin_arm64": ("node-v20.10.0-darwin-arm64.tar.gz", "node-v20.10.0-darwin-arm64", "68b93099451d77aac116cf8fce179cabcf53fec079508dc6b39d3a086fb461a8"),
|
||||
"20.10.0-linux_arm64": ("node-v20.10.0-linux-arm64.tar.xz", "node-v20.10.0-linux-arm64", "a5c22683890d5d244f3afd488ef44e573b5b8287f8911b9a1b061ed3f20a5e6d"),
|
||||
"20.10.0-linux_amd64": ("node-v20.10.0-linux-x64.tar.xz", "node-v20.10.0-linux-x64", "9c0fbc8cc7be9a6543af4b9afb05759c538c0f81015c388d63277b0158507697"),
|
||||
"20.10.0-windows_amd64": ("node-v20.10.0-win-x64.zip", "node-v20.10.0-win-x64", "e5b861814a97e28ae7ac06a34e88fd5e0565b447d270c26e20b5ef60bf0aaaf9"),
|
||||
},
|
||||
node_version = "18.18.2",
|
||||
node_version = "20.10.0",
|
||||
node_urls = [
|
||||
"https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/dist/v{version}/{filename}",
|
||||
],
|
||||
|
|
|
@ -74,12 +74,12 @@
|
|||
"url": "https://github.com/elastic/kibana.git"
|
||||
},
|
||||
"engines": {
|
||||
"node": "18.18.2",
|
||||
"node": "20.10.0",
|
||||
"yarn": "^1.22.19"
|
||||
},
|
||||
"resolutions": {
|
||||
"**/@hello-pangea/dnd": "16.2.0",
|
||||
"**/@types/node": "18.18.5",
|
||||
"**/@types/node": "20.10.5",
|
||||
"**/@typescript-eslint/utils": "5.62.0",
|
||||
"**/chokidar": "^3.5.3",
|
||||
"**/globule/minimatch": "^3.1.2",
|
||||
|
@ -1413,7 +1413,7 @@
|
|||
"@types/multistream": "^4.1.0",
|
||||
"@types/mustache": "^0.8.31",
|
||||
"@types/nock": "^10.0.3",
|
||||
"@types/node": "18.18.5",
|
||||
"@types/node": "20.10.5",
|
||||
"@types/node-fetch": "2.6.4",
|
||||
"@types/node-forge": "^1.3.10",
|
||||
"@types/nodemailer": "^6.4.0",
|
||||
|
|
|
@ -59,7 +59,7 @@ test('return error when manifest content is not a valid JSON', async () => {
|
|||
});
|
||||
|
||||
await expect(parseManifest(pluginPath, packageInfo)).rejects.toMatchObject({
|
||||
message: `Unexpected token o in JSON at position 1 (invalid-manifest, ${pluginManifestPath})`,
|
||||
message: `Unexpected token 'o', "not-json" is not valid JSON (invalid-manifest, ${pluginManifestPath})`,
|
||||
type: PluginDiscoveryErrorType.InvalidManifest,
|
||||
path: pluginManifestPath,
|
||||
});
|
||||
|
|
|
@ -278,7 +278,7 @@ describe('plugins discovery system', () => {
|
|||
.toPromise();
|
||||
|
||||
expect(errors).toContain(
|
||||
`Error: Unexpected token o in JSON at position 1 (invalid-manifest, ${manifestPath(
|
||||
`Error: Unexpected token 'o', "not-json" is not valid JSON (invalid-manifest, ${manifestPath(
|
||||
'plugin_a'
|
||||
)})`
|
||||
);
|
||||
|
|
|
@ -98,7 +98,7 @@ describe('esArchiver createParseArchiveStreams', () => {
|
|||
] as [Readable, ...Writable[]]);
|
||||
throw new Error('should have failed');
|
||||
} catch (err) {
|
||||
expect(err.message).toEqual(expect.stringContaining('Unexpected number'));
|
||||
expect(err.message).toEqual(`Expected property name or '}' in JSON at position 1`);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -87,11 +87,11 @@ const { ES_KEY_PATH, ES_CERT_PATH } = require('@kbn/dev-utils');
|
|||
}
|
||||
);
|
||||
|
||||
// setup server auto close after 1 second of silence
|
||||
// setup server auto close after 5 second of silence
|
||||
let serverCloseTimer;
|
||||
const delayServerClose = () => {
|
||||
clearTimeout(serverCloseTimer);
|
||||
serverCloseTimer = setTimeout(() => server.close(), 1000);
|
||||
serverCloseTimer = setTimeout(() => server.close(), 5000);
|
||||
};
|
||||
server.on('request', delayServerClose);
|
||||
server.on('listening', delayServerClose);
|
||||
|
|
|
@ -7,8 +7,7 @@
|
|||
*/
|
||||
import mockFs from 'mock-fs';
|
||||
|
||||
import { existsSync } from 'fs';
|
||||
import { stat } from 'fs/promises';
|
||||
import Fsp from 'fs/promises';
|
||||
import { basename } from 'path';
|
||||
|
||||
import {
|
||||
|
@ -115,7 +114,7 @@ const volumeCmdTest = async (volumeCmd: string[]) => {
|
|||
|
||||
// extract only permission from mode
|
||||
// eslint-disable-next-line no-bitwise
|
||||
expect((await stat(serverlessObjectStorePath)).mode & 0o777).toBe(0o777);
|
||||
expect((await Fsp.stat(serverlessObjectStorePath)).mode & 0o777).toBe(0o777);
|
||||
};
|
||||
|
||||
describe('resolveDockerImage()', () => {
|
||||
|
@ -508,7 +507,7 @@ describe('setupServerlessVolumes()', () => {
|
|||
const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath });
|
||||
|
||||
volumeCmdTest(volumeCmd);
|
||||
expect(existsSync(serverlessObjectStorePath)).toBe(true);
|
||||
await expect(Fsp.access(serverlessObjectStorePath)).resolves.not.toThrow();
|
||||
});
|
||||
|
||||
test('should use an existing object store', async () => {
|
||||
|
@ -517,7 +516,9 @@ describe('setupServerlessVolumes()', () => {
|
|||
const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath });
|
||||
|
||||
volumeCmdTest(volumeCmd);
|
||||
expect(existsSync(`${serverlessObjectStorePath}/cluster_state/lease`)).toBe(true);
|
||||
await expect(
|
||||
Fsp.access(`${serverlessObjectStorePath}/cluster_state/lease`)
|
||||
).resolves.not.toThrow();
|
||||
});
|
||||
|
||||
test('should remove an existing object store when clean is passed', async () => {
|
||||
|
@ -526,7 +527,9 @@ describe('setupServerlessVolumes()', () => {
|
|||
const volumeCmd = await setupServerlessVolumes(log, { basePath: baseEsPath, clean: true });
|
||||
|
||||
volumeCmdTest(volumeCmd);
|
||||
expect(existsSync(`${serverlessObjectStorePath}/cluster_state/lease`)).toBe(false);
|
||||
await expect(
|
||||
Fsp.access(`${serverlessObjectStorePath}/cluster_state/lease`)
|
||||
).rejects.toThrowError();
|
||||
});
|
||||
|
||||
test('should add SSL and IDP metadata volumes when ssl and kibanaUrl are passed', async () => {
|
||||
|
|
|
@ -542,12 +542,19 @@ export async function setupServerlessVolumes(log: ToolingLog, options: Serverles
|
|||
log.info(chalk.bold(`Checking for local serverless ES object store at ${objectStorePath}`));
|
||||
log.indent(4);
|
||||
|
||||
if (clean && fs.existsSync(objectStorePath)) {
|
||||
let exists = null;
|
||||
try {
|
||||
await Fsp.access(objectStorePath);
|
||||
exists = true;
|
||||
} catch (e) {
|
||||
exists = false;
|
||||
}
|
||||
if (clean && exists) {
|
||||
log.info('Cleaning existing object store.');
|
||||
await Fsp.rm(objectStorePath, { recursive: true, force: true });
|
||||
}
|
||||
|
||||
if (clean || !fs.existsSync(objectStorePath)) {
|
||||
if (clean || !exists) {
|
||||
await Fsp.mkdir(objectStorePath, { recursive: true }).then(() =>
|
||||
log.info('Created new object store.')
|
||||
);
|
||||
|
|
|
@ -47,8 +47,8 @@ const packages: Package[] = [
|
|||
extractMethod: 'gunzip',
|
||||
archives: {
|
||||
'linux-x64': {
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/linux-x64-108.gz',
|
||||
sha256: '136b6cf61b54bf610071a950400518add65d44a4923f11ef658769df1a037f0b',
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/linux-x64-115.gz',
|
||||
sha256: 'b88183fe7bc8afa260d22cd909f496ab5636aace7075b54ac345d33ea32aedc0',
|
||||
},
|
||||
// Linux ARM builds are currently done manually as Github Actions used in upstream project
|
||||
// do not natively support an Linux ARM target.
|
||||
|
@ -63,20 +63,20 @@ const packages: Package[] = [
|
|||
// * capture the sha256 with: `shasum -a 256 linux-arm64-*`
|
||||
// * upload the `linux-arm64-*.gz` artifact to the `yarn-prebuilt-artifacts` bucket in GCS using the correct version number
|
||||
'linux-arm64': {
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/linux-arm64-108.gz',
|
||||
sha256: '311822ac689bd49a534ecf400b4732a288ad218f711b0e593e41dd3a6b739d97',
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/linux-arm64-115.gz',
|
||||
sha256: '6c04136a6658df3dcc5b8ac0041641c227d232bed385fe55f62c8470f8db041d',
|
||||
},
|
||||
'darwin-x64': {
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/darwin-x64-108.gz',
|
||||
sha256: '215b6ffb1e5d124439a7dbdd09e4ed1263e065839354a6ad67091ce00d14ee9b',
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/darwin-x64-115.gz',
|
||||
sha256: '1e0d79983c94222c414a5410444ec0ccf37614fd0e45187d0f313a19b203702c',
|
||||
},
|
||||
'darwin-arm64': {
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/darwin-arm64-108.gz',
|
||||
sha256: '0a8bc28150c9efd04f3b52ac214cc7898bde1b8e1f8e6900ae711b03665ff657',
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/darwin-arm64-115.gz',
|
||||
sha256: '192c8e036062504b818941989c44ddb799efe0419d039f7089caedb09d49a597',
|
||||
},
|
||||
'win32-x64': {
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/win32-x64-108.gz',
|
||||
sha256: '117872144e4a2bb61611aacc51ac9fd24e494c209cf63366f236099a662316eb',
|
||||
url: 'https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/node-re2/uhop/node-re2/releases/download/1.20.9/win32-x64-115.gz',
|
||||
sha256: '01ae2df89f976f4097e50e121d7ec6ac62ec8050c838107dcfb976d037a60d59',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -744,7 +744,7 @@ describe('createStreamingBatchedFunction()', () => {
|
|||
const [, error1] = await promise1;
|
||||
const [result1] = await promise2;
|
||||
expect(error1).toMatchObject({
|
||||
message: 'Unexpected token N in JSON at position 0',
|
||||
message: `Unexpected token 'N', "Not a JSON\n" is not valid JSON`,
|
||||
code: 'STREAM',
|
||||
});
|
||||
expect(result1).toMatchObject({
|
||||
|
|
|
@ -63,7 +63,7 @@ describe('esdsl', () => {
|
|||
} catch (error) {
|
||||
errorMessage = error.message;
|
||||
}
|
||||
expect(errorMessage).toEqual('Unexpected token i in JSON at position 0');
|
||||
expect(errorMessage).toEqual(`Unexpected token 'i', "invalid json" is not valid JSON`);
|
||||
});
|
||||
|
||||
test('adds filters', async () => {
|
||||
|
|
|
@ -46,6 +46,13 @@ var IGNORE_WARNINGS = [
|
|||
// We need to discard that warning
|
||||
name: 'ProductNotSupportedSecurityError',
|
||||
},
|
||||
// https://github.com/browserify/browserify-rsa/pull/20
|
||||
{
|
||||
name: 'DeprecationWarning',
|
||||
code: 'DEP0170',
|
||||
message:
|
||||
'The URL https://github.com:crypto-browserify/browserify-rsa.git is invalid. Future versions of Node.js will throw an error.',
|
||||
},
|
||||
];
|
||||
|
||||
if (process.noProcessWarnings !== true) {
|
||||
|
|
|
@ -1,46 +0,0 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||
* Side Public License, v 1.
|
||||
*/
|
||||
|
||||
var getopts = require('getopts');
|
||||
var path = require('path');
|
||||
var v8 = require('node:v8');
|
||||
var worker = require('node:worker_threads');
|
||||
|
||||
var execOpts = getopts(process.execArgv);
|
||||
var envOpts = getopts(process.env.NODE_OPTIONS ? process.env.NODE_OPTIONS.split(/\s+/) : []);
|
||||
var diagnosticDir = execOpts['diagnostic-dir'] || envOpts['diagnostic-dir'];
|
||||
var heapSnapshotSignal = execOpts['heapsnapshot-signal'] || envOpts['heapsnapshot-signal'];
|
||||
var heapSnapshotSerial = 0;
|
||||
|
||||
function getHeapSnapshotPath() {
|
||||
var now = new Date();
|
||||
|
||||
var year = now.getFullYear();
|
||||
var month = String(now.getMonth() + 1).padStart(2, '0');
|
||||
var day = String(now.getDate()).padStart(2, '0');
|
||||
var hours = String(now.getHours()).padStart(2, '0');
|
||||
var minutes = String(now.getMinutes()).padStart(2, '0');
|
||||
var seconds = String(now.getSeconds()).padStart(2, '0');
|
||||
|
||||
var date = `${year}${month}${day}`;
|
||||
var time = `${hours}${minutes}${seconds}`;
|
||||
var pid = process.pid;
|
||||
var threadId = worker.threadId;
|
||||
var serial = (++heapSnapshotSerial).toString().padStart(3, '0');
|
||||
|
||||
return path.join(diagnosticDir, `Heap.${date}.${time}.${pid}.${threadId}.${serial}.heapsnapshot`);
|
||||
}
|
||||
|
||||
if (diagnosticDir && heapSnapshotSignal) {
|
||||
process.removeAllListeners(heapSnapshotSignal);
|
||||
|
||||
process.on(heapSnapshotSignal, function () {
|
||||
var heapSnapshotPath = getHeapSnapshotPath();
|
||||
v8.writeHeapSnapshot(heapSnapshotPath);
|
||||
});
|
||||
}
|
|
@ -11,8 +11,6 @@ require('./exit_on_warning');
|
|||
require('./harden');
|
||||
// The following require statements MUST be executed before any others - END
|
||||
|
||||
// @todo Remove when migrated to Node 20 (#162696)
|
||||
require('./heap_snapshot');
|
||||
require('symbol-observable');
|
||||
require('source-map-support').install();
|
||||
require('./node_version_validator');
|
||||
|
|
|
@ -254,7 +254,7 @@ describe('user action migrations', () => {
|
|||
const log = context.log as jest.Mocked<SavedObjectsMigrationLogger>;
|
||||
expect(log.error.mock.calls[0]).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
"Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Unexpected token a in JSON at position 1",
|
||||
"Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Expected property name or '}' in JSON at position 1",
|
||||
Object {
|
||||
"migrations": Object {
|
||||
"userAction": Object {
|
||||
|
@ -448,7 +448,7 @@ describe('user action migrations', () => {
|
|||
const log = context.log as jest.Mocked<SavedObjectsMigrationLogger>;
|
||||
expect(log.error.mock.calls[0]).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
"Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Unexpected token b in JSON at position 1",
|
||||
"Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Expected property name or '}' in JSON at position 1",
|
||||
Object {
|
||||
"migrations": Object {
|
||||
"userAction": Object {
|
||||
|
@ -644,7 +644,7 @@ describe('user action migrations', () => {
|
|||
const log = context.log as jest.Mocked<SavedObjectsMigrationLogger>;
|
||||
expect(log.error.mock.calls[0]).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
"Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Unexpected token e in JSON at position 1",
|
||||
"Failed to migrate user action connector with doc id: 1 version: 8.0.0 error: Unexpected token 'e', \\"new json value\\" is not valid JSON",
|
||||
Object {
|
||||
"migrations": Object {
|
||||
"userAction": Object {
|
||||
|
|
|
@ -404,7 +404,7 @@ describe('DocumentCreationLogic', () => {
|
|||
DocumentCreationLogic.actions.onSubmitJson();
|
||||
|
||||
expect(DocumentCreationLogic.actions.setErrors).toHaveBeenCalledWith([
|
||||
'Unexpected token i in JSON at position 0',
|
||||
`Unexpected token 'i', "invalid JSON" is not valid JSON`,
|
||||
]);
|
||||
expect(DocumentCreationLogic.actions.uploadDocuments).not.toHaveBeenCalled();
|
||||
});
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import mockFs from 'mock-fs';
|
||||
import axios from 'axios';
|
||||
import { createHash } from 'crypto';
|
||||
import { readFileSync } from 'fs';
|
||||
import { readFile } from 'fs/promises';
|
||||
import { resolve as resolvePath } from 'path';
|
||||
import { Readable } from 'stream';
|
||||
import { fetch } from './fetch';
|
||||
|
@ -38,7 +38,7 @@ describe('fetch', () => {
|
|||
test('downloads the url to the path', async () => {
|
||||
await fetch('url', TEMP_FILE);
|
||||
|
||||
expect(readFileSync(TEMP_FILE, 'utf8')).toEqual('foobar');
|
||||
await expect(readFile(TEMP_FILE, 'utf8')).resolves.toBe('foobar');
|
||||
});
|
||||
|
||||
test('returns the sha1 hex hash of the http body', async () => {
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
|
||||
import Axios from 'axios';
|
||||
import { createHash } from 'crypto';
|
||||
import { closeSync, mkdirSync, openSync, writeSync } from 'fs';
|
||||
import { mkdir, open } from 'fs/promises';
|
||||
import { writeSync } from 'fs';
|
||||
import { dirname } from 'path';
|
||||
import { Readable } from 'stream';
|
||||
import { finished } from 'stream/promises';
|
||||
|
@ -21,9 +22,8 @@ export async function fetch(url: string, path: string, logger?: Logger): Promise
|
|||
|
||||
const hash = createHash('sha256');
|
||||
|
||||
mkdirSync(dirname(path), { recursive: true });
|
||||
const handle = openSync(path, 'w');
|
||||
|
||||
await mkdir(dirname(path), { recursive: true });
|
||||
const handle = await open(path, 'w');
|
||||
try {
|
||||
const response = await Axios.request<Readable>({
|
||||
url,
|
||||
|
@ -32,7 +32,7 @@ export async function fetch(url: string, path: string, logger?: Logger): Promise
|
|||
});
|
||||
|
||||
response.data.on('data', (chunk: Buffer) => {
|
||||
writeSync(handle, chunk);
|
||||
writeSync(handle.fd, chunk);
|
||||
hash.update(chunk);
|
||||
});
|
||||
|
||||
|
@ -43,7 +43,7 @@ export async function fetch(url: string, path: string, logger?: Logger): Promise
|
|||
|
||||
throw new Error(`Unable to download ${url}: ${error}`);
|
||||
} finally {
|
||||
closeSync(handle);
|
||||
await handle.close();
|
||||
}
|
||||
|
||||
return hash.digest('hex');
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import path from 'path';
|
||||
import mockFs from 'mock-fs';
|
||||
import { existsSync, readdirSync } from 'fs';
|
||||
import { access, readdir } from 'fs/promises';
|
||||
import { ChromiumArchivePaths, PackageInfo } from '../chromium';
|
||||
import { fetch } from './fetch';
|
||||
import { sha256 } from './checksum';
|
||||
|
@ -55,8 +55,8 @@ describe('ensureDownloaded', () => {
|
|||
|
||||
await download(paths, pkg);
|
||||
|
||||
expect(existsSync(unexpectedPath1)).toBe(false);
|
||||
expect(existsSync(unexpectedPath2)).toBe(false);
|
||||
await expect(access(unexpectedPath1)).rejects.toThrow();
|
||||
await expect(access(unexpectedPath2)).rejects.toThrow();
|
||||
});
|
||||
|
||||
it('should reject when download fails', async () => {
|
||||
|
@ -84,14 +84,14 @@ describe('ensureDownloaded', () => {
|
|||
await download(paths, pkg);
|
||||
|
||||
expect(fetch).not.toHaveBeenCalled();
|
||||
expect(readdirSync(path.resolve(`${paths.archivesPath}/x64`))).toEqual(
|
||||
await expect(readdir(path.resolve(`${paths.archivesPath}/x64`))).resolves.toEqual(
|
||||
expect.arrayContaining([
|
||||
'chrome-mac.zip',
|
||||
'chrome-win.zip',
|
||||
expect.stringMatching(/^chromium-[0-9a-f]{7}-locales-linux_x64\.zip$/),
|
||||
])
|
||||
);
|
||||
expect(readdirSync(path.resolve(`${paths.archivesPath}/arm64`))).toEqual(
|
||||
await expect(readdir(path.resolve(`${paths.archivesPath}/arm64`))).resolves.toEqual(
|
||||
expect.arrayContaining([
|
||||
'chrome-mac.zip',
|
||||
expect.stringMatching(/^chromium-[0-9a-f]{7}-locales-linux_arm64\.zip$/),
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { existsSync } from 'fs';
|
||||
import { access } from 'fs/promises';
|
||||
import del from 'del';
|
||||
import type { Logger } from '@kbn/core/server';
|
||||
import type { ChromiumArchivePaths, PackageInfo } from '../chromium';
|
||||
|
@ -42,7 +42,13 @@ export async function download(
|
|||
const resolvedPath = paths.resolvePath(pkg);
|
||||
const foundChecksum = await sha256(resolvedPath).catch(() => 'MISSING');
|
||||
|
||||
const pathExists = existsSync(resolvedPath);
|
||||
let pathExists = null;
|
||||
try {
|
||||
await access(resolvedPath);
|
||||
pathExists = true;
|
||||
} catch (e) {
|
||||
pathExists = false;
|
||||
}
|
||||
if (pathExists && foundChecksum === archiveChecksum) {
|
||||
logger?.debug(
|
||||
`Browser archive for ${pkg.platform}/${pkg.architecture} already found in ${resolvedPath} with matching checksum.`
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
import mockFs from 'mock-fs';
|
||||
import { readFileSync } from 'fs';
|
||||
import { readFile } from 'fs/promises';
|
||||
import { ExtractError } from './extract_error';
|
||||
import { unzip } from './unzip';
|
||||
|
||||
|
@ -28,7 +28,7 @@ describe('unzip', () => {
|
|||
it('should extract zipped contents', async () => {
|
||||
await unzip('/test.zip', '/output');
|
||||
|
||||
expect(readFileSync('/output/test.txt').toString()).toEqual('test');
|
||||
await expect(readFile('/output/test.txt', 'utf8')).resolves.toBe('test');
|
||||
});
|
||||
|
||||
it('should reject on invalid archive', async () => {
|
||||
|
|
|
@ -12,7 +12,7 @@ describe('checkForParseErrors', function () {
|
|||
it('returns error from bad JSON', function () {
|
||||
const json = '{"foo": {"bar": {"baz": "buzz}}}';
|
||||
const result = checkForParseErrors(json);
|
||||
expect(result.error.message).to.be(`Unexpected end of JSON input`);
|
||||
expect(result.error.message).to.be(`Unterminated string in JSON at position 32`);
|
||||
});
|
||||
|
||||
it('returns parsed value from good JSON', function () {
|
||||
|
|
|
@ -167,7 +167,7 @@ describe('Import rules route', () => {
|
|||
errors: [
|
||||
{
|
||||
error: {
|
||||
message: 'Unexpected token h in JSON at position 1',
|
||||
message: `Unexpected token 'h', "this is not"... is not valid JSON`,
|
||||
status_code: 400,
|
||||
},
|
||||
rule_id: '(unknown id)',
|
||||
|
|
|
@ -234,7 +234,9 @@ describe('create_rules_stream_from_ndjson', () => {
|
|||
type: 'query',
|
||||
immutable: false,
|
||||
});
|
||||
expect(resultOrError[1].message).toEqual('Unexpected token , in JSON at position 1');
|
||||
expect(resultOrError[1].message).toEqual(
|
||||
`Expected property name or '}' in JSON at position 1`
|
||||
);
|
||||
expect(resultOrError[2]).toEqual({
|
||||
rule_id: 'rule-2',
|
||||
output_index: '.siem-signals',
|
||||
|
|
|
@ -282,7 +282,7 @@ describe('handles errors during migrations', () => {
|
|||
migration800(taskInstance, migrationContext);
|
||||
}).toThrowError();
|
||||
expect(migrationContext.log.error).toHaveBeenCalledWith(
|
||||
`savedObject 8.0.0 migration failed for task instance ${taskInstance.id} with error: Unexpected token s in JSON at position 2`,
|
||||
`savedObject 8.0.0 migration failed for task instance ${taskInstance.id} with error: Expected property name or '}' in JSON at position 2`,
|
||||
{
|
||||
migrations: {
|
||||
taskInstanceDocument: {
|
||||
|
|
15
yarn.lock
15
yarn.lock
|
@ -9794,10 +9794,12 @@
|
|||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/node@*", "@types/node@18.18.5", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=18.0.0", "@types/node@^10.1.0", "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0", "@types/node@^18.11.18", "@types/node@^18.17.5":
|
||||
version "18.18.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.5.tgz#afc0fd975df946d6e1add5bbf98264225b212244"
|
||||
integrity sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==
|
||||
"@types/node@*", "@types/node@20.10.5", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=18.0.0", "@types/node@^10.1.0", "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0", "@types/node@^18.11.18", "@types/node@^18.17.5":
|
||||
version "20.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2"
|
||||
integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==
|
||||
dependencies:
|
||||
undici-types "~5.26.4"
|
||||
|
||||
"@types/nodemailer@^6.4.0":
|
||||
version "6.4.0"
|
||||
|
@ -29500,6 +29502,11 @@ unc-path-regex@^0.1.2:
|
|||
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
|
||||
integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
|
||||
|
||||
undici-types@~5.26.4:
|
||||
version "5.26.5"
|
||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
|
||||
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
|
||||
|
||||
undici@^5.21.2, undici@^5.22.1:
|
||||
version "5.26.3"
|
||||
resolved "https://registry.yarnpkg.com/undici/-/undici-5.26.3.tgz#ab3527b3d5bb25b12f898dfd22165d472dd71b79"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue