mirror of
				https://git.mirrors.martin98.com/https://github.com/actions/setup-python
				synced 2025-10-31 13:41:06 +08:00 
			
		
		
		
	Remove legacy PyPy input (#342)
This commit is contained in:
		
							parent
							
								
									665cd78205
								
							
						
					
					
						commit
						0ebf233433
					
				
							
								
								
									
										20
									
								
								.github/workflows/test-python.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/test-python.yml
									
									
									
									
										vendored
									
									
								
							| @ -91,23 +91,3 @@ jobs: | |||||||
|     - name: Run simple code |     - name: Run simple code | ||||||
|       run: python -c 'import math; print(math.factorial(5))' |       run: python -c 'import math; print(math.factorial(5))' | ||||||
| 
 | 
 | ||||||
|   setup-pypy-legacy: |  | ||||||
|     name: Setup PyPy ${{ matrix.os }} |  | ||||||
|     runs-on: ${{ matrix.os }} |  | ||||||
|     strategy: |  | ||||||
|       fail-fast: false |  | ||||||
|       matrix: |  | ||||||
|         os: [macos-10.15, windows-2019, ubuntu-18.04, ubuntu-20.04] |  | ||||||
|     steps: |  | ||||||
|     - name: Checkout |  | ||||||
|       uses: actions/checkout@v2 |  | ||||||
| 
 |  | ||||||
|     - name: setup-python pypy3 |  | ||||||
|       uses: ./ |  | ||||||
|       with: |  | ||||||
|         python-version: 'pypy3' |  | ||||||
| 
 |  | ||||||
|     - name: setup-python pypy2 |  | ||||||
|       uses: ./ |  | ||||||
|       with: |  | ||||||
|         python-version: 'pypy2' |  | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/workflow.yml
									
									
									
									
										vendored
									
									
								
							| @ -24,8 +24,8 @@ jobs: | |||||||
|       with: |       with: | ||||||
|         node-version: 16.x |         node-version: 16.x | ||||||
| 
 | 
 | ||||||
|     - name: npm install |     - name: npm ci | ||||||
|       run: npm install |       run: npm ci | ||||||
| 
 | 
 | ||||||
|     - name: Lint |     - name: Lint | ||||||
|       run: npm run format-check |       run: npm run format-check | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ describe('Finder tests', () => { | |||||||
|     await io.mkdirP(pythonDir); |     await io.mkdirP(pythonDir); | ||||||
|     fs.writeFileSync(`${pythonDir}.complete`, 'hello'); |     fs.writeFileSync(`${pythonDir}.complete`, 'hello'); | ||||||
|     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 |     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 | ||||||
|     await finder.findPythonVersion('3.x', 'x64'); |     await finder.useCpythonVersion('3.x', 'x64'); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('Finds stable Python version if it is not installed, but exists in the manifest', async () => { |   it('Finds stable Python version if it is not installed, but exists in the manifest', async () => { | ||||||
| @ -52,7 +52,7 @@ describe('Finder tests', () => { | |||||||
|       fs.writeFileSync(`${pythonDir}.complete`, 'hello'); |       fs.writeFileSync(`${pythonDir}.complete`, 'hello'); | ||||||
|     }); |     }); | ||||||
|     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 |     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 | ||||||
|     await finder.findPythonVersion('1.2.3', 'x64'); |     await finder.useCpythonVersion('1.2.3', 'x64'); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('Finds pre-release Python version in the manifest', async () => { |   it('Finds pre-release Python version in the manifest', async () => { | ||||||
| @ -74,25 +74,17 @@ describe('Finder tests', () => { | |||||||
|       fs.writeFileSync(`${pythonDir}.complete`, 'hello'); |       fs.writeFileSync(`${pythonDir}.complete`, 'hello'); | ||||||
|     }); |     }); | ||||||
|     // This will throw if it doesn't find it in the manifest (because no such version exists)
 |     // This will throw if it doesn't find it in the manifest (because no such version exists)
 | ||||||
|     await finder.findPythonVersion('1.2.3-beta.2', 'x64'); |     await finder.useCpythonVersion('1.2.3-beta.2', 'x64'); | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   it('Errors if Python is not installed', async () => { |   it('Errors if Python is not installed', async () => { | ||||||
|     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 |     // This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
 | ||||||
|     let thrown = false; |     let thrown = false; | ||||||
|     try { |     try { | ||||||
|       await finder.findPythonVersion('3.300000', 'x64'); |       await finder.useCpythonVersion('3.300000', 'x64'); | ||||||
|     } catch { |     } catch { | ||||||
|       thrown = true; |       thrown = true; | ||||||
|     } |     } | ||||||
|     expect(thrown).toBeTruthy(); |     expect(thrown).toBeTruthy(); | ||||||
|   }); |   }); | ||||||
| 
 |  | ||||||
|   it('Finds PyPy if it is installed', async () => { |  | ||||||
|     const pythonDir: string = path.join(toolDir, 'PyPy', '2.0.0', 'x64'); |  | ||||||
|     await io.mkdirP(pythonDir); |  | ||||||
|     fs.writeFileSync(`${pythonDir}.complete`, 'hello'); |  | ||||||
|     // This will throw if it doesn't find it in the cache (because no such version exists)
 |  | ||||||
|     await finder.findPythonVersion('pypy2', 'x64'); |  | ||||||
|   }); |  | ||||||
| }); | }); | ||||||
|  | |||||||
							
								
								
									
										53
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								dist/setup/index.js
									
									
									
									
										vendored
									
									
								
							| @ -6694,7 +6694,7 @@ function run() { | |||||||
|                     core.info(`Successfully setup PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})`); |                     core.info(`Successfully setup PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})`); | ||||||
|                 } |                 } | ||||||
|                 else { |                 else { | ||||||
|                     const installed = yield finder.findPythonVersion(version, arch); |                     const installed = yield finder.useCpythonVersion(version, arch); | ||||||
|                     pythonVersion = installed.version; |                     pythonVersion = installed.version; | ||||||
|                     core.info(`Successfully setup ${installed.impl} (${pythonVersion})`); |                     core.info(`Successfully setup ${installed.impl} (${pythonVersion})`); | ||||||
|                 } |                 } | ||||||
| @ -57111,7 +57111,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge | |||||||
|     }); |     }); | ||||||
| }; | }; | ||||||
| Object.defineProperty(exports, "__esModule", { value: true }); | Object.defineProperty(exports, "__esModule", { value: true }); | ||||||
| exports.findPythonVersion = exports.pythonVersionToSemantic = void 0; | exports.pythonVersionToSemantic = exports.useCpythonVersion = void 0; | ||||||
| const os = __importStar(__webpack_require__(87)); | const os = __importStar(__webpack_require__(87)); | ||||||
| const path = __importStar(__webpack_require__(622)); | const path = __importStar(__webpack_require__(622)); | ||||||
| const utils_1 = __webpack_require__(163); | const utils_1 = __webpack_require__(163); | ||||||
| @ -57139,40 +57139,6 @@ function binDir(installDir) { | |||||||
|         return path.join(installDir, 'bin'); |         return path.join(installDir, 'bin'); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| // Note on the tool cache layout for PyPy:
 |  | ||||||
| // PyPy has its own versioning scheme that doesn't follow the Python versioning scheme.
 |  | ||||||
| // A particular version of PyPy may contain one or more versions of the Python interpreter.
 |  | ||||||
| // For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 |  | ||||||
| // We only care about the Python version, so we don't use the PyPy version for the tool cache.
 |  | ||||||
| function usePyPy(majorVersion, architecture) { |  | ||||||
|     const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion); |  | ||||||
|     let installDir = findPyPy(architecture); |  | ||||||
|     if (!installDir && utils_1.IS_WINDOWS) { |  | ||||||
|         // PyPy only precompiles binaries for x86, but the architecture parameter defaults to x64.
 |  | ||||||
|         // On our Windows virtual environments, we only install an x86 version.
 |  | ||||||
|         // Fall back to x86.
 |  | ||||||
|         installDir = findPyPy('x86'); |  | ||||||
|     } |  | ||||||
|     if (!installDir) { |  | ||||||
|         // PyPy not installed in $(Agent.ToolsDirectory)
 |  | ||||||
|         throw new Error(`PyPy ${majorVersion} not found`); |  | ||||||
|     } |  | ||||||
|     // For PyPy, Windows uses 'bin', not 'Scripts'.
 |  | ||||||
|     const _binDir = path.join(installDir, 'bin'); |  | ||||||
|     // On Linux and macOS, the Python interpreter is in 'bin'.
 |  | ||||||
|     // On Windows, it is in the installation root.
 |  | ||||||
|     const pythonLocation = utils_1.IS_WINDOWS ? installDir : _binDir; |  | ||||||
|     core.exportVariable('pythonLocation', pythonLocation); |  | ||||||
|     core.addPath(installDir); |  | ||||||
|     core.addPath(_binDir); |  | ||||||
|     // Starting from PyPy 7.3.1, the folder that is used for pip and anything that pip installs should be "Scripts" on Windows.
 |  | ||||||
|     if (utils_1.IS_WINDOWS) { |  | ||||||
|         core.addPath(path.join(installDir, 'Scripts')); |  | ||||||
|     } |  | ||||||
|     const impl = 'pypy' + majorVersion.toString(); |  | ||||||
|     core.setOutput('python-version', impl); |  | ||||||
|     return { impl: impl, version: versionFromPath(installDir) }; |  | ||||||
| } |  | ||||||
| function useCpythonVersion(version, architecture) { | function useCpythonVersion(version, architecture) { | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |     return __awaiter(this, void 0, void 0, function* () { | ||||||
|         const desugaredVersionSpec = desugarDevVersion(version); |         const desugaredVersionSpec = desugarDevVersion(version); | ||||||
| @ -57222,6 +57188,7 @@ function useCpythonVersion(version, architecture) { | |||||||
|         return { impl: 'CPython', version: installed }; |         return { impl: 'CPython', version: installed }; | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
|  | exports.useCpythonVersion = useCpythonVersion; | ||||||
| /** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ | /** Convert versions like `3.8-dev` to a version like `>= 3.8.0-a0`. */ | ||||||
| function desugarDevVersion(versionSpec) { | function desugarDevVersion(versionSpec) { | ||||||
|     if (versionSpec.endsWith('-dev')) { |     if (versionSpec.endsWith('-dev')) { | ||||||
| @ -57248,20 +57215,6 @@ function pythonVersionToSemantic(versionSpec) { | |||||||
|     return versionSpec.replace(prereleaseVersion, '$1-$2'); |     return versionSpec.replace(prereleaseVersion, '$1-$2'); | ||||||
| } | } | ||||||
| exports.pythonVersionToSemantic = pythonVersionToSemantic; | exports.pythonVersionToSemantic = pythonVersionToSemantic; | ||||||
| function findPythonVersion(version, architecture) { |  | ||||||
|     return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|         switch (version.toUpperCase()) { |  | ||||||
|             case 'PYPY2': |  | ||||||
|                 return usePyPy('2', architecture); |  | ||||||
|             case 'PYPY3': |  | ||||||
|                 // keep pypy3 pointing to 3.6 for backward compatibility
 |  | ||||||
|                 return usePyPy('3.6', architecture); |  | ||||||
|             default: |  | ||||||
|                 return yield useCpythonVersion(version, architecture); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
| } |  | ||||||
| exports.findPythonVersion = findPythonVersion; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
|  | |||||||
| @ -30,52 +30,7 @@ function binDir(installDir: string): string { | |||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Note on the tool cache layout for PyPy:
 | export async function useCpythonVersion( | ||||||
| // PyPy has its own versioning scheme that doesn't follow the Python versioning scheme.
 |  | ||||||
| // A particular version of PyPy may contain one or more versions of the Python interpreter.
 |  | ||||||
| // For example, PyPy 7.0 contains Python 2.7, 3.5, and 3.6-alpha.
 |  | ||||||
| // We only care about the Python version, so we don't use the PyPy version for the tool cache.
 |  | ||||||
| function usePyPy( |  | ||||||
|   majorVersion: '2' | '3.6', |  | ||||||
|   architecture: string |  | ||||||
| ): InstalledVersion { |  | ||||||
|   const findPyPy = tc.find.bind(undefined, 'PyPy', majorVersion); |  | ||||||
|   let installDir: string | null = findPyPy(architecture); |  | ||||||
| 
 |  | ||||||
|   if (!installDir && IS_WINDOWS) { |  | ||||||
|     // PyPy only precompiles binaries for x86, but the architecture parameter defaults to x64.
 |  | ||||||
|     // On our Windows virtual environments, we only install an x86 version.
 |  | ||||||
|     // Fall back to x86.
 |  | ||||||
|     installDir = findPyPy('x86'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (!installDir) { |  | ||||||
|     // PyPy not installed in $(Agent.ToolsDirectory)
 |  | ||||||
|     throw new Error(`PyPy ${majorVersion} not found`); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // For PyPy, Windows uses 'bin', not 'Scripts'.
 |  | ||||||
|   const _binDir = path.join(installDir, 'bin'); |  | ||||||
| 
 |  | ||||||
|   // On Linux and macOS, the Python interpreter is in 'bin'.
 |  | ||||||
|   // On Windows, it is in the installation root.
 |  | ||||||
|   const pythonLocation = IS_WINDOWS ? installDir : _binDir; |  | ||||||
|   core.exportVariable('pythonLocation', pythonLocation); |  | ||||||
| 
 |  | ||||||
|   core.addPath(installDir); |  | ||||||
|   core.addPath(_binDir); |  | ||||||
|   // Starting from PyPy 7.3.1, the folder that is used for pip and anything that pip installs should be "Scripts" on Windows.
 |  | ||||||
|   if (IS_WINDOWS) { |  | ||||||
|     core.addPath(path.join(installDir, 'Scripts')); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   const impl = 'pypy' + majorVersion.toString(); |  | ||||||
|   core.setOutput('python-version', impl); |  | ||||||
| 
 |  | ||||||
|   return {impl: impl, version: versionFromPath(installDir)}; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| async function useCpythonVersion( |  | ||||||
|   version: string, |   version: string, | ||||||
|   architecture: string |   architecture: string | ||||||
| ): Promise<InstalledVersion> { | ): Promise<InstalledVersion> { | ||||||
| @ -186,18 +141,3 @@ export function pythonVersionToSemantic(versionSpec: string) { | |||||||
|   const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g; |   const prereleaseVersion = /(\d+\.\d+\.\d+)((?:a|b|rc)\d*)/g; | ||||||
|   return versionSpec.replace(prereleaseVersion, '$1-$2'); |   return versionSpec.replace(prereleaseVersion, '$1-$2'); | ||||||
| } | } | ||||||
| 
 |  | ||||||
| export async function findPythonVersion( |  | ||||||
|   version: string, |  | ||||||
|   architecture: string |  | ||||||
| ): Promise<InstalledVersion> { |  | ||||||
|   switch (version.toUpperCase()) { |  | ||||||
|     case 'PYPY2': |  | ||||||
|       return usePyPy('2', architecture); |  | ||||||
|     case 'PYPY3': |  | ||||||
|       // keep pypy3 pointing to 3.6 for backward compatibility
 |  | ||||||
|       return usePyPy('3.6', architecture); |  | ||||||
|     default: |  | ||||||
|       return await useCpythonVersion(version, architecture); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -37,7 +37,7 @@ async function run() { | |||||||
|           `Successfully setup PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})` |           `Successfully setup PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})` | ||||||
|         ); |         ); | ||||||
|       } else { |       } else { | ||||||
|         const installed = await finder.findPythonVersion(version, arch); |         const installed = await finder.useCpythonVersion(version, arch); | ||||||
|         pythonVersion = installed.version; |         pythonVersion = installed.version; | ||||||
|         core.info(`Successfully setup ${installed.impl} (${pythonVersion})`); |         core.info(`Successfully setup ${installed.impl} (${pythonVersion})`); | ||||||
|       } |       } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dmitry Shibanov
						Dmitry Shibanov