mirror of
https://github.com/actions/setup-java.git
synced 2026-07-31 22:51:39 +08:00
* Optimize Maven configuration warm path Avoid eager Maven XML initialization on warm JDK runs by using deterministic serializers for new Maven settings/toolchains files, lazy-loading xmlbuilder2 for existing toolchains merges, and deferring Maven configuration modules until after Java setup. Add targeted tests for XML escaping, lazy xmlbuilder2 loading, concurrent Maven configuration, and a manual benchmark workflow for warm-path validation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4dc58426-5e20-44cb-af16-8da0965fac3b * Address Maven optimization PR feedback Make the toolchain XML generator consistently async, remove redundant Maven configuration await handling, and reuse the existing XML test helper. Configure CodeQL to skip generated dist output so newly split vendored chunks do not report duplicate generated-code alerts. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4dc58426-5e20-44cb-af16-8da0965fac3b * Apply rubber duck review suggestions Document XML attribute escaping, simplify Maven configuration awaiting, and add a regression test that feeds fast-path toolchains output into the merge path. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4dc58426-5e20-44cb-af16-8da0965fac3b * Delete .github/codeql/codeql-config.yml * Update codeql-analysis.yml * Replace xmlbuilder2 in Maven toolchain merge Use fast-xml-parser for existing toolchains.xml parsing and serialize merged Maven toolchains deterministically. This removes the bundled xmlbuilder2 DOM/XML builder chunk from dist while preserving merge behavior for custom attributes, custom toolchains, partial entries, duplicate filtering, and escaping. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4dc58426-5e20-44cb-af16-8da0965fac3b * Move Maven benchmark out of setup-java Remove the Maven warm-path benchmark workflow and helper script from setup-java. Benchmark coverage is being moved to actions/setup-java-benchmarks so this action repository only carries the runtime optimization, tests, and generated distribution artifacts. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4dc58426-5e20-44cb-af16-8da0965fac3b --------- Copilot-Session: 4dc58426-5e20-44cb-af16-8da0965fac3b
581 lines
28 KiB
JavaScript
581 lines
28 KiB
JavaScript
export const id = 874;
|
|
export const ids = [874,463];
|
|
export const modules = {
|
|
|
|
/***/ 7874:
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ AdoptDistribution: () => (/* binding */ AdoptDistribution),
|
|
/* harmony export */ AdoptImplementation: () => (/* binding */ AdoptImplementation)
|
|
/* harmony export */ });
|
|
/* harmony import */ var _actions_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3838);
|
|
/* harmony import */ var _actions_tool_cache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9805);
|
|
/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9896);
|
|
/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_2__);
|
|
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6928);
|
|
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__);
|
|
/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2088);
|
|
/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_4__);
|
|
/* harmony import */ var _base_installer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6242);
|
|
/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4527);
|
|
/* harmony import */ var _temurin_installer_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(463);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var AdoptImplementation;
|
|
(function (AdoptImplementation) {
|
|
AdoptImplementation["Hotspot"] = "Hotspot";
|
|
AdoptImplementation["OpenJ9"] = "OpenJ9";
|
|
})(AdoptImplementation || (AdoptImplementation = {}));
|
|
class AdoptDistribution extends _base_installer_js__WEBPACK_IMPORTED_MODULE_5__/* .JavaBase */ .O {
|
|
jvmImpl;
|
|
temurinDistribution;
|
|
constructor(installerOptions, jvmImpl, temurinDistribution = null) {
|
|
super(`Adopt-${jvmImpl}`, installerOptions);
|
|
this.jvmImpl = jvmImpl;
|
|
if (temurinDistribution !== null &&
|
|
jvmImpl !== AdoptImplementation.Hotspot) {
|
|
throw new Error('Only Hotspot JVM is supported by Temurin.');
|
|
}
|
|
// Only use the temurin repo for Hotspot JVMs
|
|
this.temurinDistribution =
|
|
temurinDistribution ??
|
|
(jvmImpl === AdoptImplementation.Hotspot
|
|
? new _temurin_installer_js__WEBPACK_IMPORTED_MODULE_7__.TemurinDistribution(installerOptions, _temurin_installer_js__WEBPACK_IMPORTED_MODULE_7__.TemurinImplementation.Hotspot)
|
|
: null);
|
|
}
|
|
async findPackageForDownload(version) {
|
|
if (this.jvmImpl === AdoptImplementation.Hotspot) {
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .notice */ .lm("AdoptOpenJDK has moved to Eclipse Temurin https://github.com/actions/setup-java#supported-distributions please consider changing to the 'temurin' distribution type in your setup-java configuration.");
|
|
}
|
|
if (this.jvmImpl === AdoptImplementation.Hotspot &&
|
|
this.temurinDistribution !== null) {
|
|
try {
|
|
return await this.temurinDistribution.findPackageForDownload(version);
|
|
}
|
|
catch (error) {
|
|
// Log the failure but always fall back to legacy AdoptOpenJDK for resilience
|
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
if (error instanceof Error && error.name === 'VersionNotFoundError') {
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .notice */ .lm('The JVM you are looking for could not be found in the Temurin repository, this likely indicates ' +
|
|
'that you are using an out of date version of Java, consider updating and moving to using the Temurin distribution type in setup-java.');
|
|
}
|
|
else {
|
|
// Log other errors for debugging but gracefully fall back
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .debug */ .Yz(`Temurin lookup failed: ${errorMessage}. Falling back to AdoptOpenJDK API.`);
|
|
}
|
|
}
|
|
}
|
|
// failed to find a Temurin version, so fall back to AdoptOpenJDK
|
|
return this.findPackageForDownloadOldAdoptOpenJdk(version);
|
|
}
|
|
async findPackageForDownloadOldAdoptOpenJdk(version) {
|
|
const availableVersionsRaw = await this.getAvailableVersions();
|
|
const availableVersionsWithBinaries = availableVersionsRaw
|
|
.filter(item => item.binaries.length > 0)
|
|
.map(item => {
|
|
return {
|
|
version: item.version_data.semver,
|
|
url: item.binaries[0].package.link,
|
|
checksum: {
|
|
algorithm: 'sha256',
|
|
value: item.binaries[0].package.checksum,
|
|
source: item.binaries[0].package.checksum_link
|
|
}
|
|
};
|
|
});
|
|
const satisfiedVersions = availableVersionsWithBinaries
|
|
.filter(item => (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .isVersionSatisfies */ .y)(version, item.version))
|
|
.sort((a, b) => {
|
|
return -semver__WEBPACK_IMPORTED_MODULE_4___default().compareBuild(a.version, b.version);
|
|
});
|
|
const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null;
|
|
if (!resolvedFullVersion) {
|
|
const availableVersionStrings = availableVersionsWithBinaries.map(item => item.version);
|
|
throw this.createVersionNotFoundError(version, availableVersionStrings);
|
|
}
|
|
return resolvedFullVersion;
|
|
}
|
|
async downloadTool(javaRelease) {
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .info */ .pq(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`);
|
|
let javaArchivePath = await this.downloadAndVerify(javaRelease);
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .info */ .pq(`Extracting Java archive...`);
|
|
const extension = (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .getDownloadArchiveExtension */ .ag)();
|
|
if (process.platform === 'win32') {
|
|
javaArchivePath = (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .renameWinArchive */ .n2)(javaArchivePath);
|
|
}
|
|
const extractedJavaPath = await (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .extractJdkFile */ .PE)(javaArchivePath, extension);
|
|
const archiveName = fs__WEBPACK_IMPORTED_MODULE_2___default().readdirSync(extractedJavaPath)[0];
|
|
const archivePath = path__WEBPACK_IMPORTED_MODULE_3___default().join(extractedJavaPath, archiveName);
|
|
const version = this.getToolcacheVersionName(javaRelease.version);
|
|
const javaPath = await _actions_tool_cache__WEBPACK_IMPORTED_MODULE_1__/* .cacheDir */ .e8(archivePath, this.toolcacheFolderName, version, this.architecture);
|
|
return { version: javaRelease.version, path: javaPath };
|
|
}
|
|
get toolcacheFolderName() {
|
|
if (this.jvmImpl === AdoptImplementation.Hotspot) {
|
|
// exclude Hotspot postfix from distribution name because Hosted runners have pre-cached Adopt OpenJDK under "Java_Adopt_jdk"
|
|
// for more information see: https://github.com/actions/setup-java/pull/155#discussion_r610451063
|
|
return `Java_Adopt_${this.packageType}`;
|
|
}
|
|
return super.toolcacheFolderName;
|
|
}
|
|
async getAvailableVersions() {
|
|
const platform = this.getPlatformOption();
|
|
const arch = this.distributionArchitecture();
|
|
const imageType = this.packageType;
|
|
const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions
|
|
const releaseType = this.stable ? 'ga' : 'ea';
|
|
if (_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .isDebug */ ._o()) {
|
|
console.time('Retrieving available versions for Adopt took'); // eslint-disable-line no-console
|
|
}
|
|
const baseRequestArguments = [
|
|
`project=jdk`,
|
|
'vendor=adoptopenjdk',
|
|
`heap_size=normal`,
|
|
'sort_method=DEFAULT',
|
|
'sort_order=DESC',
|
|
`os=${platform}`,
|
|
`architecture=${arch}`,
|
|
`image_type=${imageType}`,
|
|
`release_type=${releaseType}`,
|
|
`jvm_impl=${this.jvmImpl.toLowerCase()}`
|
|
].join('&');
|
|
const requestArguments = `${baseRequestArguments}&page_size=20&page=0`;
|
|
let availableVersionsUrl = `https://api.adoptopenjdk.net/v3/assets/version/${versionRange}?${requestArguments}`;
|
|
const availableVersions = [];
|
|
let pageCount = 0;
|
|
if (_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .isDebug */ ._o()) {
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .debug */ .Yz(`Gathering available versions from '${availableVersionsUrl}'`);
|
|
}
|
|
while (availableVersionsUrl) {
|
|
pageCount++;
|
|
const response = await this.http.getJson(availableVersionsUrl);
|
|
const paginationPage = response.result;
|
|
const nextUrl = (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .getNextPageUrlFromLinkHeader */ .rC)(response.headers);
|
|
if (nextUrl &&
|
|
!(0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .validatePaginationUrl */ .SA)(nextUrl, 'https://api.adoptopenjdk.net')) {
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .warning */ .$e(`Ignoring pagination link with unexpected origin: ${nextUrl}`);
|
|
availableVersionsUrl = null;
|
|
}
|
|
else {
|
|
availableVersionsUrl = nextUrl;
|
|
}
|
|
if (paginationPage === null || paginationPage.length === 0) {
|
|
break;
|
|
}
|
|
availableVersions.push(...paginationPage);
|
|
if (pageCount >= _util_js__WEBPACK_IMPORTED_MODULE_6__/* .MAX_PAGINATION_PAGES */ .Tp) {
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .warning */ .$e(`Reached pagination safeguard limit (${_util_js__WEBPACK_IMPORTED_MODULE_6__/* .MAX_PAGINATION_PAGES */ .Tp} pages) while listing Adopt releases.`);
|
|
break;
|
|
}
|
|
}
|
|
if (_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .isDebug */ ._o()) {
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .startGroup */ .Oh('Print information about available versions');
|
|
console.timeEnd('Retrieving available versions for Adopt took'); // eslint-disable-line no-console
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .debug */ .Yz(`Available versions: [${availableVersions.length}]`);
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .debug */ .Yz(availableVersions.map(item => item.version_data.semver).join(', '));
|
|
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .endGroup */ .N4();
|
|
}
|
|
return availableVersions;
|
|
}
|
|
getPlatformOption() {
|
|
// Adopt has own platform names so need to map them
|
|
switch (process.platform) {
|
|
case 'darwin':
|
|
return 'mac';
|
|
case 'win32':
|
|
return 'windows';
|
|
default:
|
|
return process.platform;
|
|
}
|
|
}
|
|
distributionArchitecture() {
|
|
const architecture = super.distributionArchitecture();
|
|
return architecture === 'armv7' ? 'arm' : architecture;
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 463:
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
// EXPORTS
|
|
__webpack_require__.d(__webpack_exports__, {
|
|
TemurinDistribution: () => (/* binding */ TemurinDistribution),
|
|
TemurinImplementation: () => (/* binding */ TemurinImplementation)
|
|
});
|
|
|
|
// UNUSED EXPORTS: ADOPTIUM_PUBLIC_KEY
|
|
|
|
// EXTERNAL MODULE: ./node_modules/@actions/core/lib/core.js + 7 modules
|
|
var core = __webpack_require__(3838);
|
|
// EXTERNAL MODULE: ./node_modules/@actions/tool-cache/lib/tool-cache.js + 2 modules
|
|
var tool_cache = __webpack_require__(9805);
|
|
// EXTERNAL MODULE: external "fs"
|
|
var external_fs_ = __webpack_require__(9896);
|
|
var external_fs_default = /*#__PURE__*/__webpack_require__.n(external_fs_);
|
|
// EXTERNAL MODULE: external "path"
|
|
var external_path_ = __webpack_require__(6928);
|
|
var external_path_default = /*#__PURE__*/__webpack_require__.n(external_path_);
|
|
// EXTERNAL MODULE: ./node_modules/semver/index.js
|
|
var semver = __webpack_require__(2088);
|
|
var semver_default = /*#__PURE__*/__webpack_require__.n(semver);
|
|
// EXTERNAL MODULE: ./src/gpg.ts
|
|
var gpg = __webpack_require__(8343);
|
|
;// CONCATENATED MODULE: ./src/distributions/temurin/adoptium-key.ts
|
|
// Adoptium GPG signing key (fingerprint: 3B04D753C9050D9A5D343F39843C48A565F8F04B)
|
|
// Retrieved from: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3B04D753C9050D9A5D343F39843C48A565F8F04B
|
|
const ADOPTIUM_PUBLIC_KEY = `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
|
|
xsBNBGGTvTQBCAC6ey144n7CG8foafF6mwgIBN1fIm1ILZDuGS4tMr0/XI8pgJnT
|
|
QvsPxZWEvtSm7bEMObzEoZJcXwjBcJl1B0ui8k5kHMTI75gCmZPsoKLFWIEpuRBQ
|
|
PBocusw80apDmLnNDQLVQvDFtEua5gaNa/fRw9YsmBoXBqvgrjFUIdGyWoQvH5+a
|
|
9OYlWD9n5VV0gnVMb+aclwVzB/zJw3kHGSgzuMtlAHeQiah7Y8yomQn/UIX8yqDf
|
|
+11sP3+c87YcjkRqImRTtmKEDcEtGPAIXC6SYA+uEEkbYE0Fy0chkvtnVWJ597fa
|
|
Epai4rnICU8zoJ6X5z3v1aM2WerhX9oq9X8PABEBAAHNQEFkb3B0aXVtIEdQRyBL
|
|
ZXkgKERFQi9SUE0gU2lnbmluZyBLZXkpIDx0ZW11cmluLWRldkBlY2xpcHNlLm9y
|
|
Zz7CwJIEEwEIADwWIQQ7BNdTyQUNml00PzmEPEilZfjwSwUCYZO9NAIbAwULCQgH
|
|
AgMiAgEGFQoJCAsCBBYCAwECHgcCF4AACgkQhDxIpWX48Et4AggAjjJzYWuKV3nG
|
|
7ngInngl8G/m9JoHr7BmwgcQXYhdy5hVkMcUx5JLeXz2LMBUH/F2nD595hgjMabk
|
|
kVib20X8lq9RsNbdfc2hBcWU6qyHKxsIqT4boI2/XDyEzzMyyZWWNGo/27Ci7Xmj
|
|
pWu31nh0pDdPqdyWDIKojbVVnxlCRY8as8Sm+1ufi709KCi4MuwHNsUlCSwb/fju
|
|
NKeHkrHbLcHKUUIEcmTSKRWrpMYBzm1HYOGBz4xPuELwUfUp71ehfoyBZlp6RDRf
|
|
l5TYI1FmCyHuvjNhrJgWv7bOTcf8yObGY+TEUhzc4xQqCrF4ur9d3opvsuPBQsv+
|
|
Klqi5KSZgs7ATQRhk700AQgAq14okly8cFrpYVenEQPiB75AUZfKRpMduiR6IxAj
|
|
SKcH7aSoFZ9AubUEBVpZsyT5svxoEPe1i4TdbF+m9FGy42EcOlLa3ArLTj5H8FRl
|
|
UdGZB9I5mk4GptOzPM+aHMMu92vW/ZwjuS8DvOiQSp+cUmG1EqOMJSM7e/4BM71z
|
|
E+OKaVJCj79pEzhG3SK/IC/OlxxyETT66NSfYJd7Sw5R6Vr19am/uNU690W0CJ+q
|
|
VQeFpmDMr7LnfdFRIh+lJe05+PvWXeidkGjox5cbG52wf8aRIR/FgkfcFvqRMN1f
|
|
B+dVOWueloUeVAnzcUznOKmUEs7LP9ObJhYHHgup4IAU2wARAQABwsB2BBgBCAAg
|
|
FiEEOwTXU8kFDZpdND85hDxIpWX48EsFAmGTvTQCGwwACgkQhDxIpWX48EvXHQf/
|
|
Q0nZsGDXnZHiBoojeSdpkO7WBjMIP3w1GdLvRpPQrS8TfOPbZuoevzCNh38Y3gwF
|
|
yelJspvzDQrBXhgkzAGlucYg8Y7KHa5Ebm7iDgMzc37L1hYSZTYCqwd7aowfgy34
|
|
hOk3B67LffkJpIh738Oa9CtlwxQ9xcytmBmQ1fBBOwm/9IhAwHPQuydYIs4DxWbj
|
|
0MGSP4fDntU7e4UjsHNmhudDcYol0FaqdHHIIB9C/G4CzetRwHFOn3b4JwXMU7YU
|
|
6aJA3mXhi3hggMC3wkT2HHZ/TquuOdNc02fypWOCDOHz0alBBJNqoVUNFNqU3tfJ
|
|
wI4qF/KKq9BfyfucAs0ykA==
|
|
=XLag
|
|
-----END PGP PUBLIC KEY BLOCK-----`;
|
|
|
|
// EXTERNAL MODULE: ./src/distributions/base-installer.ts + 2 modules
|
|
var base_installer = __webpack_require__(6242);
|
|
// EXTERNAL MODULE: ./src/constants.ts
|
|
var constants = __webpack_require__(7242);
|
|
// EXTERNAL MODULE: ./src/util.ts
|
|
var util = __webpack_require__(4527);
|
|
;// CONCATENATED MODULE: ./src/distributions/temurin/installer.ts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var TemurinImplementation;
|
|
(function (TemurinImplementation) {
|
|
TemurinImplementation["Hotspot"] = "Hotspot";
|
|
})(TemurinImplementation || (TemurinImplementation = {}));
|
|
class TemurinDistribution extends base_installer/* JavaBase */.O {
|
|
jvmImpl;
|
|
includeJmods;
|
|
constructor(installerOptions, jvmImpl) {
|
|
super(`Temurin-${jvmImpl}`, installerOptions);
|
|
this.jvmImpl = jvmImpl;
|
|
this.includeJmods = this.packageType === 'jdk+jmods';
|
|
}
|
|
/**
|
|
* @internal For cross-distribution reuse only. Not intended as a public API.
|
|
*/
|
|
async findPackageForDownload(version) {
|
|
return this.resolvePackage(version, this.includeJmods ? 'jdk' : this.packageType);
|
|
}
|
|
async resolvePackage(version, imageType) {
|
|
const availableVersionsRaw = await this.getAvailableVersions(imageType);
|
|
const availableVersionsWithBinaries = availableVersionsRaw
|
|
.filter(item => item.binaries.length > 0)
|
|
.map(item => {
|
|
// normalize 17.0.0-beta+33.0.202107301459 to 17.0.0+33.0.202107301459 for earlier access versions
|
|
const formattedVersion = this.stable
|
|
? item.version_data.semver
|
|
: item.version_data.semver.replace('-beta+', '+');
|
|
return {
|
|
version: formattedVersion,
|
|
url: item.binaries[0].package.link,
|
|
signatureUrl: item.binaries[0].package.signature_link,
|
|
checksum: {
|
|
algorithm: 'sha256',
|
|
value: item.binaries[0].package.checksum,
|
|
source: item.binaries[0].package.checksum_link
|
|
}
|
|
};
|
|
});
|
|
const satisfiedVersions = availableVersionsWithBinaries
|
|
.filter(item => (0,util/* isVersionSatisfies */.y)(version, item.version))
|
|
.sort((a, b) => {
|
|
return -semver_default().compareBuild(a.version, b.version);
|
|
});
|
|
const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null;
|
|
if (!resolvedFullVersion) {
|
|
const availableVersionStrings = availableVersionsWithBinaries.map(item => item.version);
|
|
throw this.createVersionNotFoundError(version, availableVersionStrings);
|
|
}
|
|
return resolvedFullVersion;
|
|
}
|
|
async downloadTool(javaRelease) {
|
|
core/* info */.pq(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`);
|
|
let javaArchivePath = await this.downloadPackage(javaRelease);
|
|
core/* info */.pq(`Extracting Java archive...`);
|
|
const extension = (0,util/* getDownloadArchiveExtension */.ag)();
|
|
if (process.platform === 'win32') {
|
|
javaArchivePath = (0,util/* renameWinArchive */.n2)(javaArchivePath);
|
|
}
|
|
const extractedJavaPath = await (0,util/* extractJdkFile */.PE)(javaArchivePath, extension);
|
|
const archiveName = external_fs_default().readdirSync(extractedJavaPath)[0];
|
|
const archivePath = external_path_default().join(extractedJavaPath, archiveName);
|
|
const javaHome = process.platform === 'darwin'
|
|
? external_path_default().join(archivePath, constants/* MACOS_JAVA_CONTENT_POSTFIX */.PG)
|
|
: archivePath;
|
|
if (this.includeJmods && !external_fs_default().existsSync(external_path_default().join(javaHome, 'jmods'))) {
|
|
await this.installJmods(javaRelease.version, javaHome);
|
|
}
|
|
const version = this.getToolcacheVersionName(javaRelease.version);
|
|
const javaPath = await tool_cache/* cacheDir */.e8(archivePath, this.toolcacheFolderName, version, this.architecture);
|
|
return { version: javaRelease.version, path: javaPath };
|
|
}
|
|
supportsSignatureVerification() {
|
|
return true;
|
|
}
|
|
async downloadPackage(release) {
|
|
const archivePath = await this.downloadAndVerify(release);
|
|
if (this.verifySignature) {
|
|
if (!release.signatureUrl) {
|
|
throw new Error(`Input 'verify-signature' is enabled, but no signature URL was found for Temurin version ${release.version}.`);
|
|
}
|
|
core/* info */.pq(`Verifying Java package signature...`);
|
|
try {
|
|
await gpg/* verifyPackageSignature */.Yi(archivePath, release.signatureUrl, this.verifySignaturePublicKey ?? ADOPTIUM_PUBLIC_KEY);
|
|
}
|
|
catch (error) {
|
|
throw new Error(`Failed to verify signature for Temurin version ${release.version} from ${release.signatureUrl}: ${error.message}`, { cause: error });
|
|
}
|
|
}
|
|
return archivePath;
|
|
}
|
|
async installJmods(version, javaHome) {
|
|
const jmodsRelease = await this.resolvePackage(version, 'jmods');
|
|
core/* info */.pq(`Downloading JMODs ${jmodsRelease.version} (${this.distribution}) from ${jmodsRelease.url} ...`);
|
|
let jmodsArchivePath = await this.downloadPackage(jmodsRelease);
|
|
if (process.platform === 'win32') {
|
|
jmodsArchivePath = (0,util/* renameWinArchive */.n2)(jmodsArchivePath);
|
|
}
|
|
const extractedJmodsPath = await (0,util/* extractJdkFile */.PE)(jmodsArchivePath, (0,util/* getDownloadArchiveExtension */.ag)());
|
|
const jmodsDirectory = external_path_default().join(extractedJmodsPath, external_fs_default().readdirSync(extractedJmodsPath)[0]);
|
|
external_fs_default().cpSync(jmodsDirectory, external_path_default().join(javaHome, 'jmods'), { recursive: true });
|
|
}
|
|
async getAvailableVersions(imageType = this.includeJmods ? 'jdk' : this.packageType) {
|
|
const platform = this.getPlatformOption();
|
|
const arch = this.distributionArchitecture();
|
|
const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions
|
|
const releaseType = this.stable ? 'ga' : 'ea';
|
|
if (core/* isDebug */._o()) {
|
|
console.time('Retrieving available versions for Temurin took'); // eslint-disable-line no-console
|
|
}
|
|
const baseRequestArguments = [
|
|
`project=jdk`,
|
|
'vendor=adoptium',
|
|
`heap_size=normal`,
|
|
'sort_method=DEFAULT',
|
|
'sort_order=DESC',
|
|
`os=${platform}`,
|
|
`architecture=${arch}`,
|
|
`image_type=${imageType}`,
|
|
`release_type=${releaseType}`,
|
|
`jvm_impl=${this.jvmImpl.toLowerCase()}`
|
|
].join('&');
|
|
const requestArguments = `${baseRequestArguments}&page_size=20&page=0`;
|
|
let availableVersionsUrl = `https://api.adoptium.net/v3/assets/version/${versionRange}?${requestArguments}`;
|
|
const availableVersions = [];
|
|
let pageCount = 0;
|
|
if (core/* isDebug */._o()) {
|
|
core/* debug */.Yz(`Gathering available versions from '${availableVersionsUrl}'`);
|
|
}
|
|
while (availableVersionsUrl) {
|
|
pageCount++;
|
|
const response = await this.http.getJson(availableVersionsUrl);
|
|
const paginationPage = response.result;
|
|
const nextUrl = (0,util/* getNextPageUrlFromLinkHeader */.rC)(response.headers);
|
|
if (nextUrl &&
|
|
!(0,util/* validatePaginationUrl */.SA)(nextUrl, 'https://api.adoptium.net')) {
|
|
core/* warning */.$e(`Ignoring pagination link with unexpected origin: ${nextUrl}`);
|
|
availableVersionsUrl = null;
|
|
}
|
|
else {
|
|
availableVersionsUrl = nextUrl;
|
|
}
|
|
if (paginationPage === null || paginationPage.length === 0) {
|
|
break;
|
|
}
|
|
availableVersions.push(...paginationPage);
|
|
if (pageCount >= util/* MAX_PAGINATION_PAGES */.Tp) {
|
|
core/* warning */.$e(`Reached pagination safeguard limit (${util/* MAX_PAGINATION_PAGES */.Tp} pages) while listing Temurin releases.`);
|
|
break;
|
|
}
|
|
}
|
|
if (core/* isDebug */._o()) {
|
|
core/* startGroup */.Oh('Print information about available versions');
|
|
console.timeEnd('Retrieving available versions for Temurin took'); // eslint-disable-line no-console
|
|
core/* debug */.Yz(`Available versions: [${availableVersions.length}]`);
|
|
core/* debug */.Yz(availableVersions.map(item => item.version_data.semver).join(', '));
|
|
core/* endGroup */.N4();
|
|
}
|
|
return availableVersions;
|
|
}
|
|
getPlatformOption() {
|
|
// Adoptium has own platform names so need to map them
|
|
switch (process.platform) {
|
|
case 'darwin':
|
|
return 'mac';
|
|
case 'win32':
|
|
return 'windows';
|
|
case 'linux':
|
|
if (external_fs_default().existsSync('/etc/alpine-release')) {
|
|
return 'alpine-linux';
|
|
}
|
|
return 'linux';
|
|
default:
|
|
return process.platform;
|
|
}
|
|
}
|
|
distributionArchitecture() {
|
|
const architecture = super.distributionArchitecture();
|
|
return architecture === 'armv7' ? 'arm' : architecture;
|
|
}
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
/***/ 8343:
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
/* harmony export */ Fh: () => (/* binding */ importKey),
|
|
/* harmony export */ Yi: () => (/* binding */ verifyPackageSignature)
|
|
/* harmony export */ });
|
|
/* unused harmony exports PRIVATE_KEY_FILE, toGpgPath, deleteKey */
|
|
/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9896);
|
|
/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__);
|
|
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6928);
|
|
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);
|
|
/* harmony import */ var _actions_io__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8701);
|
|
/* harmony import */ var _actions_exec__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5260);
|
|
/* harmony import */ var _actions_tool_cache__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9805);
|
|
/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4527);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const PRIVATE_KEY_FILE = path__WEBPACK_IMPORTED_MODULE_1__.join(_util_js__WEBPACK_IMPORTED_MODULE_5__/* .getTempDir */ .G4(), 'private-key.asc');
|
|
const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/;
|
|
// Convert a Windows path (D:\a\_temp\...) to a POSIX path (/d/a/_temp/...).
|
|
// The Git-bundled GPG on Windows (MSYS2-based) uses POSIX path conventions
|
|
// internally. Passing Windows paths with backslashes can cause fatal GPG errors
|
|
// (exit code 2), so all paths passed to GPG must be in POSIX format on Windows.
|
|
function toGpgPath(p) {
|
|
if (process.platform !== 'win32')
|
|
return p;
|
|
return p
|
|
.replace(/\\/g, '/')
|
|
.replace(/^([A-Za-z]):\//, (_, drive) => `/${drive.toLowerCase()}/`);
|
|
}
|
|
async function importKey(privateKey) {
|
|
fs__WEBPACK_IMPORTED_MODULE_0__.writeFileSync(PRIVATE_KEY_FILE, privateKey, {
|
|
encoding: 'utf-8',
|
|
flag: 'w'
|
|
});
|
|
let output = '';
|
|
const options = {
|
|
silent: true,
|
|
listeners: {
|
|
stdout: (data) => {
|
|
output += data.toString();
|
|
}
|
|
}
|
|
};
|
|
await _actions_exec__WEBPACK_IMPORTED_MODULE_3__/* .exec */ .m('gpg', [
|
|
'--batch',
|
|
'--import-options',
|
|
'import-show',
|
|
'--import',
|
|
PRIVATE_KEY_FILE
|
|
], options);
|
|
await _actions_io__WEBPACK_IMPORTED_MODULE_2__/* .rmRF */ .Yz(PRIVATE_KEY_FILE);
|
|
const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX);
|
|
return match && match[0];
|
|
}
|
|
async function deleteKey(keyFingerprint) {
|
|
await exec.exec('gpg', ['--batch', '--yes', '--delete-secret-and-public-key', keyFingerprint], {
|
|
silent: true
|
|
});
|
|
}
|
|
async function verifyPackageSignature(archivePath, signatureUrl, publicKeyContent) {
|
|
const signaturePath = await _actions_tool_cache__WEBPACK_IMPORTED_MODULE_4__/* .downloadTool */ .bq(signatureUrl);
|
|
let gpgHome;
|
|
try {
|
|
gpgHome = fs__WEBPACK_IMPORTED_MODULE_0__.mkdtempSync(path__WEBPACK_IMPORTED_MODULE_1__.join(_util_js__WEBPACK_IMPORTED_MODULE_5__/* .getTempDir */ .G4(), 'verify-signature-gpg-home-'));
|
|
}
|
|
catch (error) {
|
|
try {
|
|
await _actions_io__WEBPACK_IMPORTED_MODULE_2__/* .rmRF */ .Yz(signaturePath);
|
|
}
|
|
catch {
|
|
// ignore cleanup failures
|
|
}
|
|
throw new Error(`Failed to create temporary GPG home directory for signature verification: ${error.message}`, { cause: error });
|
|
}
|
|
try {
|
|
const publicKeyFile = path__WEBPACK_IMPORTED_MODULE_1__.join(gpgHome, 'public-key.asc');
|
|
fs__WEBPACK_IMPORTED_MODULE_0__.writeFileSync(publicKeyFile, publicKeyContent, { encoding: 'utf-8' });
|
|
const options = { silent: true };
|
|
await _actions_exec__WEBPACK_IMPORTED_MODULE_3__/* .exec */ .m('gpg', [
|
|
'--homedir',
|
|
toGpgPath(gpgHome),
|
|
'--batch',
|
|
'--import',
|
|
toGpgPath(publicKeyFile)
|
|
], options);
|
|
await _actions_exec__WEBPACK_IMPORTED_MODULE_3__/* .exec */ .m('gpg', [
|
|
'--homedir',
|
|
toGpgPath(gpgHome),
|
|
'--batch',
|
|
'--verify',
|
|
toGpgPath(signaturePath),
|
|
toGpgPath(archivePath)
|
|
], options);
|
|
}
|
|
finally {
|
|
await _actions_io__WEBPACK_IMPORTED_MODULE_2__/* .rmRF */ .Yz(signaturePath);
|
|
await _actions_io__WEBPACK_IMPORTED_MODULE_2__/* .rmRF */ .Yz(gpgHome);
|
|
}
|
|
}
|
|
|
|
|
|
/***/ })
|
|
|
|
};
|