From 83a06ff9d9aa70f76a8d73278e646c20b2bf1ae5 Mon Sep 17 00:00:00 2001 From: Priya Gupta <147705955+priyagupta108@users.noreply.github.com> Date: Fri, 11 Oct 2024 03:02:25 +0530 Subject: [PATCH] Fix Windows archives extraction issue (#689) --- dist/cleanup/index.js | 13 +++- dist/setup/index.js | 90 ++++++++++++++--------- package-lock.json | 8 +- src/distributions/adopt/installer.ts | 9 ++- src/distributions/corretto/installer.ts | 15 ++-- src/distributions/dragonwell/installer.ts | 15 ++-- src/distributions/graalvm/installer.ts | 9 ++- src/distributions/liberica/installer.ts | 12 +-- src/distributions/microsoft/installer.ts | 19 ++--- src/distributions/oracle/installer.ts | 12 ++- src/distributions/sapmachine/installer.ts | 15 ++-- src/distributions/semeru/installer.ts | 9 ++- src/distributions/temurin/installer.ts | 9 ++- src/distributions/zulu/installer.ts | 12 +-- src/util.ts | 11 +++ 15 files changed, 154 insertions(+), 104 deletions(-) diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index f35edb9de..5a200909c 100644 --- a/dist/cleanup/index.js +++ b/dist/cleanup/index.js @@ -88470,7 +88470,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getGitHubHttpHeaders = exports.convertVersionToSemver = exports.getVersionFromFileContent = exports.isCacheFeatureAvailable = exports.isGhes = exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; +exports.renameWinArchive = exports.getGitHubHttpHeaders = exports.convertVersionToSemver = exports.getVersionFromFileContent = exports.isCacheFeatureAvailable = exports.isGhes = exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; const os_1 = __importDefault(__nccwpck_require__(2037)); const path_1 = __importDefault(__nccwpck_require__(1017)); const fs = __importStar(__nccwpck_require__(7147)); @@ -88630,6 +88630,17 @@ function getGitHubHttpHeaders() { return headers; } exports.getGitHubHttpHeaders = getGitHubHttpHeaders; +// Rename archive to add extension because after downloading +// archive does not contain extension type and it leads to some issues +// on Windows runners without PowerShell Core. +// +// For default PowerShell Windows it should contain extension type to unpack it. +function renameWinArchive(javaArchivePath) { + const javaArchivePathRenamed = `${javaArchivePath}.zip`; + fs.renameSync(javaArchivePath, javaArchivePathRenamed); + return javaArchivePathRenamed; +} +exports.renameWinArchive = renameWinArchive; /***/ }), diff --git a/dist/setup/index.js b/dist/setup/index.js index 6dd09d3ad..e96bb1256 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -123578,9 +123578,12 @@ class AdoptDistribution extends base_installer_1.JavaBase { 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); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; const archivePath = path_1.default.join(extractedJavaPath, archiveName); @@ -123914,9 +123917,13 @@ class CorrettoDistribution extends base_installer_1.JavaBase { 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); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); - const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, (0, util_1.getDownloadArchiveExtension)()); + const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } + const extractedJavaPath = yield (0, 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); @@ -124209,9 +124216,13 @@ class DragonwellDistribution extends base_installer_1.JavaBase { 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); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); - const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, (0, util_1.getDownloadArchiveExtension)()); + const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } + const extractedJavaPath = yield (0, 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); @@ -124375,9 +124386,12 @@ class GraalVMDistribution extends base_installer_1.JavaBase { 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); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; const archivePath = path_1.default.join(extractedJavaPath, archiveName); @@ -124543,11 +124557,8 @@ class LibericaDistributions extends base_installer_1.JavaBase { let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); - if (process.platform === 'win32' && - (this.architecture === 'arm64' || this.architecture === 'aarch64')) { - const javaArchivePathRenamed = `${javaArchivePath}.zip`; - yield fs_1.default.renameSync(javaArchivePath, javaArchivePathRenamed); - javaArchivePath = javaArchivePathRenamed; + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; @@ -124829,19 +124840,11 @@ class MicrosoftDistributions extends base_installer_1.JavaBase { return __awaiter(this, void 0, void 0, function* () { core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); let javaArchivePath = yield tc.downloadTool(javaRelease.url); - // Rename archive to add extension because after downloading - // archive does not contain extension type and it leads to some issues - // on Windows runners without PowerShell Core. - // - // For default PowerShell Windows it should contain extension type to unpack it. - if (process.platform === 'win32' && - (this.architecture === 'arm64' || this.architecture === 'aarch64')) { - const javaArchivePathRenamed = `${javaArchivePath}.zip`; - yield fs_1.default.renameSync(javaArchivePath, javaArchivePathRenamed); - javaArchivePath = javaArchivePathRenamed; - } core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; const archivePath = path_1.default.join(extractedJavaPath, archiveName); @@ -124978,9 +124981,12 @@ class OracleDistribution extends base_installer_1.JavaBase { 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); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; const archivePath = path_1.default.join(extractedJavaPath, archiveName); @@ -125151,9 +125157,13 @@ class SapMachineDistribution extends base_installer_1.JavaBase { 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); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); - const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, (0, util_1.getDownloadArchiveExtension)()); + const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } + const extractedJavaPath = yield (0, 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); @@ -125370,9 +125380,12 @@ class SemeruDistribution extends base_installer_1.JavaBase { 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); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; const archivePath = path_1.default.join(extractedJavaPath, archiveName); @@ -125546,9 +125559,12 @@ class TemurinDistribution extends base_installer_1.JavaBase { 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); + let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); + } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; const archivePath = path_1.default.join(extractedJavaPath, archiveName); @@ -125724,11 +125740,8 @@ class ZuluDistribution extends base_installer_1.JavaBase { let javaArchivePath = yield tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = (0, util_1.getDownloadArchiveExtension)(); - if (process.platform === 'win32' && - (this.architecture === 'arm64' || this.architecture === 'aarch64')) { - const javaArchivePathRenamed = `${javaArchivePath}.zip`; - yield fs_1.default.renameSync(javaArchivePath, javaArchivePathRenamed); - javaArchivePath = javaArchivePathRenamed; + if (process.platform === 'win32') { + javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath); } const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension); const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; @@ -126233,7 +126246,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getGitHubHttpHeaders = exports.convertVersionToSemver = exports.getVersionFromFileContent = exports.isCacheFeatureAvailable = exports.isGhes = exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; +exports.renameWinArchive = exports.getGitHubHttpHeaders = exports.convertVersionToSemver = exports.getVersionFromFileContent = exports.isCacheFeatureAvailable = exports.isGhes = exports.isJobStatusSuccess = exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; const os_1 = __importDefault(__nccwpck_require__(22037)); const path_1 = __importDefault(__nccwpck_require__(71017)); const fs = __importStar(__nccwpck_require__(57147)); @@ -126393,6 +126406,17 @@ function getGitHubHttpHeaders() { return headers; } exports.getGitHubHttpHeaders = getGitHubHttpHeaders; +// Rename archive to add extension because after downloading +// archive does not contain extension type and it leads to some issues +// on Windows runners without PowerShell Core. +// +// For default PowerShell Windows it should contain extension type to unpack it. +function renameWinArchive(javaArchivePath) { + const javaArchivePathRenamed = `${javaArchivePath}.zip`; + fs.renameSync(javaArchivePath, javaArchivePathRenamed); + return javaArchivePathRenamed; +} +exports.renameWinArchive = renameWinArchive; /***/ }), diff --git a/package-lock.json b/package-lock.json index cb1af4427..0f806bc3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4322,12 +4322,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { diff --git a/src/distributions/adopt/installer.ts b/src/distributions/adopt/installer.ts index 9887b7899..850a4a0df 100644 --- a/src/distributions/adopt/installer.ts +++ b/src/distributions/adopt/installer.ts @@ -15,7 +15,8 @@ import { import { extractJdkFile, getDownloadArchiveExtension, - isVersionSatisfies + isVersionSatisfies, + renameWinArchive } from '../../util'; export enum AdoptImplementation { @@ -73,11 +74,13 @@ export class AdoptDistribution extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); + let javaArchivePath = await tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); - + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; diff --git a/src/distributions/corretto/installer.ts b/src/distributions/corretto/installer.ts index bc073edd9..c2cc5f7cc 100644 --- a/src/distributions/corretto/installer.ts +++ b/src/distributions/corretto/installer.ts @@ -5,7 +5,8 @@ import path from 'path'; import { extractJdkFile, getDownloadArchiveExtension, - convertVersionToSemver + convertVersionToSemver, + renameWinArchive } from '../../util'; import {JavaBase} from '../base-installer'; import { @@ -29,14 +30,14 @@ export class CorrettoDistribution extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); + let javaArchivePath = await tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); - - const extractedJavaPath = await extractJdkFile( - javaArchivePath, - getDownloadArchiveExtension() - ); + const extension = getDownloadArchiveExtension(); + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } + const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; const archivePath = path.join(extractedJavaPath, archiveName); diff --git a/src/distributions/dragonwell/installer.ts b/src/distributions/dragonwell/installer.ts index 3e8475773..480cdbdcb 100644 --- a/src/distributions/dragonwell/installer.ts +++ b/src/distributions/dragonwell/installer.ts @@ -11,7 +11,8 @@ import { extractJdkFile, getDownloadArchiveExtension, getGitHubHttpHeaders, - isVersionSatisfies + isVersionSatisfies, + renameWinArchive } from '../../util'; import {IDragonwellVersions, IDragonwellAllVersions} from './models'; import { @@ -100,14 +101,14 @@ export class DragonwellDistribution extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); + let javaArchivePath = await tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); - - const extractedJavaPath = await extractJdkFile( - javaArchivePath, - getDownloadArchiveExtension() - ); + const extension = getDownloadArchiveExtension(); + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } + const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; const archivePath = path.join(extractedJavaPath, archiveName); diff --git a/src/distributions/graalvm/installer.ts b/src/distributions/graalvm/installer.ts index 37dbe322f..be14cee99 100644 --- a/src/distributions/graalvm/installer.ts +++ b/src/distributions/graalvm/installer.ts @@ -13,7 +13,8 @@ import { import { extractJdkFile, getDownloadArchiveExtension, - getGitHubHttpHeaders + getGitHubHttpHeaders, + renameWinArchive } from '../../util'; import {HttpCodes} from '@actions/http-client'; import {GraalVMEAVersion} from './models'; @@ -33,11 +34,13 @@ export class GraalVMDistribution extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); + let javaArchivePath = await tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); - + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; diff --git a/src/distributions/liberica/installer.ts b/src/distributions/liberica/installer.ts index 3ed9435ab..444c46ce0 100644 --- a/src/distributions/liberica/installer.ts +++ b/src/distributions/liberica/installer.ts @@ -8,7 +8,8 @@ import semver from 'semver'; import { extractJdkFile, getDownloadArchiveExtension, - isVersionSatisfies + isVersionSatisfies, + renameWinArchive } from '../../util'; import * as core from '@actions/core'; import {ArchitectureOptions, LibericaVersion, OsVersions} from './models'; @@ -35,13 +36,8 @@ export class LibericaDistributions extends JavaBase { core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); - if ( - process.platform === 'win32' && - (this.architecture === 'arm64' || this.architecture === 'aarch64') - ) { - const javaArchivePathRenamed = `${javaArchivePath}.zip`; - await fs.renameSync(javaArchivePath, javaArchivePathRenamed); - javaArchivePath = javaArchivePathRenamed; + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); } const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); diff --git a/src/distributions/microsoft/installer.ts b/src/distributions/microsoft/installer.ts index d20e55da6..63c5b0d24 100644 --- a/src/distributions/microsoft/installer.ts +++ b/src/distributions/microsoft/installer.ts @@ -7,7 +7,8 @@ import { import { extractJdkFile, getDownloadArchiveExtension, - getGitHubHttpHeaders + getGitHubHttpHeaders, + renameWinArchive } from '../../util'; import * as core from '@actions/core'; import * as tc from '@actions/tool-cache'; @@ -27,22 +28,12 @@ export class MicrosoftDistributions extends JavaBase { `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); let javaArchivePath = await tc.downloadTool(javaRelease.url); - // Rename archive to add extension because after downloading - // archive does not contain extension type and it leads to some issues - // on Windows runners without PowerShell Core. - // - // For default PowerShell Windows it should contain extension type to unpack it. - if ( - process.platform === 'win32' && - (this.architecture === 'arm64' || this.architecture === 'aarch64') - ) { - const javaArchivePathRenamed = `${javaArchivePath}.zip`; - await fs.renameSync(javaArchivePath, javaArchivePathRenamed); - javaArchivePath = javaArchivePathRenamed; - } core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; diff --git a/src/distributions/oracle/installer.ts b/src/distributions/oracle/installer.ts index ec0ab2157..5a492ad14 100644 --- a/src/distributions/oracle/installer.ts +++ b/src/distributions/oracle/installer.ts @@ -10,7 +10,11 @@ import { JavaInstallerOptions, JavaInstallerResults } from '../base-models'; -import {extractJdkFile, getDownloadArchiveExtension} from '../../util'; +import { + extractJdkFile, + getDownloadArchiveExtension, + renameWinArchive +} from '../../util'; import {HttpCodes} from '@actions/http-client'; const ORACLE_DL_BASE = 'https://download.oracle.com/java'; @@ -26,11 +30,13 @@ export class OracleDistribution extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); + let javaArchivePath = await tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); - + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; diff --git a/src/distributions/sapmachine/installer.ts b/src/distributions/sapmachine/installer.ts index 8bce553c6..dfe32e161 100644 --- a/src/distributions/sapmachine/installer.ts +++ b/src/distributions/sapmachine/installer.ts @@ -9,7 +9,8 @@ import { extractJdkFile, getDownloadArchiveExtension, getGitHubHttpHeaders, - isVersionSatisfies + isVersionSatisfies, + renameWinArchive } from '../../util'; import {JavaBase} from '../base-installer'; import { @@ -104,14 +105,14 @@ export class SapMachineDistribution extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); + let javaArchivePath = await tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); - - const extractedJavaPath = await extractJdkFile( - javaArchivePath, - getDownloadArchiveExtension() - ); + const extension = getDownloadArchiveExtension(); + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } + const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; const archivePath = path.join(extractedJavaPath, archiveName); diff --git a/src/distributions/semeru/installer.ts b/src/distributions/semeru/installer.ts index 5e3e2fafc..e66708ecb 100644 --- a/src/distributions/semeru/installer.ts +++ b/src/distributions/semeru/installer.ts @@ -8,7 +8,8 @@ import semver from 'semver'; import { extractJdkFile, getDownloadArchiveExtension, - isVersionSatisfies + isVersionSatisfies, + renameWinArchive } from '../../util'; import * as core from '@actions/core'; import * as tc from '@actions/tool-cache'; @@ -98,11 +99,13 @@ export class SemeruDistribution extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); + let javaArchivePath = await tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); - + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } const extractedJavaPath: string = await extractJdkFile( javaArchivePath, extension diff --git a/src/distributions/temurin/installer.ts b/src/distributions/temurin/installer.ts index 4a1989bca..1a69652ae 100644 --- a/src/distributions/temurin/installer.ts +++ b/src/distributions/temurin/installer.ts @@ -15,7 +15,8 @@ import { import { extractJdkFile, getDownloadArchiveExtension, - isVersionSatisfies + isVersionSatisfies, + renameWinArchive } from '../../util'; export enum TemurinImplementation { @@ -76,11 +77,13 @@ export class TemurinDistribution extends JavaBase { core.info( `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...` ); - const javaArchivePath = await tc.downloadTool(javaRelease.url); + let javaArchivePath = await tc.downloadTool(javaRelease.url); core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); - + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); + } const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); const archiveName = fs.readdirSync(extractedJavaPath)[0]; diff --git a/src/distributions/zulu/installer.ts b/src/distributions/zulu/installer.ts index e406c6b6d..124789b8b 100644 --- a/src/distributions/zulu/installer.ts +++ b/src/distributions/zulu/installer.ts @@ -11,7 +11,8 @@ import { extractJdkFile, getDownloadArchiveExtension, convertVersionToSemver, - isVersionSatisfies + isVersionSatisfies, + renameWinArchive } from '../../util'; import { JavaDownloadRelease, @@ -80,13 +81,8 @@ export class ZuluDistribution extends JavaBase { core.info(`Extracting Java archive...`); const extension = getDownloadArchiveExtension(); - if ( - process.platform === 'win32' && - (this.architecture === 'arm64' || this.architecture === 'aarch64') - ) { - const javaArchivePathRenamed = `${javaArchivePath}.zip`; - await fs.renameSync(javaArchivePath, javaArchivePathRenamed); - javaArchivePath = javaArchivePathRenamed; + if (process.platform === 'win32') { + javaArchivePath = renameWinArchive(javaArchivePath); } const extractedJavaPath = await extractJdkFile(javaArchivePath, extension); diff --git a/src/util.ts b/src/util.ts index 034fc83d4..c0166ef16 100644 --- a/src/util.ts +++ b/src/util.ts @@ -190,3 +190,14 @@ export function getGitHubHttpHeaders(): OutgoingHttpHeaders { } return headers; } + +// Rename archive to add extension because after downloading +// archive does not contain extension type and it leads to some issues +// on Windows runners without PowerShell Core. +// +// For default PowerShell Windows it should contain extension type to unpack it. +export function renameWinArchive(javaArchivePath: string): string { + const javaArchivePathRenamed = `${javaArchivePath}.zip`; + fs.renameSync(javaArchivePath, javaArchivePathRenamed); + return javaArchivePathRenamed; +}