setup-graalvm/src/main.ts

149 lines
5.4 KiB
TypeScript
Raw Normal View History

import * as c from './constants'
2022-01-03 08:43:40 +01:00
import * as core from '@actions/core'
import * as graalvm from './graalvm'
2023-06-16 10:31:54 +02:00
import {gte as semverGte, valid as semverValid} from 'semver'
import {isFeatureAvailable as isCacheAvailable} from '@actions/cache'
import {join} from 'path'
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'
import {setUpWindowsEnvironment} from './msvc'
import {setUpNativeImageBuildReports} from './features/reports'
2022-01-03 08:43:40 +01:00
async function run(): Promise<void> {
try {
const javaVersion = core.getInput(c.INPUT_JAVA_VERSION, {required: true})
const distribution = core.getInput(c.INPUT_DISTRIBUTION)
const graalvmVersion = core.getInput(c.INPUT_VERSION)
const gdsToken = core.getInput(c.INPUT_GDS_TOKEN)
const componentsString: string = core.getInput(c.INPUT_COMPONENTS)
const components: string[] =
componentsString.length > 0
? componentsString.split(',').map(x => x.trim())
: []
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'
const enableNativeImageMusl = core.getInput(c.INPUT_NI_MUSL) === 'true'
if (c.IS_WINDOWS) {
setUpWindowsEnvironment(graalvmVersion)
}
2022-01-20 17:49:45 +01:00
await setUpDependencies(components)
if (enableNativeImageMusl) {
await setUpNativeImageMusl()
}
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) {
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:
if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) {
graalVMHome = await setUpMandrel(graalvmVersion, javaVersion)
} else {
throw new Error(
`Mandrel requires the 'version' option (see https://github.com/graalvm/setup-graalvm/tree/main#options).`
)
}
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).`
)
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
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'))
) {
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
}
}
// Activate GraalVM
core.debug(`Activating GraalVM located at '${graalVMHome}'...`)
2022-01-03 08:43:40 +01:00
core.exportVariable('GRAALVM_HOME', graalVMHome)
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) {
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 {
await setUpGUComponents(gdsToken, graalVMHome, components)
2022-01-03 08:57:03 +01: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()