mirror of
https://github.com/graalvm/setup-graalvm.git
synced 2025-02-23 20:42:25 +08:00
158 lines
5.7 KiB
TypeScript
158 lines
5.7 KiB
TypeScript
import * as c from './constants'
|
|
import * as core from '@actions/core'
|
|
import * as graalvm from './graalvm'
|
|
import * as semver from 'semver'
|
|
import {isFeatureAvailable as isCacheAvailable} from '@actions/cache'
|
|
import {join} from 'path'
|
|
import {restore} from './features/cache'
|
|
import {setUpDependencies} from './dependencies'
|
|
import {setUpGUComponents} from './gu'
|
|
import {setUpMandrel} from './mandrel'
|
|
import {checkForUpdates} from './features/check-for-updates'
|
|
import {setUpNativeImageMusl} from './features/musl'
|
|
import {setUpWindowsEnvironment} from './msvc'
|
|
import {setUpNativeImageBuildReports} from './features/reports'
|
|
|
|
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)
|
|
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)
|
|
}
|
|
await setUpDependencies(components)
|
|
if (enableNativeImageMusl) {
|
|
await setUpNativeImageMusl()
|
|
}
|
|
|
|
// Download GraalVM JDK
|
|
const isGraalVMforJDK17OrLater =
|
|
distribution.length > 0 || graalVMVersion.length == 0
|
|
let graalVMHome
|
|
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).`
|
|
)
|
|
}
|
|
break
|
|
case '':
|
|
if (javaVersion === c.VERSION_DEV) {
|
|
core.info(
|
|
`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)
|
|
}
|
|
break
|
|
default:
|
|
throw new Error(`Unsupported distribution: ${distribution}`)
|
|
}
|
|
} else {
|
|
switch (graalVMVersion) {
|
|
case c.VERSION_LATEST:
|
|
if (
|
|
javaVersion.startsWith('17') ||
|
|
(semver.valid(javaVersion) && semver.gte(javaVersion, '20.0.0'))
|
|
) {
|
|
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_22_X(
|
|
gdsToken,
|
|
javaVersion
|
|
)
|
|
}
|
|
break
|
|
case c.VERSION_DEV:
|
|
if (gdsToken.length > 0) {
|
|
throw new Error(
|
|
'Downloading GraalVM EE dev builds is not supported'
|
|
)
|
|
}
|
|
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()
|
|
}
|
|
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}'...`)
|
|
core.exportVariable('GRAALVM_HOME', graalVMHome)
|
|
core.addPath(join(graalVMHome, 'bin'))
|
|
if (setJavaHome) {
|
|
core.exportVariable('JAVA_HOME', graalVMHome)
|
|
}
|
|
|
|
await setUpGUComponents(
|
|
javaVersion,
|
|
graalVMVersion,
|
|
graalVMHome,
|
|
components,
|
|
gdsToken
|
|
)
|
|
|
|
if (cache && isCacheAvailable()) {
|
|
await restore(cache)
|
|
}
|
|
setUpNativeImageBuildReports(isGraalVMforJDK17OrLater, graalVMVersion)
|
|
} catch (error) {
|
|
if (error instanceof Error) core.setFailed(error.message)
|
|
}
|
|
}
|
|
|
|
run()
|