diff --git a/.changeset/five-ties-add.md b/.changeset/five-ties-add.md new file mode 100644 index 00000000000..adfb5793007 --- /dev/null +++ b/.changeset/five-ties-add.md @@ -0,0 +1,5 @@ +--- +"@pnpm/node.fetcher": patch +--- + +For node version < 16, install x64 build on darwin arm as arm build is not available. diff --git a/packages/node.fetcher/src/getNodeTarball.ts b/packages/node.fetcher/src/getNodeTarball.ts index 9ec31e6de3b..c7a2c552286 100644 --- a/packages/node.fetcher/src/getNodeTarball.ts +++ b/packages/node.fetcher/src/getNodeTarball.ts @@ -1,3 +1,8 @@ +/* + * Copyright 2022 VMware, Inc. + * SPDX-License-Identifier: MIT + */ + import normalizeArch from './normalizeArch' export function getNodeTarball ( @@ -8,8 +13,10 @@ export function getNodeTarball ( ) { const platform = processPlatform === 'win32' ? 'win' : processPlatform const arch = normalizeArch(processPlatform, processArch) + const nodeMajorVersion = +nodeVersion.split('.')[0] + const nodeBinaryArch = (platform === 'darwin' && arch === 'arm64' && (nodeMajorVersion < 16)) ? 'x64' : arch const extension = platform === 'win' ? 'zip' : 'tar.gz' - const pkgName = `node-v${nodeVersion}-${platform}-${arch}` + const pkgName = `node-v${nodeVersion}-${platform}-${nodeBinaryArch}` return { pkgName, tarball: `${nodeMirror}v${nodeVersion}/${pkgName}.${extension}`, diff --git a/packages/node.fetcher/test/getNodeTarball.test.ts b/packages/node.fetcher/test/getNodeTarball.test.ts index d8aeb678199..155984015b2 100644 --- a/packages/node.fetcher/test/getNodeTarball.test.ts +++ b/packages/node.fetcher/test/getNodeTarball.test.ts @@ -1,3 +1,8 @@ +/* + * Copyright 2022 VMware, Inc. + * SPDX-License-Identifier: MIT + */ + import { getNodeTarball } from '../lib/getNodeTarball' test.each([ @@ -31,6 +36,26 @@ test.each([ tarball: 'https://nodejs.org/download/release/v16.0.0/node-v16.0.0-linux-x64.tar.gz', }, ], + [ + '15.14.0', + 'https://nodejs.org/download/release/', + 'darwin', + 'arm64', + { + pkgName: 'node-v15.14.0-darwin-x64', + tarball: 'https://nodejs.org/download/release/v15.14.0/node-v15.14.0-darwin-x64.tar.gz', + }, + ], + [ + '16.0.0', + 'https://nodejs.org/download/release/', + 'darwin', + 'arm64', + { + pkgName: 'node-v16.0.0-darwin-arm64', + tarball: 'https://nodejs.org/download/release/v16.0.0/node-v16.0.0-darwin-arm64.tar.gz', + }, + ], ])('getNodeTarball', (version, nodeMirrorBaseUrl, platform, arch, tarball) => { expect(getNodeTarball(version, nodeMirrorBaseUrl, platform, arch)).toStrictEqual(tarball) })