Added distro parameter and make use of disco api

This commit is contained in:
Gerrit Grunwald 2021-03-10 10:15:23 +01:00
parent fc62ccaa4f
commit efa74dc471
7 changed files with 6561 additions and 186 deletions

View file

@ -22,6 +22,7 @@ steps:
java-version: '9.0.4' # The JDK version to make available on the path. java-version: '9.0.4' # The JDK version to make available on the path.
java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
architecture: x64 # (x64 or x86) - defaults to x64 architecture: x64 # (x64 or x86) - defaults to x64
distro : zulu #(aoj, aoj_openj9, corretto, dragonwell, liberica, ojdk_build, oracle_open_jdk, sap_machine, zulu) - defaults to zulu
- run: java -cp java HelloWorldApp - run: java -cp java HelloWorldApp
``` ```
Examples of version specifications that the java-version parameter will accept: Examples of version specifications that the java-version parameter will accept:

15
dist/cleanup/index.js vendored
View file

@ -1021,6 +1021,7 @@ exports.INPUT_JAVA_VERSION = 'java-version';
exports.INPUT_ARCHITECTURE = 'architecture'; exports.INPUT_ARCHITECTURE = 'architecture';
exports.INPUT_JAVA_PACKAGE = 'java-package'; exports.INPUT_JAVA_PACKAGE = 'java-package';
exports.INPUT_JDK_FILE = 'jdkFile'; exports.INPUT_JDK_FILE = 'jdkFile';
exports.INPUT_DISTRO = 'distro';
exports.INPUT_SERVER_ID = 'server-id'; exports.INPUT_SERVER_ID = 'server-id';
exports.INPUT_SERVER_USERNAME = 'server-username'; exports.INPUT_SERVER_USERNAME = 'server-username';
exports.INPUT_SERVER_PASSWORD = 'server-password'; exports.INPUT_SERVER_PASSWORD = 'server-password';
@ -1030,6 +1031,20 @@ exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase';
exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined;
exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE';
exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint';
exports.DISCO_URL = 'https://api.foojay.io';
exports.PACKAGES_PATH = '/disco/v1.0/packages';
exports.EPHEMERAL_IDS_PATH = '/disco/v1.0/ephemeral_ids';
exports.DISTROS = [
'aoj',
'aoj_openj9',
'corretto',
'dragonwell',
'liberica',
'ojdk_build',
'oracle_open_jdk',
'sap_machine',
'zulu'
];
/***/ }), /***/ }),

217
dist/setup/index.js vendored
View file

