Add support for arm64 Windows (#927)
Some checks failed
Basic validation / Basic validation (push) Failing after 1s
Check dist / Check dist/ (push) Failing after 1s
CodeQL analysis / CodeQL analysis (push) Failing after 1s
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, ubuntu-latest) (push) Failing after 4s
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, ubuntu-latest) (push) Failing after 4s
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, ubuntu-latest) (push) Failing after 4s
e2e-cache / Test yarn 1 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, ubuntu-latest) (push) Failing after 12s
e2e-cache / Test yarn 1 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, ubuntu-latest) (push) Failing after 11s
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, ubuntu-latest) (push) Failing after 11s
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, ubuntu-latest) (push) Failing after 11s
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, ubuntu-latest) (push) Failing after 11s
e2e-cache / Test yarn subprojects (12) (push) Failing after 12s
e2e-cache / Test yarn subprojects (14) (push) Failing after 12s
e2e-cache / Test yarn subprojects (16) (push) Failing after 12s
e2e-cache / Test yarn subprojects all locally managed (12) (push) Failing after 11s
e2e-cache / Test yarn subprojects all locally managed (14) (push) Failing after 11s
e2e-cache / Test yarn subprojects all locally managed (16) (push) Failing after 11s
e2e-cache / Test yarn subprojects some locally managed (12) (push) Failing after 11s
e2e-cache / Test yarn subprojects some locally managed (14) (push) Failing after 10s
e2e-cache / Test yarn subprojects some locally managed (16) (push) Failing after 12s
Licensed / Licensed (push) Failing after 3s
proxy / test-proxy (push) Failing after 7s
proxy / test-bypass-proxy (push) Failing after 34s
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, ubuntu-latest) (push) Successful in 5m15s
e2e-cache / Test yarn subprojects managed by git (14) (push) Failing after 5m4s
e2e-cache / Test yarn subprojects managed by git (16) (push) Failing after 5m4s
versions / lts-syntax (lts/*, ubuntu-latest) (push) Failing after 26s
versions / lts-syntax (lts/-1, ubuntu-latest) (push) Failing after 27s
versions / lts-syntax (lts/dubnium, ubuntu-latest) (push) Failing after 24s
versions / lts-syntax (lts/erbium, ubuntu-latest) (push) Failing after 23s
versions / lts-syntax (lts/fermium, ubuntu-latest) (push) Failing after 25s
versions / v8-canary-syntax (20.0.0-v8-canary, ubuntu-latest) (push) Successful in 28s
versions / v8-canary-syntax (20.0.0-v8-canary20221101e50e45c9f8, ubuntu-latest) (push) Successful in 28s
versions / v8-canary-syntax (20-v8-canary, ubuntu-latest) (push) Failing after 1m45s
versions / local-cache (12, ubuntu-latest) (push) Successful in 7m28s
versions / nightly-syntax (17-nightly, ubuntu-latest) (push) Successful in 2m45s
versions / local-cache (14, ubuntu-latest) (push) Failing after 7m55s
versions / local-cache (10, ubuntu-latest) (push) Failing after 12m33s
versions / rc-syntax (18.0.0-rc.2, ubuntu-latest) (push) Successful in 27s
versions / nightly-syntax (18.0.0-nightly, ubuntu-latest) (push) Successful in 5m55s
versions / nightly-syntax (16.0.0-nightly20210420a0261d231c, ubuntu-latest) (push) Failing after 7m55s
versions / manifest (12.16.0, ubuntu-latest) (push) Successful in 2m45s
versions / manifest (14.2.0, ubuntu-latest) (push) Successful in 1m49s
versions / manifest (10.15, ubuntu-latest) (push) Successful in 6m1s
e2e-cache / Test yarn subprojects managed by git (12) (push) Failing after 19m20s
versions / rc-syntax (16.0.0-rc.1, ubuntu-latest) (push) Failing after 10m12s
versions / rc-syntax (19.0.0-rc.0, ubuntu-latest) (push) Failing after 7m56s
versions / version-file (.tool-versions, ubuntu-latest) (push) Failing after 3m3s
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, ubuntu-latest) (push) Failing after 25m51s
versions / version-file (.tool-versions-node, ubuntu-latest) (push) Successful in 1m9s
versions / version-file (.nvmrc, ubuntu-latest) (push) Failing after 7m58s
versions / manifest (16.3.0, ubuntu-latest) (push) Failing after 12m33s
versions / check-latest (10, ubuntu-latest) (push) Successful in 13m34s
versions / version-file-volta (ubuntu-latest) (push) Failing after 7m57s
versions / old-versions (ubuntu-latest) (push) Successful in 19s
versions / node-dist (13, ubuntu-latest) (push) Failing after 3m3s
versions / node-latest-aliases (current, ubuntu-latest) (push) Successful in 29s
versions / node-latest-aliases (latest, ubuntu-latest) (push) Successful in 29s
versions / node-latest-aliases (node, ubuntu-latest) (push) Successful in 29s
versions / version-file (package.json, ubuntu-latest) (push) Failing after 10m18s
versions / node-dist (11, ubuntu-latest) (push) Failing after 7m54s
versions / version-file-volta-extends (ubuntu-latest) (push) Failing after 12m31s
versions / check-latest (14, ubuntu-latest) (push) Successful in 23m17s
versions / check-latest (12, ubuntu-latest) (push) Successful in 29m39s
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, ubuntu-latest) (push) Successful in 57m29s
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, macos-latest) (push) Has been cancelled
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, windows-latest) (push) Has been cancelled
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, macos-latest) (push) Has been cancelled
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, windows-latest) (push) Has been cancelled
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, macos-latest) (push) Has been cancelled
e2e-cache / Test npm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, windows-latest) (push) Has been cancelled
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, macos-latest) (push) Has been cancelled
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, windows-latest) (push) Has been cancelled
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, macos-latest) (push) Has been cancelled
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, windows-latest) (push) Has been cancelled
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, macos-latest) (push) Has been cancelled
e2e-cache / Test pnpm (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, windows-latest) (push) Has been cancelled
e2e-cache / Test yarn 1 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, macos-latest) (push) Has been cancelled
e2e-cache / Test yarn 1 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, windows-latest) (push) Has been cancelled
e2e-cache / Test yarn 1 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, macos-latest) (push) Has been cancelled
e2e-cache / Test yarn 1 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, windows-latest) (push) Has been cancelled
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, macos-latest) (push) Has been cancelled
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (12, windows-latest) (push) Has been cancelled
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, macos-latest) (push) Has been cancelled
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (14, windows-latest) (push) Has been cancelled
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, macos-latest) (push) Has been cancelled
e2e-cache / Test yarn 3 (Node ${{ matrix.node-version}}, ${{ matrix.os }}) (16, windows-latest) (push) Has been cancelled
versions / local-cache (10, macos-latest) (push) Has been cancelled
versions / local-cache (10, windows-latest) (push) Has been cancelled
versions / local-cache (12, macos-latest) (push) Has been cancelled
versions / local-cache (12, windows-latest) (push) Has been cancelled
versions / local-cache (14, macos-latest) (push) Has been cancelled
versions / local-cache (14, windows-latest) (push) Has been cancelled
versions / lts-syntax (lts/*, macos-latest) (push) Has been cancelled
versions / lts-syntax (lts/*, windows-latest) (push) Has been cancelled
versions / lts-syntax (lts/-1, macos-latest) (push) Has been cancelled
versions / lts-syntax (lts/-1, windows-latest) (push) Has been cancelled
versions / lts-syntax (lts/dubnium, macos-latest) (push) Has been cancelled
versions / lts-syntax (lts/dubnium, windows-latest) (push) Has been cancelled
versions / lts-syntax (lts/erbium, macos-latest) (push) Has been cancelled
versions / lts-syntax (lts/erbium, windows-latest) (push) Has been cancelled
versions / lts-syntax (lts/fermium, macos-latest) (push) Has been cancelled
versions / lts-syntax (lts/fermium, windows-latest) (push) Has been cancelled
versions / v8-canary-syntax (20-v8-canary, macos-latest) (push) Has been cancelled
versions / v8-canary-syntax (20-v8-canary, windows-latest) (push) Has been cancelled
versions / v8-canary-syntax (20.0.0-v8-canary, macos-latest) (push) Has been cancelled
versions / v8-canary-syntax (20.0.0-v8-canary, windows-latest) (push) Has been cancelled
versions / v8-canary-syntax (20.0.0-v8-canary20221101e50e45c9f8, macos-latest) (push) Has been cancelled
versions / v8-canary-syntax (20.0.0-v8-canary20221101e50e45c9f8, windows-latest) (push) Has been cancelled
versions / nightly-syntax (16.0.0-nightly20210420a0261d231c, macos-latest) (push) Has been cancelled
versions / nightly-syntax (16.0.0-nightly20210420a0261d231c, windows-latest) (push) Has been cancelled
versions / nightly-syntax (17-nightly, macos-latest) (push) Has been cancelled
versions / nightly-syntax (17-nightly, windows-latest) (push) Has been cancelled
versions / nightly-syntax (18.0.0-nightly, macos-latest) (push) Has been cancelled
versions / nightly-syntax (18.0.0-nightly, windows-latest) (push) Has been cancelled
versions / rc-syntax (16.0.0-rc.1, macos-latest) (push) Has been cancelled
versions / rc-syntax (16.0.0-rc.1, windows-latest) (push) Has been cancelled
versions / rc-syntax (18.0.0-rc.2, macos-latest) (push) Has been cancelled
versions / rc-syntax (18.0.0-rc.2, windows-latest) (push) Has been cancelled
versions / rc-syntax (19.0.0-rc.0, macos-latest) (push) Has been cancelled
versions / rc-syntax (19.0.0-rc.0, windows-latest) (push) Has been cancelled
versions / manifest (10.15, macos-latest) (push) Has been cancelled
versions / manifest (10.15, windows-latest) (push) Has been cancelled
versions / manifest (12.16.0, macos-latest) (push) Has been cancelled
versions / manifest (12.16.0, windows-latest) (push) Has been cancelled
versions / manifest (14.2.0, macos-latest) (push) Has been cancelled
versions / manifest (14.2.0, windows-latest) (push) Has been cancelled
versions / manifest (16.3.0, macos-latest) (push) Has been cancelled
versions / manifest (16.3.0, windows-latest) (push) Has been cancelled
versions / check-latest (10, macos-latest) (push) Has been cancelled
versions / check-latest (10, windows-latest) (push) Has been cancelled
versions / check-latest (12, macos-latest) (push) Has been cancelled
versions / check-latest (12, windows-latest) (push) Has been cancelled
versions / check-latest (14, macos-latest) (push) Has been cancelled
versions / check-latest (14, windows-latest) (push) Has been cancelled
versions / version-file (.nvmrc, macos-latest) (push) Has been cancelled
versions / version-file (.nvmrc, windows-latest) (push) Has been cancelled
versions / version-file (.tool-versions, macos-latest) (push) Has been cancelled
versions / version-file (.tool-versions, windows-latest) (push) Has been cancelled
versions / version-file (.tool-versions-node, macos-latest) (push) Has been cancelled
versions / version-file (.tool-versions-node, windows-latest) (push) Has been cancelled
versions / version-file (package.json, macos-latest) (push) Has been cancelled
versions / version-file (package.json, windows-latest) (push) Has been cancelled
versions / version-file-volta (macos-latest) (push) Has been cancelled
versions / version-file-volta (windows-latest) (push) Has been cancelled
versions / version-file-volta-extends (macos-latest) (push) Has been cancelled
versions / version-file-volta-extends (windows-latest) (push) Has been cancelled
versions / node-dist (11, macos-latest) (push) Has been cancelled
versions / node-dist (11, windows-latest) (push) Has been cancelled
versions / node-dist (13, macos-latest) (push) Has been cancelled
versions / node-dist (13, windows-latest) (push) Has been cancelled
versions / old-versions (macos-latest) (push) Has been cancelled
versions / old-versions (windows-latest) (push) Has been cancelled
versions / arch (push) Has been cancelled
versions / node-latest-aliases (current, macos-latest) (push) Has been cancelled
versions / node-latest-aliases (current, windows-latest) (push) Has been cancelled
versions / node-latest-aliases (latest, macos-latest) (push) Has been cancelled
versions / node-latest-aliases (latest, windows-latest) (push) Has been cancelled
versions / node-latest-aliases (node, macos-latest) (push) Has been cancelled
versions / node-latest-aliases (node, windows-latest) (push) Has been cancelled

* add support for arm64 Windows

* revert 7z to exe

* add comment

---------

Co-authored-by: aparnajyothi-y <147696841+aparnajyothi-y@users.noreply.github.com>
This commit is contained in:
Dmitry Shibanov 2024-02-07 05:42:16 +01:00 committed by GitHub
parent d86ebcd40b
commit 60edb5dd54
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 75 additions and 14 deletions

View File

@ -2,6 +2,7 @@ import * as core from '@actions/core';
import * as exec from '@actions/exec';
import * as tc from '@actions/tool-cache';
import * as cache from '@actions/cache';
import * as io from '@actions/io';
import fs from 'fs';
import path from 'path';
@ -24,6 +25,10 @@ describe('main tests', () => {
let startGroupSpy: jest.SpyInstance;
let endGroupSpy: jest.SpyInstance;
let whichSpy: jest.SpyInstance;
let existsSpy: jest.SpyInstance;
let getExecOutputSpy: jest.SpyInstance;
let getNodeVersionFromFileSpy: jest.SpyInstance;
@ -55,6 +60,8 @@ describe('main tests', () => {
inSpy = jest.spyOn(core, 'getInput');
inSpy.mockImplementation(name => inputs[name]);
whichSpy = jest.spyOn(io, 'which');
getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
findSpy = jest.spyOn(tc, 'find');
@ -140,6 +147,10 @@ describe('main tests', () => {
return {stdout: obj[command], stderr: '', exitCode: 0};
});
whichSpy.mockImplementation(cmd => {
return `some/${cmd}/path`;
});
await util.printEnvDetailsAndSetOutput();
expect(setOutputSpy).toHaveBeenCalledWith('node-version', obj['node']);

View File

@ -248,6 +248,9 @@ describe('setup-node', () => {
const toolPath = path.normalize('/cache/node/12.16.2/x64');
exSpy.mockImplementation(async () => '/some/other/temp/path');
cacheSpy.mockImplementation(async () => toolPath);
whichSpy.mockImplementation(cmd => {
return `some/${cmd}/path`;
});
await main.run();

View File

@ -83336,6 +83336,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.unique = exports.printEnvDetailsAndSetOutput = exports.getNodeVersionFromFile = void 0;
const core = __importStar(__nccwpck_require__(2186));
const exec = __importStar(__nccwpck_require__(1514));
const io = __importStar(__nccwpck_require__(7436));
const fs_1 = __importDefault(__nccwpck_require__(7147));
const path_1 = __importDefault(__nccwpck_require__(1017));
function getNodeVersionFromFile(versionFilePath) {
@ -83387,7 +83388,8 @@ function printEnvDetailsAndSetOutput() {
return __awaiter(this, void 0, void 0, function* () {
core.startGroup('Environment details');
const promises = ['node', 'npm', 'yarn'].map((tool) => __awaiter(this, void 0, void 0, function* () {
const output = yield getToolVersion(tool, ['--version']);
const pathTool = yield io.which(tool, false);
const output = pathTool ? yield getToolVersion(tool, ['--version']) : '';
return { tool, output };
}));
const tools = yield Promise.all(promises);

36
dist/setup/index.js vendored
View File

@ -93110,7 +93110,11 @@ class BaseDistribution {
const fileName = this.osPlat == 'win32'
? `node-v${version}-win-${osArch}`
: `node-v${version}-${this.osPlat}-${osArch}`;
const urlFileName = this.osPlat == 'win32' ? `${fileName}.7z` : `${fileName}.tar.gz`;
const urlFileName = this.osPlat == 'win32'
? this.nodeInfo.arch === 'arm64'
? `${fileName}.zip`
: `${fileName}.7z`
: `${fileName}.tar.gz`;
const initialUrl = this.getDistributionUrl();
const url = `${initialUrl}/v${version}/${urlFileName}`;
return {
@ -93194,10 +93198,23 @@ class BaseDistribution {
let extPath;
info = info || {}; // satisfy compiler, never null when reaches here
if (this.osPlat == 'win32') {
const _7zPath = path.join(__dirname, '../..', 'externals', '7zr.exe');
extPath = yield tc.extract7z(downloadPath, undefined, _7zPath);
const extension = this.nodeInfo.arch === 'arm64' ? '.zip' : '.7z';
// Rename archive to add extension because after downloading
// archive does not contain extension type and it leads to some issues
// on Windows runners without PowerShell Core.
//
// For default PowerShell Windows it should contain extension type to unpack it.
if (extension === '.zip') {
const renamedArchive = `${downloadPath}.zip`;
fs_1.default.renameSync(downloadPath, renamedArchive);
extPath = yield tc.extractZip(renamedArchive);
}
else {
const _7zPath = path.join(__dirname, '../..', 'externals', '7zr.exe');
extPath = yield tc.extract7z(downloadPath, undefined, _7zPath);
}
// 7z extracts to folder matching file name
const nestedPath = path.join(extPath, path.basename(info.fileName, '.7z'));
const nestedPath = path.join(extPath, path.basename(info.fileName, extension));
if (fs_1.default.existsSync(nestedPath)) {
extPath = nestedPath;
}
@ -93229,7 +93246,12 @@ class BaseDistribution {
dataFileName = `osx-${osArch}-tar`;
break;
case 'win32':
dataFileName = `win-${osArch}-exe`;
if (this.nodeInfo.arch === 'arm64') {
dataFileName = `win-${osArch}-zip`;
}
else {
dataFileName = `win-${osArch}-exe`;
}
break;
default:
throw new Error(`Unexpected OS '${this.osPlat}'`);
@ -93783,6 +93805,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.unique = exports.printEnvDetailsAndSetOutput = exports.getNodeVersionFromFile = void 0;
const core = __importStar(__nccwpck_require__(2186));
const exec = __importStar(__nccwpck_require__(1514));
const io = __importStar(__nccwpck_require__(7436));
const fs_1 = __importDefault(__nccwpck_require__(7147));
const path_1 = __importDefault(__nccwpck_require__(1017));
function getNodeVersionFromFile(versionFilePath) {
@ -93834,7 +93857,8 @@ function printEnvDetailsAndSetOutput() {
return __awaiter(this, void 0, void 0, function* () {
core.startGroup('Environment details');
const promises = ['node', 'npm', 'yarn'].map((tool) => __awaiter(this, void 0, void 0, function* () {
const output = yield getToolVersion(tool, ['--version']);
const pathTool = yield io.which(tool, false);
const output = pathTool ? yield getToolVersion(tool, ['--version']) : '';
return { tool, output };
}));
const tools = yield Promise.all(promises);

View File

@ -112,7 +112,11 @@ export default abstract class BaseDistribution {
? `node-v${version}-win-${osArch}`
: `node-v${version}-${this.osPlat}-${osArch}`;
const urlFileName: string =
this.osPlat == 'win32' ? `${fileName}.7z` : `${fileName}.tar.gz`;
this.osPlat == 'win32'
? this.nodeInfo.arch === 'arm64'
? `${fileName}.zip`
: `${fileName}.7z`
: `${fileName}.tar.gz`;
const initialUrl = this.getDistributionUrl();
const url = `${initialUrl}/v${version}/${urlFileName}`;
@ -215,12 +219,24 @@ export default abstract class BaseDistribution {
let extPath: string;
info = info || ({} as INodeVersionInfo); // satisfy compiler, never null when reaches here
if (this.osPlat == 'win32') {
const _7zPath = path.join(__dirname, '../..', 'externals', '7zr.exe');
extPath = await tc.extract7z(downloadPath, undefined, _7zPath);
const extension = this.nodeInfo.arch === 'arm64' ? '.zip' : '.7z';
// Rename archive to add extension because after downloading
// archive does not contain extension type and it leads to some issues
// on Windows runners without PowerShell Core.
//
// For default PowerShell Windows it should contain extension type to unpack it.
if (extension === '.zip') {
const renamedArchive = `${downloadPath}.zip`;
fs.renameSync(downloadPath, renamedArchive);
extPath = await tc.extractZip(renamedArchive);
} else {
const _7zPath = path.join(__dirname, '../..', 'externals', '7zr.exe');
extPath = await tc.extract7z(downloadPath, undefined, _7zPath);
}
// 7z extracts to folder matching file name
const nestedPath = path.join(
extPath,
path.basename(info.fileName, '.7z')
path.basename(info.fileName, extension)
);
if (fs.existsSync(nestedPath)) {
extPath = nestedPath;
@ -260,7 +276,11 @@ export default abstract class BaseDistribution {
dataFileName = `osx-${osArch}-tar`;
break;
case 'win32':
dataFileName = `win-${osArch}-exe`;
if (this.nodeInfo.arch === 'arm64') {
dataFileName = `win-${osArch}-zip`;
} else {
dataFileName = `win-${osArch}-exe`;
}
break;
default:
throw new Error(`Unexpected OS '${this.osPlat}'`);

View File

@ -1,5 +1,6 @@
import * as core from '@actions/core';
import * as exec from '@actions/exec';
import * as io from '@actions/io';
import fs from 'fs';
import path from 'path';
@ -61,9 +62,9 @@ export function getNodeVersionFromFile(versionFilePath: string): string | null {
export async function printEnvDetailsAndSetOutput() {
core.startGroup('Environment details');
const promises = ['node', 'npm', 'yarn'].map(async tool => {
const output = await getToolVersion(tool, ['--version']);
const pathTool = await io.which(tool, false);
const output = pathTool ? await getToolVersion(tool, ['--version']) : '';
return {tool, output};
});