diff --git a/.github/workflows/e2e-cache.yml b/.github/workflows/e2e-cache.yml index 95031dbb..bc685ec0 100644 --- a/.github/workflows/e2e-cache.yml +++ b/.github/workflows/e2e-cache.yml @@ -121,7 +121,7 @@ jobs: strategy: fail-fast: false matrix: - os: [macos-13, windows-latest, ubuntu-latest] + os: [macos-13, windows-latest, ubuntu-22.04] steps: - name: Checkout uses: actions/checkout@v4 @@ -170,7 +170,7 @@ jobs: strategy: fail-fast: false matrix: - os: [macos-13, windows-latest, ubuntu-latest] + os: [macos-13, windows-latest, ubuntu-22.04] needs: sbt-save steps: - name: Checkout diff --git a/.github/workflows/e2e-versions.yml b/.github/workflows/e2e-versions.yml index b93b9831..d0476606 100644 --- a/.github/workflows/e2e-versions.yml +++ b/.github/workflows/e2e-versions.yml @@ -52,7 +52,7 @@ jobs: version: 21 - distribution: graalvm os: macos-latest - version: 17 + version: 17.0.12 - distribution: graalvm os: windows-latest version: 21 @@ -378,7 +378,7 @@ jobs: fail-fast: false matrix: # x86 is not supported on macOS - os: [windows-latest, ubuntu-latest] + os: [windows-latest, ubuntu-22.04] distribution: ['liberica', 'zulu', 'corretto'] version: ['11'] steps: diff --git a/.github/workflows/release-new-action-version.yml b/.github/workflows/release-new-action-version.yml index e584e46f..e58e9063 100644 --- a/.github/workflows/release-new-action-version.yml +++ b/.github/workflows/release-new-action-version.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Update the ${{ env.TAG_NAME }} tag id: update-major-tag - uses: actions/publish-action@v0.2.2 + uses: actions/publish-action@v0.3.0 with: source-tag: ${{ env.TAG_NAME }} slack-webhook: ${{ secrets.SLACK_WEBHOOK }} diff --git a/__tests__/util.test.ts b/__tests__/util.test.ts index bb7560dc..9c943c2f 100644 --- a/__tests__/util.test.ts +++ b/__tests__/util.test.ts @@ -3,7 +3,8 @@ import * as core from '@actions/core'; import { convertVersionToSemver, isVersionSatisfies, - isCacheFeatureAvailable + isCacheFeatureAvailable, + isGhes } from '../src/util'; jest.mock('@actions/cache'); @@ -80,3 +81,41 @@ describe('convertVersionToSemver', () => { expect(actual).toBe(expected); }); }); + +describe('isGhes', () => { + const pristineEnv = process.env; + + beforeEach(() => { + jest.resetModules(); + process.env = {...pristineEnv}; + }); + + afterAll(() => { + process.env = pristineEnv; + }); + + it('returns false when the GITHUB_SERVER_URL environment variable is not defined', async () => { + delete process.env['GITHUB_SERVER_URL']; + expect(isGhes()).toBeFalsy(); + }); + + it('returns false when the GITHUB_SERVER_URL environment variable is set to github.com', async () => { + process.env['GITHUB_SERVER_URL'] = 'https://github.com'; + expect(isGhes()).toBeFalsy(); + }); + + it('returns false when the GITHUB_SERVER_URL environment variable is set to a GitHub Enterprise Cloud-style URL', async () => { + process.env['GITHUB_SERVER_URL'] = 'https://contoso.ghe.com'; + expect(isGhes()).toBeFalsy(); + }); + + it('returns false when the GITHUB_SERVER_URL environment variable has a .localhost suffix', async () => { + process.env['GITHUB_SERVER_URL'] = 'https://mock-github.localhost'; + expect(isGhes()).toBeFalsy(); + }); + + it('returns true when the GITHUB_SERVER_URL environment variable is set to some other URL', async () => { + process.env['GITHUB_SERVER_URL'] = 'https://src.onpremise.fabrikam.com'; + expect(isGhes()).toBeTruthy(); + }); +}); diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index f35edb9d..6c44aa45 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)); @@ -88552,7 +88552,11 @@ function isJobStatusSuccess() { exports.isJobStatusSuccess = isJobStatusSuccess; function isGhes() { const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); - return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; + const hostname = ghUrl.hostname.trimEnd().toUpperCase(); + const isGitHubHost = hostname === 'GITHUB.COM'; + const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM'); + const isLocalHost = hostname.endsWith('.LOCALHOST'); + return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost; } exports.isGhes = isGhes; function isCacheFeatureAvailable() { @@ -88630,6 +88634,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 31a73f8f..927cd626 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); @@ -124213,9 +124220,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); @@ -124379,9 +124390,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); @@ -124772,11 +124786,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]; @@ -125058,19 +125069,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); @@ -125207,9 +125210,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); @@ -125380,9 +125386,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); @@ -125599,9 +125609,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); @@ -125775,9 +125788,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); @@ -125953,11 +125969,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]; @@ -126462,7 +126475,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)); @@ -126544,7 +126557,11 @@ function isJobStatusSuccess() { exports.isJobStatusSuccess = isJobStatusSuccess; function isGhes() { const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com'); - return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; + const hostname = ghUrl.hostname.trimEnd().toUpperCase(); + const isGitHubHost = hostname === 'GITHUB.COM'; + const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM'); + const isLocalHost = hostname.endsWith('.LOCALHOST'); + return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost; } exports.isGhes = isGhes; function isCacheFeatureAvailable() { @@ -126622,6 +126639,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/src/distributions/adopt/installer.ts b/src/distributions/adopt/installer.ts index 9887b789..850a4a0d 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 bc073edd..c2cc5f7c 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 3e847577..480cdbdc 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 37dbe322..be14cee9 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 3ed9435a..444c46ce 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 d20e55da..63c5b0d2 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 ec0ab215..5a492ad1 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 8bce553c..dfe32e16 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 5e3e2faf..e66708ec 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 4a1989bc..1a69652a 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 e406c6b6..124789b8 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 034fc83d..af75aaac 100644 --- a/src/util.ts +++ b/src/util.ts @@ -92,7 +92,13 @@ export function isGhes(): boolean { const ghUrl = new URL( process.env['GITHUB_SERVER_URL'] || 'https://github.com' ); - return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'; + + const hostname = ghUrl.hostname.trimEnd().toUpperCase(); + const isGitHubHost = hostname === 'GITHUB.COM'; + const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM'); + const isLocalHost = hostname.endsWith('.LOCALHOST'); + + return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost; } export function isCacheFeatureAvailable(): boolean { @@ -190,3 +196,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; +}