From b6651e20e530d6e6b845a9828606779e89f5529c Mon Sep 17 00:00:00 2001 From: David Kale Date: Wed, 20 Nov 2019 15:46:02 -0500 Subject: [PATCH] Merge pull request #88 from actions/arm-installer Get correct url for arm dist --- lib/installer.js | 30 ++++++++++++++++++++---------- src/installer.ts | 35 ++++++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/lib/installer.js b/lib/installer.js index c86924c1..d5406042 100644 --- a/lib/installer.js +++ b/lib/installer.js @@ -25,7 +25,7 @@ const os = __importStar(require("os")); const path = __importStar(require("path")); const semver = __importStar(require("semver")); let osPlat = os.platform(); -let osArch = os.arch(); +let osArch = translateArchToDistUrl(os.arch()); if (!tempDirectory) { let baseLocation; if (process.platform === 'win32') { @@ -90,13 +90,13 @@ function queryLatestMatch(versionSpec) { let dataFileName; switch (osPlat) { case 'linux': - dataFileName = 'linux-' + osArch; + dataFileName = `linux-${osArch}`; break; case 'darwin': - dataFileName = 'osx-' + osArch + '-tar'; + dataFileName = `osx-${osArch}-tar`; break; case 'win32': - dataFileName = 'win-' + osArch + '-exe'; + dataFileName = `win-${osArch}-exe`; break; default: throw new Error(`Unexpected OS '${osPlat}'`); @@ -149,10 +149,10 @@ function acquireNode(version) { // version = semver.clean(version) || ''; let fileName = osPlat == 'win32' - ? 'node-v' + version + '-win-' + os.arch() - : 'node-v' + version + '-' + osPlat + '-' + os.arch(); - let urlFileName = osPlat == 'win32' ? fileName + '.7z' : fileName + '.tar.gz'; - let downloadUrl = 'https://nodejs.org/dist/v' + version + '/' + urlFileName; + ? `node-v${version}-win-${osArch}` + : `node-v${version}-${osPlat}-${osArch}`; + let urlFileName = osPlat == 'win32' ? `${fileName}.7z` : `${fileName}.tar.gz`; + let downloadUrl = `https://nodejs.org/dist/v${version}/${urlFileName}`; let downloadPath; try { downloadPath = yield tc.downloadTool(downloadUrl); @@ -202,8 +202,8 @@ function acquireNodeFromFallbackLocation(version) { let exeUrl; let libUrl; try { - exeUrl = `https://nodejs.org/dist/v${version}/win-${os.arch()}/node.exe`; - libUrl = `https://nodejs.org/dist/v${version}/win-${os.arch()}/node.lib`; + exeUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.lib`; const exePath = yield tc.downloadTool(exeUrl); yield io.cp(exePath, path.join(tempDir, 'node.exe')); const libPath = yield tc.downloadTool(libUrl); @@ -225,3 +225,13 @@ function acquireNodeFromFallbackLocation(version) { return yield tc.cacheDir(tempDir, 'node', version); }); } +// os.arch does not always match the relative download url, e.g. +// os.arch == 'arm' != node-v12.13.1-linux-armv7l.tar.gz +function translateArchToDistUrl(arch) { + switch (arch) { + case 'arm': + return 'armv7l'; + default: + return arch; + } +} diff --git a/src/installer.ts b/src/installer.ts index 0abb1fe0..d1546ffc 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -9,7 +9,7 @@ import * as path from 'path'; import * as semver from 'semver'; let osPlat: string = os.platform(); -let osArch: string = os.arch(); +let osArch: string = translateArchToDistUrl(os.arch()); if (!tempDirectory) { let baseLocation; @@ -86,13 +86,13 @@ async function queryLatestMatch(versionSpec: string): Promise { let dataFileName: string; switch (osPlat) { case 'linux': - dataFileName = 'linux-' + osArch; + dataFileName = `linux-${osArch}`; break; case 'darwin': - dataFileName = 'osx-' + osArch + '-tar'; + dataFileName = `osx-${osArch}-tar`; break; case 'win32': - dataFileName = 'win-' + osArch + '-exe'; + dataFileName = `win-${osArch}-exe`; break; default: throw new Error(`Unexpected OS '${osPlat}'`); @@ -150,12 +150,11 @@ async function acquireNode(version: string): Promise { version = semver.clean(version) || ''; let fileName: string = osPlat == 'win32' - ? 'node-v' + version + '-win-' + os.arch() - : 'node-v' + version + '-' + osPlat + '-' + os.arch(); + ? `node-v${version}-win-${osArch}` + : `node-v${version}-${osPlat}-${osArch}`; let urlFileName: string = - osPlat == 'win32' ? fileName + '.7z' : fileName + '.tar.gz'; - - let downloadUrl = 'https://nodejs.org/dist/v' + version + '/' + urlFileName; + osPlat == 'win32' ? `${fileName}.7z` : `${fileName}.tar.gz`; + let downloadUrl = `https://nodejs.org/dist/v${version}/${urlFileName}`; let downloadPath: string; @@ -210,8 +209,8 @@ async function acquireNodeFromFallbackLocation( let exeUrl: string; let libUrl: string; try { - exeUrl = `https://nodejs.org/dist/v${version}/win-${os.arch()}/node.exe`; - libUrl = `https://nodejs.org/dist/v${version}/win-${os.arch()}/node.lib`; + exeUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.lib`; const exePath = await tc.downloadTool(exeUrl); await io.cp(exePath, path.join(tempDir, 'node.exe')); @@ -232,3 +231,17 @@ async function acquireNodeFromFallbackLocation( } return await tc.cacheDir(tempDir, 'node', version); } + +// os.arch does not always match the relative download url, e.g. +// os.arch == 'arm' != node-v12.13.1-linux-armv7l.tar.gz +// All other currently supported architectures match, e.g.: +// os.arch = arm64 => https://nodejs.org/dist/v{VERSION}/node-v{VERSION}-{OS}-arm64.tar.gz +// os.arch = x64 => https://nodejs.org/dist/v{VERSION}/node-v{VERSION}-{OS}-x64.tar.gz +function translateArchToDistUrl(arch: string): string { + switch (arch) { + case 'arm': + return 'armv7l'; + default: + return arch; + } +}