2025-02-12 20:42:16 +01:00
import * as c from './constants'
2022-01-03 08:43:40 +01:00
import * as core from '@actions/core'
2025-02-12 20:42:16 +01:00
import * as graalvm from './graalvm'
2023-09-06 09:10:35 +02:00
import * as semver from 'semver'
2025-02-10 09:16:33 +01:00
import { isFeatureAvailable as isCacheAvailable } from '@actions/cache'
import { basename , join } from 'path'
2025-02-12 20:42:16 +01:00
import { restore } from './features/cache'
import { setUpDependencies } from './dependencies'
import { setUpGUComponents } from './gu'
import { setUpMandrel } from './mandrel'
import { setUpLiberica } from './liberica'
import { checkForUpdates } from './features/check-for-updates'
import { setUpNativeImageMusl } from './features/musl'
import { setUpWindowsEnvironment } from './msvc'
import { setUpNativeImageBuildReports } from './features/reports'
2025-02-10 09:16:33 +01:00
import { exec } from '@actions/exec'
2025-02-12 20:42:16 +01:00
import { setUpSBOMSupport } from './features/sbom'
2022-01-03 08:43:40 +01:00
async function run ( ) : Promise < void > {
try {
2025-02-10 09:16:33 +01:00
const javaVersion = core . getInput ( c . INPUT_JAVA_VERSION , { required : true } )
2024-03-06 15:40:00 +03:00
const javaPackage = core . getInput ( c . INPUT_JAVA_PACKAGE )
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 )
2025-02-10 09:16:33 +01:00
const components : string [ ] = 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 )
2025-02-10 09:16:33 +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'
2025-02-10 09:16:33 +01:00
const isGraalVMforJDK17OrLater = distribution . length > 0 || graalVMVersion . length == 0
2022-01-03 08:52:11 +01:00
2022-01-03 08:53:37 +01:00
if ( c . IS_WINDOWS ) {
2025-02-10 09:16:33 +01:00
setUpWindowsEnvironment ( javaVersion , graalVMVersion , isGraalVMforJDK17OrLater )
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
2022-01-03 08:43:40 +01:00
let graalVMHome
2023-06-17 16:17:01 +02:00
if ( isGraalVMforJDK17OrLater ) {
2023-09-19 16:17:51 +02:00
if (
enableCheckForUpdates &&
2025-02-10 09:16:33 +01:00
( distribution === c . DISTRIBUTION_GRAALVM || distribution === c . DISTRIBUTION_GRAALVM_COMMUNITY )
2023-09-19 16:17:51 +02:00
) {
checkForUpdates ( graalVMVersion , javaVersion )
}
2023-06-16 09:19:49 +02:00
switch ( distribution ) {
case c . DISTRIBUTION_GRAALVM :
2024-10-14 11:08:40 +02:00
graalVMHome = await graalvm . setUpGraalVMJDK ( javaVersion , gdsToken )
2023-06-16 09:19:49 +02:00
break
case c . DISTRIBUTION_GRAALVM_COMMUNITY :
graalVMHome = await graalvm . setUpGraalVMJDKCE ( javaVersion )
break
case c . DISTRIBUTION_MANDREL :
2023-10-30 17:24:23 +02:00
graalVMHome = await setUpMandrel ( graalVMVersion , javaVersion )
2023-08-01 14:11:14 +02:00
break
2024-02-20 17:14:10 +03:00
case c . DISTRIBUTION_LIBERICA :
2024-03-06 15:40:00 +03:00
graalVMHome = await setUpLiberica ( javaVersion , javaPackage )
2024-02-20 17:14:10 +03: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). `
)
2024-10-14 11:08:40 +02:00
graalVMHome = await graalvm . setUpGraalVMJDK ( javaVersion , gdsToken )
2023-06-16 09:19:49 +02:00
}
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-20 12:59:33 +02:00
const coercedJavaVersion = semver . coerce ( javaVersion )
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' ) ||
2025-02-10 09:16:33 +01:00
( coercedJavaVersion !== null && semver . gte ( coercedJavaVersion , '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). `
)
2024-10-14 11:08:40 +02:00
graalVMHome = await graalvm . setUpGraalVMJDK ( javaVersion , gdsToken )
2023-06-16 09:19:49 +02:00
} else {
2025-02-10 09:16:33 +01:00
graalVMHome = await graalvm . setUpGraalVMLatest_22_X ( gdsToken , javaVersion )
2023-06-16 09:19:49 +02:00
}
break
case c . VERSION_DEV :
if ( gdsToken . length > 0 ) {
2025-02-10 09:16:33 +01:00
throw new Error ( 'Downloading GraalVM EE dev builds is not supported' )
2023-06-16 09:19:49 +02:00
}
2025-02-10 09:16:33 +01:00
if ( coercedJavaVersion !== null && ! semver . gte ( coercedJavaVersion , '21.0.0' ) ) {
2023-09-06 09:10:35 +02:00
core . warning (
` GraalVM dev builds are only available for JDK 21. This build is now using a stable release of GraalVM for JDK ${ javaVersion } . `
)
2024-10-14 11:08:40 +02:00
graalVMHome = await graalvm . setUpGraalVMJDK ( javaVersion , gdsToken )
2023-09-06 09:10:35 +02:00
} 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-19 16:17:51 +02:00
checkForUpdates ( graalVMVersion , javaVersion )
2023-06-16 09:19:49 +02:00
}
2025-02-10 09:16:33 +01:00
graalVMHome = await graalvm . setUpGraalVMRelease ( gdsToken , graalVMVersion , javaVersion )
2023-06-16 09:19:49 +02:00
}
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 )
}
2025-02-10 09:16:33 +01:00
await setUpGUComponents ( javaVersion , graalVMVersion , graalVMHome , components , gdsToken )
2022-08-31 10:07:18 +02:00
if ( cache && isCacheAvailable ( ) ) {
await restore ( cache )
}
2025-02-10 09:16:33 +01:00
setUpNativeImageBuildReports ( isGraalVMforJDK17OrLater , javaVersion , graalVMVersion )
2025-01-21 09:00:42 +01:00
setUpSBOMSupport ( javaVersion , distribution )
2024-02-22 12:11:46 +01:00
core . startGroup ( ` Successfully set up ' ${ basename ( graalVMHome ) } ' ` )
await exec ( join ( graalVMHome , 'bin' , ` java ${ c . EXECUTABLE_SUFFIX } ` ) , [
2024-02-23 08:22:08 +01:00
javaVersion . startsWith ( '8' ) ? '-version' : '--version'
2024-02-22 12:11:46 +01:00
] )
core . endGroup ( )
2022-01-03 08:43:40 +01:00
} catch ( error ) {
if ( error instanceof Error ) core . setFailed ( error . message )
}
}
run ( )