mirror of
				https://git.mirrors.martin98.com/https://github.com/actions/setup-python
				synced 2025-10-31 15:01:07 +08: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
					
				
							
								
								
									
										53
									
								
								.github/workflows/test-pypy.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								.github/workflows/test-pypy.yml
									
									
									
									
										vendored
									
									
								
							| @ -69,6 +69,59 @@ jobs: | ||||
|           ${EXECUTABLE} --version | ||||
|         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: | ||||
|     name: Setup PyPy ${{ matrix.pypy }} ${{ matrix.os }} (noenv) | ||||
|     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; | ||||
| 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; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Matthieu Darbois
						Matthieu Darbois