From def9e8c5c81bcdd2b5c00896576e426e82d8c35f Mon Sep 17 00:00:00 2001 From: HarithaVattikuti <73516759+HarithaVattikuti@users.noreply.github.com> Date: Tue, 30 Jan 2024 21:33:12 -0600 Subject: [PATCH 1/2] testarm64 --- __tests__/main.test.ts | 9 +++++++ __tests__/official-installer.test.ts | 4 +++ dist/cache-save/index.js | 4 ++- dist/setup/index.js | 36 +++++++++++++++++++++----- src/distributions/base-distribution.ts | 31 ++++++++++++++++++---- src/util.ts | 5 +++- 6 files changed, 76 insertions(+), 13 deletions(-) diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index e54e5ea90..041191104 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -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,7 @@ describe('main tests', () => { let startGroupSpy: jest.SpyInstance; let endGroupSpy: jest.SpyInstance; + let whichSpy: jest.SpyInstance; let getExecOutputSpy: jest.SpyInstance; let getNodeVersionFromFileSpy: jest.SpyInstance; @@ -55,6 +57,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 +144,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']); @@ -270,3 +278,4 @@ describe('main tests', () => { }); }); }); + diff --git a/__tests__/official-installer.test.ts b/__tests__/official-installer.test.ts index 2d36c19c7..21579a3a4 100644 --- a/__tests__/official-installer.test.ts +++ b/__tests__/official-installer.test.ts @@ -249,6 +249,10 @@ describe('setup-node', () => { exSpy.mockImplementation(async () => '/some/other/temp/path'); cacheSpy.mockImplementation(async () => toolPath); + whichSpy.mockImplementation(cmd => { + return `some/${cmd}/path`; + }); + await main.run(); const expPath = path.join(toolPath, 'bin'); diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js index 35d549498..3ced1ad3f 100644 --- a/dist/cache-save/index.js +++ b/dist/cache-save/index.js @@ -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); diff --git a/dist/setup/index.js b/dist/setup/index.js index 2d455bc50..c1b5c5504 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -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}'`); @@ -93784,6 +93806,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) { @@ -93835,7 +93858,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); diff --git a/src/distributions/base-distribution.ts b/src/distributions/base-distribution.ts index edac6b9b1..8724662b3 100644 --- a/src/distributions/base-distribution.ts +++ b/src/distributions/base-distribution.ts @@ -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}'`); @@ -293,3 +313,4 @@ export default abstract class BaseDistribution { } } } + diff --git a/src/util.ts b/src/util.ts index cc6ac3107..83f5f3169 100644 --- a/src/util.ts +++ b/src/util.ts @@ -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'; @@ -63,7 +64,8 @@ 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}; }); @@ -105,3 +107,4 @@ export const unique = () => { return true; }; }; + From e349d6844e7f84ad107733eb720aa4ea7bab1ca9 Mon Sep 17 00:00:00 2001 From: HarithaVattikuti <73516759+HarithaVattikuti@users.noreply.github.com> Date: Tue, 30 Jan 2024 21:46:24 -0600 Subject: [PATCH 2/2] format --- __tests__/main.test.ts | 3 +-- __tests__/official-installer.test.ts | 2 +- src/distributions/base-distribution.ts | 1 - src/util.ts | 1 - 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index 041191104..0df51cf33 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -147,7 +147,7 @@ describe('main tests', () => { whichSpy.mockImplementation(cmd => { return `some/${cmd}/path`; }); - + await util.printEnvDetailsAndSetOutput(); expect(setOutputSpy).toHaveBeenCalledWith('node-version', obj['node']); @@ -278,4 +278,3 @@ describe('main tests', () => { }); }); }); - diff --git a/__tests__/official-installer.test.ts b/__tests__/official-installer.test.ts index 21579a3a4..a0bea902d 100644 --- a/__tests__/official-installer.test.ts +++ b/__tests__/official-installer.test.ts @@ -252,7 +252,7 @@ describe('setup-node', () => { whichSpy.mockImplementation(cmd => { return `some/${cmd}/path`; }); - + await main.run(); const expPath = path.join(toolPath, 'bin'); diff --git a/src/distributions/base-distribution.ts b/src/distributions/base-distribution.ts index 8724662b3..cf5bb5449 100644 --- a/src/distributions/base-distribution.ts +++ b/src/distributions/base-distribution.ts @@ -313,4 +313,3 @@ export default abstract class BaseDistribution { } } } - diff --git a/src/util.ts b/src/util.ts index 83f5f3169..0b9d3e4b8 100644 --- a/src/util.ts +++ b/src/util.ts @@ -107,4 +107,3 @@ export const unique = () => { return true; }; }; -