@ -25758,6 +25758,7 @@ exports.INPUT_JAVA_VERSION = 'java-version';
exports.INPUT_ARCHITECTURE = 'architecture'; exports.INPUT_ARCHITECTURE = 'architecture';
exports.INPUT_JAVA_PACKAGE = 'java-package'; exports.INPUT_JAVA_PACKAGE = 'java-package';
exports.INPUT_JDK_FILE = 'jdkFile'; exports.INPUT_JDK_FILE = 'jdkFile';
exports.INPUT_DISTRO = 'distro';
exports.INPUT_SERVER_ID = 'server-id'; exports.INPUT_SERVER_ID = 'server-id';
exports.INPUT_SERVER_USERNAME = 'server-username'; exports.INPUT_SERVER_USERNAME = 'server-username';
exports.INPUT_SERVER_PASSWORD = 'server-password'; exports.INPUT_SERVER_PASSWORD = 'server-password';
@ -25767,6 +25768,20 @@ exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase';
exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined;
exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE';
exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint';
exports.DISCO_URL = 'https://api.foojay.io';
exports.PACKAGES_PATH = '/disco/v1.0/packages';
exports.EPHEMERAL_IDS_PATH = '/disco/v1.0/ephemeral_ids';
exports.DISTROS = [
'aoj',
'aoj_openj9',
'corretto',
'dragonwell',
'liberica',
'ojdk_build',
'oracle_open_jdk',
'sap_machine',
'zulu'
];
/***/ }), /***/ }),
@ -28791,7 +28806,8 @@ function run() {
required: true required: true
}); });
const jdkFile = core.getInput(constants.INPUT_JDK_FILE, { required: false }); const jdkFile = core.getInput(constants.INPUT_JDK_FILE, { required: false });
yield installer.getJava(version, arch, jdkFile, javaPackage); const distro = core.getInput(constants.INPUT_DISTRO, { required: false });
yield installer.getJava(version, arch, jdkFile, javaPackage, distro);
const matchersPath = path.join(__dirname, '..', '..', '.github'); const matchersPath = path.join(__dirname, '..', '..', '.github');
core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`);
const id = core.getInput(constants.INPUT_SERVER_ID, { required: false }); const id = core.getInput(constants.INPUT_SERVER_ID, { required: false });
@ -33491,11 +33507,12 @@ const httpm = __importStar(__webpack_require__(539));
const tc = __importStar(__webpack_require__(533)); const tc = __importStar(__webpack_require__(533));
const fs = __importStar(__webpack_require__(747)); const fs = __importStar(__webpack_require__(747));
const path = __importStar(__webpack_require__(622)); const path = __importStar(__webpack_require__(622));
const semver = __importStar(__webpack_require__(280));
const util = __importStar(__webpack_require__(322)); const util = __importStar(__webpack_require__(322));
const constants = __importStar(__webpack_require__(694));
const constants_1 = __webpack_require__(694);
const tempDirectory = util.getTempDir(); const tempDirectory = util.getTempDir();
const IS_WINDOWS = util.isWindows(); const IS_WINDOWS = util.isWindows();
function getJava(version, arch, jdkFile, javaPackage) { function getJava(version, arch, jdkFile, javaPackage, distro = 'zulu') {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
let toolPath = tc.find(javaPackage, version); let toolPath = tc.find(javaPackage, version);
if (toolPath) { if (toolPath) {
@ -33525,7 +33542,7 @@ function getJava(version, arch, jdkFile, javaPackage) {
} }
const contents = yield response.readBody(); const contents = yield response.readBody();
const refs = contents.match(/<a href.*\">/gi) || []; const refs = contents.match(/<a href.*\">/gi) || [];
const downloadInfo = getDownloadInfo(refs, version, arch, javaPackage); const downloadInfo = yield getDownloadInfo(refs, version, arch, javaPackage, distro);
jdkFile = yield tc.downloadTool(downloadInfo.url); jdkFile = yield tc.downloadTool(downloadInfo.url);
version = downloadInfo.version; version = downloadInfo.version;
compressedFileExtension = IS_WINDOWS ? '.zip' : '.tar.gz'; compressedFileExtension = IS_WINDOWS ? '.zip' : '.tar.gz';
@ -33641,101 +33658,149 @@ function unzipJavaDownload(repoRoot, fileEnding, destinationFolder, extension) {
} }
}); });
} }
function getDownloadInfo(refs, version, arch, javaPackage) { function getDownloadInfo(refs, version, arch, javaPackage, distro) {
version = normalizeVersion(version); return __awaiter(this, void 0, void 0, function* () {
const archExtension = arch === 'x86' ? 'i686' : 'x64'; const architecture = arch === 'x86' ? 'i686' : 'x64';
let extension = ''; let operatingSystem = '';
if (IS_WINDOWS) { let packageType = '';
extension = `-win_${archExtension}.zip`;
}
else {
if (process.platform === 'darwin') {
extension = `-macosx_${archExtension}.tar.gz`;
}
else {
extension = `-linux_${archExtension}.tar.gz`;
}
}
core.debug(`Searching for files with extension: ${extension}`);
let pkgRegexp = new RegExp('');
let pkgTypeLength = 0;
if (javaPackage === 'jdk') { if (javaPackage === 'jdk') {
pkgRegexp = /jdk.*-/gi; packageType = 'jdk';
pkgTypeLength = 'jdk'.length;
} }
else if (javaPackage == 'jre') { else if (javaPackage === 'jre') {
pkgRegexp = /jre.*-/gi; packageType = 'jre';
pkgTypeLength = 'jre'.length;
} }
else if (javaPackage == 'jdk+fx') { else if (javaPackage === 'jdk+fx') {
pkgRegexp = /fx-jdk.*-/gi; packageType = 'jdk+fx';
pkgTypeLength = 'fx-jdk'.length;
} }
else { else {
throw new Error(`package argument ${javaPackage} is not in [jdk | jre | jdk+fx]`); throw new Error(`package argument ${javaPackage} is not in [jdk | jre | jdk+fx]`);
} }
// Maps version to url let distribution = '';
let versionMap = new Map(); if (distro) {
// Filter by platform if (distro === '') {
refs.forEach(ref => { distribution = 'zulu';
if (!ref.endsWith(extension + '">')) {
return;
} }
// If we haven't returned, means we're looking at the correct platform else if (constants_1.DISTROS.indexOf(distro.toLowerCase()) > -1) {
let versions = ref.match(pkgRegexp) || []; distribution = distro.toLowerCase();
if (versions.length > 1) {
throw new Error(`Invalid ref received from https://static.azul.com/zulu/bin/: ${ref}`);
} }
if (versions.length == 0) { else {
return; throw new Error(`distro argument '${distro}' is not in [aoj | aoj_openj9 | corretto | dragonwell | liberica | ojdk_build | oracle_open_jdk | sap_machine | zulu]`);
} }
const refVersion = versions[0].slice(pkgTypeLength, versions[0].length - 1);
if (semver.satisfies(refVersion, version)) {
versionMap.set(refVersion, 'https://static.azul.com/zulu/bin/' +
ref.slice('<a href="'.length, ref.length - '">'.length));
} }
else {
distribution = 'zulu';
}
let archiveType;
if (IS_WINDOWS) {
operatingSystem = 'windows';
archiveType = 'zip';
}
else {
if (process.platform === 'darwin') {
operatingSystem = 'macos';
archiveType = distribution === 'liberica' ? 'zip' : 'tar.gz';
}
else {
operatingSystem = 'linux';
archiveType = distribution === 'ojdk_build' ? 'zip' : 'tar.gz';
}
}
let latest = 'explicit';
if (version.endsWith('x')) {
if (version.endsWith('.x')) {
version = version.slice(0, -2);
latest = 'per_version';
}
else {
version = version.slice(0, -1);
latest = 'overall';
}
}
if (version.endsWith('0') ||
version.length === 1 ||
version.length === 2 ||
version.includes('ea')) {
latest = 'overall';
}
let url = constants_1.DISCO_URL + constants_1.PACKAGES_PATH;
url += '?distro=' + distribution;
if (version.length != 0) {
url += '&version=' + version;
}
if (javaPackage === 'jdk+fx') {
url += '&package_type=jdk';
url += '&javafx_bundled=true';
}
else {
url += '&package_type=' + packageType;
}
url += '&release_status=ea';
url += '&release_status=ga';
url += '&architecture=' + architecture;
url += '&operating_system=' + operatingSystem;
url += '&archive_type=' + archiveType;
url += '&latest=' + latest;
const http = new httpm.HttpClient('bundles', undefined, {
allowRetries: true,
maxRetries: 3
}); });
let json = '';
const response = yield http.get(url);
const statusCode = response.message.statusCode || 0;
if (statusCode == 200) {
let body = '';
try {
body = yield response.readBody();
json = JSON.parse(body);
}
catch (err) {
core.debug(`Unable to read body: ${err.message}`);
}
}
else {
const message = 'Unexpected HTTP status code ' +
response.message.statusCode +
' when retrieving versions from ' +
url;
throw new Error(message);
}
// Choose the most recent satisfying version // Choose the most recent satisfying version
let curVersion = '0.0.0'; let curVersion = '0.0.0';
let curUrl = ''; let curUrl = '';
for (const entry of versionMap.entries()) { if (json.length > 0) {
const entryVersion = entry[0]; curVersion = json[0].java_version;
const entryUrl = entry[1]; curUrl = yield getPackageFileUrl(json[0].ephemeral_id);
if (semver.gt(entryVersion, curVersion)) {
curUrl = entryUrl;
curVersion = entryVersion;
}
} }
if (curUrl == '') { if (curUrl == '') {
throw new Error(`No valid download found for version ${version} and package ${javaPackage}. Check https://static.azul.com/zulu/bin/ for a list of valid versions or download your own jdk file and add the jdkFile argument`); throw new Error(`No valid download found for ${distribution} with version ${version} and package ${packageType}. Please download your own jdk file and add the jdkFile argument`);
} }
return { version: curVersion, url: curUrl }; return { version: curVersion, url: curUrl };
});
} }
function normalizeVersion(version) { function getPackageFileUrl(ephemeralId) {
if (version.slice(0, 2) === '1.') { return __awaiter(this, void 0, void 0, function* () {
// Trim leading 1. for versions like 1.8 let url = constants.DISCO_URL + constants.EPHEMERAL_IDS_PATH + '/' + ephemeralId;
version = version.slice(2); const http = new httpm.HttpClient('bundle-info', undefined, {
if (!version) { allowRetries: true,
throw new Error('1. is not a valid version'); maxRetries: 3
});
const response = yield http.get(url);
const statusCode = response.message.statusCode || 0;
if (statusCode == 200) {
let body = '';
try {
body = yield response.readBody();
let json = JSON.parse(body);
return json.direct_download_uri;
} }
catch (err) {
core.debug(`Unable to read body: ${err.message}`);
} }
if (version.endsWith('-ea')) { const message = `Unexpected HTTP status code '${response.message.statusCode}' when retrieving versions from '${url}'. ${body}`.trim();
// convert e.g. 14-ea to 14.0.0-ea throw new Error(message);
if (version.indexOf('.') == -1) {
version = version.slice(0, version.length - 3) + '.0.0-ea';
} }
// match anything in -ea.X (semver won't do .x matching on pre-release versions) return '';
if (version[0] >= '0' && version[0] <= '9') { });
version = '>=' + version;
}
}
else if (version.split('.').length < 3) {
// For non-ea versions, add trailing .x if it is missing
if (version[version.length - 1] != 'x') {
version = version + '.x';
}
}
return version;
} }

