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-06-16 10:31:54 +02:00
import { gte as semverGte , valid as semverValid } 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 )
const graalvmVersion = core . getInput ( c . INPUT_VERSION )
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-02-13 10:07:39 +01: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 =
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 :
throw new Error (
` Mandrel requires the 'version' option (see https://github.com/graalvm/setup-graalvm/tree/main#options). `
2022-01-03 09:00:36 +01:00
)
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 )
}
default :
throw new Error ( ` Unsupported distribution: ${ distribution } ` )
}
} else {
switch ( graalvmVersion ) {
case c . VERSION_LATEST :
2023-06-16 10:31:54 +02:00
if (
javaVersion . startsWith ( '17' ) ||
( semverValid ( javaVersion ) && semverGte ( javaVersion , '20' ) )
) {
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 {
graalVMHome = await graalvm . setUpGraalVMLatest (
gdsToken ,
javaVersion
)
}
break
case c . VERSION_DEV :
if ( gdsToken . length > 0 ) {
throw new Error (
'Downloading GraalVM EE dev builds is not supported'
)
}
graalVMHome = await graalvm . setUpGraalVMJDKDevBuild ( )
break
default :
if ( graalvmVersion . startsWith ( c . MANDREL_NAMESPACE ) ) {
graalVMHome = await setUpMandrel ( graalvmVersion , javaVersion )
} else {
if ( enableCheckForUpdates ) {
await checkForUpdates ( graalvmVersion , javaVersion )
}
graalVMHome = await graalvm . setUpGraalVMRelease (
gdsToken ,
graalvmVersion ,
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
// Set up GraalVM components (if any)
if ( components . length > 0 ) {
2022-01-14 10:20:26 +01:00
if ( graalvmVersion . startsWith ( c . MANDREL_NAMESPACE ) ) {
2022-01-03 09:00:36 +01:00
core . warning (
` Mandrel does not support GraalVM components: ${ componentsString } `
)
2022-01-03 08:57:03 +01:00
} else {
2022-03-03 17:24:24 +01:00
await setUpGUComponents ( gdsToken , graalVMHome , components )
2022-01-03 08:57:03 +01:00
}
}
2022-08-31 10:07:18 +02:00
if ( cache && isCacheAvailable ( ) ) {
await restore ( cache )
}
2023-06-17 16:17:01 +02:00
setUpNativeImageBuildReports ( isGraalVMforJDK17OrLater , graalvmVersion )
2022-01-03 08:43:40 +01:00
} catch ( error ) {
if ( error instanceof Error ) core . setFailed ( error . message )
}
}
run ( )