From 502a6650cd514121819f95acf949251faa6cc558 Mon Sep 17 00:00:00 2001
From: Maxim Lobanov <maxim-lobanov@github.com>
Date: Mon, 22 Mar 2021 10:51:33 +0300
Subject: [PATCH] Add "Contents/Home" postfix on macOS if provider creates it
 (#139)

* Update e2e-versions.yml

* Update e2e-versions.yml

* implement fix

* Update e2e-versions.yml

* Update installer.ts

* fix filter logic

* Update e2e-versions.yml

* remove extra logic

* Update e2e-versions.yml
---
 .github/workflows/e2e-versions.yml   |  6 ++++++
 dist/setup/index.js                  | 11 +++++++----
 src/distributions/adopt/installer.ts |  4 ----
 src/distributions/base-installer.ts  |  8 ++++++++
 4 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/.github/workflows/e2e-versions.yml b/.github/workflows/e2e-versions.yml
index 40b2b47..9bd6dad 100644
--- a/.github/workflows/e2e-versions.yml
+++ b/.github/workflows/e2e-versions.yml
@@ -88,6 +88,9 @@ jobs:
         with:
           java-version: ${{ matrix.version }}
           distribution: zulu
+      - name: Verify Java
+        run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
+        shell: bash
 
   setup-java-ea-versions-adopt:
     name: adopt ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
@@ -107,6 +110,9 @@ jobs:
         with:
           java-version: ${{ matrix.version }}
           distribution: adopt
+      - name: Verify Java
+        run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
+        shell: bash
 
   setup-java-custom-package-type:
     name: ${{ matrix.distribution }} ${{ matrix.version }} (${{ matrix.java-package }}-x64) - ${{ matrix.os }}
diff --git a/dist/setup/index.js b/dist/setup/index.js
index f102f90..28da6b3 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -3951,10 +3951,12 @@ 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;
@@ -3978,6 +3980,11 @@ class JavaBase {
                 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;
@@ -26861,7 +26868,6 @@ 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 constants_1 = __webpack_require__(211);
 const util_1 = __webpack_require__(322);
 class AdoptDistribution extends base_installer_1.JavaBase {
     constructor(installerOptions) {
@@ -26907,9 +26913,6 @@ class AdoptDistribution extends base_installer_1.JavaBase {
             const archivePath = path_1.default.join(extractedJavaPath, archiveName);
             const version = this.getToolcacheVersionName(javaRelease.version);
             javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture);
-            if (process.platform === 'darwin') {
-                javaPath = path_1.default.join(javaPath, constants_1.MACOS_JAVA_CONTENT_POSTFIX);
-            }
             return { version: javaRelease.version, path: javaPath };
         });
     }
diff --git a/src/distributions/adopt/installer.ts b/src/distributions/adopt/installer.ts
index 5b316e5..49a01f0 100644
--- a/src/distributions/adopt/installer.ts
+++ b/src/distributions/adopt/installer.ts
@@ -67,10 +67,6 @@ export class AdoptDistribution extends JavaBase {
 
     javaPath = await tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture);
 
-    if (process.platform === 'darwin') {
-      javaPath = path.join(javaPath, MACOS_JAVA_CONTENT_POSTFIX);
-    }
-
     return { version: javaRelease.version, path: javaPath };
   }
 
diff --git a/src/distributions/base-installer.ts b/src/distributions/base-installer.ts
index 8c4698c..6f1312c 100644
--- a/src/distributions/base-installer.ts
+++ b/src/distributions/base-installer.ts
@@ -1,10 +1,12 @@
 import * as tc from '@actions/tool-cache';
 import * as core from '@actions/core';
+import * as fs from 'fs';
 import semver from 'semver';
 import path from 'path';
 import * as httpm from '@actions/http-client';
 import { getToolcachePath, getVersionFromToolcachePath, isVersionSatisfies } from '../util';
 import { JavaDownloadRelease, JavaInstallerOptions, JavaInstallerResults } from './base-models';
+import { MACOS_JAVA_CONTENT_POSTFIX } from '../constants';
 
 export abstract class JavaBase {
   protected http: httpm.HttpClient;
@@ -40,6 +42,12 @@ export abstract class JavaBase {
       core.info(`Java ${foundJava.version} was downloaded`);
     }
 
+    // JDK folder may contain postfix "Contents/Home" on macOS
+    const macOSPostfixPath = path.join(foundJava.path, 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);