mirror of
				https://gitea.com/actions/setup-python.git
				synced 2025-10-31 11:48:56 +08:00 
			
		
		
		
	graalpy: add graalpy early-access and windows builds (#880)
This commit is contained in:
		| @@ -1,11 +1,6 @@ | ||||
| import * as path from 'path'; | ||||
| import * as graalpyInstall from './install-graalpy'; | ||||
| import { | ||||
|   IS_WINDOWS, | ||||
|   validateVersion, | ||||
|   IGraalPyManifestRelease, | ||||
|   getBinaryDirectory | ||||
| } from './utils'; | ||||
| import {IS_WINDOWS, validateVersion, IGraalPyManifestRelease} from './utils'; | ||||
|  | ||||
| import * as semver from 'semver'; | ||||
| import * as core from '@actions/core'; | ||||
| @@ -62,11 +57,8 @@ export async function findGraalPyVersion( | ||||
|   const pipDir = IS_WINDOWS ? 'Scripts' : 'bin'; | ||||
|   const _binDir = path.join(installDir, pipDir); | ||||
|   const binaryExtension = IS_WINDOWS ? '.exe' : ''; | ||||
|   const pythonPath = path.join( | ||||
|     IS_WINDOWS ? installDir : _binDir, | ||||
|     `python${binaryExtension}` | ||||
|   ); | ||||
|   const pythonLocation = getBinaryDirectory(installDir); | ||||
|   const pythonPath = path.join(_binDir, `python${binaryExtension}`); | ||||
|   const pythonLocation = path.join(installDir, 'bin'); | ||||
|   if (updateEnvironment) { | ||||
|     core.exportVariable('pythonLocation', installDir); | ||||
|     // https://cmake.org/cmake/help/latest/module/FindPython.html#module:FindPython | ||||
|   | ||||
| @@ -15,7 +15,6 @@ import { | ||||
|   IGraalPyManifestRelease, | ||||
|   createSymlinkInFolder, | ||||
|   isNightlyKeyword, | ||||
|   getBinaryDirectory, | ||||
|   getNextPageUrl | ||||
| } from './utils'; | ||||
|  | ||||
| @@ -64,7 +63,11 @@ export async function installGraalPy( | ||||
|     const graalpyPath = await tc.downloadTool(downloadUrl, undefined, AUTH); | ||||
|  | ||||
|     core.info('Extracting downloaded archive...'); | ||||
|     downloadDir = await tc.extractTar(graalpyPath); | ||||
|     if (IS_WINDOWS) { | ||||
|       downloadDir = await tc.extractZip(graalpyPath); | ||||
|     } else { | ||||
|       downloadDir = await tc.extractTar(graalpyPath); | ||||
|     } | ||||
|  | ||||
|     // root folder in archive can have unpredictable name so just take the first folder | ||||
|     // downloadDir is unique folder under TEMP and can't contain any other folders | ||||
| @@ -81,7 +84,7 @@ export async function installGraalPy( | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     const binaryPath = getBinaryDirectory(installDir); | ||||
|     const binaryPath = path.join(installDir, 'bin'); | ||||
|     await createGraalPySymlink(binaryPath, resolvedGraalPyVersion); | ||||
|     await installPip(binaryPath); | ||||
|  | ||||
| @@ -115,6 +118,9 @@ export async function getAvailableGraalPyVersions() { | ||||
|     headers.authorization = AUTH; | ||||
|   } | ||||
|  | ||||
|   /* | ||||
|   Get releases first. | ||||
|   */ | ||||
|   let url: string | null = | ||||
|     'https://api.github.com/repos/oracle/graalpython/releases'; | ||||
|   const result: IGraalPyManifestRelease[] = []; | ||||
| @@ -130,6 +136,23 @@ export async function getAvailableGraalPyVersions() { | ||||
|     url = getNextPageUrl(response); | ||||
|   } while (url); | ||||
|  | ||||
|   /* | ||||
|   Add pre-release builds. | ||||
|   */ | ||||
|   url = | ||||
|     'https://api.github.com/repos/graalvm/graal-languages-ea-builds/releases'; | ||||
|   do { | ||||
|     const response: ifm.TypedResponse<IGraalPyManifestRelease[]> = | ||||
|       await http.getJson(url, headers); | ||||
|     if (!response.result) { | ||||
|       throw new Error( | ||||
|         `Unable to retrieve the list of available GraalPy versions from '${url}'` | ||||
|       ); | ||||
|     } | ||||
|     result.push(...response.result); | ||||
|     url = getNextPageUrl(response); | ||||
|   } while (url); | ||||
|  | ||||
|   return result; | ||||
| } | ||||
|  | ||||
| @@ -175,7 +198,8 @@ async function installPip(pythonLocation: string) { | ||||
| } | ||||
|  | ||||
| export function graalPyTagToVersion(tag: string) { | ||||
|   const versionPattern = /.*-(\d+\.\d+\.\d+(?:\.\d+)?)((?:a|b|rc))?(\d*)?/; | ||||
|   const versionPattern = | ||||
|     /.*-(\d+\.\d+\.\d+(?:\.\d+)?)(?:-((?:ea|a|b|rc))\.0*(\d+))?/; | ||||
|   const match = tag.match(versionPattern); | ||||
|   if (match && match[2]) { | ||||
|     return `${match[1]}-${match[2]}.${match[3]}`; | ||||
| @@ -251,10 +275,11 @@ export function findAsset( | ||||
| ) { | ||||
|   const graalpyArch = toGraalPyArchitecture(architecture); | ||||
|   const graalpyPlatform = toGraalPyPlatform(platform); | ||||
|   const graalpyExt = platform == 'win32' ? 'zip' : 'tar.gz'; | ||||
|   const found = item.assets.filter( | ||||
|     file => | ||||
|       file.name.startsWith('graalpy') && | ||||
|       file.name.endsWith(`-${graalpyPlatform}-${graalpyArch}.tar.gz`) | ||||
|       file.name.endsWith(`-${graalpyPlatform}-${graalpyArch}.${graalpyExt}`) | ||||
|   ); | ||||
|   /* | ||||
|   In the future there could be more variants of GraalPy for a single release. Pick the shortest name, that one is the most likely to be the primary variant. | ||||
|   | ||||
| @@ -379,7 +379,7 @@ export function getVersionInputFromFile(versionFile: string): string[] { | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Get the directory containing interpreter binary from installation directory of PyPy or GraalPy | ||||
|  * Get the directory containing interpreter binary from installation directory of PyPy | ||||
|  *  - On Linux and macOS, the Python interpreter is in 'bin'. | ||||
|  *  - On Windows, it is in the installation root. | ||||
|  */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Tim Felgentreff
					Tim Felgentreff