@@ -9,7 +9,7 @@ import * as path from 'path';
99import * as semver from 'semver' ;
1010
1111let osPlat : string = os . platform ( ) ;
12- let osArch : string = os . arch ( ) ;
12+ let osArch : string = translateArchToDistUrl ( os . arch ( ) ) ;
1313
1414if ( ! tempDirectory ) {
1515 let baseLocation ;
@@ -86,13 +86,13 @@ async function queryLatestMatch(versionSpec: string): Promise<string> {
8686 let dataFileName : string ;
8787 switch ( osPlat ) {
8888 case 'linux' :
89- dataFileName = ' linux-' + osArch ;
89+ dataFileName = ` linux-${ osArch } ` ;
9090 break ;
9191 case 'darwin' :
92- dataFileName = ' osx-' + osArch + ' -tar' ;
92+ dataFileName = ` osx-${ osArch } -tar` ;
9393 break ;
9494 case 'win32' :
95- dataFileName = ' win-' + osArch + ' -exe' ;
95+ dataFileName = ` win-${ osArch } -exe` ;
9696 break ;
9797 default :
9898 throw new Error ( `Unexpected OS '${ osPlat } '` ) ;
@@ -150,12 +150,11 @@ async function acquireNode(version: string): Promise<string> {
150150 version = semver . clean ( version ) || '' ;
151151 let fileName : string =
152152 osPlat == 'win32'
153- ? ' node-v' + version + ' -win-' + os . arch ( )
154- : ' node-v' + version + '-' + osPlat + '-' + os . arch ( ) ;
153+ ? ` node-v${ version } -win-${ osArch } `
154+ : ` node-v${ version } - ${ osPlat } - ${ osArch } ` ;
155155 let urlFileName : string =
156- osPlat == 'win32' ? fileName + '.7z' : fileName + '.tar.gz' ;
157-
158- let downloadUrl = 'https://nodejs.org/dist/v' + version + '/' + urlFileName ;
156+ osPlat == 'win32' ? `${ fileName } .7z` : `${ fileName } .tar.gz` ;
157+ let downloadUrl = `https://nodejs.org/dist/v${ version } /${ urlFileName } ` ;
159158
160159 let downloadPath : string ;
161160
@@ -210,8 +209,8 @@ async function acquireNodeFromFallbackLocation(
210209 let exeUrl : string ;
211210 let libUrl : string ;
212211 try {
213- exeUrl = `https://nodejs.org/dist/v${ version } /win-${ os . arch ( ) } /node.exe` ;
214- libUrl = `https://nodejs.org/dist/v${ version } /win-${ os . arch ( ) } /node.lib` ;
212+ exeUrl = `https://nodejs.org/dist/v${ version } /win-${ osArch } /node.exe` ;
213+ libUrl = `https://nodejs.org/dist/v${ version } /win-${ osArch } /node.lib` ;
215214
216215 const exePath = await tc . downloadTool ( exeUrl ) ;
217216 await io . cp ( exePath , path . join ( tempDir , 'node.exe' ) ) ;
@@ -232,3 +231,17 @@ async function acquireNodeFromFallbackLocation(
232231 }
233232 return await tc . cacheDir ( tempDir , 'node' , version ) ;
234233}
234+
235+ // os.arch does not always match the relative download url, e.g.
236+ // os.arch == 'arm' != node-v12.13.1-linux-armv7l.tar.gz
237+ // All other currently supported architectures match, e.g.:
238+ // os.arch = arm64 => https://nodejs.org/dist/v{VERSION}/node-v{VERSION}-{OS}-arm64.tar.gz
239+ // os.arch = x64 => https://nodejs.org/dist/v{VERSION}/node-v{VERSION}-{OS}-x64.tar.gz
240+ function translateArchToDistUrl ( arch : string ) : string {
241+ switch ( arch ) {
242+ case 'arm' :
243+ return 'armv7l' ;
244+ default :
245+ return arch ;
246+ }
247+ }
0 commit comments