6253
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -3,6 +3,7 @@ export const INPUT_JAVA_VERSION = 'java-version';
export const INPUT_ARCHITECTURE = 'architecture'; export const INPUT_ARCHITECTURE = 'architecture';
export const INPUT_JAVA_PACKAGE = 'java-package'; export const INPUT_JAVA_PACKAGE = 'java-package';
export const INPUT_JDK_FILE = 'jdkFile'; export const INPUT_JDK_FILE = 'jdkFile';
export const INPUT_DISTRO = 'distro';
export const INPUT_SERVER_ID = 'server-id'; export const INPUT_SERVER_ID = 'server-id';
export const INPUT_SERVER_USERNAME = 'server-username'; export const INPUT_SERVER_USERNAME = 'server-username';
export const INPUT_SERVER_PASSWORD = 'server-password'; export const INPUT_SERVER_PASSWORD = 'server-password';
@ -14,3 +15,18 @@ export const INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined;
export const INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; export const INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE';
export const STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; export const STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint';
export const DISCO_URL = 'https://api.foojay.io';
export const PACKAGES_PATH = '/disco/v1.0/packages';
export const EPHEMERAL_IDS_PATH = '/disco/v1.0/ephemeral_ids';
export const DISTROS: string[] = [
'aoj',
'aoj_openj9',
'corretto',
'dragonwell',
'liberica',
'ojdk_build',
'oracle_open_jdk',
'sap_machine',
'zulu'
];

