mirror of
https://gitea.com/actions/setup-python.git
synced 2025-02-07 18:41:06 +01:00
fix: install PyPy on Linux ARM64 (#1011)
* ci: check non-eol versions of PyPy are available on all runners * fix: install PyPy on Linux ARM64 * ci: remove eol ubuntu-20.04
This commit is contained in:
parent
42375524e2
commit
8039c45ed9
3 changed files with 73 additions and 10 deletions
53
.github/workflows/test-pypy.yml
vendored
53
.github/workflows/test-pypy.yml
vendored
|
@ -69,6 +69,59 @@ jobs:
|
||||||
${EXECUTABLE} --version
|
${EXECUTABLE} --version
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
check-non-eol:
|
||||||
|
name: Check non-eol ${{ matrix.pypy }} on ${{ matrix.os }}
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
- macos-13
|
||||||
|
- macos-14
|
||||||
|
- macos-15
|
||||||
|
- windows-2019
|
||||||
|
- windows-2022
|
||||||
|
- windows-2025
|
||||||
|
- ubuntu-22.04
|
||||||
|
- ubuntu-24.04
|
||||||
|
- ubuntu-22.04-arm
|
||||||
|
- ubuntu-24.04-arm
|
||||||
|
pypy: ['pypy-2.7', 'pypy-3.10']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: setup-python ${{ matrix.pypy }}
|
||||||
|
id: setup-python
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.pypy }}
|
||||||
|
|
||||||
|
- name: Check python-path
|
||||||
|
run: ./__tests__/check-python-path.sh '${{ steps.setup-python.outputs.python-path }}'
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: PyPy and Python version
|
||||||
|
run: python --version
|
||||||
|
|
||||||
|
- name: Run simple code
|
||||||
|
run: python -c 'import math; print(math.factorial(5))'
|
||||||
|
|
||||||
|
- name: Assert PyPy is running
|
||||||
|
run: |
|
||||||
|
import platform
|
||||||
|
assert platform.python_implementation().lower() == "pypy"
|
||||||
|
shell: python
|
||||||
|
|
||||||
|
- name: Assert expected binaries (or symlinks) are present
|
||||||
|
run: |
|
||||||
|
EXECUTABLE=${{ matrix.pypy }}
|
||||||
|
EXECUTABLE=${EXECUTABLE/pypy-/pypy} # remove the first '-' in "pypy-X.Y" -> "pypyX.Y" to match executable name
|
||||||
|
EXECUTABLE=${EXECUTABLE%%-*} # remove any -* suffixe
|
||||||
|
${EXECUTABLE} --version
|
||||||
|
shell: bash
|
||||||
|
|
||||||
setup-pypy-noenv:
|
setup-pypy-noenv:
|
||||||
name: Setup PyPy ${{ matrix.pypy }} ${{ matrix.os }} (noenv)
|
name: Setup PyPy ${{ matrix.pypy }} ${{ matrix.os }} (noenv)
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
15
dist/setup/index.js
vendored
15
dist/setup/index.js
vendored
|
@ -100062,28 +100062,33 @@ function pypyVersionToSemantic(versionSpec) {
|
||||||
}
|
}
|
||||||
exports.pypyVersionToSemantic = pypyVersionToSemantic;
|
exports.pypyVersionToSemantic = pypyVersionToSemantic;
|
||||||
function isArchPresentForWindows(item, architecture) {
|
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);
|
return item.files.some((file) => utils_1.WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture);
|
||||||
}
|
}
|
||||||
exports.isArchPresentForWindows = isArchPresentForWindows;
|
exports.isArchPresentForWindows = isArchPresentForWindows;
|
||||||
function isArchPresentForMacOrLinux(item, architecture, platform) {
|
function isArchPresentForMacOrLinux(item, architecture, platform) {
|
||||||
|
architecture = pypyArchitecture(architecture);
|
||||||
return item.files.some((file) => file.arch === architecture && file.platform === platform);
|
return item.files.some((file) => file.arch === architecture && file.platform === platform);
|
||||||
}
|
}
|
||||||
exports.isArchPresentForMacOrLinux = isArchPresentForMacOrLinux;
|
exports.isArchPresentForMacOrLinux = isArchPresentForMacOrLinux;
|
||||||
function findAssetForWindows(releases, architecture) {
|
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);
|
return releases.files.find((item) => utils_1.WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture);
|
||||||
}
|
}
|
||||||
exports.findAssetForWindows = findAssetForWindows;
|
exports.findAssetForWindows = findAssetForWindows;
|
||||||
function findAssetForMacOrLinux(releases, architecture, platform) {
|
function findAssetForMacOrLinux(releases, architecture, platform) {
|
||||||
|
architecture = pypyArchitecture(architecture);
|
||||||
return releases.files.find((item) => item.arch === architecture && item.platform === platform);
|
return releases.files.find((item) => item.arch === architecture && item.platform === platform);
|
||||||
}
|
}
|
||||||
exports.findAssetForMacOrLinux = findAssetForMacOrLinux;
|
exports.findAssetForMacOrLinux = findAssetForMacOrLinux;
|
||||||
function replaceX32toX86(architecture) {
|
function pypyArchitecture(architecture) {
|
||||||
// convert x32 to x86 because os.arch() returns x32 for 32-bit systems but PyPy releases json has x86 arch value.
|
if (utils_1.IS_WINDOWS && architecture === 'x32') {
|
||||||
if (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';
|
architecture = 'x86';
|
||||||
}
|
}
|
||||||
|
else if (utils_1.IS_LINUX && architecture === 'arm64') {
|
||||||
|
architecture = 'aarch64';
|
||||||
|
}
|
||||||
return architecture;
|
return architecture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import * as exec from '@actions/exec';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
IS_LINUX,
|
||||||
IS_WINDOWS,
|
IS_WINDOWS,
|
||||||
WINDOWS_PLATFORMS,
|
WINDOWS_PLATFORMS,
|
||||||
IPyPyManifestRelease,
|
IPyPyManifestRelease,
|
||||||
|
@ -246,7 +247,7 @@ export function pypyVersionToSemantic(versionSpec: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isArchPresentForWindows(item: any, architecture: string) {
|
export function isArchPresentForWindows(item: any, architecture: string) {
|
||||||
architecture = replaceX32toX86(architecture);
|
architecture = pypyArchitecture(architecture);
|
||||||
return item.files.some(
|
return item.files.some(
|
||||||
(file: any) =>
|
(file: any) =>
|
||||||
WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture
|
WINDOWS_PLATFORMS.includes(file.platform) && file.arch === architecture
|
||||||
|
@ -258,13 +259,14 @@ export function isArchPresentForMacOrLinux(
|
||||||
architecture: string,
|
architecture: string,
|
||||||
platform: string
|
platform: string
|
||||||
) {
|
) {
|
||||||
|
architecture = pypyArchitecture(architecture);
|
||||||
return item.files.some(
|
return item.files.some(
|
||||||
(file: any) => file.arch === architecture && file.platform === platform
|
(file: any) => file.arch === architecture && file.platform === platform
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function findAssetForWindows(releases: any, architecture: string) {
|
export function findAssetForWindows(releases: any, architecture: string) {
|
||||||
architecture = replaceX32toX86(architecture);
|
architecture = pypyArchitecture(architecture);
|
||||||
return releases.files.find(
|
return releases.files.find(
|
||||||
(item: any) =>
|
(item: any) =>
|
||||||
WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture
|
WINDOWS_PLATFORMS.includes(item.platform) && item.arch === architecture
|
||||||
|
@ -276,15 +278,18 @@ export function findAssetForMacOrLinux(
|
||||||
architecture: string,
|
architecture: string,
|
||||||
platform: string
|
platform: string
|
||||||
) {
|
) {
|
||||||
|
architecture = pypyArchitecture(architecture);
|
||||||
return releases.files.find(
|
return releases.files.find(
|
||||||
(item: any) => item.arch === architecture && item.platform === platform
|
(item: any) => item.arch === architecture && item.platform === platform
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function replaceX32toX86(architecture: string): string {
|
function pypyArchitecture(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 (IS_WINDOWS && architecture === 'x32') {
|
||||||
if (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';
|
architecture = 'x86';
|
||||||
|
} else if (IS_LINUX && architecture === 'arm64') {
|
||||||
|
architecture = 'aarch64';
|
||||||
}
|
}
|
||||||
return architecture;
|
return architecture;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue