Introduce check-for-updates feature.

This commit is contained in:
Fabio Niephaus
2022-11-02 14:00:51 +01:00
parent 70e1936e9c
commit b0049dea1e
12 changed files with 7786 additions and 2935 deletions

View File

@@ -7,6 +7,7 @@ export const INPUT_COMPONENTS = 'components'
export const INPUT_GITHUB_TOKEN = 'github-token'
export const INPUT_SET_JAVA_HOME = 'set-java-home'
export const INPUT_CACHE = 'cache'
export const INPUT_CHECK_FOR_UPDATES = 'check-for-updates'
export const INPUT_NI_MUSL = 'native-image-musl'
export const IS_LINUX = process.platform === 'linux'

View File

@@ -1,14 +1,42 @@
import * as c from './constants'
import * as core from '@actions/core'
import * as tc from '@actions/tool-cache'
import {IS_LINUX} from './constants'
import {exec} from './utils'
import {exec, toSemVer} from './utils'
import {join} from 'path'
import {lt, major, minor, valid} from 'semver'
import {getLatestReleaseVersion} from './graalvm'
const MUSL_NAME = 'x86_64-linux-musl-native'
const MUSL_VERSION = '10.2.1'
export async function checkForUpdates(
graalVMVersion: string,
javaVersion: string
): Promise<void> {
if (graalVMVersion === '22.3.0' && javaVersion === '11') {
core.notice(
'Please consider upgrading your project to Java 17+. The GraalVM 22.3.0 release is the last to support JDK11: https://github.com/oracle/graal/issues/5063'
)
return
}
const latestGraalVMVersion = await getLatestReleaseVersion()
const selectedVersion = toSemVer(graalVMVersion)
const latestVersion = toSemVer(latestGraalVMVersion)
if (
valid(selectedVersion) &&
valid(latestVersion) &&
lt(selectedVersion, latestVersion)
) {
core.notice(
`A new GraalVM release is available! Please consider upgrading to GraalVM ${latestGraalVMVersion}. Release notes: https://www.graalvm.org/release-notes/${major(
latestVersion
)}_${minor(latestVersion)}/`
)
}
}
export async function setUpNativeImageMusl(): Promise<void> {
if (!IS_LINUX) {
if (!c.IS_LINUX) {
core.warning('musl is only supported on Linux')
return
}

View File

@@ -20,14 +20,15 @@ export async function setUpGraalVMLatest(
if (gdsToken.length > 0) {
return setUpGraalVMRelease(gdsToken, c.VERSION_LATEST, javaVersion)
}
const latestReleaseVersion = await getLatestReleaseVersion()
return setUpGraalVMRelease(gdsToken, latestReleaseVersion, javaVersion)
}
export async function getLatestReleaseVersion(): Promise<string> {
const latestRelease = await getLatestRelease(GRAALVM_REPO_RELEASES)
const tag_name = latestRelease.tag_name
if (tag_name.startsWith(GRAALVM_TAG_PREFIX)) {
const latestVersion = tag_name.substring(
GRAALVM_TAG_PREFIX.length,
tag_name.length
)
return setUpGraalVMRelease(gdsToken, latestVersion, javaVersion)
return tag_name.substring(GRAALVM_TAG_PREFIX.length, tag_name.length)
}
throw new Error(`Could not find latest GraalVM release: ${tag_name}`)
}

View File

@@ -7,7 +7,7 @@ import {restore} from './cache'
import {setUpDependencies} from './dependencies'
import {setUpGUComponents} from './gu'
import {setUpMandrel} from './mandrel'
import {setUpNativeImageMusl} from './features'
import {checkForUpdates, setUpNativeImageMusl} from './features'
import {setUpWindowsEnvironment} from './msvc'
async function run(): Promise<void> {
@@ -20,6 +20,8 @@ async function run(): Promise<void> {
componentsString.length > 0 ? componentsString.split(',') : []
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) {
@@ -43,6 +45,9 @@ async function run(): Promise<void> {
if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) {
graalVMHome = await setUpMandrel(graalvmVersion, javaVersion)
} else {
if (enableCheckForUpdates) {
await checkForUpdates(graalvmVersion, javaVersion)
}
graalVMHome = await graalvm.setUpGraalVMRelease(
gdsToken,
graalvmVersion,

View File

@@ -105,7 +105,7 @@ function findJavaHomeInSubfolder(searchPath: string): string {
* semver.org versions (e.g., `22.0.0-2`), which is needed because
* @actions/tool-cache uses `semver` to validate versions.
*/
function toSemVer(version: string): string {
export function toSemVer(version: string): string {
const parts = version.split('.')
const major = parts[0]
const minor = parts.length > 1 ? parts[1] : '0'