mirror of
https://github.com/graalvm/setup-graalvm.git
synced 2025-02-07 17:00:13 +08:00
Add support for Mandrel.
This commit is contained in:
parent
7a1abedd1b
commit
eff06eabf9
8
.github/workflows/test.yml
vendored
8
.github/workflows/test.yml
vendored
@ -41,6 +41,14 @@ jobs:
|
|||||||
java-version: '17'
|
java-version: '17'
|
||||||
components: 'native-image'
|
components: 'native-image'
|
||||||
os: windows-2016
|
os: windows-2016
|
||||||
|
- version: 'mandrel-latest'
|
||||||
|
java-version: '11'
|
||||||
|
components: ''
|
||||||
|
os: ubuntu-latest
|
||||||
|
- version: 'mandrel-21.3.0.0-Final'
|
||||||
|
java-version: '17'
|
||||||
|
components: ''
|
||||||
|
os: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Run setup-graalvm action
|
- name: Run setup-graalvm action
|
||||||
|
@ -5,7 +5,7 @@ This GitHub action sets up [GraalVM Community Edition][repo] and GraalVM compone
|
|||||||
|
|
||||||
This action:
|
This action:
|
||||||
|
|
||||||
- supports GraalVM CE [releases], [dev builds][dev-builds], and building from [source][repo] (see [options](#options))
|
- supports GraalVM CE [releases], [dev builds][dev-builds], building from [source][repo], and [Mandrel][mandrel] (see [options](#options))
|
||||||
- has built-in support for GraalVM components and the [GraalVM updater][gu]
|
- has built-in support for GraalVM components and the [GraalVM updater][gu]
|
||||||
- exports a `$GRAALVM_HOME` environment variable
|
- exports a `$GRAALVM_HOME` environment variable
|
||||||
- adds `$GRAALVM_HOME/bin` to the `$PATH` environment variable<br>(GraalVM tools such as `gu` and GraalVM languages can be invoked directly)
|
- adds `$GRAALVM_HOME/bin` to the `$PATH` environment variable<br>(GraalVM tools such as `gu` and GraalVM languages can be invoked directly)
|
||||||
@ -89,7 +89,7 @@ jobs:
|
|||||||
|
|
||||||
| Name | Default | Description |
|
| Name | Default | Description |
|
||||||
|-----------------|:--------:|-------------|
|
|-----------------|:--------:|-------------|
|
||||||
| `version`<br>*(required)* | n/a | `X.Y.Z` (e.g., `22.0.0`) for a specific [GraalVM release][releases]<br>`latest` for [latest stable release][stable],<br>`dev` for [latest dev build][dev-build],<br>`trunk` for building GraalVM from [source][repo] (slow, can take several minutes). |
|
| `version`<br>*(required)* | n/a | `X.Y.Z` (e.g., `22.0.0`) for a specific [GraalVM release][releases]<br>`latest` for [latest stable release][stable],<br>`dev` for [latest dev build][dev-build],<br>`trunk` for building GraalVM from [source][repo] (slow, can take several minutes),<br>`mandrel-X.Y.Z` (e.g., `mandrel-21.3.0.0-Final`) for a specific [Mandrel release][mandrel-releases], or<br>`mandrel-latest` for [latest Mandrel stable release][mandrel-stable]. |
|
||||||
| `java-version`<br>*(required)* | n/a | `'11'` or `'17'` for a specific Java version.<br>(`'8'` and `'16'` are supported for GraalVM 21.2 and earlier.) |
|
| `java-version`<br>*(required)* | n/a | `'11'` or `'17'` for a specific Java version.<br>(`'8'` and `'16'` are supported for GraalVM 21.2 and earlier.) |
|
||||||
| `components` | `''` | Comma-spearated list of GraalVM components (e.g., `native-image` or `ruby,nodejs`) that will be installed by the [GraalVM Updater][gu]. |
|
| `components` | `''` | Comma-spearated list of GraalVM components (e.g., `native-image` or `ruby,nodejs`) that will be installed by the [GraalVM Updater][gu]. |
|
||||||
| `github-token` | `''` | Token for communication with the GitHub API. Please set to `${{ secrets.GITHUB_TOKEN }}` (see [templates](#templates)) to allow the action to authenticate with the GitHub API, which helps to reduce rate limiting issues. |
|
| `github-token` | `''` | Token for communication with the GitHub API. Please set to `${{ secrets.GITHUB_TOKEN }}` (see [templates](#templates)) to allow the action to authenticate with the GitHub API, which helps to reduce rate limiting issues. |
|
||||||
@ -106,6 +106,9 @@ Only pull requests from committers that can be verified as having signed the OCA
|
|||||||
[dev-builds]: https://github.com/graalvm/graalvm-ce-dev-builds
|
[dev-builds]: https://github.com/graalvm/graalvm-ce-dev-builds
|
||||||
[graalvm-languages]: https://www.graalvm.org/reference-manual/languages/
|
[graalvm-languages]: https://www.graalvm.org/reference-manual/languages/
|
||||||
[gu]: https://www.graalvm.org/reference-manual/graalvm-updater/
|
[gu]: https://www.graalvm.org/reference-manual/graalvm-updater/
|
||||||
|
[mandrel]: https://github.com/graalvm/mandrel
|
||||||
|
[mandrel-releases]: https://github.com/graalvm/mandrel/releases
|
||||||
|
[mandrel-stable]: https://github.com/graalvm/mandrel/releases/latest
|
||||||
[native-image]: https://www.graalvm.org/native-image/
|
[native-image]: https://www.graalvm.org/native-image/
|
||||||
[oca]: https://oca.opensource.oracle.com
|
[oca]: https://oca.opensource.oracle.com
|
||||||
[releases]: https://github.com/graalvm/graalvm-ce-builds/releases
|
[releases]: https://github.com/graalvm/graalvm-ce-builds/releases
|
||||||
|
95
dist/index.js
generated
vendored
95
dist/index.js
generated
vendored
@ -7,7 +7,7 @@ require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.JDK_HOME_SUFFIX = exports.GRAALVM_PLATFORM = exports.GRAALVM_GH_USER = exports.GRAALVM_FILE_EXTENSION = exports.GRAALVM_BASE = exports.VERSION_TRUNK = exports.VERSION_LATEST = exports.VERSION_DEV = exports.IS_WINDOWS = exports.IS_MACOS = void 0;
|
exports.MANDREL_NAMESPACE = exports.JDK_HOME_SUFFIX = exports.GRAALVM_PLATFORM = exports.GRAALVM_GH_USER = exports.GRAALVM_FILE_EXTENSION = exports.GRAALVM_BASE = exports.VERSION_TRUNK = exports.VERSION_LATEST = exports.VERSION_DEV = exports.IS_WINDOWS = exports.IS_MACOS = void 0;
|
||||||
const os_1 = __nccwpck_require__(2037);
|
const os_1 = __nccwpck_require__(2037);
|
||||||
const path_1 = __nccwpck_require__(1017);
|
const path_1 = __nccwpck_require__(1017);
|
||||||
exports.IS_MACOS = process.platform === 'darwin';
|
exports.IS_MACOS = process.platform === 'darwin';
|
||||||
@ -20,6 +20,7 @@ exports.GRAALVM_FILE_EXTENSION = exports.IS_WINDOWS ? '.zip' : '.tar.gz';
|
|||||||
exports.GRAALVM_GH_USER = 'graalvm';
|
exports.GRAALVM_GH_USER = 'graalvm';
|
||||||
exports.GRAALVM_PLATFORM = exports.IS_WINDOWS ? 'windows' : process.platform;
|
exports.GRAALVM_PLATFORM = exports.IS_WINDOWS ? 'windows' : process.platform;
|
||||||
exports.JDK_HOME_SUFFIX = exports.IS_MACOS ? '/Contents/Home' : '';
|
exports.JDK_HOME_SUFFIX = exports.IS_MACOS ? '/Contents/Home' : '';
|
||||||
|
exports.MANDREL_NAMESPACE = 'mandrel-';
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
@ -400,6 +401,7 @@ const io_1 = __nccwpck_require__(7436);
|
|||||||
const dependencies_1 = __nccwpck_require__(6031);
|
const dependencies_1 = __nccwpck_require__(6031);
|
||||||
const gu_1 = __nccwpck_require__(3466);
|
const gu_1 = __nccwpck_require__(3466);
|
||||||
const graalvm_trunk_1 = __nccwpck_require__(7538);
|
const graalvm_trunk_1 = __nccwpck_require__(7538);
|
||||||
|
const mandrel_1 = __nccwpck_require__(438);
|
||||||
const msvc_1 = __nccwpck_require__(4765);
|
const msvc_1 = __nccwpck_require__(4765);
|
||||||
function run() {
|
function run() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
@ -427,7 +429,12 @@ function run() {
|
|||||||
graalVMHome = yield (0, graalvm_trunk_1.setUpGraalVMTrunk)(javaVersion, components);
|
graalVMHome = yield (0, graalvm_trunk_1.setUpGraalVMTrunk)(javaVersion, components);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
graalVMHome = yield graalvm.setUpGraalVMRelease(graalvmVersion, javaVersion);
|
if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) {
|
||||||
|
graalVMHome = yield (0, mandrel_1.setUpMandrel)(graalvmVersion, javaVersion);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
graalVMHome = yield graalvm.setUpGraalVMRelease(graalvmVersion, javaVersion);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Activate GraalVM
|
// Activate GraalVM
|
||||||
@ -442,6 +449,9 @@ function run() {
|
|||||||
if (graalvmVersion === c.VERSION_TRUNK) {
|
if (graalvmVersion === c.VERSION_TRUNK) {
|
||||||
// components built from source, nothing to do
|
// components built from source, nothing to do
|
||||||
}
|
}
|
||||||
|
else if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) {
|
||||||
|
core.warning(`Mandrel does not support GraalVM components: ${componentsString}`);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
yield (0, gu_1.setUpGUComponents)(graalVMHome, components);
|
yield (0, gu_1.setUpGUComponents)(graalVMHome, components);
|
||||||
}
|
}
|
||||||
@ -456,6 +466,87 @@ function run() {
|
|||||||
run();
|
run();
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 438:
|
||||||
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
|
exports.setUpMandrel = void 0;
|
||||||
|
const c = __importStar(__nccwpck_require__(5105));
|
||||||
|
const utils_1 = __nccwpck_require__(918);
|
||||||
|
const MANDREL_REPO = 'mandrel';
|
||||||
|
const MANDREL_TAG_PREFIX = c.MANDREL_NAMESPACE;
|
||||||
|
const MANDREL_DL_BASE = 'https://github.com/graalvm/mandrel/releases/download';
|
||||||
|
function setUpMandrel(graalvmVersion, javaVersion) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const mandrelVersion = graalvmVersion.substring(c.MANDREL_NAMESPACE.length, graalvmVersion.length);
|
||||||
|
let mandrelHome;
|
||||||
|
switch (mandrelVersion) {
|
||||||
|
case 'latest':
|
||||||
|
mandrelHome = yield setUpMandrelLatest(javaVersion);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mandrelHome = yield setUpMandrelRelease(mandrelVersion, javaVersion);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return mandrelHome;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.setUpMandrel = setUpMandrel;
|
||||||
|
function setUpMandrelLatest(javaVersion) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const latestRelease = yield (0, utils_1.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}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setUpMandrelRelease(version, javaVersion) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
const identifier = determineMandrelIdentifier(version, javaVersion);
|
||||||
|
const downloadUrl = `${MANDREL_DL_BASE}/${MANDREL_TAG_PREFIX}${version}/${identifier}${c.GRAALVM_FILE_EXTENSION}`;
|
||||||
|
return (0, utils_1.downloadAndExtractJDK)(downloadUrl);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function determineMandrelIdentifier(version, javaVersion) {
|
||||||
|
return `mandrel-java${javaVersion}-${c.GRAALVM_PLATFORM}-amd64-${version}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 4765:
|
/***/ 4765:
|
||||||
|
2
dist/index.js.map
generated
vendored
2
dist/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
@ -15,5 +15,7 @@ export const GRAALVM_GH_USER = 'graalvm'
|
|||||||
export const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform
|
export const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform
|
||||||
export const JDK_HOME_SUFFIX = IS_MACOS ? '/Contents/Home' : ''
|
export const JDK_HOME_SUFFIX = IS_MACOS ? '/Contents/Home' : ''
|
||||||
|
|
||||||
|
export const MANDREL_NAMESPACE = 'mandrel-'
|
||||||
|
|
||||||
export type LatestReleaseResponse =
|
export type LatestReleaseResponse =
|
||||||
otypes.Endpoints['GET /repos/{owner}/{repo}/releases/latest']['response']
|
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 {setUpDependencies} from './dependencies'
|
||||||
import {setUpGUComponents} from './gu'
|
import {setUpGUComponents} from './gu'
|
||||||
import {setUpGraalVMTrunk} from './graalvm-trunk'
|
import {setUpGraalVMTrunk} from './graalvm-trunk'
|
||||||
|
import {setUpMandrel} from './mandrel'
|
||||||
import {setUpWindowsEnvironment} from './msvc'
|
import {setUpWindowsEnvironment} from './msvc'
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
async function run(): Promise<void> {
|
||||||
@ -37,10 +38,14 @@ async function run(): Promise<void> {
|
|||||||
graalVMHome = await setUpGraalVMTrunk(javaVersion, components)
|
graalVMHome = await setUpGraalVMTrunk(javaVersion, components)
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
graalVMHome = await graalvm.setUpGraalVMRelease(
|
if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) {
|
||||||
graalvmVersion,
|
graalVMHome = await setUpMandrel(graalvmVersion, javaVersion)
|
||||||
javaVersion
|
} else {
|
||||||
)
|
graalVMHome = await graalvm.setUpGraalVMRelease(
|
||||||
|
graalvmVersion,
|
||||||
|
javaVersion
|
||||||
|
)
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,6 +61,10 @@ async function run(): Promise<void> {
|
|||||||
if (components.length > 0) {
|
if (components.length > 0) {
|
||||||
if (graalvmVersion === c.VERSION_TRUNK) {
|
if (graalvmVersion === c.VERSION_TRUNK) {
|
||||||
// components built from source, nothing to do
|
// components built from source, nothing to do
|
||||||
|
} else if (graalvmVersion.startsWith(c.MANDREL_NAMESPACE)) {
|
||||||
|
core.warning(
|
||||||
|
`Mandrel does not support GraalVM components: ${componentsString}`
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
await setUpGUComponents(graalVMHome, components)
|
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}`
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user