Add support for Mandrel.
This commit is contained in:
committed by
Fabio Niephaus
parent
7a1abedd1b
commit
eff06eabf9
@@ -15,5 +15,7 @@ export const GRAALVM_GH_USER = 'graalvm'
|
||||
export const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform
|
||||
export const JDK_HOME_SUFFIX = IS_MACOS ? '/Contents/Home' : ''
|
||||
|
||||
export const MANDREL_NAMESPACE = 'mandrel-'
|
||||
|
||||
export type LatestReleaseResponse =
|
||||
otypes.Endpoints['GET /repos/{owner}/{repo}/releases/latest']['response']
|
||||
|
||||
17
src/main.ts
17
src/main.ts
@@ -6,6 +6,7 @@ import {mkdirP} from '@actions/io'
|
||||
import {setUpDependencies} from './dependencies'
|
||||
import {setUpGUComponents} from './gu'
|
||||
import {setUpGraalVMTrunk} from './graalvm-trunk'
|
||||
import {setUpMandrel} from './mandrel'
|
||||
import {setUpWindowsEnvironment} from './msvc'
|
||||
|
||||
async function run(): Promise<void> {
|
||||
@@ -37,10 +38,14 @@ async function run(): Promise<void> {
|
||||
graalVMHome = await setUpGraalVMTrunk(javaVersion, components)
|
||||
break
|
||||
default:
|
||||
graalVMHome = await graalvm.setUpGraalVMRelease(
|
||||
graalvmVersion,
|
||||
javaVersion
|
||||
)
|
||||
if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) {
|
||||
graalVMHome = await setUpMandrel(graalvmVersion, javaVersion)
|
||||
} else {
|
||||
graalVMHome = await graalvm.setUpGraalVMRelease(
|
||||
graalvmVersion,
|
||||
javaVersion
|
||||
)
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
@@ -56,6 +61,10 @@ async function run(): Promise<void> {
|
||||
if (components.length > 0) {
|
||||
if (graalvmVersion === c.VERSION_TRUNK) {
|
||||
// components built from source, nothing to do
|
||||
} else if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) {
|
||||
core.warning(
|
||||
`Mandrel does not support GraalVM components: ${componentsString}`
|
||||
)
|
||||
} else {
|
||||
await setUpGUComponents(graalVMHome, components)
|
||||
}
|
||||
|
||||
57
src/mandrel.ts
Normal file
57
src/mandrel.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import * as c from './constants'
|
||||
import {downloadAndExtractJDK, getLatestRelease} from './utils'
|
||||
|
||||
const MANDREL_REPO = 'mandrel'
|
||||
const MANDREL_TAG_PREFIX = c.MANDREL_NAMESPACE
|
||||
const MANDREL_DL_BASE = 'https://github.com/graalvm/mandrel/releases/download'
|
||||
|
||||
export async function setUpMandrel(
|
||||
graalvmVersion: string,
|
||||
javaVersion: string
|
||||
): Promise<string> {
|
||||
const mandrelVersion = graalvmVersion.substring(
|
||||
c.MANDREL_NAMESPACE.length,
|
||||
graalvmVersion.length
|
||||
)
|
||||
|
||||
let mandrelHome
|
||||
switch (mandrelVersion) {
|
||||
case 'latest':
|
||||
mandrelHome = await setUpMandrelLatest(javaVersion)
|
||||
break
|
||||
default:
|
||||
mandrelHome = await setUpMandrelRelease(mandrelVersion, javaVersion)
|
||||
break
|
||||
}
|
||||
|
||||
return mandrelHome
|
||||
}
|
||||
|
||||
async function setUpMandrelLatest(javaVersion: string): Promise<string> {
|
||||
const latestRelease = await getLatestRelease(MANDREL_REPO)
|
||||
const tag_name = latestRelease.tag_name
|
||||
if (tag_name.startsWith(MANDREL_TAG_PREFIX)) {
|
||||
const latestVersion = tag_name.substring(
|
||||
MANDREL_TAG_PREFIX.length,
|
||||
tag_name.length
|
||||
)
|
||||
return setUpMandrelRelease(latestVersion, javaVersion)
|
||||
}
|
||||
throw new Error(`Could not find latest Mandrel release: ${tag_name}`)
|
||||
}
|
||||
|
||||
async function setUpMandrelRelease(
|
||||
version: string,
|
||||
javaVersion: string
|
||||
): Promise<string> {
|
||||
const identifier = determineMandrelIdentifier(version, javaVersion)
|
||||
const downloadUrl = `${MANDREL_DL_BASE}/${MANDREL_TAG_PREFIX}${version}/${identifier}${c.GRAALVM_FILE_EXTENSION}`
|
||||
return downloadAndExtractJDK(downloadUrl)
|
||||
}
|
||||
|
||||
function determineMandrelIdentifier(
|
||||
version: string,
|
||||
javaVersion: string
|
||||
): string {
|
||||
return `mandrel-java${javaVersion}-${c.GRAALVM_PLATFORM}-amd64-${version}`
|
||||
}
|
||||
Reference in New Issue
Block a user