Files
setup-graalvm/src/main.ts

148 lines
6.1 KiB
TypeScript
Raw Normal View History

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'
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 })
const javaPackage = core.getInput(c.INPUT_JAVA_PACKAGE)
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)
2025-02-10 09:16:33 +01:00
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)
2025-02-10 09:16:33 +01:00
const enableCheckForUpdates = core.getInput(c.INPUT_CHECK_FOR_UPDATES) === 'true'
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
if (c.IS_WINDOWS) {
2025-02-10 09:16:33 +01:00
setUpWindowsEnvironment(javaVersion, graalVMVersion, isGraalVMforJDK17OrLater)
}
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
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)
}
switch (distribution) {
case c.DISTRIBUTION_GRAALVM:
graalVMHome = await graalvm.setUpGraalVMJDK(javaVersion, gdsToken)
break
case c.DISTRIBUTION_GRAALVM_COMMUNITY:
graalVMHome = await graalvm.setUpGraalVMJDKCE(javaVersion)
break
case c.DISTRIBUTION_MANDREL:
graalVMHome = await setUpMandrel(graalVMVersion, javaVersion)
break
2024-02-20 17:14:10 +03:00
case c.DISTRIBUTION_LIBERICA:
graalVMHome = await setUpLiberica(javaVersion, javaPackage)
2024-02-20 17:14:10 +03:00
break
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, gdsToken)
}
2023-06-19 11:11:08 +02:00
break
default:
throw new Error(`Unsupported distribution: ${distribution}`)
}
} else {
const coercedJavaVersion = semver.coerce(javaVersion)
switch (graalVMVersion) {
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
) {
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, gdsToken)
} else {
2025-02-10 09:16:33 +01:00
graalVMHome = await graalvm.setUpGraalVMLatest_22_X(gdsToken, javaVersion)
}
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')
}
2025-02-10 09:16:33 +01:00
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, gdsToken)
} else {
graalVMHome = await graalvm.setUpGraalVMJDKDevBuild()
}
break
default:
if (graalVMVersion.startsWith(c.MANDREL_NAMESPACE)) {
graalVMHome = await setUpMandrel(graalVMVersion, javaVersion)
} else {
if (enableCheckForUpdates) {
2023-09-19 16:17:51 +02:00
checkForUpdates(graalVMVersion, javaVersion)
}
2025-02-10 09:16:33 +01:00
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)
}
2025-02-10 09:16:33 +01:00
await setUpGUComponents(javaVersion, graalVMVersion, graalVMHome, components, gdsToken)
if (cache && isCacheAvailable()) {
await restore(cache)
}
2025-02-10 09:16:33 +01:00
setUpNativeImageBuildReports(isGraalVMforJDK17OrLater, javaVersion, graalVMVersion)
setUpSBOMSupport(javaVersion, distribution)
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'
])
core.endGroup()
2022-01-03 08:43:40 +01:00
} catch (error) {
if (error instanceof Error) core.setFailed(error.message)
}
}
run()