diff --git a/dist/setup/index.js b/dist/setup/index.js index d92820713..f153c3c24 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -66577,7 +66577,7 @@ function findRelease(releases, pythonVersion, pypyVersion, architecture) { semver.satisfies(pypyVersionToSemantic(item.pypy_version), pypyVersion); const isArchPresent = item.files && (utils_1.IS_WINDOWS - ? isArchPresentForWindows(item) + ? isArchPresentForWindows(item, architecture) : isArchPresentForMacOrLinux(item, architecture, process.platform)); return isPythonVersionSatisfied && isPyPyVersionSatisfied && isArchPresent; }); @@ -66590,7 +66590,7 @@ function findRelease(releases, pythonVersion, pypyVersion, architecture) { }); const foundRelease = sortedReleases[0]; const foundAsset = utils_1.IS_WINDOWS - ? findAssetForWindows(foundRelease) + ? findAssetForWindows(foundRelease, architecture) : findAssetForMacOrLinux(foundRelease, architecture, process.platform); return { foundAsset, @@ -66613,24 +66613,31 @@ function pypyVersionToSemantic(versionSpec) { return versionSpec.replace(prereleaseVersion, '$1-$2.$3'); } exports.pypyVersionToSemantic = pypyVersionToSemantic; -function isArchPresentForWindows(item) { - return item.files.some((file) => utils_1.WINDOWS_ARCHS.includes(file.arch) && - utils_1.WINDOWS_PLATFORMS.includes(file.platform)); +function isArchPresentForWindows(item, architecture) { + architecture = replaceX32toX86(architecture); + return item.files.some((file) => utils_1.WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture); } exports.isArchPresentForWindows = isArchPresentForWindows; function isArchPresentForMacOrLinux(item, architecture, platform) { return item.files.some((file) => file.arch === architecture && file.platform === platform); } exports.isArchPresentForMacOrLinux = isArchPresentForMacOrLinux; -function findAssetForWindows(releases) { - return releases.files.find((item) => utils_1.WINDOWS_ARCHS.includes(item.arch) && - utils_1.WINDOWS_PLATFORMS.includes(item.platform)); +function findAssetForWindows(releases, architecture) { + architecture = replaceX32toX86(architecture); + return releases.files.find((item) => utils_1.WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture); } exports.findAssetForWindows = findAssetForWindows; function findAssetForMacOrLinux(releases, architecture, platform) { return releases.files.find((item) => item.arch === architecture && item.platform === platform); } exports.findAssetForMacOrLinux = findAssetForMacOrLinux; +function replaceX32toX86(architecture) { + // convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value. + if (architecture === 'x32') { + architecture = 'x86'; + } + return architecture; +} /***/ }), diff --git a/src/install-pypy.ts b/src/install-pypy.ts index 4c49e1150..d8594ba6b 100644 --- a/src/install-pypy.ts +++ b/src/install-pypy.ts @@ -8,7 +8,6 @@ import fs from 'fs'; import { IS_WINDOWS, - WINDOWS_ARCHS, WINDOWS_PLATFORMS, IPyPyManifestRelease, createSymlinkInFolder, @@ -157,7 +156,7 @@ export function findRelease( const isArchPresent = item.files && (IS_WINDOWS - ? isArchPresentForWindows(item) + ? isArchPresentForWindows(item, architecture) : isArchPresentForMacOrLinux(item, architecture, process.platform)); return isPythonVersionSatisfied && isPyPyVersionSatisfied && isArchPresent; }); @@ -181,7 +180,7 @@ export function findRelease( const foundRelease = sortedReleases[0]; const foundAsset = IS_WINDOWS - ? findAssetForWindows(foundRelease) + ? findAssetForWindows(foundRelease, architecture) : findAssetForMacOrLinux(foundRelease, architecture, process.platform); return { @@ -205,11 +204,11 @@ export function pypyVersionToSemantic(versionSpec: string) { return versionSpec.replace(prereleaseVersion, '$1-$2.$3'); } -export function isArchPresentForWindows(item: any) { +export function isArchPresentForWindows(item: any, architecture: string) { + architecture = replaceX32toX86(architecture); return item.files.some( (file: any) => - WINDOWS_ARCHS.includes(file.arch) && - WINDOWS_PLATFORMS.includes(file.platform) + WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture ); } @@ -223,11 +222,11 @@ export function isArchPresentForMacOrLinux( ); } -export function findAssetForWindows(releases: any) { +export function findAssetForWindows(releases: any, architecture: string) { + architecture = replaceX32toX86(architecture); return releases.files.find( (item: any) => - WINDOWS_ARCHS.includes(item.arch) && - WINDOWS_PLATFORMS.includes(item.platform) + WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture ); } @@ -240,3 +239,11 @@ export function findAssetForMacOrLinux( (item: any) => item.arch === architecture && item.platform === platform ); } + +function replaceX32toX86(architecture: string): string { + // convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value. + if (architecture === 'x32') { + architecture = 'x86'; + } + return architecture; +}