From 28bb880b4f4b2d6208f3fe11881db410b11b5532 Mon Sep 17 00:00:00 2001 From: mayeut Date: Sun, 19 Jan 2025 11:58:33 +0100 Subject: [PATCH] fix: install PyPy on Linux ARM64 --- dist/setup/index.js | 15 ++++++++++----- src/install-pypy.ts | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index e56f96608..7c6555864 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -91554,28 +91554,33 @@ function pypyVersionToSemantic(versionSpec) { } exports.pypyVersionToSemantic = pypyVersionToSemantic; function isArchPresentForWindows(item, architecture) { - architecture = replaceX32toX86(architecture); + architecture = pypyArchitecture(architecture); return item.files.some((file) => utils_1.WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture); } exports.isArchPresentForWindows = isArchPresentForWindows; function isArchPresentForMacOrLinux(item, architecture, platform) { + architecture = pypyArchitecture(architecture); return item.files.some((file) => file.arch === architecture && file.platform === platform); } exports.isArchPresentForMacOrLinux = isArchPresentForMacOrLinux; function findAssetForWindows(releases, architecture) { - architecture = replaceX32toX86(architecture); + architecture = pypyArchitecture(architecture); return releases.files.find((item) => utils_1.WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture); } exports.findAssetForWindows = findAssetForWindows; function findAssetForMacOrLinux(releases, architecture, platform) { + architecture = pypyArchitecture(architecture); 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') { +function pypyArchitecture(architecture) { + if (utils_1.IS_WINDOWS && architecture === 'x32') { + // convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value. architecture = 'x86'; } + else if (utils_1.IS_LINUX && architecture === 'arm64') { + architecture = 'aarch64'; + } return architecture; } diff --git a/src/install-pypy.ts b/src/install-pypy.ts index 759221104..405f9f60c 100644 --- a/src/install-pypy.ts +++ b/src/install-pypy.ts @@ -8,6 +8,7 @@ import * as exec from '@actions/exec'; import fs from 'fs'; import { + IS_LINUX, IS_WINDOWS, WINDOWS_PLATFORMS, IPyPyManifestRelease, @@ -246,7 +247,7 @@ export function pypyVersionToSemantic(versionSpec: string) { } export function isArchPresentForWindows(item: any, architecture: string) { - architecture = replaceX32toX86(architecture); + architecture = pypyArchitecture(architecture); return item.files.some( (file: any) => WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture @@ -258,13 +259,14 @@ export function isArchPresentForMacOrLinux( architecture: string, platform: string ) { + architecture = pypyArchitecture(architecture); return item.files.some( (file: any) => file.arch === architecture && file.platform === platform ); } export function findAssetForWindows(releases: any, architecture: string) { - architecture = replaceX32toX86(architecture); + architecture = pypyArchitecture(architecture); return releases.files.find( (item: any) => WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture @@ -276,15 +278,18 @@ export function findAssetForMacOrLinux( architecture: string, platform: string ) { + architecture = pypyArchitecture(architecture); return releases.files.find( (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') { +function pypyArchitecture(architecture: string): string { + if (IS_WINDOWS && architecture === 'x32') { + // convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value. architecture = 'x86'; + } else if (IS_LINUX && architecture === 'arm64') { + architecture = 'aarch64'; } return architecture; }