diff --git a/.github/workflows/e2e-local-file.yml b/.github/workflows/e2e-local-file.yml index 4f4cd03..baa026a 100644 --- a/.github/workflows/e2e-local-file.yml +++ b/.github/workflows/e2e-local-file.yml @@ -121,3 +121,39 @@ jobs: - name: Verify Java version run: bash __tests__/verify-java.sh "11.0.12" "${{ steps.setup-java.outputs.path }}" shell: bash + + setup-java-remote-file-temurin: + name: Validate download from remote file Eclipse Temurin + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [macos-latest, windows-latest, ubuntu-latest] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Download Eclipse Temurin file + run: | + if ($IsLinux) { + $downloadUrl = "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz" + $localFilename = "java_package.tar.gz" + } elseif ($IsMacOS) { + $downloadUrl = "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_mac_hotspot_11.0.12_7.tar.gz" + $localFilename = "java_package.tar.gz" + } elseif ($IsWindows) { + $downloadUrl = "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_windows_hotspot_11.0.12_7.zip" + $localFilename = "java_package.zip" + } + echo "DownloadUrl=$downloadUrl" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + shell: pwsh + - name: setup-java + uses: ./ + id: setup-java + with: + distribution: 'jdkfile' + jdkFile: ${{ env.DownloadUrl }} + java-version: '11.0.0-ea' + architecture: x64 + - name: Verify Java version + run: bash __tests__/verify-java.sh "11.0.12" "${{ steps.setup-java.outputs.path }}" + shell: bash diff --git a/README.md b/README.md index c02eb6c..fabe63e 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,7 @@ jobs: - [Installing custom Java package type](docs/advanced-usage.md#Installing-custom-Java-package-type) - [Installing custom Java architecture](docs/advanced-usage.md#Installing-custom-Java-architecture) - [Installing custom Java distribution from local file](docs/advanced-usage.md#Installing-Java-from-local-file) +- [Installing Java from remote archive](docs/advanced-usage.md#Installing-Java-from-remote-archive) - [Testing against different Java distributions](docs/advanced-usage.md#Testing-against-different-Java-distributions) - [Testing against different platforms](docs/advanced-usage.md#Testing-against-different-platforms) - [Publishing using Apache Maven](docs/advanced-usage.md#Publishing-using-Apache-Maven) diff --git a/__tests__/distributors/local-installer.test.ts b/__tests__/distributors/local-installer.test.ts index c161897..2eba999 100644 --- a/__tests__/distributors/local-installer.test.ts +++ b/__tests__/distributors/local-installer.test.ts @@ -161,6 +161,36 @@ describe('setupJava', () => { ); }); + it('java is downloaded from remote jdkfile', async () => { + const inputs = { + version: '11.0.289', + architecture: 'x86', + packageType: 'jdk', + checkLatest: false + }; + const expected = { + version: '11.0.289', + path: path.join('Java_jdkfile_jdk', inputs.version, inputs.architecture) + }; + + const jdkFile = 'https://example.com/jdk.tar.gz'; + + const spyTcDownloadTool = jest.spyOn(tc, 'downloadTool'); + spyTcDownloadTool.mockReturnValue(Promise.resolve(expectedJdkFile)); + + mockJavaBase = new LocalDistribution(inputs, jdkFile); + await expect(mockJavaBase.setupJava()).resolves.toEqual(expected); + expect(spyTcFindAllVersions).toHaveBeenCalled(); + expect(spyTcDownloadTool).toHaveBeenCalledWith(jdkFile); + expect(spyCoreInfo).not.toHaveBeenCalledWith( + `Resolved Java ${actualJavaVersion} from tool-cache` + ); + expect(spyCoreInfo).toHaveBeenCalledWith(`Extracting Java from '${expectedJdkFile}'`); + expect(spyCoreInfo).toHaveBeenCalledWith( + `Java ${inputs.version} was not found in tool-cache. Trying to unpack JDK file...` + ); + }); + it('jdk file is not found', async () => { const inputs = { version: '11.0.289', diff --git a/action.yml b/action.yml index c6af975..c599b57 100644 --- a/action.yml +++ b/action.yml @@ -18,7 +18,7 @@ inputs: required: false default: 'x64' jdkFile: - description: 'Path to where the compressed JDK is located' + description: 'Path to where the compressed JDK is located, or URL where it should be downloaded from' required: false check-latest: description: 'Set this option if you want the action to check for the latest available version that satisfies the version spec' diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index a9052b6..826acf9 100644 --- a/dist/cleanup/index.js +++ b/dist/cleanup/index.js @@ -6059,99 +6059,99 @@ module.exports = require("punycode"); /***/ (function(__unusedmodule, exports, __webpack_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.run = void 0; -const core = __importStar(__webpack_require__(470)); -const gpg = __importStar(__webpack_require__(884)); -const constants = __importStar(__webpack_require__(694)); -const util_1 = __webpack_require__(322); -const cache_1 = __webpack_require__(913); -function removePrivateKeyFromKeychain() { - return __awaiter(this, void 0, void 0, function* () { - if (core.getInput(constants.INPUT_GPG_PRIVATE_KEY, { required: false })) { - core.info('Removing private key from keychain'); - try { - const keyFingerprint = core.getState(constants.STATE_GPG_PRIVATE_KEY_FINGERPRINT); - yield gpg.deleteKey(keyFingerprint); - } - catch (error) { - core.setFailed(`Failed to remove private key due to: ${error.message}`); - } - } - }); -} -/** - * Check given input and run a save process for the specified package manager - * @returns Promise that will be resolved when the save process finishes - */ -function saveCache() { - return __awaiter(this, void 0, void 0, function* () { - const jobStatus = util_1.isJobStatusSuccess(); - const cache = core.getInput(constants.INPUT_CACHE); - return jobStatus && cache ? cache_1.save(cache) : Promise.resolve(); - }); -} -/** - * The save process is best-effort, and it should not make the workflow fail - * even though this process throws an error. - * @param promise the promise to ignore error from - * @returns Promise that will ignore error reported by the given promise - */ -function ignoreError(promise) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise(resolve => { - promise - .catch(error => { - core.warning(error); - resolve(void 0); - }) - .then(resolve); - }); - }); -} -function run() { - return __awaiter(this, void 0, void 0, function* () { - yield removePrivateKeyFromKeychain(); - yield ignoreError(saveCache()); - }); -} -exports.run = run; -if (require.main === require.cache[eval('__filename')]) { - run(); -} -else { - // https://nodejs.org/api/modules.html#modules_accessing_the_main_module - core.info('the script is loaded as a module, so skipping the execution'); -} + +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.run = void 0; +const core = __importStar(__webpack_require__(470)); +const gpg = __importStar(__webpack_require__(884)); +const constants = __importStar(__webpack_require__(694)); +const util_1 = __webpack_require__(322); +const cache_1 = __webpack_require__(913); +function removePrivateKeyFromKeychain() { + return __awaiter(this, void 0, void 0, function* () { + if (core.getInput(constants.INPUT_GPG_PRIVATE_KEY, { required: false })) { + core.info('Removing private key from keychain'); + try { + const keyFingerprint = core.getState(constants.STATE_GPG_PRIVATE_KEY_FINGERPRINT); + yield gpg.deleteKey(keyFingerprint); + } + catch (error) { + core.setFailed(`Failed to remove private key due to: ${error.message}`); + } + } + }); +} +/** + * Check given input and run a save process for the specified package manager + * @returns Promise that will be resolved when the save process finishes + */ +function saveCache() { + return __awaiter(this, void 0, void 0, function* () { + const jobStatus = util_1.isJobStatusSuccess(); + const cache = core.getInput(constants.INPUT_CACHE); + return jobStatus && cache ? cache_1.save(cache) : Promise.resolve(); + }); +} +/** + * The save process is best-effort, and it should not make the workflow fail + * even though this process throws an error. + * @param promise the promise to ignore error from + * @returns Promise that will ignore error reported by the given promise + */ +function ignoreError(promise) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => { + promise + .catch(error => { + core.warning(error); + resolve(void 0); + }) + .then(resolve); + }); + }); +} +function run() { + return __awaiter(this, void 0, void 0, function* () { + yield removePrivateKeyFromKeychain(); + yield ignoreError(saveCache()); + }); +} +exports.run = run; +if (require.main === require.cache[eval('__filename')]) { + run(); +} +else { + // https://nodejs.org/api/modules.html#modules_accessing_the_main_module + core.info('the script is loaded as a module, so skipping the execution'); +} /***/ }), @@ -9077,116 +9077,116 @@ module.exports = satisfies /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; -const os_1 = __importDefault(__webpack_require__(87)); -const path_1 = __importDefault(__webpack_require__(622)); -const fs = __importStar(__webpack_require__(747)); -const semver = __importStar(__webpack_require__(876)); -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(533)); -const constants_1 = __webpack_require__(694); -function getTempDir() { - let tempDirectory = process.env['RUNNER_TEMP'] || os_1.default.tmpdir(); - return tempDirectory; -} -exports.getTempDir = getTempDir; -function getBooleanInput(inputName, defaultValue = false) { - return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; -} -exports.getBooleanInput = getBooleanInput; -function getVersionFromToolcachePath(toolPath) { - if (toolPath) { - return path_1.default.basename(path_1.default.dirname(toolPath)); - } - return toolPath; -} -exports.getVersionFromToolcachePath = getVersionFromToolcachePath; -function extractJdkFile(toolPath, extension) { - return __awaiter(this, void 0, void 0, function* () { - if (!extension) { - extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path_1.default.extname(toolPath); - if (extension.startsWith('.')) { - extension = extension.substring(1); - } - } - switch (extension) { - case 'tar.gz': - case 'tar': - return yield tc.extractTar(toolPath); - case 'zip': - return yield tc.extractZip(toolPath); - default: - return yield tc.extract7z(toolPath); - } - }); -} -exports.extractJdkFile = extractJdkFile; -function getDownloadArchiveExtension() { - return process.platform === 'win32' ? 'zip' : 'tar.gz'; -} -exports.getDownloadArchiveExtension = getDownloadArchiveExtension; -function isVersionSatisfies(range, version) { - var _a; - if (semver.valid(range)) { - // if full version with build digit is provided as a range (such as '1.2.3+4') - // we should check for exact equal via compareBuild - // since semver.satisfies doesn't handle 4th digit - const semRange = semver.parse(range); - if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { - return semver.compareBuild(range, version) === 0; - } - } - return semver.satisfies(version, range); -} -exports.isVersionSatisfies = isVersionSatisfies; -function getToolcachePath(toolName, version, architecture) { - var _a; - const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; - const fullPath = path_1.default.join(toolcacheRoot, toolName, version, architecture); - if (fs.existsSync(fullPath)) { - return fullPath; - } - return null; -} -exports.getToolcachePath = getToolcachePath; -function isJobStatusSuccess() { - const jobStatus = core.getInput(constants_1.INPUT_JOB_STATUS); - return jobStatus === 'success'; -} -exports.isJobStatusSuccess = isJobStatusSuccess; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; +const os_1 = __importDefault(__webpack_require__(87)); +const path_1 = __importDefault(__webpack_require__(622)); +const fs = __importStar(__webpack_require__(747)); +const semver = __importStar(__webpack_require__(876)); +const core = __importStar(__webpack_require__(470)); +const tc = __importStar(__webpack_require__(533)); +const constants_1 = __webpack_require__(694); +function getTempDir() { + let tempDirectory = process.env['RUNNER_TEMP'] || os_1.default.tmpdir(); + return tempDirectory; +} +exports.getTempDir = getTempDir; +function getBooleanInput(inputName, defaultValue = false) { + return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; +} +exports.getBooleanInput = getBooleanInput; +function getVersionFromToolcachePath(toolPath) { + if (toolPath) { + return path_1.default.basename(path_1.default.dirname(toolPath)); + } + return toolPath; +} +exports.getVersionFromToolcachePath = getVersionFromToolcachePath; +function extractJdkFile(toolPath, extension) { + return __awaiter(this, void 0, void 0, function* () { + if (!extension) { + extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path_1.default.extname(toolPath); + if (extension.startsWith('.')) { + extension = extension.substring(1); + } + } + switch (extension) { + case 'tar.gz': + case 'tar': + return yield tc.extractTar(toolPath); + case 'zip': + return yield tc.extractZip(toolPath); + default: + return yield tc.extract7z(toolPath); + } + }); +} +exports.extractJdkFile = extractJdkFile; +function getDownloadArchiveExtension() { + return process.platform === 'win32' ? 'zip' : 'tar.gz'; +} +exports.getDownloadArchiveExtension = getDownloadArchiveExtension; +function isVersionSatisfies(range, version) { + var _a; + if (semver.valid(range)) { + // if full version with build digit is provided as a range (such as '1.2.3+4') + // we should check for exact equal via compareBuild + // since semver.satisfies doesn't handle 4th digit + const semRange = semver.parse(range); + if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { + return semver.compareBuild(range, version) === 0; + } + } + return semver.satisfies(version, range); +} +exports.isVersionSatisfies = isVersionSatisfies; +function getToolcachePath(toolName, version, architecture) { + var _a; + const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; + const fullPath = path_1.default.join(toolcacheRoot, toolName, version, architecture); + if (fs.existsSync(fullPath)) { + return fullPath; + } + return null; +} +exports.getToolcachePath = getToolcachePath; +function isJobStatusSuccess() { + const jobStatus = core.getInput(constants_1.INPUT_JOB_STATUS); + return jobStatus === 'success'; +} +exports.isJobStatusSuccess = isJobStatusSuccess; /***/ }), @@ -43501,17 +43501,9 @@ AbortError.prototype = Object.create(Error.prototype); AbortError.prototype.constructor = AbortError; AbortError.prototype.name = 'AbortError'; -const URL$1 = Url.URL || whatwgUrl.URL; - // fix an issue where "PassThrough", "resolve" aren't a named export for node <10 const PassThrough$1 = Stream.PassThrough; - -const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { - const orig = new URL$1(original).hostname; - const dest = new URL$1(destination).hostname; - - return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); -}; +const resolve_url = Url.resolve; /** * Fetch function @@ -43599,19 +43591,7 @@ function fetch(url, opts) { const location = headers.get('Location'); // HTTP fetch step 5.3 - let locationURL = null; - try { - locationURL = location === null ? null : new URL$1(location, request.url).toString(); - } catch (err) { - // error here can only be invalid URL in Location: header - // do not throw when options.redirect == manual - // let the user extract the errorneous redirect URL - if (request.redirect !== 'manual') { - reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); - finalize(); - return; - } - } + const locationURL = location === null ? null : resolve_url(request.url, location); // HTTP fetch step 5.5 switch (request.redirect) { @@ -43659,12 +43639,6 @@ function fetch(url, opts) { size: request.size }; - if (!isDomainOrSubdomain(request.url, locationURL)) { - for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { - requestOpts.headers.delete(name); - } - } - // HTTP-redirect fetch step 9 if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); @@ -53625,28 +53599,28 @@ exports.saveCache = saveCache; /***/ (function(__unusedmodule, exports) { "use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_OVERWRITE_SETTINGS = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_CHECK_LATEST = exports.INPUT_JDK_FILE = exports.INPUT_DISTRIBUTION = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; -exports.MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; -exports.INPUT_JAVA_VERSION = 'java-version'; -exports.INPUT_ARCHITECTURE = 'architecture'; -exports.INPUT_JAVA_PACKAGE = 'java-package'; -exports.INPUT_DISTRIBUTION = 'distribution'; -exports.INPUT_JDK_FILE = 'jdkFile'; -exports.INPUT_CHECK_LATEST = 'check-latest'; -exports.INPUT_SERVER_ID = 'server-id'; -exports.INPUT_SERVER_USERNAME = 'server-username'; -exports.INPUT_SERVER_PASSWORD = 'server-password'; -exports.INPUT_SETTINGS_PATH = 'settings-path'; -exports.INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; -exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; -exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; -exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; -exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; -exports.INPUT_CACHE = 'cache'; -exports.INPUT_JOB_STATUS = 'job-status'; -exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_OVERWRITE_SETTINGS = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_CHECK_LATEST = exports.INPUT_JDK_FILE = exports.INPUT_DISTRIBUTION = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; +exports.MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; +exports.INPUT_JAVA_VERSION = 'java-version'; +exports.INPUT_ARCHITECTURE = 'architecture'; +exports.INPUT_JAVA_PACKAGE = 'java-package'; +exports.INPUT_DISTRIBUTION = 'distribution'; +exports.INPUT_JDK_FILE = 'jdkFile'; +exports.INPUT_CHECK_LATEST = 'check-latest'; +exports.INPUT_SERVER_ID = 'server-id'; +exports.INPUT_SERVER_USERNAME = 'server-username'; +exports.INPUT_SERVER_PASSWORD = 'server-password'; +exports.INPUT_SETTINGS_PATH = 'settings-path'; +exports.INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; +exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; +exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; +exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; +exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; +exports.INPUT_CACHE = 'cache'; +exports.INPUT_JOB_STATUS = 'job-status'; +exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; /***/ }), @@ -60189,74 +60163,74 @@ function coerce (version, options) { /***/ (function(__unusedmodule, exports, __webpack_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.deleteKey = exports.importKey = exports.PRIVATE_KEY_FILE = void 0; -const fs = __importStar(__webpack_require__(747)); -const path = __importStar(__webpack_require__(622)); -const io = __importStar(__webpack_require__(1)); -const exec = __importStar(__webpack_require__(986)); -const util = __importStar(__webpack_require__(322)); -exports.PRIVATE_KEY_FILE = path.join(util.getTempDir(), 'private-key.asc'); -const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; -function importKey(privateKey) { - return __awaiter(this, void 0, void 0, function* () { - fs.writeFileSync(exports.PRIVATE_KEY_FILE, privateKey, { - encoding: 'utf-8', - flag: 'w' - }); - let output = ''; - const options = { - silent: true, - listeners: { - stdout: (data) => { - output += data.toString(); - } - } - }; - yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', exports.PRIVATE_KEY_FILE], options); - yield io.rmRF(exports.PRIVATE_KEY_FILE); - const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); - return match && match[0]; - }); -} -exports.importKey = importKey; -function deleteKey(keyFingerprint) { - return __awaiter(this, void 0, void 0, function* () { - yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-and-public-key', keyFingerprint], { - silent: true - }); - }); -} -exports.deleteKey = deleteKey; + +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.deleteKey = exports.importKey = exports.PRIVATE_KEY_FILE = void 0; +const fs = __importStar(__webpack_require__(747)); +const path = __importStar(__webpack_require__(622)); +const io = __importStar(__webpack_require__(1)); +const exec = __importStar(__webpack_require__(986)); +const util = __importStar(__webpack_require__(322)); +exports.PRIVATE_KEY_FILE = path.join(util.getTempDir(), 'private-key.asc'); +const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; +function importKey(privateKey) { + return __awaiter(this, void 0, void 0, function* () { + fs.writeFileSync(exports.PRIVATE_KEY_FILE, privateKey, { + encoding: 'utf-8', + flag: 'w' + }); + let output = ''; + const options = { + silent: true, + listeners: { + stdout: (data) => { + output += data.toString(); + } + } + }; + yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', exports.PRIVATE_KEY_FILE], options); + yield io.rmRF(exports.PRIVATE_KEY_FILE); + const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); + return match && match[0]; + }); +} +exports.importKey = importKey; +function deleteKey(keyFingerprint) { + return __awaiter(this, void 0, void 0, function* () { + yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-and-public-key', keyFingerprint], { + silent: true + }); + }); +} +exports.deleteKey = deleteKey; /***/ }), @@ -61803,160 +61777,160 @@ __exportStar(__webpack_require__(764), exports); /***/ (function(__unusedmodule, exports, __webpack_require__) { "use strict"; - -/** - * @fileoverview this file provides methods handling dependency cache - */ -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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.save = exports.restore = void 0; -const path_1 = __webpack_require__(622); -const os_1 = __importDefault(__webpack_require__(87)); -const cache = __importStar(__webpack_require__(692)); -const core = __importStar(__webpack_require__(470)); -const glob = __importStar(__webpack_require__(281)); -const STATE_CACHE_PRIMARY_KEY = 'cache-primary-key'; -const CACHE_MATCHED_KEY = 'cache-matched-key'; -const CACHE_KEY_PREFIX = 'setup-java'; -const supportedPackageManager = [ - { - id: 'maven', - path: [path_1.join(os_1.default.homedir(), '.m2', 'repository')], - // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---maven - pattern: ['**/pom.xml'] - }, - { - id: 'gradle', - path: [path_1.join(os_1.default.homedir(), '.gradle', 'caches'), path_1.join(os_1.default.homedir(), '.gradle', 'wrapper')], - // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle - pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] - } -]; -function findPackageManager(id) { - const packageManager = supportedPackageManager.find(packageManager => packageManager.id === id); - if (packageManager === undefined) { - throw new Error(`unknown package manager specified: ${id}`); - } - return packageManager; -} -/** - * A function that generates a cache key to use. - * Format of the generated key will be "${{ platform }}-${{ id }}-${{ fileHash }}"". - * If there is no file matched to {@link PackageManager.path}, the generated key ends with a dash (-). - * @see {@link https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key|spec of cache key} - */ -function computeCacheKey(packageManager) { - return __awaiter(this, void 0, void 0, function* () { - const hash = yield glob.hashFiles(packageManager.pattern.join('\n')); - return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${hash}`; - }); -} -/** - * Restore the dependency cache - * @param id ID of the package manager, should be "maven" or "gradle" - */ -function restore(id) { - return __awaiter(this, void 0, void 0, function* () { - const packageManager = findPackageManager(id); - const primaryKey = yield computeCacheKey(packageManager); - core.debug(`primary key is ${primaryKey}`); - core.saveState(STATE_CACHE_PRIMARY_KEY, primaryKey); - if (primaryKey.endsWith('-')) { - throw new Error(`No file in ${process.cwd()} matched to [${packageManager.pattern}], make sure you have checked out the target repository`); - } - const matchedKey = yield cache.restoreCache(packageManager.path, primaryKey, [ - `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${id}` - ]); - if (matchedKey) { - core.saveState(CACHE_MATCHED_KEY, matchedKey); - core.info(`Cache restored from key: ${matchedKey}`); - } - else { - core.info(`${packageManager.id} cache is not found`); - } - }); -} -exports.restore = restore; -/** - * Save the dependency cache - * @param id ID of the package manager, should be "maven" or "gradle" - */ -function save(id) { - return __awaiter(this, void 0, void 0, function* () { - const packageManager = findPackageManager(id); - const matchedKey = core.getState(CACHE_MATCHED_KEY); - // Inputs are re-evaluted before the post action, so we want the original key used for restore - const primaryKey = core.getState(STATE_CACHE_PRIMARY_KEY); - if (!primaryKey) { - core.warning('Error retrieving key from state.'); - return; - } - else if (matchedKey === primaryKey) { - // no change in target directories - core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); - return; - } - try { - yield cache.saveCache(packageManager.path, primaryKey); - core.info(`Cache saved with the key: ${primaryKey}`); - } - catch (error) { - if (error.name === cache.ReserveCacheError.name) { - core.info(error.message); - } - else { - if (isProbablyGradleDaemonProblem(packageManager, error)) { - core.warning('Failed to save Gradle cache on Windows. If tar.exe reported "Permission denied", try to run Gradle with `--no-daemon` option. Refer to https://github.com/actions/cache/issues/454 for details.'); - } - throw error; - } - } - }); -} -exports.save = save; -/** - * @param packageManager the specified package manager by user - * @param error the error thrown by the saveCache - * @returns true if the given error seems related to the {@link https://github.com/actions/cache/issues/454|running Gradle Daemon issue}. - * @see {@link https://github.com/actions/cache/issues/454#issuecomment-840493935|why --no-daemon is necessary} - */ -function isProbablyGradleDaemonProblem(packageManager, error) { - if (packageManager.id !== 'gradle' || process.env['RUNNER_OS'] !== 'Windows') { - return false; - } - const message = error.message || ''; - return message.startsWith('Tar failed with error: '); -} + +/** + * @fileoverview this file provides methods handling dependency cache + */ +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.save = exports.restore = void 0; +const path_1 = __webpack_require__(622); +const os_1 = __importDefault(__webpack_require__(87)); +const cache = __importStar(__webpack_require__(692)); +const core = __importStar(__webpack_require__(470)); +const glob = __importStar(__webpack_require__(281)); +const STATE_CACHE_PRIMARY_KEY = 'cache-primary-key'; +const CACHE_MATCHED_KEY = 'cache-matched-key'; +const CACHE_KEY_PREFIX = 'setup-java'; +const supportedPackageManager = [ + { + id: 'maven', + path: [path_1.join(os_1.default.homedir(), '.m2', 'repository')], + // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---maven + pattern: ['**/pom.xml'] + }, + { + id: 'gradle', + path: [path_1.join(os_1.default.homedir(), '.gradle', 'caches'), path_1.join(os_1.default.homedir(), '.gradle', 'wrapper')], + // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle + pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] + } +]; +function findPackageManager(id) { + const packageManager = supportedPackageManager.find(packageManager => packageManager.id === id); + if (packageManager === undefined) { + throw new Error(`unknown package manager specified: ${id}`); + } + return packageManager; +} +/** + * A function that generates a cache key to use. + * Format of the generated key will be "${{ platform }}-${{ id }}-${{ fileHash }}"". + * If there is no file matched to {@link PackageManager.path}, the generated key ends with a dash (-). + * @see {@link https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key|spec of cache key} + */ +function computeCacheKey(packageManager) { + return __awaiter(this, void 0, void 0, function* () { + const hash = yield glob.hashFiles(packageManager.pattern.join('\n')); + return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${hash}`; + }); +} +/** + * Restore the dependency cache + * @param id ID of the package manager, should be "maven" or "gradle" + */ +function restore(id) { + return __awaiter(this, void 0, void 0, function* () { + const packageManager = findPackageManager(id); + const primaryKey = yield computeCacheKey(packageManager); + core.debug(`primary key is ${primaryKey}`); + core.saveState(STATE_CACHE_PRIMARY_KEY, primaryKey); + if (primaryKey.endsWith('-')) { + throw new Error(`No file in ${process.cwd()} matched to [${packageManager.pattern}], make sure you have checked out the target repository`); + } + const matchedKey = yield cache.restoreCache(packageManager.path, primaryKey, [ + `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${id}` + ]); + if (matchedKey) { + core.saveState(CACHE_MATCHED_KEY, matchedKey); + core.info(`Cache restored from key: ${matchedKey}`); + } + else { + core.info(`${packageManager.id} cache is not found`); + } + }); +} +exports.restore = restore; +/** + * Save the dependency cache + * @param id ID of the package manager, should be "maven" or "gradle" + */ +function save(id) { + return __awaiter(this, void 0, void 0, function* () { + const packageManager = findPackageManager(id); + const matchedKey = core.getState(CACHE_MATCHED_KEY); + // Inputs are re-evaluted before the post action, so we want the original key used for restore + const primaryKey = core.getState(STATE_CACHE_PRIMARY_KEY); + if (!primaryKey) { + core.warning('Error retrieving key from state.'); + return; + } + else if (matchedKey === primaryKey) { + // no change in target directories + core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); + return; + } + try { + yield cache.saveCache(packageManager.path, primaryKey); + core.info(`Cache saved with the key: ${primaryKey}`); + } + catch (error) { + if (error.name === cache.ReserveCacheError.name) { + core.info(error.message); + } + else { + if (isProbablyGradleDaemonProblem(packageManager, error)) { + core.warning('Failed to save Gradle cache on Windows. If tar.exe reported "Permission denied", try to run Gradle with `--no-daemon` option. Refer to https://github.com/actions/cache/issues/454 for details.'); + } + throw error; + } + } + }); +} +exports.save = save; +/** + * @param packageManager the specified package manager by user + * @param error the error thrown by the saveCache + * @returns true if the given error seems related to the {@link https://github.com/actions/cache/issues/454|running Gradle Daemon issue}. + * @see {@link https://github.com/actions/cache/issues/454#issuecomment-840493935|why --no-daemon is necessary} + */ +function isProbablyGradleDaemonProblem(packageManager, error) { + if (packageManager.id !== 'gradle' || process.env['RUNNER_OS'] !== 'Windows') { + return false; + } + const message = error.message || ''; + return message.startsWith('Tar failed with error: '); +} /***/ }), diff --git a/dist/setup/index.js b/dist/setup/index.js index b1445c7..66a8604 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -4677,167 +4677,167 @@ exports.toCommandValue = toCommandValue; /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JavaBase = void 0; -const tc = __importStar(__webpack_require__(139)); -const core = __importStar(__webpack_require__(470)); -const fs = __importStar(__webpack_require__(747)); -const semver_1 = __importDefault(__webpack_require__(876)); -const path_1 = __importDefault(__webpack_require__(622)); -const httpm = __importStar(__webpack_require__(539)); -const util_1 = __webpack_require__(322); -const constants_1 = __webpack_require__(211); -class JavaBase { - constructor(distribution, installerOptions) { - this.distribution = distribution; - this.http = new httpm.HttpClient('actions/setup-java', undefined, { - allowRetries: true, - maxRetries: 3 - }); - ({ version: this.version, stable: this.stable } = this.normalizeVersion(installerOptions.version)); - this.architecture = installerOptions.architecture; - this.packageType = installerOptions.packageType; - this.checkLatest = installerOptions.checkLatest; - } - setupJava() { - return __awaiter(this, void 0, void 0, function* () { - let foundJava = this.findInToolcache(); - if (foundJava && !this.checkLatest) { - core.info(`Resolved Java ${foundJava.version} from tool-cache`); - } - else { - core.info('Trying to resolve the latest version from remote'); - const javaRelease = yield this.findPackageForDownload(this.version); - core.info(`Resolved latest version as ${javaRelease.version}`); - if ((foundJava === null || foundJava === void 0 ? void 0 : foundJava.version) === javaRelease.version) { - core.info(`Resolved Java ${foundJava.version} from tool-cache`); - } - else { - core.info('Trying to download...'); - foundJava = yield this.downloadTool(javaRelease); - core.info(`Java ${foundJava.version} was downloaded`); - } - } - // JDK folder may contain postfix "Contents/Home" on macOS - const macOSPostfixPath = path_1.default.join(foundJava.path, constants_1.MACOS_JAVA_CONTENT_POSTFIX); - if (process.platform === 'darwin' && fs.existsSync(macOSPostfixPath)) { - foundJava.path = macOSPostfixPath; - } - core.info(`Setting Java ${foundJava.version} as the default`); - this.setJavaDefault(foundJava.version, foundJava.path); - return foundJava; - }); - } - get toolcacheFolderName() { - return `Java_${this.distribution}_${this.packageType}`; - } - getToolcacheVersionName(version) { - if (!this.stable) { - if (version.includes('+')) { - return version.replace('+', '-ea.'); - } - else { - return `${version}-ea`; - } - } - // Kotlin and some Java dependencies don't work properly when Java path contains "+" sign - // so replace "/hostedtoolcache/Java/11.0.3+4/x64" to "/hostedtoolcache/Java/11.0.3-4/x64" when saves to cache - // related issue: https://github.com/actions/virtual-environments/issues/3014 - return version.replace('+', '-'); - } - findInToolcache() { - // we can't use tc.find directly because firstly, we need to filter versions by stability flag - // if *-ea is provided, take only ea versions from toolcache, otherwise - only stable versions - const availableVersions = tc - .findAllVersions(this.toolcacheFolderName, this.architecture) - .map(item => { - return { - version: item - .replace('-ea.', '+') - .replace(/-ea$/, '') - // Kotlin and some Java dependencies don't work properly when Java path contains "+" sign - // so replace "/hostedtoolcache/Java/11.0.3-4/x64" to "/hostedtoolcache/Java/11.0.3+4/x64" when retrieves to cache - // related issue: https://github.com/actions/virtual-environments/issues/3014 - .replace('-', '+'), - path: util_1.getToolcachePath(this.toolcacheFolderName, item, this.architecture) || '', - stable: !item.includes('-ea') - }; - }) - .filter(item => item.stable === this.stable); - const satisfiedVersions = availableVersions - .filter(item => util_1.isVersionSatisfies(this.version, item.version)) - .filter(item => item.path) - .sort((a, b) => { - return -semver_1.default.compareBuild(a.version, b.version); - }); - if (!satisfiedVersions || satisfiedVersions.length === 0) { - return null; - } - return { - version: satisfiedVersions[0].version, - path: satisfiedVersions[0].path - }; - } - normalizeVersion(version) { - let stable = true; - if (version.endsWith('-ea')) { - version = version.replace(/-ea$/, ''); - stable = false; - } - else if (version.includes('-ea.')) { - // transform '11.0.3-ea.2' -> '11.0.3+2' - version = version.replace('-ea.', '+'); - stable = false; - } - if (!semver_1.default.validRange(version)) { - throw new Error(`The string '${version}' is not valid SemVer notation for a Java version. Please check README file for code snippets and more detailed information`); - } - return { - version, - stable - }; - } - setJavaDefault(version, toolPath) { - core.exportVariable('JAVA_HOME', toolPath); - core.addPath(path_1.default.join(toolPath, 'bin')); - core.setOutput('distribution', this.distribution); - core.setOutput('path', toolPath); - core.setOutput('version', version); - } -} -exports.JavaBase = JavaBase; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.JavaBase = void 0; +const tc = __importStar(__webpack_require__(139)); +const core = __importStar(__webpack_require__(470)); +const fs = __importStar(__webpack_require__(747)); +const semver_1 = __importDefault(__webpack_require__(876)); +const path_1 = __importDefault(__webpack_require__(622)); +const httpm = __importStar(__webpack_require__(539)); +const util_1 = __webpack_require__(322); +const constants_1 = __webpack_require__(211); +class JavaBase { + constructor(distribution, installerOptions) { + this.distribution = distribution; + this.http = new httpm.HttpClient('actions/setup-java', undefined, { + allowRetries: true, + maxRetries: 3 + }); + ({ version: this.version, stable: this.stable } = this.normalizeVersion(installerOptions.version)); + this.architecture = installerOptions.architecture; + this.packageType = installerOptions.packageType; + this.checkLatest = installerOptions.checkLatest; + } + setupJava() { + return __awaiter(this, void 0, void 0, function* () { + let foundJava = this.findInToolcache(); + if (foundJava && !this.checkLatest) { + core.info(`Resolved Java ${foundJava.version} from tool-cache`); + } + else { + core.info('Trying to resolve the latest version from remote'); + const javaRelease = yield this.findPackageForDownload(this.version); + core.info(`Resolved latest version as ${javaRelease.version}`); + if ((foundJava === null || foundJava === void 0 ? void 0 : foundJava.version) === javaRelease.version) { + core.info(`Resolved Java ${foundJava.version} from tool-cache`); + } + else { + core.info('Trying to download...'); + foundJava = yield this.downloadTool(javaRelease); + core.info(`Java ${foundJava.version} was downloaded`); + } + } + // JDK folder may contain postfix "Contents/Home" on macOS + const macOSPostfixPath = path_1.default.join(foundJava.path, constants_1.MACOS_JAVA_CONTENT_POSTFIX); + if (process.platform === 'darwin' && fs.existsSync(macOSPostfixPath)) { + foundJava.path = macOSPostfixPath; + } + core.info(`Setting Java ${foundJava.version} as the default`); + this.setJavaDefault(foundJava.version, foundJava.path); + return foundJava; + }); + } + get toolcacheFolderName() { + return `Java_${this.distribution}_${this.packageType}`; + } + getToolcacheVersionName(version) { + if (!this.stable) { + if (version.includes('+')) { + return version.replace('+', '-ea.'); + } + else { + return `${version}-ea`; + } + } + // Kotlin and some Java dependencies don't work properly when Java path contains "+" sign + // so replace "/hostedtoolcache/Java/11.0.3+4/x64" to "/hostedtoolcache/Java/11.0.3-4/x64" when saves to cache + // related issue: https://github.com/actions/virtual-environments/issues/3014 + return version.replace('+', '-'); + } + findInToolcache() { + // we can't use tc.find directly because firstly, we need to filter versions by stability flag + // if *-ea is provided, take only ea versions from toolcache, otherwise - only stable versions + const availableVersions = tc + .findAllVersions(this.toolcacheFolderName, this.architecture) + .map(item => { + return { + version: item + .replace('-ea.', '+') + .replace(/-ea$/, '') + // Kotlin and some Java dependencies don't work properly when Java path contains "+" sign + // so replace "/hostedtoolcache/Java/11.0.3-4/x64" to "/hostedtoolcache/Java/11.0.3+4/x64" when retrieves to cache + // related issue: https://github.com/actions/virtual-environments/issues/3014 + .replace('-', '+'), + path: util_1.getToolcachePath(this.toolcacheFolderName, item, this.architecture) || '', + stable: !item.includes('-ea') + }; + }) + .filter(item => item.stable === this.stable); + const satisfiedVersions = availableVersions + .filter(item => util_1.isVersionSatisfies(this.version, item.version)) + .filter(item => item.path) + .sort((a, b) => { + return -semver_1.default.compareBuild(a.version, b.version); + }); + if (!satisfiedVersions || satisfiedVersions.length === 0) { + return null; + } + return { + version: satisfiedVersions[0].version, + path: satisfiedVersions[0].path + }; + } + normalizeVersion(version) { + let stable = true; + if (version.endsWith('-ea')) { + version = version.replace(/-ea$/, ''); + stable = false; + } + else if (version.includes('-ea.')) { + // transform '11.0.3-ea.2' -> '11.0.3+2' + version = version.replace('-ea.', '+'); + stable = false; + } + if (!semver_1.default.validRange(version)) { + throw new Error(`The string '${version}' is not valid SemVer notation for a Java version. Please check README file for code snippets and more detailed information`); + } + return { + version, + stable + }; + } + setJavaDefault(version, toolPath) { + core.exportVariable('JAVA_HOME', toolPath); + core.addPath(path_1.default.join(toolPath, 'bin')); + core.setOutput('distribution', this.distribution); + core.setOutput('path', toolPath); + core.setOutput('version', version); + } +} +exports.JavaBase = JavaBase; /***/ }), @@ -11444,101 +11444,111 @@ module.exports = parseOptions /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LocalDistribution = void 0; -const tc = __importStar(__webpack_require__(139)); -const core = __importStar(__webpack_require__(470)); -const fs_1 = __importDefault(__webpack_require__(747)); -const path_1 = __importDefault(__webpack_require__(622)); -const base_installer_1 = __webpack_require__(83); -const util_1 = __webpack_require__(322); -const constants_1 = __webpack_require__(211); -class LocalDistribution extends base_installer_1.JavaBase { - constructor(installerOptions, jdkFile) { - super('jdkfile', installerOptions); - this.jdkFile = jdkFile; - } - setupJava() { - return __awaiter(this, void 0, void 0, function* () { - let foundJava = this.findInToolcache(); - if (foundJava) { - core.info(`Resolved Java ${foundJava.version} from tool-cache`); - } - else { - core.info(`Java ${this.version} was not found in tool-cache. Trying to unpack JDK file...`); - if (!this.jdkFile) { - throw new Error("'jdkFile' is not specified"); - } - const jdkFilePath = path_1.default.resolve(this.jdkFile); - const stats = fs_1.default.statSync(jdkFilePath); - if (!stats.isFile()) { - throw new Error(`JDK file was not found in path '${jdkFilePath}'`); - } - core.info(`Extracting Java from '${jdkFilePath}'`); - const extractedJavaPath = yield util_1.extractJdkFile(jdkFilePath); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const javaVersion = this.version; - let javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaVersion), this.architecture); - // for different Java distributions, postfix can exist or not so need to check both cases - if (process.platform === 'darwin' && - fs_1.default.existsSync(path_1.default.join(javaPath, constants_1.MACOS_JAVA_CONTENT_POSTFIX))) { - javaPath = path_1.default.join(javaPath, constants_1.MACOS_JAVA_CONTENT_POSTFIX); - } - foundJava = { - version: javaVersion, - path: javaPath - }; - } - core.info(`Setting Java ${foundJava.version} as default`); - this.setJavaDefault(foundJava.version, foundJava.path); - return foundJava; - }); - } - findPackageForDownload(version) { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('This method should not be implemented in local file provider'); - }); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('This method should not be implemented in local file provider'); - }); - } -} -exports.LocalDistribution = LocalDistribution; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LocalDistribution = void 0; +const tc = __importStar(__webpack_require__(139)); +const core = __importStar(__webpack_require__(470)); +const fs_1 = __importDefault(__webpack_require__(747)); +const path_1 = __importDefault(__webpack_require__(622)); +const base_installer_1 = __webpack_require__(83); +const util_1 = __webpack_require__(322); +const constants_1 = __webpack_require__(211); +class LocalDistribution extends base_installer_1.JavaBase { + constructor(installerOptions, jdkFile) { + super('jdkfile', installerOptions); + this.jdkFile = jdkFile; + } + setupJava() { + return __awaiter(this, void 0, void 0, function* () { + let foundJava = this.findInToolcache(); + if (foundJava) { + core.info(`Resolved Java ${foundJava.version} from tool-cache`); + } + else { + core.info(`Java ${this.version} was not found in tool-cache. Trying to unpack JDK file...`); + if (!this.jdkFile) { + throw new Error("'jdkFile' is not specified"); + } + let jdkFilePath; + let extension; + if (this.jdkFile.match(/^https?:\/\//)) { + core.info(`Downloading Java archive from ${this.jdkFile}...`); + const javaRelease = yield tc.downloadTool(this.jdkFile); + jdkFilePath = path_1.default.resolve(javaRelease); + extension = util_1.getDownloadArchiveExtension(); + } + else { + jdkFilePath = path_1.default.resolve(this.jdkFile); + } + const stats = fs_1.default.statSync(jdkFilePath); + if (!stats.isFile()) { + throw new Error(`JDK file was not found in path '${jdkFilePath}'`); + } + core.info(`Extracting Java from '${jdkFilePath}'`); + const extractedJavaPath = yield util_1.extractJdkFile(jdkFilePath, extension); + const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; + const archivePath = path_1.default.join(extractedJavaPath, archiveName); + const javaVersion = this.version; + let javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaVersion), this.architecture); + // for different Java distributions, postfix can exist or not so need to check both cases + if (process.platform === 'darwin' && + fs_1.default.existsSync(path_1.default.join(javaPath, constants_1.MACOS_JAVA_CONTENT_POSTFIX))) { + javaPath = path_1.default.join(javaPath, constants_1.MACOS_JAVA_CONTENT_POSTFIX); + } + foundJava = { + version: javaVersion, + path: javaPath + }; + } + core.info(`Setting Java ${foundJava.version} as default`); + this.setJavaDefault(foundJava.version, foundJava.path); + return foundJava; + }); + } + findPackageForDownload(version) { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('This method should not be implemented in local file provider'); + }); + } + downloadTool(javaRelease) { + return __awaiter(this, void 0, void 0, function* () { + throw new Error('This method should not be implemented in local file provider'); + }); + } +} +exports.LocalDistribution = LocalDistribution; /***/ }), @@ -13823,135 +13833,135 @@ exports.XMLCBWriter = XMLCBWriter; /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MicrosoftDistributions = void 0; -const base_installer_1 = __webpack_require__(83); -const semver_1 = __importDefault(__webpack_require__(876)); -const util_1 = __webpack_require__(322); -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -const fs_1 = __importDefault(__webpack_require__(747)); -const path_1 = __importDefault(__webpack_require__(622)); -class MicrosoftDistributions extends base_installer_1.JavaBase { - constructor(installerOptions) { - super('Microsoft', installerOptions); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); - const javaArchivePath = yield tc.downloadTool(javaRelease.url); - core.info(`Extracting Java archive...`); - const extension = util_1.getDownloadArchiveExtension(); - const extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture); - return { version: javaRelease.version, path: javaPath }; - }); - } - findPackageForDownload(range) { - return __awaiter(this, void 0, void 0, function* () { - if (this.architecture !== 'x64' && this.architecture !== 'aarch64') { - throw new Error(`Unsupported architecture: ${this.architecture}`); - } - if (!this.stable) { - throw new Error('Early access versions are not supported'); - } - if (this.packageType !== 'jdk') { - throw new Error('Microsoft Build of OpenJDK provides only the `jdk` package type'); - } - const availableVersionsRaw = yield this.getAvailableVersions(); - const opts = this.getPlatformOption(); - const availableVersions = availableVersionsRaw.map(item => ({ - url: `https://aka.ms/download-jdk/microsoft-jdk-${item.version.join('.')}-${opts.os}-${this.architecture}.${opts.archive}`, - version: this.convertVersionToSemver(item) - })); - const satisfiedVersion = availableVersions - .filter(item => util_1.isVersionSatisfies(range, item.version)) - .sort((a, b) => -semver_1.default.compareBuild(a.version, b.version))[0]; - if (!satisfiedVersion) { - const availableOptions = availableVersions.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; - throw new Error(`Could not find satisfied version for SemVer ${range}. ${availableOptionsMessage}`); - } - return satisfiedVersion; - }); - } - getAvailableVersions() { - return __awaiter(this, void 0, void 0, function* () { - // TODO get these dynamically! - // We will need Microsoft to add an endpoint where we can query for versions. - const jdkVersions = [ - { - version: [17, 0, 1, 12, 1] - }, - { - version: [16, 0, 2, 7, 1] - } - ]; - // M1 is only supported for Java 16 & 17 - if (process.platform !== 'darwin' || this.architecture !== 'aarch64') { - jdkVersions.push({ - version: [11, 0, 13, 8, 1] - }); - } - return jdkVersions; - }); - } - getPlatformOption(platform = process.platform /* for testing */) { - switch (platform) { - case 'darwin': - return { archive: 'tar.gz', os: 'macos' }; - case 'win32': - return { archive: 'zip', os: 'windows' }; - case 'linux': - return { archive: 'tar.gz', os: 'linux' }; - default: - throw new Error(`Platform '${platform}' is not supported. Supported platforms: 'darwin', 'linux', 'win32'`); - } - } - convertVersionToSemver(version) { - const major = version.version[0]; - const minor = version.version[1]; - const patch = version.version[2]; - return `${major}.${minor}.${patch}`; - } -} -exports.MicrosoftDistributions = MicrosoftDistributions; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MicrosoftDistributions = void 0; +const base_installer_1 = __webpack_require__(83); +const semver_1 = __importDefault(__webpack_require__(876)); +const util_1 = __webpack_require__(322); +const core = __importStar(__webpack_require__(470)); +const tc = __importStar(__webpack_require__(139)); +const fs_1 = __importDefault(__webpack_require__(747)); +const path_1 = __importDefault(__webpack_require__(622)); +class MicrosoftDistributions extends base_installer_1.JavaBase { + constructor(installerOptions) { + super('Microsoft', installerOptions); + } + downloadTool(javaRelease) { + return __awaiter(this, void 0, void 0, function* () { + core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); + const javaArchivePath = yield tc.downloadTool(javaRelease.url); + core.info(`Extracting Java archive...`); + const extension = util_1.getDownloadArchiveExtension(); + const extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); + const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; + const archivePath = path_1.default.join(extractedJavaPath, archiveName); + const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture); + return { version: javaRelease.version, path: javaPath }; + }); + } + findPackageForDownload(range) { + return __awaiter(this, void 0, void 0, function* () { + if (this.architecture !== 'x64' && this.architecture !== 'aarch64') { + throw new Error(`Unsupported architecture: ${this.architecture}`); + } + if (!this.stable) { + throw new Error('Early access versions are not supported'); + } + if (this.packageType !== 'jdk') { + throw new Error('Microsoft Build of OpenJDK provides only the `jdk` package type'); + } + const availableVersionsRaw = yield this.getAvailableVersions(); + const opts = this.getPlatformOption(); + const availableVersions = availableVersionsRaw.map(item => ({ + url: `https://aka.ms/download-jdk/microsoft-jdk-${item.version.join('.')}-${opts.os}-${this.architecture}.${opts.archive}`, + version: this.convertVersionToSemver(item) + })); + const satisfiedVersion = availableVersions + .filter(item => util_1.isVersionSatisfies(range, item.version)) + .sort((a, b) => -semver_1.default.compareBuild(a.version, b.version))[0]; + if (!satisfiedVersion) { + const availableOptions = availableVersions.map(item => item.version).join(', '); + const availableOptionsMessage = availableOptions + ? `\nAvailable versions: ${availableOptions}` + : ''; + throw new Error(`Could not find satisfied version for SemVer ${range}. ${availableOptionsMessage}`); + } + return satisfiedVersion; + }); + } + getAvailableVersions() { + return __awaiter(this, void 0, void 0, function* () { + // TODO get these dynamically! + // We will need Microsoft to add an endpoint where we can query for versions. + const jdkVersions = [ + { + version: [17, 0, 1, 12, 1] + }, + { + version: [16, 0, 2, 7, 1] + } + ]; + // M1 is only supported for Java 16 & 17 + if (process.platform !== 'darwin' || this.architecture !== 'aarch64') { + jdkVersions.push({ + version: [11, 0, 13, 8, 1] + }); + } + return jdkVersions; + }); + } + getPlatformOption(platform = process.platform /* for testing */) { + switch (platform) { + case 'darwin': + return { archive: 'tar.gz', os: 'macos' }; + case 'win32': + return { archive: 'zip', os: 'windows' }; + case 'linux': + return { archive: 'tar.gz', os: 'linux' }; + default: + throw new Error(`Platform '${platform}' is not supported. Supported platforms: 'darwin', 'linux', 'win32'`); + } + } + convertVersionToSemver(version) { + const major = version.version[0]; + const minor = version.version[1]; + const patch = version.version[2]; + return `${major}.${minor}.${patch}`; + } +} +exports.MicrosoftDistributions = MicrosoftDistributions; /***/ }), @@ -14225,28 +14235,28 @@ Object.defineProperty(exports, "__esModule", { value: true }); /***/ (function(__unusedmodule, exports) { "use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_OVERWRITE_SETTINGS = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_CHECK_LATEST = exports.INPUT_JDK_FILE = exports.INPUT_DISTRIBUTION = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; -exports.MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; -exports.INPUT_JAVA_VERSION = 'java-version'; -exports.INPUT_ARCHITECTURE = 'architecture'; -exports.INPUT_JAVA_PACKAGE = 'java-package'; -exports.INPUT_DISTRIBUTION = 'distribution'; -exports.INPUT_JDK_FILE = 'jdkFile'; -exports.INPUT_CHECK_LATEST = 'check-latest'; -exports.INPUT_SERVER_ID = 'server-id'; -exports.INPUT_SERVER_USERNAME = 'server-username'; -exports.INPUT_SERVER_PASSWORD = 'server-password'; -exports.INPUT_SETTINGS_PATH = 'settings-path'; -exports.INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; -exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; -exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; -exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; -exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; -exports.INPUT_CACHE = 'cache'; -exports.INPUT_JOB_STATUS = 'job-status'; -exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_OVERWRITE_SETTINGS = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_CHECK_LATEST = exports.INPUT_JDK_FILE = exports.INPUT_DISTRIBUTION = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; +exports.MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; +exports.INPUT_JAVA_VERSION = 'java-version'; +exports.INPUT_ARCHITECTURE = 'architecture'; +exports.INPUT_JAVA_PACKAGE = 'java-package'; +exports.INPUT_DISTRIBUTION = 'distribution'; +exports.INPUT_JDK_FILE = 'jdkFile'; +exports.INPUT_CHECK_LATEST = 'check-latest'; +exports.INPUT_SERVER_ID = 'server-id'; +exports.INPUT_SERVER_USERNAME = 'server-username'; +exports.INPUT_SERVER_PASSWORD = 'server-password'; +exports.INPUT_SETTINGS_PATH = 'settings-path'; +exports.INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; +exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; +exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; +exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; +exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; +exports.INPUT_CACHE = 'cache'; +exports.INPUT_JOB_STATUS = 'job-status'; +exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; /***/ }), @@ -18568,160 +18578,160 @@ module.exports = satisfies /***/ (function(__unusedmodule, exports, __webpack_require__) { "use strict"; - -/** - * @fileoverview this file provides methods handling dependency cache - */ -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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.save = exports.restore = void 0; -const path_1 = __webpack_require__(622); -const os_1 = __importDefault(__webpack_require__(87)); -const cache = __importStar(__webpack_require__(692)); -const core = __importStar(__webpack_require__(470)); -const glob = __importStar(__webpack_require__(281)); -const STATE_CACHE_PRIMARY_KEY = 'cache-primary-key'; -const CACHE_MATCHED_KEY = 'cache-matched-key'; -const CACHE_KEY_PREFIX = 'setup-java'; -const supportedPackageManager = [ - { - id: 'maven', - path: [path_1.join(os_1.default.homedir(), '.m2', 'repository')], - // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---maven - pattern: ['**/pom.xml'] - }, - { - id: 'gradle', - path: [path_1.join(os_1.default.homedir(), '.gradle', 'caches'), path_1.join(os_1.default.homedir(), '.gradle', 'wrapper')], - // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle - pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] - } -]; -function findPackageManager(id) { - const packageManager = supportedPackageManager.find(packageManager => packageManager.id === id); - if (packageManager === undefined) { - throw new Error(`unknown package manager specified: ${id}`); - } - return packageManager; -} -/** - * A function that generates a cache key to use. - * Format of the generated key will be "${{ platform }}-${{ id }}-${{ fileHash }}"". - * If there is no file matched to {@link PackageManager.path}, the generated key ends with a dash (-). - * @see {@link https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key|spec of cache key} - */ -function computeCacheKey(packageManager) { - return __awaiter(this, void 0, void 0, function* () { - const hash = yield glob.hashFiles(packageManager.pattern.join('\n')); - return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${hash}`; - }); -} -/** - * Restore the dependency cache - * @param id ID of the package manager, should be "maven" or "gradle" - */ -function restore(id) { - return __awaiter(this, void 0, void 0, function* () { - const packageManager = findPackageManager(id); - const primaryKey = yield computeCacheKey(packageManager); - core.debug(`primary key is ${primaryKey}`); - core.saveState(STATE_CACHE_PRIMARY_KEY, primaryKey); - if (primaryKey.endsWith('-')) { - throw new Error(`No file in ${process.cwd()} matched to [${packageManager.pattern}], make sure you have checked out the target repository`); - } - const matchedKey = yield cache.restoreCache(packageManager.path, primaryKey, [ - `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${id}` - ]); - if (matchedKey) { - core.saveState(CACHE_MATCHED_KEY, matchedKey); - core.info(`Cache restored from key: ${matchedKey}`); - } - else { - core.info(`${packageManager.id} cache is not found`); - } - }); -} -exports.restore = restore; -/** - * Save the dependency cache - * @param id ID of the package manager, should be "maven" or "gradle" - */ -function save(id) { - return __awaiter(this, void 0, void 0, function* () { - const packageManager = findPackageManager(id); - const matchedKey = core.getState(CACHE_MATCHED_KEY); - // Inputs are re-evaluted before the post action, so we want the original key used for restore - const primaryKey = core.getState(STATE_CACHE_PRIMARY_KEY); - if (!primaryKey) { - core.warning('Error retrieving key from state.'); - return; - } - else if (matchedKey === primaryKey) { - // no change in target directories - core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); - return; - } - try { - yield cache.saveCache(packageManager.path, primaryKey); - core.info(`Cache saved with the key: ${primaryKey}`); - } - catch (error) { - if (error.name === cache.ReserveCacheError.name) { - core.info(error.message); - } - else { - if (isProbablyGradleDaemonProblem(packageManager, error)) { - core.warning('Failed to save Gradle cache on Windows. If tar.exe reported "Permission denied", try to run Gradle with `--no-daemon` option. Refer to https://github.com/actions/cache/issues/454 for details.'); - } - throw error; - } - } - }); -} -exports.save = save; -/** - * @param packageManager the specified package manager by user - * @param error the error thrown by the saveCache - * @returns true if the given error seems related to the {@link https://github.com/actions/cache/issues/454|running Gradle Daemon issue}. - * @see {@link https://github.com/actions/cache/issues/454#issuecomment-840493935|why --no-daemon is necessary} - */ -function isProbablyGradleDaemonProblem(packageManager, error) { - if (packageManager.id !== 'gradle' || process.env['RUNNER_OS'] !== 'Windows') { - return false; - } - const message = error.message || ''; - return message.startsWith('Tar failed with error: '); -} + +/** + * @fileoverview this file provides methods handling dependency cache + */ +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.save = exports.restore = void 0; +const path_1 = __webpack_require__(622); +const os_1 = __importDefault(__webpack_require__(87)); +const cache = __importStar(__webpack_require__(692)); +const core = __importStar(__webpack_require__(470)); +const glob = __importStar(__webpack_require__(281)); +const STATE_CACHE_PRIMARY_KEY = 'cache-primary-key'; +const CACHE_MATCHED_KEY = 'cache-matched-key'; +const CACHE_KEY_PREFIX = 'setup-java'; +const supportedPackageManager = [ + { + id: 'maven', + path: [path_1.join(os_1.default.homedir(), '.m2', 'repository')], + // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---maven + pattern: ['**/pom.xml'] + }, + { + id: 'gradle', + path: [path_1.join(os_1.default.homedir(), '.gradle', 'caches'), path_1.join(os_1.default.homedir(), '.gradle', 'wrapper')], + // https://github.com/actions/cache/blob/0638051e9af2c23d10bb70fa9beffcad6cff9ce3/examples.md#java---gradle + pattern: ['**/*.gradle*', '**/gradle-wrapper.properties'] + } +]; +function findPackageManager(id) { + const packageManager = supportedPackageManager.find(packageManager => packageManager.id === id); + if (packageManager === undefined) { + throw new Error(`unknown package manager specified: ${id}`); + } + return packageManager; +} +/** + * A function that generates a cache key to use. + * Format of the generated key will be "${{ platform }}-${{ id }}-${{ fileHash }}"". + * If there is no file matched to {@link PackageManager.path}, the generated key ends with a dash (-). + * @see {@link https://docs.github.com/en/actions/guides/caching-dependencies-to-speed-up-workflows#matching-a-cache-key|spec of cache key} + */ +function computeCacheKey(packageManager) { + return __awaiter(this, void 0, void 0, function* () { + const hash = yield glob.hashFiles(packageManager.pattern.join('\n')); + return `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${packageManager.id}-${hash}`; + }); +} +/** + * Restore the dependency cache + * @param id ID of the package manager, should be "maven" or "gradle" + */ +function restore(id) { + return __awaiter(this, void 0, void 0, function* () { + const packageManager = findPackageManager(id); + const primaryKey = yield computeCacheKey(packageManager); + core.debug(`primary key is ${primaryKey}`); + core.saveState(STATE_CACHE_PRIMARY_KEY, primaryKey); + if (primaryKey.endsWith('-')) { + throw new Error(`No file in ${process.cwd()} matched to [${packageManager.pattern}], make sure you have checked out the target repository`); + } + const matchedKey = yield cache.restoreCache(packageManager.path, primaryKey, [ + `${CACHE_KEY_PREFIX}-${process.env['RUNNER_OS']}-${id}` + ]); + if (matchedKey) { + core.saveState(CACHE_MATCHED_KEY, matchedKey); + core.info(`Cache restored from key: ${matchedKey}`); + } + else { + core.info(`${packageManager.id} cache is not found`); + } + }); +} +exports.restore = restore; +/** + * Save the dependency cache + * @param id ID of the package manager, should be "maven" or "gradle" + */ +function save(id) { + return __awaiter(this, void 0, void 0, function* () { + const packageManager = findPackageManager(id); + const matchedKey = core.getState(CACHE_MATCHED_KEY); + // Inputs are re-evaluted before the post action, so we want the original key used for restore + const primaryKey = core.getState(STATE_CACHE_PRIMARY_KEY); + if (!primaryKey) { + core.warning('Error retrieving key from state.'); + return; + } + else if (matchedKey === primaryKey) { + // no change in target directories + core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`); + return; + } + try { + yield cache.saveCache(packageManager.path, primaryKey); + core.info(`Cache saved with the key: ${primaryKey}`); + } + catch (error) { + if (error.name === cache.ReserveCacheError.name) { + core.info(error.message); + } + else { + if (isProbablyGradleDaemonProblem(packageManager, error)) { + core.warning('Failed to save Gradle cache on Windows. If tar.exe reported "Permission denied", try to run Gradle with `--no-daemon` option. Refer to https://github.com/actions/cache/issues/454 for details.'); + } + throw error; + } + } + }); +} +exports.save = save; +/** + * @param packageManager the specified package manager by user + * @param error the error thrown by the saveCache + * @returns true if the given error seems related to the {@link https://github.com/actions/cache/issues/454|running Gradle Daemon issue}. + * @see {@link https://github.com/actions/cache/issues/454#issuecomment-840493935|why --no-daemon is necessary} + */ +function isProbablyGradleDaemonProblem(packageManager, error) { + if (packageManager.id !== 'gradle' || process.env['RUNNER_OS'] !== 'Windows') { + return false; + } + const message = error.message || ''; + return message.startsWith('Tar failed with error: '); +} /***/ }), @@ -18731,116 +18741,116 @@ function isProbablyGradleDaemonProblem(packageManager, error) { /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; -const os_1 = __importDefault(__webpack_require__(87)); -const path_1 = __importDefault(__webpack_require__(622)); -const fs = __importStar(__webpack_require__(747)); -const semver = __importStar(__webpack_require__(876)); -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -const constants_1 = __webpack_require__(211); -function getTempDir() { - let tempDirectory = process.env['RUNNER_TEMP'] || os_1.default.tmpdir(); - return tempDirectory; -} -exports.getTempDir = getTempDir; -function getBooleanInput(inputName, defaultValue = false) { - return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; -} -exports.getBooleanInput = getBooleanInput; -function getVersionFromToolcachePath(toolPath) { - if (toolPath) { - return path_1.default.basename(path_1.default.dirname(toolPath)); - } - return toolPath; -} -exports.getVersionFromToolcachePath = getVersionFromToolcachePath; -function extractJdkFile(toolPath, extension) { - return __awaiter(this, void 0, void 0, function* () { - if (!extension) { - extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path_1.default.extname(toolPath); - if (extension.startsWith('.')) { - extension = extension.substring(1); - } - } - switch (extension) { - case 'tar.gz': - case 'tar': - return yield tc.extractTar(toolPath); - case 'zip': - return yield tc.extractZip(toolPath); - default: - return yield tc.extract7z(toolPath); - } - }); -} -exports.extractJdkFile = extractJdkFile; -function getDownloadArchiveExtension() { - return process.platform === 'win32' ? 'zip' : 'tar.gz'; -} -exports.getDownloadArchiveExtension = getDownloadArchiveExtension; -function isVersionSatisfies(range, version) { - var _a; - if (semver.valid(range)) { - // if full version with build digit is provided as a range (such as '1.2.3+4') - // we should check for exact equal via compareBuild - // since semver.satisfies doesn't handle 4th digit - const semRange = semver.parse(range); - if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { - return semver.compareBuild(range, version) === 0; - } - } - return semver.satisfies(version, range); -} -exports.isVersionSatisfies = isVersionSatisfies; -function getToolcachePath(toolName, version, architecture) { - var _a; - const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; - const fullPath = path_1.default.join(toolcacheRoot, toolName, version, architecture); - if (fs.existsSync(fullPath)) { - return fullPath; - } - return null; -} -exports.getToolcachePath = getToolcachePath; -function isJobStatusSuccess() { - const jobStatus = core.getInput(constants_1.INPUT_JOB_STATUS); - return jobStatus === 'success'; -} -exports.isJobStatusSuccess = isJobStatusSuccess; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; +const os_1 = __importDefault(__webpack_require__(87)); +const path_1 = __importDefault(__webpack_require__(622)); +const fs = __importStar(__webpack_require__(747)); +const semver = __importStar(__webpack_require__(876)); +const core = __importStar(__webpack_require__(470)); +const tc = __importStar(__webpack_require__(139)); +const constants_1 = __webpack_require__(211); +function getTempDir() { + let tempDirectory = process.env['RUNNER_TEMP'] || os_1.default.tmpdir(); + return tempDirectory; +} +exports.getTempDir = getTempDir; +function getBooleanInput(inputName, defaultValue = false) { + return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; +} +exports.getBooleanInput = getBooleanInput; +function getVersionFromToolcachePath(toolPath) { + if (toolPath) { + return path_1.default.basename(path_1.default.dirname(toolPath)); + } + return toolPath; +} +exports.getVersionFromToolcachePath = getVersionFromToolcachePath; +function extractJdkFile(toolPath, extension) { + return __awaiter(this, void 0, void 0, function* () { + if (!extension) { + extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path_1.default.extname(toolPath); + if (extension.startsWith('.')) { + extension = extension.substring(1); + } + } + switch (extension) { + case 'tar.gz': + case 'tar': + return yield tc.extractTar(toolPath); + case 'zip': + return yield tc.extractZip(toolPath); + default: + return yield tc.extract7z(toolPath); + } + }); +} +exports.extractJdkFile = extractJdkFile; +function getDownloadArchiveExtension() { + return process.platform === 'win32' ? 'zip' : 'tar.gz'; +} +exports.getDownloadArchiveExtension = getDownloadArchiveExtension; +function isVersionSatisfies(range, version) { + var _a; + if (semver.valid(range)) { + // if full version with build digit is provided as a range (such as '1.2.3+4') + // we should check for exact equal via compareBuild + // since semver.satisfies doesn't handle 4th digit + const semRange = semver.parse(range); + if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { + return semver.compareBuild(range, version) === 0; + } + } + return semver.satisfies(version, range); +} +exports.isVersionSatisfies = isVersionSatisfies; +function getToolcachePath(toolName, version, architecture) { + var _a; + const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; + const fullPath = path_1.default.join(toolcacheRoot, toolName, version, architecture); + if (fs.existsSync(fullPath)) { + return fullPath; + } + return null; +} +exports.getToolcachePath = getToolcachePath; +function isJobStatusSuccess() { + const jobStatus = core.getInput(constants_1.INPUT_JOB_STATUS); + return jobStatus === 'success'; +} +exports.isJobStatusSuccess = isJobStatusSuccess; /***/ }), @@ -24359,132 +24369,132 @@ exports.userAgentPolicy = userAgentPolicy; /***/ (function(__unusedmodule, exports, __webpack_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.generate = exports.createAuthenticationSettings = exports.configureAuthentication = exports.SETTINGS_FILE = exports.M2_DIR = void 0; -const path = __importStar(__webpack_require__(622)); -const core = __importStar(__webpack_require__(470)); -const io = __importStar(__webpack_require__(1)); -const fs = __importStar(__webpack_require__(747)); -const os = __importStar(__webpack_require__(87)); -const xmlbuilder2_1 = __webpack_require__(255); -const constants = __importStar(__webpack_require__(211)); -const gpg = __importStar(__webpack_require__(884)); -const util_1 = __webpack_require__(322); -exports.M2_DIR = '.m2'; -exports.SETTINGS_FILE = 'settings.xml'; -function configureAuthentication() { - return __awaiter(this, void 0, void 0, function* () { - const id = core.getInput(constants.INPUT_SERVER_ID); - const username = core.getInput(constants.INPUT_SERVER_USERNAME); - const password = core.getInput(constants.INPUT_SERVER_PASSWORD); - const settingsDirectory = core.getInput(constants.INPUT_SETTINGS_PATH) || path.join(os.homedir(), exports.M2_DIR); - const overwriteSettings = util_1.getBooleanInput(constants.INPUT_OVERWRITE_SETTINGS, true); - const gpgPrivateKey = core.getInput(constants.INPUT_GPG_PRIVATE_KEY) || constants.INPUT_DEFAULT_GPG_PRIVATE_KEY; - const gpgPassphrase = core.getInput(constants.INPUT_GPG_PASSPHRASE) || - (gpgPrivateKey ? constants.INPUT_DEFAULT_GPG_PASSPHRASE : undefined); - if (gpgPrivateKey) { - core.setSecret(gpgPrivateKey); - } - yield createAuthenticationSettings(id, username, password, settingsDirectory, overwriteSettings, gpgPassphrase); - if (gpgPrivateKey) { - core.info('Importing private gpg key'); - const keyFingerprint = (yield gpg.importKey(gpgPrivateKey)) || ''; - core.saveState(constants.STATE_GPG_PRIVATE_KEY_FINGERPRINT, keyFingerprint); - } - }); -} -exports.configureAuthentication = configureAuthentication; -function createAuthenticationSettings(id, username, password, settingsDirectory, overwriteSettings, gpgPassphrase = undefined) { - return __awaiter(this, void 0, void 0, function* () { - core.info(`Creating ${exports.SETTINGS_FILE} with server-id: ${id}`); - // when an alternate m2 location is specified use only that location (no .m2 directory) - // otherwise use the home/.m2/ path - yield io.mkdirP(settingsDirectory); - yield write(settingsDirectory, generate(id, username, password, gpgPassphrase), overwriteSettings); - }); -} -exports.createAuthenticationSettings = createAuthenticationSettings; -// only exported for testing purposes -function generate(id, username, password, gpgPassphrase) { - const xmlObj = { - settings: { - '@xmlns': 'http://maven.apache.org/SETTINGS/1.0.0', - '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', - '@xsi:schemaLocation': 'http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd', - servers: { - server: [ - { - id: id, - username: `\${env.${username}}`, - password: `\${env.${password}}` - } - ] - } - } - }; - if (gpgPassphrase) { - const gpgServer = { - id: 'gpg.passphrase', - passphrase: `\${env.${gpgPassphrase}}` - }; - xmlObj.settings.servers.server.push(gpgServer); - } - return xmlbuilder2_1.create(xmlObj).end({ - headless: true, - prettyPrint: true, - width: 80 - }); -} -exports.generate = generate; -function write(directory, settings, overwriteSettings) { - return __awaiter(this, void 0, void 0, function* () { - const location = path.join(directory, exports.SETTINGS_FILE); - const settingsExists = fs.existsSync(location); - if (settingsExists && overwriteSettings) { - core.info(`Overwriting existing file ${location}`); - } - else if (!settingsExists) { - core.info(`Writing to ${location}`); - } - else { - core.info(`Skipping generation ${location} because file already exists and overwriting is not required`); - return; - } - return fs.writeFileSync(location, settings, { - encoding: 'utf-8', - flag: 'w' - }); - }); -} + +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.generate = exports.createAuthenticationSettings = exports.configureAuthentication = exports.SETTINGS_FILE = exports.M2_DIR = void 0; +const path = __importStar(__webpack_require__(622)); +const core = __importStar(__webpack_require__(470)); +const io = __importStar(__webpack_require__(1)); +const fs = __importStar(__webpack_require__(747)); +const os = __importStar(__webpack_require__(87)); +const xmlbuilder2_1 = __webpack_require__(255); +const constants = __importStar(__webpack_require__(211)); +const gpg = __importStar(__webpack_require__(884)); +const util_1 = __webpack_require__(322); +exports.M2_DIR = '.m2'; +exports.SETTINGS_FILE = 'settings.xml'; +function configureAuthentication() { + return __awaiter(this, void 0, void 0, function* () { + const id = core.getInput(constants.INPUT_SERVER_ID); + const username = core.getInput(constants.INPUT_SERVER_USERNAME); + const password = core.getInput(constants.INPUT_SERVER_PASSWORD); + const settingsDirectory = core.getInput(constants.INPUT_SETTINGS_PATH) || path.join(os.homedir(), exports.M2_DIR); + const overwriteSettings = util_1.getBooleanInput(constants.INPUT_OVERWRITE_SETTINGS, true); + const gpgPrivateKey = core.getInput(constants.INPUT_GPG_PRIVATE_KEY) || constants.INPUT_DEFAULT_GPG_PRIVATE_KEY; + const gpgPassphrase = core.getInput(constants.INPUT_GPG_PASSPHRASE) || + (gpgPrivateKey ? constants.INPUT_DEFAULT_GPG_PASSPHRASE : undefined); + if (gpgPrivateKey) { + core.setSecret(gpgPrivateKey); + } + yield createAuthenticationSettings(id, username, password, settingsDirectory, overwriteSettings, gpgPassphrase); + if (gpgPrivateKey) { + core.info('Importing private gpg key'); + const keyFingerprint = (yield gpg.importKey(gpgPrivateKey)) || ''; + core.saveState(constants.STATE_GPG_PRIVATE_KEY_FINGERPRINT, keyFingerprint); + } + }); +} +exports.configureAuthentication = configureAuthentication; +function createAuthenticationSettings(id, username, password, settingsDirectory, overwriteSettings, gpgPassphrase = undefined) { + return __awaiter(this, void 0, void 0, function* () { + core.info(`Creating ${exports.SETTINGS_FILE} with server-id: ${id}`); + // when an alternate m2 location is specified use only that location (no .m2 directory) + // otherwise use the home/.m2/ path + yield io.mkdirP(settingsDirectory); + yield write(settingsDirectory, generate(id, username, password, gpgPassphrase), overwriteSettings); + }); +} +exports.createAuthenticationSettings = createAuthenticationSettings; +// only exported for testing purposes +function generate(id, username, password, gpgPassphrase) { + const xmlObj = { + settings: { + '@xmlns': 'http://maven.apache.org/SETTINGS/1.0.0', + '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', + '@xsi:schemaLocation': 'http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd', + servers: { + server: [ + { + id: id, + username: `\${env.${username}}`, + password: `\${env.${password}}` + } + ] + } + } + }; + if (gpgPassphrase) { + const gpgServer = { + id: 'gpg.passphrase', + passphrase: `\${env.${gpgPassphrase}}` + }; + xmlObj.settings.servers.server.push(gpgServer); + } + return xmlbuilder2_1.create(xmlObj).end({ + headless: true, + prettyPrint: true, + width: 80 + }); +} +exports.generate = generate; +function write(directory, settings, overwriteSettings) { + return __awaiter(this, void 0, void 0, function* () { + const location = path.join(directory, exports.SETTINGS_FILE); + const settingsExists = fs.existsSync(location); + if (settingsExists && overwriteSettings) { + core.info(`Overwriting existing file ${location}`); + } + else if (!settingsExists) { + core.info(`Writing to ${location}`); + } + else { + core.info(`Skipping generation ${location} because file already exists and overwriting is not required`); + return; + } + return fs.writeFileSync(location, settings, { + encoding: 'utf-8', + flag: 'w' + }); + }); +} /***/ }), @@ -28685,168 +28695,168 @@ exports.NonRecordingSpan = NonRecordingSpan; /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TemurinDistribution = exports.TemurinImplementation = void 0; -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -const fs_1 = __importDefault(__webpack_require__(747)); -const path_1 = __importDefault(__webpack_require__(622)); -const semver_1 = __importDefault(__webpack_require__(876)); -const base_installer_1 = __webpack_require__(83); -const util_1 = __webpack_require__(322); -var TemurinImplementation; -(function (TemurinImplementation) { - TemurinImplementation["Hotspot"] = "Hotspot"; -})(TemurinImplementation = exports.TemurinImplementation || (exports.TemurinImplementation = {})); -class TemurinDistribution extends base_installer_1.JavaBase { - constructor(installerOptions, jvmImpl) { - super(`Temurin-${jvmImpl}`, installerOptions); - this.jvmImpl = jvmImpl; - } - findPackageForDownload(version) { - return __awaiter(this, void 0, void 0, function* () { - const availableVersionsRaw = yield this.getAvailableVersions(); - 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 - }; - }); - const satisfiedVersions = availableVersionsWithBinaries - .filter(item => util_1.isVersionSatisfies(version, item.version)) - .sort((a, b) => { - return -semver_1.default.compareBuild(a.version, b.version); - }); - const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; - if (!resolvedFullVersion) { - const availableOptions = availableVersionsWithBinaries.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; - throw new Error(`Could not find satisfied version for SemVer '${version}'. ${availableOptionsMessage}`); - } - return resolvedFullVersion; - }); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - let javaPath; - let extractedJavaPath; - core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); - const javaArchivePath = yield tc.downloadTool(javaRelease.url); - core.info(`Extracting Java archive...`); - let extension = util_1.getDownloadArchiveExtension(); - extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const version = this.getToolcacheVersionName(javaRelease.version); - javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture); - return { version: javaRelease.version, path: javaPath }; - }); - } - get toolcacheFolderName() { - return super.toolcacheFolderName; - } - getAvailableVersions() { - return __awaiter(this, void 0, void 0, function* () { - const platform = this.getPlatformOption(); - const arch = this.architecture; - const imageType = this.packageType; - const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions - const releaseType = this.stable ? 'ga' : 'ea'; - console.time('temurin-retrieve-available-versions'); - 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('&'); - // need to iterate through all pages to retrieve the list of all versions - // Adoptium API doesn't provide way to retrieve the count of pages to iterate so infinity loop - let page_index = 0; - const availableVersions = []; - while (true) { - const requestArguments = `${baseRequestArguments}&page_size=20&page=${page_index}`; - const availableVersionsUrl = `https://api.adoptium.net/v3/assets/version/${versionRange}?${requestArguments}`; - if (core.isDebug() && page_index === 0) { - // url is identical except page_index so print it once for debug - core.debug(`Gathering available versions from '${availableVersionsUrl}'`); - } - const paginationPage = (yield this.http.getJson(availableVersionsUrl)).result; - if (paginationPage === null || paginationPage.length === 0) { - // break infinity loop because we have reached end of pagination - break; - } - availableVersions.push(...paginationPage); - page_index++; - } - if (core.isDebug()) { - core.startGroup('Print information about available versions'); - console.timeEnd('temurin-retrieve-available-versions'); - console.log(`Available versions: [${availableVersions.length}]`); - console.log(availableVersions.map(item => item.version_data.semver).join(', ')); - core.endGroup(); - } - return availableVersions; - }); - } - getPlatformOption() { - // Adoptium has own platform names so need to map them - switch (process.platform) { - case 'darwin': - return 'mac'; - case 'win32': - return 'windows'; - default: - return process.platform; - } - } -} -exports.TemurinDistribution = TemurinDistribution; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TemurinDistribution = exports.TemurinImplementation = void 0; +const core = __importStar(__webpack_require__(470)); +const tc = __importStar(__webpack_require__(139)); +const fs_1 = __importDefault(__webpack_require__(747)); +const path_1 = __importDefault(__webpack_require__(622)); +const semver_1 = __importDefault(__webpack_require__(876)); +const base_installer_1 = __webpack_require__(83); +const util_1 = __webpack_require__(322); +var TemurinImplementation; +(function (TemurinImplementation) { + TemurinImplementation["Hotspot"] = "Hotspot"; +})(TemurinImplementation = exports.TemurinImplementation || (exports.TemurinImplementation = {})); +class TemurinDistribution extends base_installer_1.JavaBase { + constructor(installerOptions, jvmImpl) { + super(`Temurin-${jvmImpl}`, installerOptions); + this.jvmImpl = jvmImpl; + } + findPackageForDownload(version) { + return __awaiter(this, void 0, void 0, function* () { + const availableVersionsRaw = yield this.getAvailableVersions(); + 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 + }; + }); + const satisfiedVersions = availableVersionsWithBinaries + .filter(item => util_1.isVersionSatisfies(version, item.version)) + .sort((a, b) => { + return -semver_1.default.compareBuild(a.version, b.version); + }); + const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; + if (!resolvedFullVersion) { + const availableOptions = availableVersionsWithBinaries.map(item => item.version).join(', '); + const availableOptionsMessage = availableOptions + ? `\nAvailable versions: ${availableOptions}` + : ''; + throw new Error(`Could not find satisfied version for SemVer '${version}'. ${availableOptionsMessage}`); + } + return resolvedFullVersion; + }); + } + downloadTool(javaRelease) { + return __awaiter(this, void 0, void 0, function* () { + let javaPath; + let extractedJavaPath; + core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); + const javaArchivePath = yield tc.downloadTool(javaRelease.url); + core.info(`Extracting Java archive...`); + let extension = util_1.getDownloadArchiveExtension(); + extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); + const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; + const archivePath = path_1.default.join(extractedJavaPath, archiveName); + const version = this.getToolcacheVersionName(javaRelease.version); + javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture); + return { version: javaRelease.version, path: javaPath }; + }); + } + get toolcacheFolderName() { + return super.toolcacheFolderName; + } + getAvailableVersions() { + return __awaiter(this, void 0, void 0, function* () { + const platform = this.getPlatformOption(); + const arch = this.architecture; + const imageType = this.packageType; + const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions + const releaseType = this.stable ? 'ga' : 'ea'; + console.time('temurin-retrieve-available-versions'); + 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('&'); + // need to iterate through all pages to retrieve the list of all versions + // Adoptium API doesn't provide way to retrieve the count of pages to iterate so infinity loop + let page_index = 0; + const availableVersions = []; + while (true) { + const requestArguments = `${baseRequestArguments}&page_size=20&page=${page_index}`; + const availableVersionsUrl = `https://api.adoptium.net/v3/assets/version/${versionRange}?${requestArguments}`; + if (core.isDebug() && page_index === 0) { + // url is identical except page_index so print it once for debug + core.debug(`Gathering available versions from '${availableVersionsUrl}'`); + } + const paginationPage = (yield this.http.getJson(availableVersionsUrl)).result; + if (paginationPage === null || paginationPage.length === 0) { + // break infinity loop because we have reached end of pagination + break; + } + availableVersions.push(...paginationPage); + page_index++; + } + if (core.isDebug()) { + core.startGroup('Print information about available versions'); + console.timeEnd('temurin-retrieve-available-versions'); + console.log(`Available versions: [${availableVersions.length}]`); + console.log(availableVersions.map(item => item.version_data.semver).join(', ')); + core.endGroup(); + } + return availableVersions; + }); + } + getPlatformOption() { + // Adoptium has own platform names so need to map them + switch (process.platform) { + case 'darwin': + return 'mac'; + case 'win32': + return 'windows'; + default: + return process.platform; + } + } +} +exports.TemurinDistribution = TemurinDistribution; /***/ }), @@ -30687,17 +30697,9 @@ AbortError.prototype = Object.create(Error.prototype); AbortError.prototype.constructor = AbortError; AbortError.prototype.name = 'AbortError'; -const URL$1 = Url.URL || whatwgUrl.URL; - // fix an issue where "PassThrough", "resolve" aren't a named export for node <10 const PassThrough$1 = Stream.PassThrough; - -const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { - const orig = new URL$1(original).hostname; - const dest = new URL$1(destination).hostname; - - return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); -}; +const resolve_url = Url.resolve; /** * Fetch function @@ -30785,19 +30787,7 @@ function fetch(url, opts) { const location = headers.get('Location'); // HTTP fetch step 5.3 - let locationURL = null; - try { - locationURL = location === null ? null : new URL$1(location, request.url).toString(); - } catch (err) { - // error here can only be invalid URL in Location: header - // do not throw when options.redirect == manual - // let the user extract the errorneous redirect URL - if (request.redirect !== 'manual') { - reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); - finalize(); - return; - } - } + const locationURL = location === null ? null : resolve_url(request.url, location); // HTTP fetch step 5.5 switch (request.redirect) { @@ -30845,12 +30835,6 @@ function fetch(url, opts) { size: request.size }; - if (!isDomainOrSubdomain(request.url, locationURL)) { - for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { - requestOpts.headers.delete(name); - } - } - // HTTP-redirect fetch step 9 if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); @@ -38433,158 +38417,158 @@ module.exports = clean /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LibericaDistributions = void 0; -const base_installer_1 = __webpack_require__(83); -const semver_1 = __importDefault(__webpack_require__(876)); -const util_1 = __webpack_require__(322); -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -const fs_1 = __importDefault(__webpack_require__(747)); -const path_1 = __importDefault(__webpack_require__(622)); -const supportedPlatform = `'linux', 'linux-musl', 'macos', 'solaris', 'windows'`; -const supportedArchitecture = `'x86', 'x64', 'armv7', 'aarch64', 'ppc64le'`; -class LibericaDistributions extends base_installer_1.JavaBase { - constructor(installerOptions) { - super('Liberica', installerOptions); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); - const javaArchivePath = yield tc.downloadTool(javaRelease.url); - core.info(`Extracting Java archive...`); - const extension = util_1.getDownloadArchiveExtension(); - const extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture); - return { version: javaRelease.version, path: javaPath }; - }); - } - findPackageForDownload(range) { - return __awaiter(this, void 0, void 0, function* () { - const availableVersionsRaw = yield this.getAvailableVersions(); - const availableVersions = availableVersionsRaw.map(item => ({ - url: item.downloadUrl, - version: this.convertVersionToSemver(item) - })); - const satisfiedVersion = availableVersions - .filter(item => util_1.isVersionSatisfies(range, item.version)) - .sort((a, b) => -semver_1.default.compareBuild(a.version, b.version))[0]; - if (!satisfiedVersion) { - const availableOptions = availableVersions.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; - throw new Error(`Could not find satisfied version for semver ${range}. ${availableOptionsMessage}`); - } - return satisfiedVersion; - }); - } - getAvailableVersions() { - var _a; - return __awaiter(this, void 0, void 0, function* () { - console.time('liberica-retrieve-available-versions'); - const url = this.prepareAvailableVersionsUrl(); - if (core.isDebug()) { - core.debug(`Gathering available versions from '${url}'`); - } - const availableVersions = (_a = (yield this.http.getJson(url)).result) !== null && _a !== void 0 ? _a : []; - if (core.isDebug()) { - core.startGroup('Print information about available versions'); - console.timeEnd('liberica-retrieve-available-versions'); - console.log(`Available versions: [${availableVersions.length}]`); - console.log(availableVersions.map(item => item.version)); - core.endGroup(); - } - return availableVersions; - }); - } - prepareAvailableVersionsUrl() { - const urlOptions = Object.assign(Object.assign({ os: this.getPlatformOption(), 'bundle-type': this.getBundleType() }, this.getArchitectureOptions()), { 'build-type': this.stable ? 'all' : 'ea', 'installation-type': 'archive', fields: 'downloadUrl,version,featureVersion,interimVersion,updateVersion,buildVersion' }); - const searchParams = new URLSearchParams(urlOptions).toString(); - return `https://api.bell-sw.com/v1/liberica/releases?${searchParams}`; - } - getBundleType() { - const [bundleType, feature] = this.packageType.split('+'); - if (feature === null || feature === void 0 ? void 0 : feature.includes('fx')) { - return bundleType + '-full'; - } - return bundleType; - } - getArchitectureOptions() { - switch (this.architecture) { - case 'x86': - return { bitness: '32', arch: 'x86' }; - case 'x64': - return { bitness: '64', arch: 'x86' }; - case 'armv7': - return { bitness: '32', arch: 'arm' }; - case 'aarch64': - return { bitness: '64', arch: 'arm' }; - case 'ppc64le': - return { bitness: '64', arch: 'ppc' }; - default: - throw new Error(`Architecture '${this.architecture}' is not supported. Supported architectures: ${supportedArchitecture}`); - } - } - getPlatformOption(platform = process.platform) { - switch (platform) { - case 'darwin': - return 'macos'; - case 'win32': - case 'cygwin': - return 'windows'; - case 'linux': - return 'linux'; - case 'sunos': - return 'solaris'; - default: - throw new Error(`Platform '${platform}' is not supported. Supported platforms: ${supportedPlatform}`); - } - } - convertVersionToSemver(version) { - let { buildVersion, featureVersion, interimVersion, updateVersion } = version; - const mainVersion = [featureVersion, interimVersion, updateVersion].join('.'); - if (buildVersion != 0) { - return `${mainVersion}+${buildVersion}`; - } - return mainVersion; - } -} -exports.LibericaDistributions = LibericaDistributions; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LibericaDistributions = void 0; +const base_installer_1 = __webpack_require__(83); +const semver_1 = __importDefault(__webpack_require__(876)); +const util_1 = __webpack_require__(322); +const core = __importStar(__webpack_require__(470)); +const tc = __importStar(__webpack_require__(139)); +const fs_1 = __importDefault(__webpack_require__(747)); +const path_1 = __importDefault(__webpack_require__(622)); +const supportedPlatform = `'linux', 'linux-musl', 'macos', 'solaris', 'windows'`; +const supportedArchitecture = `'x86', 'x64', 'armv7', 'aarch64', 'ppc64le'`; +class LibericaDistributions extends base_installer_1.JavaBase { + constructor(installerOptions) { + super('Liberica', installerOptions); + } + downloadTool(javaRelease) { + return __awaiter(this, void 0, void 0, function* () { + core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); + const javaArchivePath = yield tc.downloadTool(javaRelease.url); + core.info(`Extracting Java archive...`); + const extension = util_1.getDownloadArchiveExtension(); + const extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); + const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; + const archivePath = path_1.default.join(extractedJavaPath, archiveName); + const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture); + return { version: javaRelease.version, path: javaPath }; + }); + } + findPackageForDownload(range) { + return __awaiter(this, void 0, void 0, function* () { + const availableVersionsRaw = yield this.getAvailableVersions(); + const availableVersions = availableVersionsRaw.map(item => ({ + url: item.downloadUrl, + version: this.convertVersionToSemver(item) + })); + const satisfiedVersion = availableVersions + .filter(item => util_1.isVersionSatisfies(range, item.version)) + .sort((a, b) => -semver_1.default.compareBuild(a.version, b.version))[0]; + if (!satisfiedVersion) { + const availableOptions = availableVersions.map(item => item.version).join(', '); + const availableOptionsMessage = availableOptions + ? `\nAvailable versions: ${availableOptions}` + : ''; + throw new Error(`Could not find satisfied version for semver ${range}. ${availableOptionsMessage}`); + } + return satisfiedVersion; + }); + } + getAvailableVersions() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + console.time('liberica-retrieve-available-versions'); + const url = this.prepareAvailableVersionsUrl(); + if (core.isDebug()) { + core.debug(`Gathering available versions from '${url}'`); + } + const availableVersions = (_a = (yield this.http.getJson(url)).result) !== null && _a !== void 0 ? _a : []; + if (core.isDebug()) { + core.startGroup('Print information about available versions'); + console.timeEnd('liberica-retrieve-available-versions'); + console.log(`Available versions: [${availableVersions.length}]`); + console.log(availableVersions.map(item => item.version)); + core.endGroup(); + } + return availableVersions; + }); + } + prepareAvailableVersionsUrl() { + const urlOptions = Object.assign(Object.assign({ os: this.getPlatformOption(), 'bundle-type': this.getBundleType() }, this.getArchitectureOptions()), { 'build-type': this.stable ? 'all' : 'ea', 'installation-type': 'archive', fields: 'downloadUrl,version,featureVersion,interimVersion,updateVersion,buildVersion' }); + const searchParams = new URLSearchParams(urlOptions).toString(); + return `https://api.bell-sw.com/v1/liberica/releases?${searchParams}`; + } + getBundleType() { + const [bundleType, feature] = this.packageType.split('+'); + if (feature === null || feature === void 0 ? void 0 : feature.includes('fx')) { + return bundleType + '-full'; + } + return bundleType; + } + getArchitectureOptions() { + switch (this.architecture) { + case 'x86': + return { bitness: '32', arch: 'x86' }; + case 'x64': + return { bitness: '64', arch: 'x86' }; + case 'armv7': + return { bitness: '32', arch: 'arm' }; + case 'aarch64': + return { bitness: '64', arch: 'arm' }; + case 'ppc64le': + return { bitness: '64', arch: 'ppc' }; + default: + throw new Error(`Architecture '${this.architecture}' is not supported. Supported architectures: ${supportedArchitecture}`); + } + } + getPlatformOption(platform = process.platform) { + switch (platform) { + case 'darwin': + return 'macos'; + case 'win32': + case 'cygwin': + return 'windows'; + case 'linux': + return 'linux'; + case 'sunos': + return 'solaris'; + default: + throw new Error(`Platform '${platform}' is not supported. Supported platforms: ${supportedPlatform}`); + } + } + convertVersionToSemver(version) { + let { buildVersion, featureVersion, interimVersion, updateVersion } = version; + const mainVersion = [featureVersion, interimVersion, updateVersion].join('.'); + if (buildVersion != 0) { + return `${mainVersion}+${buildVersion}`; + } + return mainVersion; + } +} +exports.LibericaDistributions = LibericaDistributions; /***/ }), @@ -44816,170 +44800,170 @@ exports.ShadowRootImpl = ShadowRootImpl; /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AdoptDistribution = exports.AdoptImplementation = void 0; -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -const fs_1 = __importDefault(__webpack_require__(747)); -const path_1 = __importDefault(__webpack_require__(622)); -const semver_1 = __importDefault(__webpack_require__(876)); -const base_installer_1 = __webpack_require__(83); -const util_1 = __webpack_require__(322); -var AdoptImplementation; -(function (AdoptImplementation) { - AdoptImplementation["Hotspot"] = "Hotspot"; - AdoptImplementation["OpenJ9"] = "OpenJ9"; -})(AdoptImplementation = exports.AdoptImplementation || (exports.AdoptImplementation = {})); -class AdoptDistribution extends base_installer_1.JavaBase { - constructor(installerOptions, jvmImpl) { - super(`Adopt-${jvmImpl}`, installerOptions); - this.jvmImpl = jvmImpl; - } - findPackageForDownload(version) { - return __awaiter(this, void 0, void 0, function* () { - const availableVersionsRaw = yield 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 - }; - }); - const satisfiedVersions = availableVersionsWithBinaries - .filter(item => util_1.isVersionSatisfies(version, item.version)) - .sort((a, b) => { - return -semver_1.default.compareBuild(a.version, b.version); - }); - const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; - if (!resolvedFullVersion) { - const availableOptions = availableVersionsWithBinaries.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; - throw new Error(`Could not find satisfied version for SemVer '${version}'. ${availableOptionsMessage}`); - } - return resolvedFullVersion; - }); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - let javaPath; - let extractedJavaPath; - core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); - const javaArchivePath = yield tc.downloadTool(javaRelease.url); - core.info(`Extracting Java archive...`); - let extension = util_1.getDownloadArchiveExtension(); - extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const version = this.getToolcacheVersionName(javaRelease.version); - javaPath = yield tc.cacheDir(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; - } - getAvailableVersions() { - return __awaiter(this, void 0, void 0, function* () { - const platform = this.getPlatformOption(); - const arch = this.architecture; - const imageType = this.packageType; - const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions - const releaseType = this.stable ? 'ga' : 'ea'; - console.time('adopt-retrieve-available-versions'); - 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('&'); - // need to iterate through all pages to retrieve the list of all versions - // Adopt API doesn't provide way to retrieve the count of pages to iterate so infinity loop - let page_index = 0; - const availableVersions = []; - while (true) { - const requestArguments = `${baseRequestArguments}&page_size=20&page=${page_index}`; - const availableVersionsUrl = `https://api.adoptopenjdk.net/v3/assets/version/${versionRange}?${requestArguments}`; - if (core.isDebug() && page_index === 0) { - // url is identical except page_index so print it once for debug - core.debug(`Gathering available versions from '${availableVersionsUrl}'`); - } - const paginationPage = (yield this.http.getJson(availableVersionsUrl)).result; - if (paginationPage === null || paginationPage.length === 0) { - // break infinity loop because we have reached end of pagination - break; - } - availableVersions.push(...paginationPage); - page_index++; - } - if (core.isDebug()) { - core.startGroup('Print information about available versions'); - console.timeEnd('adopt-retrieve-available-versions'); - console.log(`Available versions: [${availableVersions.length}]`); - console.log(availableVersions.map(item => item.version_data.semver).join(', ')); - core.endGroup(); - } - 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; - } - } -} -exports.AdoptDistribution = AdoptDistribution; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AdoptDistribution = exports.AdoptImplementation = void 0; +const core = __importStar(__webpack_require__(470)); +const tc = __importStar(__webpack_require__(139)); +const fs_1 = __importDefault(__webpack_require__(747)); +const path_1 = __importDefault(__webpack_require__(622)); +const semver_1 = __importDefault(__webpack_require__(876)); +const base_installer_1 = __webpack_require__(83); +const util_1 = __webpack_require__(322); +var AdoptImplementation; +(function (AdoptImplementation) { + AdoptImplementation["Hotspot"] = "Hotspot"; + AdoptImplementation["OpenJ9"] = "OpenJ9"; +})(AdoptImplementation = exports.AdoptImplementation || (exports.AdoptImplementation = {})); +class AdoptDistribution extends base_installer_1.JavaBase { + constructor(installerOptions, jvmImpl) { + super(`Adopt-${jvmImpl}`, installerOptions); + this.jvmImpl = jvmImpl; + } + findPackageForDownload(version) { + return __awaiter(this, void 0, void 0, function* () { + const availableVersionsRaw = yield 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 + }; + }); + const satisfiedVersions = availableVersionsWithBinaries + .filter(item => util_1.isVersionSatisfies(version, item.version)) + .sort((a, b) => { + return -semver_1.default.compareBuild(a.version, b.version); + }); + const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; + if (!resolvedFullVersion) { + const availableOptions = availableVersionsWithBinaries.map(item => item.version).join(', '); + const availableOptionsMessage = availableOptions + ? `\nAvailable versions: ${availableOptions}` + : ''; + throw new Error(`Could not find satisfied version for SemVer '${version}'. ${availableOptionsMessage}`); + } + return resolvedFullVersion; + }); + } + downloadTool(javaRelease) { + return __awaiter(this, void 0, void 0, function* () { + let javaPath; + let extractedJavaPath; + core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); + const javaArchivePath = yield tc.downloadTool(javaRelease.url); + core.info(`Extracting Java archive...`); + let extension = util_1.getDownloadArchiveExtension(); + extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); + const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; + const archivePath = path_1.default.join(extractedJavaPath, archiveName); + const version = this.getToolcacheVersionName(javaRelease.version); + javaPath = yield tc.cacheDir(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; + } + getAvailableVersions() { + return __awaiter(this, void 0, void 0, function* () { + const platform = this.getPlatformOption(); + const arch = this.architecture; + const imageType = this.packageType; + const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions + const releaseType = this.stable ? 'ga' : 'ea'; + console.time('adopt-retrieve-available-versions'); + 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('&'); + // need to iterate through all pages to retrieve the list of all versions + // Adopt API doesn't provide way to retrieve the count of pages to iterate so infinity loop + let page_index = 0; + const availableVersions = []; + while (true) { + const requestArguments = `${baseRequestArguments}&page_size=20&page=${page_index}`; + const availableVersionsUrl = `https://api.adoptopenjdk.net/v3/assets/version/${versionRange}?${requestArguments}`; + if (core.isDebug() && page_index === 0) { + // url is identical except page_index so print it once for debug + core.debug(`Gathering available versions from '${availableVersionsUrl}'`); + } + const paginationPage = (yield this.http.getJson(availableVersionsUrl)).result; + if (paginationPage === null || paginationPage.length === 0) { + // break infinity loop because we have reached end of pagination + break; + } + availableVersions.push(...paginationPage); + page_index++; + } + if (core.isDebug()) { + core.startGroup('Print information about available versions'); + console.timeEnd('adopt-retrieve-available-versions'); + console.log(`Available versions: [${availableVersions.length}]`); + console.log(availableVersions.map(item => item.version_data.semver).join(', ')); + core.endGroup(); + } + 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; + } + } +} +exports.AdoptDistribution = AdoptDistribution; /***/ }), @@ -56157,48 +56141,48 @@ exports.SearchState = SearchState; /***/ (function(__unusedmodule, exports, __webpack_require__) { "use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getJavaDistribution = void 0; -const installer_1 = __webpack_require__(144); -const installer_2 = __webpack_require__(834); -const installer_3 = __webpack_require__(584); -const installer_4 = __webpack_require__(439); -const installer_5 = __webpack_require__(507); -const installer_6 = __webpack_require__(196); -var JavaDistribution; -(function (JavaDistribution) { - JavaDistribution["Adopt"] = "adopt"; - JavaDistribution["AdoptHotspot"] = "adopt-hotspot"; - JavaDistribution["AdoptOpenJ9"] = "adopt-openj9"; - JavaDistribution["Temurin"] = "temurin"; - JavaDistribution["Zulu"] = "zulu"; - JavaDistribution["Liberica"] = "liberica"; - JavaDistribution["JdkFile"] = "jdkfile"; - JavaDistribution["Microsoft"] = "microsoft"; -})(JavaDistribution || (JavaDistribution = {})); -function getJavaDistribution(distributionName, installerOptions, jdkFile) { - switch (distributionName) { - case JavaDistribution.JdkFile: - return new installer_1.LocalDistribution(installerOptions, jdkFile); - case JavaDistribution.Adopt: - case JavaDistribution.AdoptHotspot: - return new installer_3.AdoptDistribution(installerOptions, installer_3.AdoptImplementation.Hotspot); - case JavaDistribution.AdoptOpenJ9: - return new installer_3.AdoptDistribution(installerOptions, installer_3.AdoptImplementation.OpenJ9); - case JavaDistribution.Temurin: - return new installer_4.TemurinDistribution(installerOptions, installer_4.TemurinImplementation.Hotspot); - case JavaDistribution.Zulu: - return new installer_2.ZuluDistribution(installerOptions); - case JavaDistribution.Liberica: - return new installer_5.LibericaDistributions(installerOptions); - case JavaDistribution.Microsoft: - return new installer_6.MicrosoftDistributions(installerOptions); - default: - return null; - } -} -exports.getJavaDistribution = getJavaDistribution; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getJavaDistribution = void 0; +const installer_1 = __webpack_require__(144); +const installer_2 = __webpack_require__(834); +const installer_3 = __webpack_require__(584); +const installer_4 = __webpack_require__(439); +const installer_5 = __webpack_require__(507); +const installer_6 = __webpack_require__(196); +var JavaDistribution; +(function (JavaDistribution) { + JavaDistribution["Adopt"] = "adopt"; + JavaDistribution["AdoptHotspot"] = "adopt-hotspot"; + JavaDistribution["AdoptOpenJ9"] = "adopt-openj9"; + JavaDistribution["Temurin"] = "temurin"; + JavaDistribution["Zulu"] = "zulu"; + JavaDistribution["Liberica"] = "liberica"; + JavaDistribution["JdkFile"] = "jdkfile"; + JavaDistribution["Microsoft"] = "microsoft"; +})(JavaDistribution || (JavaDistribution = {})); +function getJavaDistribution(distributionName, installerOptions, jdkFile) { + switch (distributionName) { + case JavaDistribution.JdkFile: + return new installer_1.LocalDistribution(installerOptions, jdkFile); + case JavaDistribution.Adopt: + case JavaDistribution.AdoptHotspot: + return new installer_3.AdoptDistribution(installerOptions, installer_3.AdoptImplementation.Hotspot); + case JavaDistribution.AdoptOpenJ9: + return new installer_3.AdoptDistribution(installerOptions, installer_3.AdoptImplementation.OpenJ9); + case JavaDistribution.Temurin: + return new installer_4.TemurinDistribution(installerOptions, installer_4.TemurinImplementation.Hotspot); + case JavaDistribution.Zulu: + return new installer_2.ZuluDistribution(installerOptions); + case JavaDistribution.Liberica: + return new installer_5.LibericaDistributions(installerOptions); + case JavaDistribution.Microsoft: + return new installer_6.MicrosoftDistributions(installerOptions); + default: + return null; + } +} +exports.getJavaDistribution = getJavaDistribution; /***/ }), @@ -59948,83 +59932,83 @@ module.exports = new Type('tag:yaml.org,2002:null', { /***/ (function(__unusedmodule, exports, __webpack_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 }); -const core = __importStar(__webpack_require__(470)); -const auth = __importStar(__webpack_require__(331)); -const util_1 = __webpack_require__(322); -const constants = __importStar(__webpack_require__(211)); -const cache_1 = __webpack_require__(319); -const path = __importStar(__webpack_require__(622)); -const distribution_factory_1 = __webpack_require__(729); -function run() { - return __awaiter(this, void 0, void 0, function* () { - try { - const version = core.getInput(constants.INPUT_JAVA_VERSION, { required: true }); - const distributionName = core.getInput(constants.INPUT_DISTRIBUTION, { required: true }); - const architecture = core.getInput(constants.INPUT_ARCHITECTURE); - const packageType = core.getInput(constants.INPUT_JAVA_PACKAGE); - const jdkFile = core.getInput(constants.INPUT_JDK_FILE); - const cache = core.getInput(constants.INPUT_CACHE); - const checkLatest = util_1.getBooleanInput(constants.INPUT_CHECK_LATEST, false); - const installerOptions = { - architecture, - packageType, - version, - checkLatest - }; - const distribution = distribution_factory_1.getJavaDistribution(distributionName, installerOptions, jdkFile); - if (!distribution) { - throw new Error(`No supported distribution was found for input ${distributionName}`); - } - const result = yield distribution.setupJava(); - core.info(''); - core.info('Java configuration:'); - core.info(` Distribution: ${distributionName}`); - core.info(` Version: ${result.version}`); - core.info(` Path: ${result.path}`); - core.info(''); - const matchersPath = path.join(__dirname, '..', '..', '.github'); - core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); - yield auth.configureAuthentication(); - if (cache) { - yield cache_1.restore(cache); - } - } - catch (error) { - core.setFailed(error.message); - } - }); -} -run(); + +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 }); +const core = __importStar(__webpack_require__(470)); +const auth = __importStar(__webpack_require__(331)); +const util_1 = __webpack_require__(322); +const constants = __importStar(__webpack_require__(211)); +const cache_1 = __webpack_require__(319); +const path = __importStar(__webpack_require__(622)); +const distribution_factory_1 = __webpack_require__(729); +function run() { + return __awaiter(this, void 0, void 0, function* () { + try { + const version = core.getInput(constants.INPUT_JAVA_VERSION, { required: true }); + const distributionName = core.getInput(constants.INPUT_DISTRIBUTION, { required: true }); + const architecture = core.getInput(constants.INPUT_ARCHITECTURE); + const packageType = core.getInput(constants.INPUT_JAVA_PACKAGE); + const jdkFile = core.getInput(constants.INPUT_JDK_FILE); + const cache = core.getInput(constants.INPUT_CACHE); + const checkLatest = util_1.getBooleanInput(constants.INPUT_CHECK_LATEST, false); + const installerOptions = { + architecture, + packageType, + version, + checkLatest + }; + const distribution = distribution_factory_1.getJavaDistribution(distributionName, installerOptions, jdkFile); + if (!distribution) { + throw new Error(`No supported distribution was found for input ${distributionName}`); + } + const result = yield distribution.setupJava(); + core.info(''); + core.info('Java configuration:'); + core.info(` Distribution: ${distributionName}`); + core.info(` Version: ${result.version}`); + core.info(` Path: ${result.path}`); + core.info(''); + const matchersPath = path.join(__dirname, '..', '..', '.github'); + core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); + yield auth.configureAuthentication(); + if (cache) { + yield cache_1.restore(cache); + } + } + catch (error) { + core.setFailed(error.message); + } + }); +} +run(); /***/ }), @@ -88233,171 +88217,171 @@ module.exports = parse /***/ (function(__unusedmodule, exports, __webpack_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()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ZuluDistribution = void 0; -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -const path_1 = __importDefault(__webpack_require__(622)); -const fs_1 = __importDefault(__webpack_require__(747)); -const semver_1 = __importDefault(__webpack_require__(876)); -const base_installer_1 = __webpack_require__(83); -const util_1 = __webpack_require__(322); -class ZuluDistribution extends base_installer_1.JavaBase { - constructor(installerOptions) { - super('Zulu', installerOptions); - } - findPackageForDownload(version) { - return __awaiter(this, void 0, void 0, function* () { - const availableVersionsRaw = yield this.getAvailableVersions(); - const availableVersions = availableVersionsRaw.map(item => { - return { - version: this.convertVersionToSemver(item.jdk_version), - url: item.url, - zuluVersion: this.convertVersionToSemver(item.zulu_version) - }; - }); - const satisfiedVersions = availableVersions - .filter(item => util_1.isVersionSatisfies(version, item.version)) - .sort((a, b) => { - // Azul provides two versions: jdk_version and azul_version - // we should sort by both fields by descending - return (-semver_1.default.compareBuild(a.version, b.version) || - -semver_1.default.compareBuild(a.zuluVersion, b.zuluVersion)); - }) - .map(item => { - return { - version: item.version, - url: item.url - }; - }); - const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; - if (!resolvedFullVersion) { - const availableOptions = availableVersions.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; - throw new Error(`Could not find satisfied version for semver ${version}. ${availableOptionsMessage}`); - } - return resolvedFullVersion; - }); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - let extractedJavaPath; - core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); - const javaArchivePath = yield tc.downloadTool(javaRelease.url); - core.info(`Extracting Java archive...`); - let extension = util_1.getDownloadArchiveExtension(); - extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture); - return { version: javaRelease.version, path: javaPath }; - }); - } - getAvailableVersions() { - var _a, _b; - return __awaiter(this, void 0, void 0, function* () { - const { arch, hw_bitness, abi } = this.getArchitectureOptions(); - const [bundleType, features] = this.packageType.split('+'); - const platform = this.getPlatformOption(); - const extension = util_1.getDownloadArchiveExtension(); - const javafx = (_a = features === null || features === void 0 ? void 0 : features.includes('fx')) !== null && _a !== void 0 ? _a : false; - const releaseStatus = this.stable ? 'ga' : 'ea'; - console.time('azul-retrieve-available-versions'); - const requestArguments = [ - `os=${platform}`, - `ext=${extension}`, - `bundle_type=${bundleType}`, - `javafx=${javafx}`, - `arch=${arch}`, - `hw_bitness=${hw_bitness}`, - `release_status=${releaseStatus}`, - abi ? `abi=${abi}` : null, - features ? `features=${features}` : null - ] - .filter(Boolean) - .join('&'); - const availableVersionsUrl = `https://api.azul.com/zulu/download/community/v1.0/bundles/?${requestArguments}`; - if (core.isDebug()) { - core.debug(`Gathering available versions from '${availableVersionsUrl}'`); - } - const availableVersions = (_b = (yield this.http.getJson(availableVersionsUrl)).result) !== null && _b !== void 0 ? _b : []; - if (core.isDebug()) { - core.startGroup('Print information about available versions'); - console.timeEnd('azul-retrieve-available-versions'); - console.log(`Available versions: [${availableVersions.length}]`); - console.log(availableVersions.map(item => item.jdk_version.join('.')).join(', ')); - core.endGroup(); - } - return availableVersions; - }); - } - getArchitectureOptions() { - if (this.architecture == 'x64') { - return { arch: 'x86', hw_bitness: '64', abi: '' }; - } - else if (this.architecture == 'x86') { - return { arch: 'x86', hw_bitness: '32', abi: '' }; - } - else { - return { arch: this.architecture, hw_bitness: '', abi: '' }; - } - } - getPlatformOption() { - // Azul has own platform names so need to map them - switch (process.platform) { - case 'darwin': - return 'macos'; - case 'win32': - return 'windows'; - default: - return process.platform; - } - } - // Azul API returns jdk_version as array of digits like [11, 0, 2, 1] - convertVersionToSemver(version_array) { - const mainVersion = version_array.slice(0, 3).join('.'); - if (version_array.length > 3) { - // intentionally ignore more than 4 numbers because it is invalid semver - return `${mainVersion}+${version_array[3]}`; - } - return mainVersion; - } -} -exports.ZuluDistribution = ZuluDistribution; + +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()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ZuluDistribution = void 0; +const core = __importStar(__webpack_require__(470)); +const tc = __importStar(__webpack_require__(139)); +const path_1 = __importDefault(__webpack_require__(622)); +const fs_1 = __importDefault(__webpack_require__(747)); +const semver_1 = __importDefault(__webpack_require__(876)); +const base_installer_1 = __webpack_require__(83); +const util_1 = __webpack_require__(322); +class ZuluDistribution extends base_installer_1.JavaBase { + constructor(installerOptions) { + super('Zulu', installerOptions); + } + findPackageForDownload(version) { + return __awaiter(this, void 0, void 0, function* () { + const availableVersionsRaw = yield this.getAvailableVersions(); + const availableVersions = availableVersionsRaw.map(item => { + return { + version: this.convertVersionToSemver(item.jdk_version), + url: item.url, + zuluVersion: this.convertVersionToSemver(item.zulu_version) + }; + }); + const satisfiedVersions = availableVersions + .filter(item => util_1.isVersionSatisfies(version, item.version)) + .sort((a, b) => { + // Azul provides two versions: jdk_version and azul_version + // we should sort by both fields by descending + return (-semver_1.default.compareBuild(a.version, b.version) || + -semver_1.default.compareBuild(a.zuluVersion, b.zuluVersion)); + }) + .map(item => { + return { + version: item.version, + url: item.url + }; + }); + const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; + if (!resolvedFullVersion) { + const availableOptions = availableVersions.map(item => item.version).join(', '); + const availableOptionsMessage = availableOptions + ? `\nAvailable versions: ${availableOptions}` + : ''; + throw new Error(`Could not find satisfied version for semver ${version}. ${availableOptionsMessage}`); + } + return resolvedFullVersion; + }); + } + downloadTool(javaRelease) { + return __awaiter(this, void 0, void 0, function* () { + let extractedJavaPath; + core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); + const javaArchivePath = yield tc.downloadTool(javaRelease.url); + core.info(`Extracting Java archive...`); + let extension = util_1.getDownloadArchiveExtension(); + extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); + const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; + const archivePath = path_1.default.join(extractedJavaPath, archiveName); + const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture); + return { version: javaRelease.version, path: javaPath }; + }); + } + getAvailableVersions() { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + const { arch, hw_bitness, abi } = this.getArchitectureOptions(); + const [bundleType, features] = this.packageType.split('+'); + const platform = this.getPlatformOption(); + const extension = util_1.getDownloadArchiveExtension(); + const javafx = (_a = features === null || features === void 0 ? void 0 : features.includes('fx')) !== null && _a !== void 0 ? _a : false; + const releaseStatus = this.stable ? 'ga' : 'ea'; + console.time('azul-retrieve-available-versions'); + const requestArguments = [ + `os=${platform}`, + `ext=${extension}`, + `bundle_type=${bundleType}`, + `javafx=${javafx}`, + `arch=${arch}`, + `hw_bitness=${hw_bitness}`, + `release_status=${releaseStatus}`, + abi ? `abi=${abi}` : null, + features ? `features=${features}` : null + ] + .filter(Boolean) + .join('&'); + const availableVersionsUrl = `https://api.azul.com/zulu/download/community/v1.0/bundles/?${requestArguments}`; + if (core.isDebug()) { + core.debug(`Gathering available versions from '${availableVersionsUrl}'`); + } + const availableVersions = (_b = (yield this.http.getJson(availableVersionsUrl)).result) !== null && _b !== void 0 ? _b : []; + if (core.isDebug()) { + core.startGroup('Print information about available versions'); + console.timeEnd('azul-retrieve-available-versions'); + console.log(`Available versions: [${availableVersions.length}]`); + console.log(availableVersions.map(item => item.jdk_version.join('.')).join(', ')); + core.endGroup(); + } + return availableVersions; + }); + } + getArchitectureOptions() { + if (this.architecture == 'x64') { + return { arch: 'x86', hw_bitness: '64', abi: '' }; + } + else if (this.architecture == 'x86') { + return { arch: 'x86', hw_bitness: '32', abi: '' }; + } + else { + return { arch: this.architecture, hw_bitness: '', abi: '' }; + } + } + getPlatformOption() { + // Azul has own platform names so need to map them + switch (process.platform) { + case 'darwin': + return 'macos'; + case 'win32': + return 'windows'; + default: + return process.platform; + } + } + // Azul API returns jdk_version as array of digits like [11, 0, 2, 1] + convertVersionToSemver(version_array) { + const mainVersion = version_array.slice(0, 3).join('.'); + if (version_array.length > 3) { + // intentionally ignore more than 4 numbers because it is invalid semver + return `${mainVersion}+${version_array[3]}`; + } + return mainVersion; + } +} +exports.ZuluDistribution = ZuluDistribution; /***/ }), @@ -92066,74 +92050,74 @@ function coerce (version, options) { /***/ (function(__unusedmodule, exports, __webpack_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.deleteKey = exports.importKey = exports.PRIVATE_KEY_FILE = void 0; -const fs = __importStar(__webpack_require__(747)); -const path = __importStar(__webpack_require__(622)); -const io = __importStar(__webpack_require__(1)); -const exec = __importStar(__webpack_require__(986)); -const util = __importStar(__webpack_require__(322)); -exports.PRIVATE_KEY_FILE = path.join(util.getTempDir(), 'private-key.asc'); -const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; -function importKey(privateKey) { - return __awaiter(this, void 0, void 0, function* () { - fs.writeFileSync(exports.PRIVATE_KEY_FILE, privateKey, { - encoding: 'utf-8', - flag: 'w' - }); - let output = ''; - const options = { - silent: true, - listeners: { - stdout: (data) => { - output += data.toString(); - } - } - }; - yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', exports.PRIVATE_KEY_FILE], options); - yield io.rmRF(exports.PRIVATE_KEY_FILE); - const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); - return match && match[0]; - }); -} -exports.importKey = importKey; -function deleteKey(keyFingerprint) { - return __awaiter(this, void 0, void 0, function* () { - yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-and-public-key', keyFingerprint], { - silent: true - }); - }); -} -exports.deleteKey = deleteKey; + +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.deleteKey = exports.importKey = exports.PRIVATE_KEY_FILE = void 0; +const fs = __importStar(__webpack_require__(747)); +const path = __importStar(__webpack_require__(622)); +const io = __importStar(__webpack_require__(1)); +const exec = __importStar(__webpack_require__(986)); +const util = __importStar(__webpack_require__(322)); +exports.PRIVATE_KEY_FILE = path.join(util.getTempDir(), 'private-key.asc'); +const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; +function importKey(privateKey) { + return __awaiter(this, void 0, void 0, function* () { + fs.writeFileSync(exports.PRIVATE_KEY_FILE, privateKey, { + encoding: 'utf-8', + flag: 'w' + }); + let output = ''; + const options = { + silent: true, + listeners: { + stdout: (data) => { + output += data.toString(); + } + } + }; + yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', exports.PRIVATE_KEY_FILE], options); + yield io.rmRF(exports.PRIVATE_KEY_FILE); + const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); + return match && match[0]; + }); +} +exports.importKey = importKey; +function deleteKey(keyFingerprint) { + return __awaiter(this, void 0, void 0, function* () { + yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-and-public-key', keyFingerprint], { + silent: true + }); + }); +} +exports.deleteKey = deleteKey; /***/ }), diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index a0b7aff..86391f1 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -120,6 +120,21 @@ steps: - run: java -cp java HelloWorldApp ``` +## Installing Java from remote archive +If your use-case requires a custom distribution or a version that is not provided by setup-java, you can specify URL directly and setup-java will take care of the installation and caching on the VM: + +```yaml +steps: +- uses: actions/setup-java@v2 + with: + distribution: 'jdkfile' + jdkFile: https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.10%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz + java-version: '11.0.0' + architecture: x64 + +- run: java -cp java HelloWorldApp +``` + ## Testing against different Java distributions **NOTE:** The different distributors can provide discrepant list of available versions / supported configurations. Please refer to the official documentation to see the list of supported versions. ```yaml diff --git a/src/distributions/local/installer.ts b/src/distributions/local/installer.ts index 1402bc8..d5be4af 100644 --- a/src/distributions/local/installer.ts +++ b/src/distributions/local/installer.ts @@ -3,11 +3,10 @@ import * as core from '@actions/core'; import fs from 'fs'; import path from 'path'; -import semver from 'semver'; import { JavaBase } from '../base-installer'; import { JavaInstallerOptions, JavaDownloadRelease, JavaInstallerResults } from '../base-models'; -import { extractJdkFile } from '../../util'; +import { extractJdkFile, getDownloadArchiveExtension } from '../../util'; import { MACOS_JAVA_CONTENT_POSTFIX } from '../../constants'; export class LocalDistribution extends JavaBase { @@ -25,16 +24,27 @@ export class LocalDistribution extends JavaBase { if (!this.jdkFile) { throw new Error("'jdkFile' is not specified"); } - const jdkFilePath = path.resolve(this.jdkFile); - const stats = fs.statSync(jdkFilePath); + let jdkFilePath; + let extension; + + if (this.jdkFile.match(/^https?:\/\//)) { + core.info(`Downloading Java archive from ${this.jdkFile}...`); + const javaRelease = await tc.downloadTool(this.jdkFile); + jdkFilePath = path.resolve(javaRelease); + extension = getDownloadArchiveExtension(); + } else { + jdkFilePath = path.resolve(this.jdkFile); + } + + const stats = fs.statSync(jdkFilePath); if (!stats.isFile()) { throw new Error(`JDK file was not found in path '${jdkFilePath}'`); } core.info(`Extracting Java from '${jdkFilePath}'`); - const extractedJavaPath = await extractJdkFile(jdkFilePath); + const extractedJavaPath = await extractJdkFile(jdkFilePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; const archivePath = path.join(extractedJavaPath, archiveName); const javaVersion = this.version;