2022-03-29 12:54:34 +05:30
import * as actionsCache from '@actions/cache' ;
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' ;
import { isGhes } 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 ) {
2022-03-29 12:54:34 +05:30
if ( ! actionsCache . isFeatureAvailable ( ) ) {
if ( isGhes ( ) ) {
2022-03-29 14:38:25 +05:30
throw new Error (
'Caching is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.'
) ;
2022-03-29 12:54:34 +05:30
} else {
2022-03-29 14:38:25 +05:30
throw new Error (
'An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions.'
) ;
2022-03-29 12:54:34 +05:30
}
2021-11-17 13:31:22 +03:00
}
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() {
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 (
` Successfully setup PyPy ${ installed . resolvedPyPyVersion } with Python ( ${ installed . resolvedPythonVersion } ) `
) ;
} 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 ;
core . info ( ` Successfully setup ${ installed . impl } ( ${ pythonVersion } ) ` ) ;
}
const cache = core . getInput ( 'cache' ) ;
if ( cache ) {
await cacheDependencies ( cache , pythonVersion ) ;
2020-12-17 18:03:54 +03: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 ( ) ;