From 45f1a8d74b69b7c7e189785cf5236f293d8746ca Mon Sep 17 00:00:00 2001 From: Markus Hoffrogge Date: Tue, 7 Nov 2023 00:27:36 +0100 Subject: [PATCH 1/4] Add inputs 'update-toolchains-only', 'update-env-javahome', 'add-to-env-path' Changes in detail: ------------------ - action.yml: - add inputs: - update-toolchains-only - update-env-javahome - add-to-env-path - update description for input "overwrite-settings" - remove default value of input "overwrite-settings", since the default is now propagated from input 'update-toolchains-only' - base-models.ts: - extend interface JavaInstallerOptions: - add fields: - updateEnvJavaHome: boolean; - addToEnvPath: boolean; - constants.ts: - add constant INPUT_UPDATE_TOOLCHAINS_ONLY = 'update-toolchains-only' - auth.ts: - function configureAuthentication(): - add parameter: - overwriteSettings: boolean - remove the now obsolete const overwriteSettings - toolchains.ts: - function configureToolchains(...): - add parameter updateToolchains: boolean - remove the now obsolete const overwriteSettings - improve variable naming: - rename any occurrence of 'overwriteSettings' by 'updateToolchains' - add field updateToolchains: boolean to the parameter object - function writeToolchainsFileToDisk(...): - improve variable naming: - rename variable 'settingsExists' by 'toolchainsExists' - update wording of info logs to be more applicable - setup-java.ts: - interface installerInputsOptions: - rename to IInstallerInputsOption to meet common coding convention - add fields: - updateToolchainsOnly: boolean; - overwriteSettings: boolean; - updateEnvJavaHome: boolean; - addToEnvPath: boolean; - function run(): - add const: - const updateToolchainsOnly: - get as boolean from input 'update-toolchains-only', default: false - const overwriteSettings: - get as boolean from input 'overwrite-settings', default: !updateToolchainsOnly - const updateEnvJavaHome: - get as boolean input 'update-env-javahome', default: !updateToolchainsOnly - const addToEnvPath: - get as boolean input 'add-to-env-path', default: !updateToolchainsOnly - extend const installerInputsOptions to match with IInstallerInputsOption: - add field updateToolchainsOnly - add field overwriteSettings - add field updateEnvJavaHome - add field addToEnvPath - update call of auth.configureAuthentication() to auth.configureAuthentication(overwriteSettings) - function installVersion(...): - add const and init from parameter options: - updateToolchainsOnly, overwriteSettings, updateEnvJavaHome, addToEnvPath - init the additional fields of installerInputsOptions accordingly - call toolchains.configureToolchains(...): - with parameter updateToolchains= overwriteSettings || updateToolchainsOnly - base-installer.ts: - add constants to import from constants: - INPUT_UPDATE_JAVA_HOME - INPUT_ADD_TO_PATH - add fields: - protected updateEnvJavaHome: boolean; - protected addToEnvPath: boolean; - ctor: - init these fields from JavaInstallerOptions accoprdingly - function setJavaDefault(...): - if updateEnvJavaHome is false: - SKIP updating env.JAVA_HOME - log info: `Skip updating env.JAVA_HOME according to ${INPUT_UPDATE_JAVA_HOME}` - if addToEnvPath is false: - SKIP adding toolchain path to env.PATH - log info: `Skip adding to env.PATH according to ${INPUT_ADD_TO_PATH}` --- action.yml | 16 +++++++-- src/auth.ts | 8 ++--- src/constants.ts | 3 ++ src/distributions/base-installer.ts | 22 +++++++++++-- src/distributions/base-models.ts | 2 ++ src/setup-java.ts | 50 ++++++++++++++++++++--------- src/toolchains.ts | 29 ++++++++--------- 7 files changed, 89 insertions(+), 41 deletions(-) diff --git a/action.yml b/action.yml index 0969d5d42..7a326fd05 100644 --- a/action.yml +++ b/action.yml @@ -43,9 +43,21 @@ inputs: description: 'Path to where the settings.xml file will be written. Default is ~/.m2.' required: false overwrite-settings: - description: 'Overwrite the settings.xml file if it exists. Default is "true".' + description: 'Overwrite the settings.xml file if it exists. Default is "!update-toolchains-only". If explcitly set "true", it will update settings.xml regardless of "update-toolchains-only"' required: false - default: true + # DO NOT set a default here! The default will be propagated from input 'update-toolchains-only'! + update-toolchains-only: + description: 'Update toolchains.xml only. Default is "false". No update of settings.xml, no update of JAVA_HOME, no adding to PATH by default - unless "overwrite-settings", "update-env-javahome" or "add-to-env-path" are not explicitly set "true"' + required: false + default: false + update-env-javahome: + description: 'Update the JAVA_HOME environment variable. Default is "!update-toolchains-only"' + required: false + # DO NOT set a default here! The default will be propagated from input 'update-toolchains-only'! + add-to-env-path: + description: 'Add "/bin" to the PATH environment variable. Default is "!update-toolchains-only"' + required: false + # DO NOT set a default here! The default will be propagated from input 'update-toolchains-only'! gpg-private-key: description: 'GPG private key to import. Default is empty string.' required: false diff --git a/src/auth.ts b/src/auth.ts index c8ea6291c..66cdd9a3d 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -10,17 +10,15 @@ import * as constants from './constants'; import * as gpg from './gpg'; import {getBooleanInput} from './util'; -export async function configureAuthentication() { +export async function configureAuthentication( + overwriteSettings: boolean +) { 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(), constants.M2_DIR); - const overwriteSettings = getBooleanInput( - constants.INPUT_OVERWRITE_SETTINGS, - true - ); const gpgPrivateKey = core.getInput(constants.INPUT_GPG_PRIVATE_KEY) || constants.INPUT_DEFAULT_GPG_PRIVATE_KEY; diff --git a/src/constants.ts b/src/constants.ts index 93af286f8..52a0055d7 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -11,6 +11,9 @@ export const INPUT_SERVER_USERNAME = 'server-username'; export const INPUT_SERVER_PASSWORD = 'server-password'; export const INPUT_SETTINGS_PATH = 'settings-path'; export const INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; +export const INPUT_UPDATE_TOOLCHAINS_ONLY = 'update-toolchains-only'; +export const INPUT_UPDATE_JAVA_HOME = 'update-env-javahome'; +export const INPUT_ADD_TO_PATH = 'add-to-env-path'; export const INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; export const INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; diff --git a/src/distributions/base-installer.ts b/src/distributions/base-installer.ts index 258ac9f4c..d4589bcc1 100644 --- a/src/distributions/base-installer.ts +++ b/src/distributions/base-installer.ts @@ -10,7 +10,11 @@ import { JavaInstallerOptions, JavaInstallerResults } from './base-models'; -import {MACOS_JAVA_CONTENT_POSTFIX} from '../constants'; +import { + MACOS_JAVA_CONTENT_POSTFIX, + INPUT_UPDATE_JAVA_HOME, + INPUT_ADD_TO_PATH +} from '../constants'; import os from 'os'; export abstract class JavaBase { @@ -20,6 +24,8 @@ export abstract class JavaBase { protected packageType: string; protected stable: boolean; protected checkLatest: boolean; + protected updateEnvJavaHome: boolean; + protected addToEnvPath: boolean; constructor( protected distribution: string, @@ -36,6 +42,8 @@ export abstract class JavaBase { this.architecture = installerOptions.architecture || os.arch(); this.packageType = installerOptions.packageType; this.checkLatest = installerOptions.checkLatest; + this.updateEnvJavaHome = installerOptions.updateEnvJavaHome; + this.addToEnvPath = installerOptions.addToEnvPath; } protected abstract downloadTool( @@ -163,8 +171,16 @@ export abstract class JavaBase { protected setJavaDefault(version: string, toolPath: string) { const majorVersion = version.split('.')[0]; - core.exportVariable('JAVA_HOME', toolPath); - core.addPath(path.join(toolPath, 'bin')); + if (this.updateEnvJavaHome) { + core.exportVariable('JAVA_HOME', toolPath); + } else { + core.info(`Skip updating env.JAVA_HOME according to ${INPUT_UPDATE_JAVA_HOME}`); + } + if (this.addToEnvPath) { + core.addPath(path.join(toolPath, 'bin')); + } else { + core.info(`Skip adding to env.PATH according to ${INPUT_ADD_TO_PATH}`); + } core.setOutput('distribution', this.distribution); core.setOutput('path', toolPath); core.setOutput('version', version); diff --git a/src/distributions/base-models.ts b/src/distributions/base-models.ts index 82344d585..605e9a39a 100644 --- a/src/distributions/base-models.ts +++ b/src/distributions/base-models.ts @@ -3,6 +3,8 @@ export interface JavaInstallerOptions { architecture: string; packageType: string; checkLatest: boolean; + updateEnvJavaHome: boolean; + addToEnvPath: boolean; } export interface JavaInstallerResults { diff --git a/src/setup-java.ts b/src/setup-java.ts index 73baf33a7..0aaa46fa6 100644 --- a/src/setup-java.ts +++ b/src/setup-java.ts @@ -13,6 +13,19 @@ import * as path from 'path'; import {getJavaDistribution} from './distributions/distribution-factory'; import {JavaInstallerOptions} from './distributions/base-models'; +interface IInstallerInputsOptions { + architecture: string; + packageType: string; + checkLatest: boolean; + distributionName: string; + jdkFile: string; + toolchainIds: Array; + updateToolchainsOnly: boolean; + overwriteSettings: boolean; + updateEnvJavaHome: boolean; + addToEnvPath: boolean; +} + async function run() { try { const versions = core.getMultilineInput(constants.INPUT_JAVA_VERSION); @@ -28,6 +41,11 @@ async function run() { constants.INPUT_CACHE_DEPENDENCY_PATH ); const checkLatest = getBooleanInput(constants.INPUT_CHECK_LATEST, false); + const updateToolchainsOnly = getBooleanInput(constants.INPUT_UPDATE_TOOLCHAINS_ONLY, false); + const overwriteSettings = getBooleanInput(constants.INPUT_OVERWRITE_SETTINGS, !updateToolchainsOnly); + const updateEnvJavaHome = getBooleanInput(constants.INPUT_UPDATE_JAVA_HOME, !updateToolchainsOnly); + const addToEnvPath = getBooleanInput(constants.INPUT_ADD_TO_PATH, !updateToolchainsOnly); + let toolchainIds = core.getMultilineInput(constants.INPUT_MVN_TOOLCHAIN_ID); core.startGroup('Installed distributions'); @@ -40,13 +58,17 @@ async function run() { throw new Error('java-version or java-version-file input expected'); } - const installerInputsOptions: installerInputsOptions = { + const installerInputsOptions: IInstallerInputsOptions = { architecture, packageType, checkLatest, distributionName, jdkFile, - toolchainIds + toolchainIds, + updateToolchainsOnly, + overwriteSettings, + updateEnvJavaHome, + addToEnvPath }; if (!versions.length) { @@ -78,7 +100,7 @@ async function run() { const matchersPath = path.join(__dirname, '..', '..', '.github'); core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); - await auth.configureAuthentication(); + await auth.configureAuthentication(overwriteSettings); if (cache && isCacheFeatureAvailable()) { await restore(cache, cacheDependencyPath); } @@ -91,7 +113,7 @@ run(); async function installVersion( version: string, - options: installerInputsOptions, + options: IInstallerInputsOptions, toolchainId = 0 ) { const { @@ -100,14 +122,20 @@ async function installVersion( architecture, packageType, checkLatest, - toolchainIds + toolchainIds, + updateToolchainsOnly, + overwriteSettings, + updateEnvJavaHome, + addToEnvPath } = options; const installerOptions: JavaInstallerOptions = { + version, architecture, packageType, checkLatest, - version + updateEnvJavaHome, + addToEnvPath }; const distribution = getJavaDistribution( @@ -126,6 +154,7 @@ async function installVersion( version, distributionName, result.path, + overwriteSettings || updateToolchainsOnly, toolchainIds[toolchainId] ); @@ -136,12 +165,3 @@ async function installVersion( core.info(` Path: ${result.path}`); core.info(''); } - -interface installerInputsOptions { - architecture: string; - packageType: string; - checkLatest: boolean; - distributionName: string; - jdkFile: string; - toolchainIds: Array; -} diff --git a/src/toolchains.ts b/src/toolchains.ts index cbb667eb7..3238d2962 100644 --- a/src/toolchains.ts +++ b/src/toolchains.ts @@ -19,6 +19,7 @@ export async function configureToolchains( version: string, distributionName: string, jdkHome: string, + updateToolchains: boolean, toolchainId?: string ) { const vendor = @@ -27,10 +28,6 @@ export async function configureToolchains( const settingsDirectory = core.getInput(constants.INPUT_SETTINGS_PATH) || path.join(os.homedir(), constants.M2_DIR); - const overwriteSettings = getBooleanInput( - constants.INPUT_OVERWRITE_SETTINGS, - true - ); await createToolchainsSettings({ jdkInfo: { @@ -40,21 +37,21 @@ export async function configureToolchains( jdkHome }, settingsDirectory, - overwriteSettings + updateToolchains }); } export async function createToolchainsSettings({ jdkInfo, settingsDirectory, - overwriteSettings + updateToolchains }: { jdkInfo: JdkInfo; settingsDirectory: string; - overwriteSettings: boolean; + updateToolchains: boolean; }) { core.info( - `Creating ${constants.MVN_TOOLCHAINS_FILE} for JDK version ${jdkInfo.version} from ${jdkInfo.vendor}` + `Adding a toolchain entry in ${constants.MVN_TOOLCHAINS_FILE} for JDK version ${jdkInfo.version} from ${jdkInfo.vendor}` ); // when an alternate m2 location is specified use only that location (no .m2 directory) // otherwise use the home/.m2/ path @@ -72,7 +69,7 @@ export async function createToolchainsSettings({ await writeToolchainsFileToDisk( settingsDirectory, updatedToolchains, - overwriteSettings + updateToolchains ); } @@ -147,17 +144,17 @@ async function readExistingToolchainsFile(directory: string) { async function writeToolchainsFileToDisk( directory: string, settings: string, - overwriteSettings: boolean + updateToolchains: boolean ) { const location = path.join(directory, constants.MVN_TOOLCHAINS_FILE); - const settingsExists = fs.existsSync(location); - if (settingsExists && overwriteSettings) { - core.info(`Overwriting existing file ${location}`); - } else if (!settingsExists) { - core.info(`Writing to ${location}`); + const toolchainsExists = fs.existsSync(location); + if (toolchainsExists && updateToolchains) { + core.info(`Updating existing file ${location}`); + } else if (!toolchainsExists) { + core.info(`Creating file ${location}`); } else { core.info( - `Skipping generation of ${location} because file already exists and overwriting is not enabled` + `Skipping update of ${location} since file already exists and updating is not enabled` ); return; } From 63af83a5f99c7a4f24c256483d10264e12a9c80b Mon Sep 17 00:00:00 2001 From: Markus Hoffrogge Date: Tue, 7 Nov 2023 15:30:27 +0100 Subject: [PATCH 2/4] Update README.md --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 532a78ff8..dee4f7ee5 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,13 @@ This action allows you to work with Java and Scala projects. #### Maven options The action has a bunch of inputs to generate maven's [settings.xml](https://maven.apache.org/settings.html) on the fly and pass the values to Apache Maven GPG Plugin as well as Apache Maven Toolchains. See [advanced usage](docs/advanced-usage.md) for more. - - `overwrite-settings`: By default action overwrites the settings.xml. In order to skip generation of file if it exists, set this to `false`. + - `overwrite-settings`: By default action overwrites the settings.xml and adds a toolchain entry to toolchains.xml. In order to skip generation of settings.xml and skip adding a toolchain entry to toolchains.xml if the according file exists, set this to `false`. + + - `update-env-javahome`: By default action updates `env.JAVA_HOME` with the path of java installed. In order to skip update of JAVA_HOME, set this to `false`. The creation of the env variable JAVA_HOME_{{ MAJOR_VERSION }}_{{ ARCHITECTURE }} is NOT affected by this item. That will be created for any setup. + + - `update-env-path`: By default action adds `/bin` to `env.PATH`. In order to skip this, set this to `false`. + + - `update-toolchains-only`: If set to true, then `overwrite-settings`, `update-env-javahome` and `update-env-path` are propagated to `false` if the specific one is not explicitly configured to `true`. Only a toolchain entry will be added to toolchains.xml. Default is `false`. - `server-id`: ID of the distributionManagement repository in the pom.xml file. Default is `github`. @@ -233,7 +239,7 @@ jobs: ### Install multiple JDKs -All versions are added to the PATH. The last version will be used and available globally. Other Java versions can be accessed through env variables with such specification as 'JAVA_HOME_{{ MAJOR_VERSION }}_{{ ARCHITECTURE }}'. +By default all versions are added to the PATH. The last version will be used and available globally. Other Java versions can be accessed through env variables with such specification as 'JAVA_HOME_{{ MAJOR_VERSION }}_{{ ARCHITECTURE }}'. ```yaml steps: @@ -246,6 +252,8 @@ All versions are added to the PATH. The last version will be used and available 15 ``` +**NOTE:** An alternative option is to use multiple setup-java steps. In this case the behavior can be controlled more granular by making use of the input items `overwrite-settings`, `update-env-javahome`, `update-env-path` and `update-toolchains-only`. + ### Using Maven Toolchains In the example above multiple JDKs are installed for the same job. The result after the last JDK is installed is a Maven Toolchains declaration containing references to all three JDKs. The values for `id`, `version`, and `vendor` of the individual Toolchain entries are the given input values for `distribution` and `java-version` (`vendor` being the combination of `${distribution}_${java-version}`) by default. From 3ca69145beb01be8aaf2a9e995ae2c2369bf3f4c Mon Sep 17 00:00:00 2001 From: Markus Hoffrogge Date: Wed, 8 Nov 2023 11:59:16 +0100 Subject: [PATCH 3/4] Update from npm run format to fix prettier check - missed in initial commit - took re-built dist from GH actions --- src/auth.ts | 4 +--- src/distributions/base-installer.ts | 4 +++- src/setup-java.ts | 20 ++++++++++++++++---- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/auth.ts b/src/auth.ts index 66cdd9a3d..4eed4d0e2 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -10,9 +10,7 @@ import * as constants from './constants'; import * as gpg from './gpg'; import {getBooleanInput} from './util'; -export async function configureAuthentication( - overwriteSettings: boolean -) { +export async function configureAuthentication(overwriteSettings: boolean) { const id = core.getInput(constants.INPUT_SERVER_ID); const username = core.getInput(constants.INPUT_SERVER_USERNAME); const password = core.getInput(constants.INPUT_SERVER_PASSWORD); diff --git a/src/distributions/base-installer.ts b/src/distributions/base-installer.ts index d4589bcc1..c786b2822 100644 --- a/src/distributions/base-installer.ts +++ b/src/distributions/base-installer.ts @@ -174,7 +174,9 @@ export abstract class JavaBase { if (this.updateEnvJavaHome) { core.exportVariable('JAVA_HOME', toolPath); } else { - core.info(`Skip updating env.JAVA_HOME according to ${INPUT_UPDATE_JAVA_HOME}`); + core.info( + `Skip updating env.JAVA_HOME according to ${INPUT_UPDATE_JAVA_HOME}` + ); } if (this.addToEnvPath) { core.addPath(path.join(toolPath, 'bin')); diff --git a/src/setup-java.ts b/src/setup-java.ts index 0aaa46fa6..01a9037fe 100644 --- a/src/setup-java.ts +++ b/src/setup-java.ts @@ -41,10 +41,22 @@ async function run() { constants.INPUT_CACHE_DEPENDENCY_PATH ); const checkLatest = getBooleanInput(constants.INPUT_CHECK_LATEST, false); - const updateToolchainsOnly = getBooleanInput(constants.INPUT_UPDATE_TOOLCHAINS_ONLY, false); - const overwriteSettings = getBooleanInput(constants.INPUT_OVERWRITE_SETTINGS, !updateToolchainsOnly); - const updateEnvJavaHome = getBooleanInput(constants.INPUT_UPDATE_JAVA_HOME, !updateToolchainsOnly); - const addToEnvPath = getBooleanInput(constants.INPUT_ADD_TO_PATH, !updateToolchainsOnly); + const updateToolchainsOnly = getBooleanInput( + constants.INPUT_UPDATE_TOOLCHAINS_ONLY, + false + ); + const overwriteSettings = getBooleanInput( + constants.INPUT_OVERWRITE_SETTINGS, + !updateToolchainsOnly + ); + const updateEnvJavaHome = getBooleanInput( + constants.INPUT_UPDATE_JAVA_HOME, + !updateToolchainsOnly + ); + const addToEnvPath = getBooleanInput( + constants.INPUT_ADD_TO_PATH, + !updateToolchainsOnly + ); let toolchainIds = core.getMultilineInput(constants.INPUT_MVN_TOOLCHAIN_ID); From cb67ffdf85154eaaf8db6eafdd2da84c3c067c7e Mon Sep 17 00:00:00 2001 From: Markus Hoffrogge Date: Sun, 7 Apr 2024 20:09:44 +0200 Subject: [PATCH 4/4] Update compiled dist scripts after re-base to main --- dist/cleanup/index.js | 5 ++- dist/setup/index.js | 71 ++++++++++++++++++++++++++++--------------- 2 files changed, 50 insertions(+), 26 deletions(-) diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index 6c44aa45a..b671e7d72 100644 --- a/dist/cleanup/index.js +++ b/dist/cleanup/index.js @@ -88311,7 +88311,7 @@ else { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.DISTRIBUTIONS_ONLY_MAJOR_VERSION = exports.INPUT_MVN_TOOLCHAIN_VENDOR = exports.INPUT_MVN_TOOLCHAIN_ID = exports.MVN_TOOLCHAINS_FILE = exports.MVN_SETTINGS_FILE = exports.M2_DIR = exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE_DEPENDENCY_PATH = 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_FILE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; +exports.DISTRIBUTIONS_ONLY_MAJOR_VERSION = exports.INPUT_MVN_TOOLCHAIN_VENDOR = exports.INPUT_MVN_TOOLCHAIN_ID = exports.MVN_TOOLCHAINS_FILE = exports.MVN_SETTINGS_FILE = exports.M2_DIR = exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE_DEPENDENCY_PATH = 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_ADD_TO_PATH = exports.INPUT_UPDATE_JAVA_HOME = exports.INPUT_UPDATE_TOOLCHAINS_ONLY = 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_FILE = 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_JAVA_VERSION_FILE = 'java-version-file'; @@ -88325,6 +88325,9 @@ 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_UPDATE_TOOLCHAINS_ONLY = 'update-toolchains-only'; +exports.INPUT_UPDATE_JAVA_HOME = 'update-env-javahome'; +exports.INPUT_ADD_TO_PATH = 'add-to-env-path'; exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; diff --git a/dist/setup/index.js b/dist/setup/index.js index 927cd626b..e0605131c 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -123151,15 +123151,13 @@ const os = __importStar(__nccwpck_require__(22037)); const xmlbuilder2_1 = __nccwpck_require__(70151); const constants = __importStar(__nccwpck_require__(69042)); const gpg = __importStar(__nccwpck_require__(23759)); -const util_1 = __nccwpck_require__(92629); -function configureAuthentication() { +function configureAuthentication(overwriteSettings) { 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(), constants.M2_DIR); - const overwriteSettings = (0, 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) || @@ -123455,7 +123453,7 @@ function isProbablyGradleDaemonProblem(packageManager, error) { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.DISTRIBUTIONS_ONLY_MAJOR_VERSION = exports.INPUT_MVN_TOOLCHAIN_VENDOR = exports.INPUT_MVN_TOOLCHAIN_ID = exports.MVN_TOOLCHAINS_FILE = exports.MVN_SETTINGS_FILE = exports.M2_DIR = exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE_DEPENDENCY_PATH = 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_FILE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; +exports.DISTRIBUTIONS_ONLY_MAJOR_VERSION = exports.INPUT_MVN_TOOLCHAIN_VENDOR = exports.INPUT_MVN_TOOLCHAIN_ID = exports.MVN_TOOLCHAINS_FILE = exports.MVN_SETTINGS_FILE = exports.M2_DIR = exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_JOB_STATUS = exports.INPUT_CACHE_DEPENDENCY_PATH = 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_ADD_TO_PATH = exports.INPUT_UPDATE_JAVA_HOME = exports.INPUT_UPDATE_TOOLCHAINS_ONLY = 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_FILE = 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_JAVA_VERSION_FILE = 'java-version-file'; @@ -123469,6 +123467,9 @@ 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_UPDATE_TOOLCHAINS_ONLY = 'update-toolchains-only'; +exports.INPUT_UPDATE_JAVA_HOME = 'update-env-javahome'; +exports.INPUT_ADD_TO_PATH = 'add-to-env-path'; exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; @@ -123730,6 +123731,8 @@ class JavaBase { this.architecture = installerOptions.architecture || os_1.default.arch(); this.packageType = installerOptions.packageType; this.checkLatest = installerOptions.checkLatest; + this.updateEnvJavaHome = installerOptions.updateEnvJavaHome; + this.addToEnvPath = installerOptions.addToEnvPath; } setupJava() { return __awaiter(this, void 0, void 0, function* () { @@ -123831,8 +123834,18 @@ class JavaBase { } setJavaDefault(version, toolPath) { const majorVersion = version.split('.')[0]; - core.exportVariable('JAVA_HOME', toolPath); - core.addPath(path_1.default.join(toolPath, 'bin')); + if (this.updateEnvJavaHome) { + core.exportVariable('JAVA_HOME', toolPath); + } + else { + core.info(`Skip updating env.JAVA_HOME according to ${constants_1.INPUT_UPDATE_JAVA_HOME}`); + } + if (this.addToEnvPath) { + core.addPath(path_1.default.join(toolPath, 'bin')); + } + else { + core.info(`Skip adding to env.PATH according to ${constants_1.INPUT_ADD_TO_PATH}`); + } core.setOutput('distribution', this.distribution); core.setOutput('path', toolPath); core.setOutput('version', version); @@ -126199,6 +126212,10 @@ function run() { const cache = core.getInput(constants.INPUT_CACHE); const cacheDependencyPath = core.getInput(constants.INPUT_CACHE_DEPENDENCY_PATH); const checkLatest = (0, util_1.getBooleanInput)(constants.INPUT_CHECK_LATEST, false); + const updateToolchainsOnly = (0, util_1.getBooleanInput)(constants.INPUT_UPDATE_TOOLCHAINS_ONLY, false); + const overwriteSettings = (0, util_1.getBooleanInput)(constants.INPUT_OVERWRITE_SETTINGS, !updateToolchainsOnly); + const updateEnvJavaHome = (0, util_1.getBooleanInput)(constants.INPUT_UPDATE_JAVA_HOME, !updateToolchainsOnly); + const addToEnvPath = (0, util_1.getBooleanInput)(constants.INPUT_ADD_TO_PATH, !updateToolchainsOnly); let toolchainIds = core.getMultilineInput(constants.INPUT_MVN_TOOLCHAIN_ID); core.startGroup('Installed distributions'); if (versions.length !== toolchainIds.length) { @@ -126213,7 +126230,11 @@ function run() { checkLatest, distributionName, jdkFile, - toolchainIds + toolchainIds, + updateToolchainsOnly, + overwriteSettings, + updateEnvJavaHome, + addToEnvPath }; if (!versions.length) { core.debug('java-version input is empty, looking for java-version-file input'); @@ -126231,7 +126252,7 @@ function run() { core.endGroup(); const matchersPath = path.join(__dirname, '..', '..', '.github'); core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); - yield auth.configureAuthentication(); + yield auth.configureAuthentication(overwriteSettings); if (cache && (0, util_1.isCacheFeatureAvailable)()) { yield (0, cache_1.restore)(cache, cacheDependencyPath); } @@ -126244,19 +126265,21 @@ function run() { run(); function installVersion(version, options, toolchainId = 0) { return __awaiter(this, void 0, void 0, function* () { - const { distributionName, jdkFile, architecture, packageType, checkLatest, toolchainIds } = options; + const { distributionName, jdkFile, architecture, packageType, checkLatest, toolchainIds, updateToolchainsOnly, overwriteSettings, updateEnvJavaHome, addToEnvPath } = options; const installerOptions = { + version, architecture, packageType, checkLatest, - version + updateEnvJavaHome, + addToEnvPath }; const distribution = (0, 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(); - yield toolchains.configureToolchains(version, distributionName, result.path, toolchainIds[toolchainId]); + yield toolchains.configureToolchains(version, distributionName, result.path, overwriteSettings || updateToolchainsOnly, toolchainIds[toolchainId]); core.info(''); core.info('Java configuration:'); core.info(` Distribution: ${distributionName}`); @@ -126314,15 +126337,13 @@ const path = __importStar(__nccwpck_require__(71017)); const core = __importStar(__nccwpck_require__(42186)); const io = __importStar(__nccwpck_require__(47351)); const constants = __importStar(__nccwpck_require__(69042)); -const util_1 = __nccwpck_require__(92629); const xmlbuilder2_1 = __nccwpck_require__(70151); -function configureToolchains(version, distributionName, jdkHome, toolchainId) { +function configureToolchains(version, distributionName, jdkHome, updateToolchains, toolchainId) { return __awaiter(this, void 0, void 0, function* () { const vendor = core.getInput(constants.INPUT_MVN_TOOLCHAIN_VENDOR) || distributionName; const id = toolchainId || `${vendor}_${version}`; const settingsDirectory = core.getInput(constants.INPUT_SETTINGS_PATH) || path.join(os.homedir(), constants.M2_DIR); - const overwriteSettings = (0, util_1.getBooleanInput)(constants.INPUT_OVERWRITE_SETTINGS, true); yield createToolchainsSettings({ jdkInfo: { version, @@ -126331,20 +126352,20 @@ function configureToolchains(version, distributionName, jdkHome, toolchainId) { jdkHome }, settingsDirectory, - overwriteSettings + updateToolchains }); }); } exports.configureToolchains = configureToolchains; -function createToolchainsSettings({ jdkInfo, settingsDirectory, overwriteSettings }) { +function createToolchainsSettings({ jdkInfo, settingsDirectory, updateToolchains }) { return __awaiter(this, void 0, void 0, function* () { - core.info(`Creating ${constants.MVN_TOOLCHAINS_FILE} for JDK version ${jdkInfo.version} from ${jdkInfo.vendor}`); + core.info(`Adding a toolchain entry in ${constants.MVN_TOOLCHAINS_FILE} for JDK version ${jdkInfo.version} from ${jdkInfo.vendor}`); // when an alternate m2 location is specified use only that location (no .m2 directory) // otherwise use the home/.m2/ path yield io.mkdirP(settingsDirectory); const originalToolchains = yield readExistingToolchainsFile(settingsDirectory); const updatedToolchains = generateToolchainDefinition(originalToolchains, jdkInfo.version, jdkInfo.vendor, jdkInfo.id, jdkInfo.jdkHome); - yield writeToolchainsFileToDisk(settingsDirectory, updatedToolchains, overwriteSettings); + yield writeToolchainsFileToDisk(settingsDirectory, updatedToolchains, updateToolchains); }); } exports.createToolchainsSettings = createToolchainsSettings; @@ -126410,18 +126431,18 @@ function readExistingToolchainsFile(directory) { return ''; }); } -function writeToolchainsFileToDisk(directory, settings, overwriteSettings) { +function writeToolchainsFileToDisk(directory, settings, updateToolchains) { return __awaiter(this, void 0, void 0, function* () { const location = path.join(directory, constants.MVN_TOOLCHAINS_FILE); - const settingsExists = fs.existsSync(location); - if (settingsExists && overwriteSettings) { - core.info(`Overwriting existing file ${location}`); + const toolchainsExists = fs.existsSync(location); + if (toolchainsExists && updateToolchains) { + core.info(`Updating existing file ${location}`); } - else if (!settingsExists) { - core.info(`Writing to ${location}`); + else if (!toolchainsExists) { + core.info(`Creating file ${location}`); } else { - core.info(`Skipping generation of ${location} because file already exists and overwriting is not enabled`); + core.info(`Skipping update of ${location} since file already exists and updating is not enabled`); return; } return fs.writeFileSync(location, settings, {