| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  | import * as core from '@actions/core'; | 
					
						
							|  |  |  | import * as finder from './find-python'; | 
					
						
							| 
									
										
										
										
											2020-12-17 18:03:54 +03:00
										 |  |  | import * as finderPyPy from './find-pypy'; | 
					
						
							| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  | import * as path from 'path'; | 
					
						
							| 
									
										
										
										
											2020-04-29 20:57:02 +03:00
										 |  |  | import * as os from 'os'; | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  | import {getCacheDistributor} from './cache-distributions/cache-factory'; | 
					
						
							| 
									
										
										
										
											2022-04-01 00:41:27 +05:30
										 |  |  | import {isCacheFeatureAvailable} from './utils'; | 
					
						
							| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-17 18:03:54 +03:00
										 |  |  | function isPyPyVersion(versionSpec: string) { | 
					
						
							|  |  |  |   return versionSpec.startsWith('pypy-'); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  | async function cacheDependencies(cache: string, pythonVersion: string) { | 
					
						
							|  |  |  |   const cacheDependencyPath = | 
					
						
							|  |  |  |     core.getInput('cache-dependency-path') || undefined; | 
					
						
							|  |  |  |   const cacheDistributor = getCacheDistributor( | 
					
						
							|  |  |  |     cache, | 
					
						
							|  |  |  |     pythonVersion, | 
					
						
							|  |  |  |     cacheDependencyPath | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  |   await cacheDistributor.restoreCache(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  | async function run() { | 
					
						
							| 
									
										
										
										
											2022-02-21 05:23:19 +00:00
										 |  |  |   if (process.env.AGENT_TOOLSDIRECTORY?.trim()) { | 
					
						
							| 
									
										
										
										
											2022-02-17 19:21:13 +00:00
										 |  |  |     core.debug( | 
					
						
							| 
									
										
										
										
											2022-02-21 05:23:19 +00:00
										 |  |  |       `Python is expected to be installed into AGENT_TOOLSDIRECTORY=${process.env['AGENT_TOOLSDIRECTORY']}` | 
					
						
							| 
									
										
										
										
											2022-02-17 19:21:13 +00:00
										 |  |  |     ); | 
					
						
							|  |  |  |     process.env['RUNNER_TOOL_CACHE'] = process.env['AGENT_TOOLSDIRECTORY']; | 
					
						
							| 
									
										
										
										
											2022-02-17 18:35:19 +00:00
										 |  |  |   } else { | 
					
						
							| 
									
										
										
										
											2022-02-17 19:21:13 +00:00
										 |  |  |     core.debug( | 
					
						
							| 
									
										
										
										
											2022-02-21 05:23:19 +00:00
										 |  |  |       `Python is expected to be installed into RUNNER_TOOL_CACHE==${process.env['RUNNER_TOOL_CACHE']}` | 
					
						
							| 
									
										
										
										
											2022-02-17 19:21:13 +00:00
										 |  |  |     ); | 
					
						
							| 
									
										
										
										
											2022-02-17 18:35:19 +00:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  |   try { | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  |     const version = core.getInput('python-version'); | 
					
						
							| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  |     if (version) { | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  |       let pythonVersion: string; | 
					
						
							| 
									
										
										
										
											2020-04-29 20:57:02 +03:00
										 |  |  |       const arch: string = core.getInput('architecture') || os.arch(); | 
					
						
							| 
									
										
										
										
											2020-12-17 18:03:54 +03:00
										 |  |  |       if (isPyPyVersion(version)) { | 
					
						
							|  |  |  |         const installed = await finderPyPy.findPyPyVersion(version, arch); | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  |         pythonVersion = `${installed.resolvedPyPyVersion}-${installed.resolvedPythonVersion}`; | 
					
						
							| 
									
										
										
										
											2020-12-17 18:03:54 +03:00
										 |  |  |         core.info( | 
					
						
							| 
									
										
										
										
											2022-05-03 08:43:53 -04:00
										 |  |  |           `Successfully set up PyPy ${installed.resolvedPyPyVersion} with Python (${installed.resolvedPythonVersion})` | 
					
						
							| 
									
										
										
										
											2020-12-17 18:03:54 +03:00
										 |  |  |         ); | 
					
						
							|  |  |  |       } else { | 
					
						
							| 
									
										
										
										
											2022-02-28 10:19:48 +03:00
										 |  |  |         const installed = await finder.useCpythonVersion(version, arch); | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  |         pythonVersion = installed.version; | 
					
						
							| 
									
										
										
										
											2022-05-03 08:43:53 -04:00
										 |  |  |         core.info(`Successfully set up ${installed.impl} (${pythonVersion})`); | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const cache = core.getInput('cache'); | 
					
						
							| 
									
										
										
										
											2022-04-01 00:41:27 +05:30
										 |  |  |       if (cache && isCacheFeatureAvailable()) { | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  |         await cacheDependencies(cache, pythonVersion); | 
					
						
							| 
									
										
										
										
											2020-12-17 18:03:54 +03:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2022-04-29 09:14:59 +05:00
										 |  |  |     } else { | 
					
						
							|  |  |  |       core.warning( | 
					
						
							| 
									
										
										
										
											2022-05-04 12:55:36 +05:00
										 |  |  |         'The `python-version` input is not set.  The version of Python currently in `PATH` will be used.' | 
					
						
							| 
									
										
										
										
											2022-04-29 09:14:59 +05:00
										 |  |  |       ); | 
					
						
							| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  |     const matchersPath = path.join(__dirname, '../..', '.github'); | 
					
						
							| 
									
										
										
										
											2020-03-09 10:16:37 +01:00
										 |  |  |     core.info(`##[add-matcher]${path.join(matchersPath, 'python.json')}`); | 
					
						
							| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  |   } catch (err) { | 
					
						
							| 
									
										
										
										
											2021-11-17 13:31:22 +03:00
										 |  |  |     core.setFailed((err as Error).message); | 
					
						
							| 
									
										
										
										
											2019-08-20 10:27:52 -04:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | run(); |