View file

@ -7,6 +7,8 @@ import * as fs from 'fs';
import * as path from 'path'; import * as path from 'path';
import * as semver from 'semver'; import * as semver from 'semver';
import * as util from './util'; import * as util from './util';
import * as constants from './constants';
import {DISCO_URL, DISTROS, PACKAGES_PATH} from './constants';
const tempDirectory = util.getTempDir(); const tempDirectory = util.getTempDir();
const IS_WINDOWS = util.isWindows(); const IS_WINDOWS = util.isWindows();
@ -15,7 +17,8 @@ export async function getJava(
version: string, version: string,
arch: string, arch: string,
jdkFile: string, jdkFile: string,
javaPackage: string javaPackage: string,
distro: string = 'zulu'
): Promise<void> { ): Promise<void> {
let toolPath = tc.find(javaPackage, version); let toolPath = tc.find(javaPackage, version);
@ -45,7 +48,13 @@ export async function getJava(
const contents = await response.readBody(); const contents = await response.readBody();
const refs = contents.match(/<a href.*\">/gi) || []; const refs = contents.match(/<a href.*\">/gi) || [];
const downloadInfo = getDownloadInfo(refs, version, arch, javaPackage); const downloadInfo = await getDownloadInfo(
refs,
version,
arch,
javaPackage,
distro
);
jdkFile = await tc.downloadTool(downloadInfo.url); jdkFile = await tc.downloadTool(downloadInfo.url);
version = downloadInfo.version; version = downloadInfo.version;
compressedFileExtension = IS_WINDOWS ? '.zip' : '.tar.gz'; compressedFileExtension = IS_WINDOWS ? '.zip' : '.tar.gz';
@ -178,121 +187,155 @@ async function unzipJavaDownload(
} }
} }
function getDownloadInfo( async function getDownloadInfo(
refs: string[], refs: string[],
version: string, version: string,
arch: string, arch: string,
javaPackage: string javaPackage: string,
): {version: string; url: string} { distro: string
version = normalizeVersion(version); ): Promise<{version: string; url: string}> {
const architecture = arch === 'x86' ? 'i686' : 'x64';
const archExtension = arch === 'x86' ? 'i686' : 'x64'; let operatingSystem = '';
let packageType = '';
let extension = '';
if (IS_WINDOWS) {
extension = `-win_${archExtension}.zip`;
} else {
if (process.platform === 'darwin') {
extension = `-macosx_${archExtension}.tar.gz`;
} else {
extension = `-linux_${archExtension}.tar.gz`;
}
}
core.debug(`Searching for files with extension: ${extension}`);
let pkgRegexp = new RegExp('');
let pkgTypeLength = 0;
if (javaPackage === 'jdk') { if (javaPackage === 'jdk') {
pkgRegexp = /jdk.*-/gi; packageType = 'jdk';
pkgTypeLength = 'jdk'.length; } else if (javaPackage === 'jre') {
} else if (javaPackage == 'jre') { packageType = 'jre';
pkgRegexp = /jre.*-/gi; } else if (javaPackage === 'jdk+fx') {
pkgTypeLength = 'jre'.length; packageType = 'jdk+fx';
} else if (javaPackage == 'jdk+fx') {
pkgRegexp = /fx-jdk.*-/gi;
pkgTypeLength = 'fx-jdk'.length;
} else { } else {
throw new Error( throw new Error(
`package argument ${javaPackage} is not in [jdk | jre | jdk+fx]` `package argument ${javaPackage} is not in [jdk | jre | jdk+fx]`
); );
} }
let distribution = '';
// Maps version to url if (distro) {
let versionMap = new Map(); if (distro === '') {
distribution = 'zulu';
// Filter by platform } else if (DISTROS.indexOf(distro.toLowerCase()) > -1) {
refs.forEach(ref => { distribution = distro.toLowerCase();
if (!ref.endsWith(extension + '">')) { } else {
return;
}
// If we haven't returned, means we're looking at the correct platform
let versions = ref.match(pkgRegexp) || [];
if (versions.length > 1) {
throw new Error( throw new Error(
`Invalid ref received from https://static.azul.com/zulu/bin/: ${ref}` `distro argument '${distro}' is not in [aoj | aoj_openj9 | corretto | dragonwell | liberica | ojdk_build | oracle_open_jdk | sap_machine | zulu]`
); );
} }
if (versions.length == 0) { } else {
return; distribution = 'zulu';
}
let archiveType;
if (IS_WINDOWS) {
operatingSystem = 'windows';
archiveType = 'zip';
} else {
if (process.platform === 'darwin') {
operatingSystem = 'macos';
archiveType = distribution === 'liberica' ? 'zip' : 'tar.gz';
} else {
operatingSystem = 'linux';
archiveType = distribution === 'ojdk_build' ? 'zip' : 'tar.gz';
}
} }
const refVersion = versions[0].slice(pkgTypeLength, versions[0].length - 1);
if (semver.satisfies(refVersion, version)) { let latest = 'explicit';
versionMap.set( if (version.endsWith('x')) {
refVersion, if (version.endsWith('.x')) {
'https://static.azul.com/zulu/bin/' + version = version.slice(0, -2);
ref.slice('<a href="'.length, ref.length - '">'.length) latest = 'per_version';
); } else {
version = version.slice(0, -1);
latest = 'overall';
} }
}
if (
version.endsWith('0') ||
version.length === 1 ||
version.length === 2 ||
version.includes('ea')
) {
latest = 'overall';
}
let url = DISCO_URL + PACKAGES_PATH;
url += '?distro=' + distribution;
if (version.length != 0) {
url += '&version=' + version;
}
if (javaPackage === 'jdk+fx') {
url += '&package_type=jdk';
url += '&javafx_bundled=true';
} else {
url += '&package_type=' + packageType;
}
url += '&release_status=ea';
url += '&release_status=ga';
url += '&architecture=' + architecture;
url += '&operating_system=' + operatingSystem;
url += '&archive_type=' + archiveType;
url += '&latest=' + latest;
const http = new httpm.HttpClient('bundles', undefined, {
allowRetries: true,
maxRetries: 3
}); });
let json: any = '';
const response = await http.get(url);
const statusCode = response.message.statusCode || 0;
if (statusCode == 200) {
let body = '';
try {
body = await response.readBody();
json = JSON.parse(body);
} catch (err) {
core.debug(`Unable to read body: ${err.message}`);
}
} else {
const message =
'Unexpected HTTP status code ' +
response.message.statusCode +
' when retrieving versions from ' +
url;
throw new Error(message);
}
// Choose the most recent satisfying version // Choose the most recent satisfying version
let curVersion = '0.0.0'; let curVersion = '0.0.0';
let curUrl = ''; let curUrl = '';
for (const entry of versionMap.entries()) { if (json.length > 0) {
const entryVersion = entry[0]; curVersion = json[0].java_version;
const entryUrl = entry[1]; curUrl = await getPackageFileUrl(json[0].ephemeral_id);
if (semver.gt(entryVersion, curVersion)) {
curUrl = entryUrl;
curVersion = entryVersion;
}
} }
if (curUrl == '') { if (curUrl == '') {
throw new Error( throw new Error(
`No valid download found for version ${version} and package ${javaPackage}. Check https://static.azul.com/zulu/bin/ for a list of valid versions or download your own jdk file and add the jdkFile argument` `No valid download found for ${distribution} with version ${version} and package ${packageType}. Please download your own jdk file and add the jdkFile argument`
); );
} }
return {version: curVersion, url: curUrl}; return {version: curVersion, url: curUrl};
} }
function normalizeVersion(version: string): string { async function getPackageFileUrl(ephemeralId: string) {
if (version.slice(0, 2) === '1.') { let url: string =
// Trim leading 1. for versions like 1.8 constants.DISCO_URL + constants.EPHEMERAL_IDS_PATH + '/' + ephemeralId;
version = version.slice(2); const http = new httpm.HttpClient('bundle-info', undefined, {
if (!version) { allowRetries: true,
throw new Error('1. is not a valid version'); maxRetries: 3
} });
}
if (version.endsWith('-ea')) { const response = await http.get(url);
// convert e.g. 14-ea to 14.0.0-ea const statusCode = response.message.statusCode || 0;
if (version.indexOf('.') == -1) { if (statusCode == 200) {
version = version.slice(0, version.length - 3) + '.0.0-ea'; let body = '';
try {
body = await response.readBody();
let json = JSON.parse(body);
return json.direct_download_uri;
} catch (err) {
core.debug(`Unable to read body: ${err.message}`);
} }
// match anything in -ea.X (semver won't do .x matching on pre-release versions) const message = `Unexpected HTTP status code '${response.message.statusCode}' when retrieving versions from '${url}'. ${body}`.trim();
if (version[0] >= '0' && version[0] <= '9') { throw new Error(message);
version = '>=' + version;
} }
} else if (version.split('.').length < 3) { return '';
// For non-ea versions, add trailing .x if it is missing
if (version[version.length - 1] != 'x') {
version = version + '.x';
}
}
return version;
} }

View file

@ -22,7 +22,9 @@ async function run() {
}); });
const jdkFile = core.getInput(constants.INPUT_JDK_FILE, {required: false}); const jdkFile = core.getInput(constants.INPUT_JDK_FILE, {required: false});
await installer.getJava(version, arch, jdkFile, javaPackage); const distro = core.getInput(constants.INPUT_DISTRO, {required: false});
await installer.getJava(version, arch, jdkFile, javaPackage, distro);
const matchersPath = path.join(__dirname, '..', '..', '.github'); const matchersPath = path.join(__dirname, '..', '..', '.github');
core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`);