2022-01-03 08:52:11 +01:00
import * as c from './constants'
2022-01-03 08:43:40 +01:00
import * as core from '@actions/core'
2022-01-03 08:52:11 +01:00
import * as graalvm from './graalvm'
2023-09-06 09:10:35 +02:00
import * as semver from 'semver'
2022-08-31 10:07:18 +02:00
import { isFeatureAvailable as isCacheAvailable } from '@actions/cache'
2022-01-03 08:52:11 +01:00
import { join } from 'path'
2022-11-03 17:16:53 +01:00
import { restore } from './features/cache'
2022-01-03 08:54:37 +01:00
import { setUpDependencies } from './dependencies'
2022-01-03 08:57:03 +01:00
import { setUpGUComponents } from './gu'
2022-01-03 09:00:36 +01:00
import { setUpMandrel } from './mandrel'
2022-11-03 17:21:00 +01:00
import { checkForUpdates } from './features/check-for-updates'
import { setUpNativeImageMusl } from './features/musl'
2022-01-03 08:53:37 +01:00
import { setUpWindowsEnvironment } from './msvc'
2022-11-03 17:13:30 +01:00
import { setUpNativeImageBuildReports } from './features/reports'
2022-01-03 08:43:40 +01:00
async function run ( ) : Promise < void > {
try {
2022-08-31 10:07:18 +02:00
const javaVersion = core . getInput ( c . INPUT_JAVA_VERSION , { required : true } )
2023-06-16 09:19:49 +02:00
const distribution = core . getInput ( c . INPUT_DISTRIBUTION )
2023-09-06 09:08:02 +02:00
const graalVMVersion = core . getInput ( c . INPUT_VERSION )
2023-06-16 09:19:49 +02:00
const gdsToken = core . getInput ( c . INPUT_GDS_TOKEN )
2022-08-31 10:07:18 +02:00
const componentsString : string = core . getInput ( c . INPUT_COMPONENTS )
2022-01-03 08:52:11 +01:00
const components : string [ ] =
2023-04-18 09:46:32 +02:00
componentsString . length > 0
? componentsString . split ( ',' ) . map ( x = > x . trim ( ) )
: [ ]
2022-08-31 10:07:18 +02:00
const setJavaHome = core . getInput ( c . INPUT_SET_JAVA_HOME ) === 'true'
const cache = core . getInput ( c . INPUT_CACHE )
2022-11-02 14:00:51 +01:00
const enableCheckForUpdates =
core . getInput ( c . INPUT_CHECK_FOR_UPDATES ) === 'true'
2022-08-31 10:07:18 +02:00
const enableNativeImageMusl = core . getInput ( c . INPUT_NI_MUSL ) === 'true'
2022-01-03 08:52:11 +01:00
2022-01-03 08:53:37 +01:00
if ( c . IS_WINDOWS ) {
2023-09-06 09:08:02 +02:00
setUpWindowsEnvironment ( graalVMVersion )
2022-01-03 08:53:37 +01:00
}
2022-01-20 17:49:45 +01:00
await setUpDependencies ( components )
if ( enableNativeImageMusl ) {
await setUpNativeImageMusl ( )
}
2022-01-03 08:53:37 +01:00
2023-06-17 16:17:01 +02:00
// Download GraalVM JDK
const isGraalVMforJDK17OrLater =
2023-09-06 09:08:02 +02:00
distribution . length > 0 || graalVMVersion . length == 0
2022-01-03 08:43:40 +01:00
let graalVMHome
2023-06-17 16:17:01 +02:00
if ( isGraalVMforJDK17OrLater ) {
2023-06-16 09:19:49 +02:00
switch ( distribution ) {
case c . DISTRIBUTION_GRAALVM :
graalVMHome = await graalvm . setUpGraalVMJDK ( javaVersion )
break
case c . DISTRIBUTION_GRAALVM_COMMUNITY :
graalVMHome = await graalvm . setUpGraalVMJDKCE ( javaVersion )
break
case c . DISTRIBUTION_MANDREL :
2023-09-06 09:08:02 +02:00
if ( graalVMVersion . startsWith ( c . MANDREL_NAMESPACE ) ) {
graalVMHome = await setUpMandrel ( graalVMVersion , javaVersion )
2023-06-20 11:56:28 +02:00
} else {
throw new Error (
` Mandrel requires the 'version' option (see https://github.com/graalvm/setup-graalvm/tree/main#options). `
)
}
2023-08-01 14:11:14 +02:00
break
2023-06-16 09:19:49 +02:00
case '' :
if ( javaVersion === c . VERSION_DEV ) {
core . info (
2023-06-16 12:59:57 +02:00
` This build is using GraalVM Community Edition. To select a specific distribution, use the 'distribution' option (see https://github.com/graalvm/setup-graalvm/tree/main#options). `
2023-06-16 09:19:49 +02:00
)
graalVMHome = await graalvm . setUpGraalVMJDKDevBuild ( )
} else {
core . info (
` This build is using the new Oracle GraalVM. To select a specific distribution, use the 'distribution' option (see https://github.com/graalvm/setup-graalvm/tree/main#options). `
)
graalVMHome = await graalvm . setUpGraalVMJDK ( javaVersion )
}
2023-06-19 11:11:08 +02:00
break
2023-06-16 09:19:49 +02:00
default :
throw new Error ( ` Unsupported distribution: ${ distribution } ` )
}
} else {
2023-09-06 09:08:02 +02:00
switch ( graalVMVersion ) {
2023-06-16 09:19:49 +02:00
case c . VERSION_LATEST :
2023-06-16 10:31:54 +02:00
if (
javaVersion . startsWith ( '17' ) ||
2023-09-06 09:10:35 +02:00
( semver . valid ( javaVersion ) && semver . gte ( javaVersion , '20.0.0' ) )
2023-06-16 10:31:54 +02:00
) {
2023-06-16 09:19:49 +02:00
core . info (
` This build is using the new Oracle GraalVM. To select a specific distribution, use the 'distribution' option (see https://github.com/graalvm/setup-graalvm/tree/main#options). `
)
graalVMHome = await graalvm . setUpGraalVMJDK ( javaVersion )
} else {
2023-06-20 13:02:17 +02:00
graalVMHome = await graalvm . setUpGraalVMLatest_22_X (
2023-06-16 09:19:49 +02:00
gdsToken ,
javaVersion
)
}
break
case c . VERSION_DEV :
if ( gdsToken . length > 0 ) {
throw new Error (
'Downloading GraalVM EE dev builds is not supported'
)
}
2023-09-06 09:10:35 +02:00
const coercedJavaVersion = semver . coerce ( javaVersion )
if (
coercedJavaVersion !== null &&
! semver . gte ( coercedJavaVersion , '21.0.0' )
) {
core . warning (
` GraalVM dev builds are only available for JDK 21. This build is now using a stable release of GraalVM for JDK ${ javaVersion } . `
)
graalVMHome = await graalvm . setUpGraalVMJDK ( javaVersion )
} else {
graalVMHome = await graalvm . setUpGraalVMJDKDevBuild ( )
}
2023-06-16 09:19:49 +02:00
break
default :
2023-09-06 09:08:02 +02:00
if ( graalVMVersion . startsWith ( c . MANDREL_NAMESPACE ) ) {
graalVMHome = await setUpMandrel ( graalVMVersion , javaVersion )
2023-06-16 09:19:49 +02:00
} else {
if ( enableCheckForUpdates ) {
2023-09-06 09:08:02 +02:00
await checkForUpdates ( graalVMVersion , javaVersion )
2023-06-16 09:19:49 +02:00
}
graalVMHome = await graalvm . setUpGraalVMRelease (
gdsToken ,
2023-09-06 09:08:02 +02:00
graalVMVersion ,
2023-06-16 09:19:49 +02:00
javaVersion
)
}
break
}
2022-01-03 08:52:11 +01:00
}
// Activate GraalVM
core . debug ( ` Activating GraalVM located at ' ${ graalVMHome } '... ` )
2022-01-03 08:43:40 +01:00
core . exportVariable ( 'GRAALVM_HOME' , graalVMHome )
2022-01-03 08:52:11 +01:00
core . addPath ( join ( graalVMHome , 'bin' ) )
if ( setJavaHome ) {
core . exportVariable ( 'JAVA_HOME' , graalVMHome )
}
2022-01-03 08:57:03 +01:00
2023-09-06 09:08:02 +02:00
await setUpGUComponents (
javaVersion ,
graalVMVersion ,
graalVMHome ,
components ,
gdsToken
)
2022-08-31 10:07:18 +02:00
if ( cache && isCacheAvailable ( ) ) {
await restore ( cache )
}
2023-09-06 09:08:02 +02:00
setUpNativeImageBuildReports ( isGraalVMforJDK17OrLater , graalVMVersion )
2022-01-03 08:43:40 +01:00
} catch ( error ) {
if ( error instanceof Error ) core . setFailed ( error . message )
}
}
run ( )