onnxruntime/js/web/test/e2e/exports/utils.js
Scott McKay 04ff0ceeed Merge
2025-01-18 11:24:02 +10:00

56 lines
1.7 KiB
JavaScript

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
const path = require('path');
const { spawn } = require('child_process');
const treeKill = require('tree-kill');
async function installOrtPackages(testCaseName, PRESERVE, PACKAGES_TO_INSTALL) {
if (!PRESERVE) {
const wd = path.join(__dirname, 'testcases', testCaseName);
if (PACKAGES_TO_INSTALL.length === 0) {
await runShellCmd('npm ci', { wd });
} else {
await runShellCmd(`npm install ${PACKAGES_TO_INSTALL.map((i) => `"${i}"`).join(' ')}`, { wd });
}
}
}
async function runShellCmd(cmd, { wd = __dirname, event = null, ready = null, ignoreExitCode = false }) {
console.log('===============================================================');
console.log(' Running command in shell:');
console.log(' > ' + cmd);
console.log('===============================================================');
return new Promise((resolve, reject) => {
const childProcess = spawn(cmd, { shell: true, stdio: ['ignore', 'pipe', 'inherit'], cwd: wd });
childProcess.on('close', function (code, signal) {
if (code === 0 || ignoreExitCode) {
resolve();
} else {
reject(`Process exits with code ${code}`);
}
});
childProcess.stdout.on('data', (data) => {
process.stdout.write(data);
if (ready && event && data.toString().includes(ready)) {
event.emit('serverReady');
}
});
if (event) {
event.on('kill', () => {
childProcess.stdout.destroy();
treeKill(childProcess.pid);
console.log('killing process...');
});
}
});
}
module.exports = {
runShellCmd,
installOrtPackages,
};