mirror of
https://github.com/actions/setup-java.git
synced 2026-07-28 07:04:32 +02:00
Add force-download input
This commit is contained in:
@@ -56,6 +56,8 @@ For more details, see the full release notes on the [releases page](https://git
|
|||||||
|
|
||||||
- `check-latest`: Setting this option makes the action to check for the latest available version for the version spec.
|
- `check-latest`: Setting this option makes the action to check for the latest available version for the version spec.
|
||||||
|
|
||||||
|
- `force-download`: Set to `true` to always download Java and replace any matching version in the tool cache. This can help make builds reproducible when a runner image has modified a pre-installed JDK, such as its `cacerts` file. Default value: `false`.
|
||||||
|
|
||||||
- `set-default`: Set to `false` to install a JDK without making it the default. When `false`, `JAVA_HOME` and `PATH` are not updated, but `JAVA_HOME_<major>_<arch>` is still set so the JDK remains discoverable. Default value: `true`. See [Installing JDK without setting as default](docs/advanced-usage.md#Installing-JDK-without-setting-as-default) for more details.
|
- `set-default`: Set to `false` to install a JDK without making it the default. When `false`, `JAVA_HOME` and `PATH` are not updated, but `JAVA_HOME_<major>_<arch>` is still set so the JDK remains discoverable. Default value: `true`. See [Installing JDK without setting as default](docs/advanced-usage.md#Installing-JDK-without-setting-as-default) for more details.
|
||||||
|
|
||||||
- `problem-matcher`: Set to `false` to disable Java problem matcher annotations (compiler diagnostics and uncaught exceptions). Default value: `true`. See [Java problem matcher](docs/advanced-usage.md#java-problem-matcher-compiler-annotations) for details and annotation limits.
|
- `problem-matcher`: Set to `false` to disable Java problem matcher annotations (compiler diagnostics and uncaught exceptions). Default value: `true`. See [Java problem matcher](docs/advanced-usage.md#java-problem-matcher-compiler-annotations) for details and annotation limits.
|
||||||
|
|||||||
@@ -443,6 +443,35 @@ describe('setupJava', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should download java when force-download is enabled, even if the version is cached', async () => {
|
||||||
|
mockJavaBase = new EmptyJavaBase({
|
||||||
|
version: actualJavaVersion,
|
||||||
|
architecture: 'x86',
|
||||||
|
packageType: 'jdk',
|
||||||
|
checkLatest: false,
|
||||||
|
forceDownload: true
|
||||||
|
});
|
||||||
|
const findInToolcache = jest.fn(() => ({
|
||||||
|
version: actualJavaVersion,
|
||||||
|
path: javaPathInstalled
|
||||||
|
}));
|
||||||
|
mockJavaBase['findInToolcache'] = findInToolcache;
|
||||||
|
|
||||||
|
await expect(mockJavaBase.setupJava()).resolves.toEqual({
|
||||||
|
version: actualJavaVersion,
|
||||||
|
path: javaPathInstalled
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(findInToolcache).not.toHaveBeenCalled();
|
||||||
|
expect(spyCoreInfo).toHaveBeenCalledWith('Trying to download...');
|
||||||
|
expect(spyCoreInfo).toHaveBeenCalledWith(
|
||||||
|
`Java ${actualJavaVersion} was downloaded`
|
||||||
|
);
|
||||||
|
expect(spyCoreInfo).not.toHaveBeenCalledWith(
|
||||||
|
`Resolved Java ${actualJavaVersion} from tool-cache`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it.each([
|
it.each([
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -208,6 +208,29 @@ describe('setupJava', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('java is unpacked from jdkfile when force-download is enabled', async () => {
|
||||||
|
const inputs = {
|
||||||
|
version: actualJavaVersion,
|
||||||
|
architecture: 'x86',
|
||||||
|
packageType: 'jdk',
|
||||||
|
checkLatest: false,
|
||||||
|
forceDownload: true
|
||||||
|
};
|
||||||
|
|
||||||
|
mockJavaBase = new LocalDistribution(inputs, expectedJdkFile);
|
||||||
|
await expect(mockJavaBase.setupJava()).resolves.toEqual({
|
||||||
|
version: actualJavaVersion,
|
||||||
|
path: javaPath
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(spyGetToolcachePath).not.toHaveBeenCalled();
|
||||||
|
expect(spyUtilsExtractJdkFile).toHaveBeenCalledWith(expectedJdkFile);
|
||||||
|
expect(spyTcCacheDir).toHaveBeenCalled();
|
||||||
|
expect(spyCoreInfo).not.toHaveBeenCalledWith(
|
||||||
|
`Resolved Java ${actualJavaVersion} from tool-cache`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("java is resolved from toolcache, jdkfile doesn't exist", async () => {
|
it("java is resolved from toolcache, jdkfile doesn't exist", async () => {
|
||||||
const inputs = {
|
const inputs = {
|
||||||
version: actualJavaVersion,
|
version: actualJavaVersion,
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ inputs:
|
|||||||
description: 'Set this option if you want the action to check for the latest available version that satisfies the version spec'
|
description: 'Set this option if you want the action to check for the latest available version that satisfies the version spec'
|
||||||
required: false
|
required: false
|
||||||
default: false
|
default: false
|
||||||
|
force-download:
|
||||||
|
description: 'Set this option to always download Java and replace any matching version in the tool cache'
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
set-default:
|
set-default:
|
||||||
description: 'Set this option to false if you want to install a JDK but not make it the default. When false, JAVA_HOME and PATH are not updated, but JAVA_HOME_<major>_<arch> is still set.'
|
description: 'Set this option to false if you want to install a JDK but not make it the default. When false, JAVA_HOME and PATH are not updated, but JAVA_HOME_<major>_<arch> is still set.'
|
||||||
required: false
|
required: false
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ export const INPUT_DISTRIBUTION = 'distribution';
|
|||||||
export const INPUT_JDK_FILE = 'jdk-file';
|
export const INPUT_JDK_FILE = 'jdk-file';
|
||||||
export const INPUT_JDK_FILE_DEPRECATED = 'jdkFile';
|
export const INPUT_JDK_FILE_DEPRECATED = 'jdkFile';
|
||||||
export const INPUT_CHECK_LATEST = 'check-latest';
|
export const INPUT_CHECK_LATEST = 'check-latest';
|
||||||
|
export const INPUT_FORCE_DOWNLOAD = 'force-download';
|
||||||
export const INPUT_SET_DEFAULT = 'set-default';
|
export const INPUT_SET_DEFAULT = 'set-default';
|
||||||
export const INPUT_PROBLEM_MATCHER = 'problem-matcher';
|
export const INPUT_PROBLEM_MATCHER = 'problem-matcher';
|
||||||
export const INPUT_VERIFY_SIGNATURE = 'verify-signature';
|
export const INPUT_VERIFY_SIGNATURE = 'verify-signature';
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export abstract class JavaBase {
|
|||||||
protected stable: boolean;
|
protected stable: boolean;
|
||||||
protected latest: boolean;
|
protected latest: boolean;
|
||||||
protected checkLatest: boolean;
|
protected checkLatest: boolean;
|
||||||
|
protected forceDownload: boolean;
|
||||||
protected setDefault: boolean;
|
protected setDefault: boolean;
|
||||||
protected verifySignature: boolean;
|
protected verifySignature: boolean;
|
||||||
protected verifySignaturePublicKey: string | undefined;
|
protected verifySignaturePublicKey: string | undefined;
|
||||||
@@ -46,6 +47,7 @@ export abstract class JavaBase {
|
|||||||
this.architecture = installerOptions.architecture || os.arch();
|
this.architecture = installerOptions.architecture || os.arch();
|
||||||
this.packageType = installerOptions.packageType;
|
this.packageType = installerOptions.packageType;
|
||||||
this.checkLatest = installerOptions.checkLatest;
|
this.checkLatest = installerOptions.checkLatest;
|
||||||
|
this.forceDownload = installerOptions.forceDownload ?? false;
|
||||||
this.setDefault =
|
this.setDefault =
|
||||||
installerOptions.setDefault !== undefined
|
installerOptions.setDefault !== undefined
|
||||||
? installerOptions.setDefault
|
? installerOptions.setDefault
|
||||||
@@ -68,7 +70,7 @@ export abstract class JavaBase {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let foundJava = this.findInToolcache();
|
let foundJava = this.forceDownload ? null : this.findInToolcache();
|
||||||
if (foundJava && !this.checkLatest && !this.latest) {
|
if (foundJava && !this.checkLatest && !this.latest) {
|
||||||
core.info(`Resolved Java ${foundJava.version} from tool-cache`);
|
core.info(`Resolved Java ${foundJava.version} from tool-cache`);
|
||||||
} else {
|
} else {
|
||||||
@@ -91,7 +93,10 @@ export abstract class JavaBase {
|
|||||||
}
|
}
|
||||||
const javaRelease = await this.findPackageForDownload(this.version);
|
const javaRelease = await this.findPackageForDownload(this.version);
|
||||||
core.info(`Resolved latest version as ${javaRelease.version}`);
|
core.info(`Resolved latest version as ${javaRelease.version}`);
|
||||||
if (foundJava?.version === javaRelease.version) {
|
if (
|
||||||
|
!this.forceDownload &&
|
||||||
|
foundJava?.version === javaRelease.version
|
||||||
|
) {
|
||||||
core.info(`Resolved Java ${foundJava.version} from tool-cache`);
|
core.info(`Resolved Java ${foundJava.version} from tool-cache`);
|
||||||
} else {
|
} else {
|
||||||
core.info('Trying to download...');
|
core.info('Trying to download...');
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ export interface JavaInstallerOptions {
|
|||||||
architecture: string;
|
architecture: string;
|
||||||
packageType: string;
|
packageType: string;
|
||||||
checkLatest: boolean;
|
checkLatest: boolean;
|
||||||
|
forceDownload?: boolean;
|
||||||
setDefault?: boolean;
|
setDefault?: boolean;
|
||||||
verifySignature?: boolean;
|
verifySignature?: boolean;
|
||||||
verifySignaturePublicKey?: string;
|
verifySignaturePublicKey?: string;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ export class LocalDistribution extends JavaBase {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let foundJava = this.findInToolcache();
|
let foundJava = this.forceDownload ? null : this.findInToolcache();
|
||||||
|
|
||||||
if (foundJava) {
|
if (foundJava) {
|
||||||
core.info(`Resolved Java ${foundJava.version} from tool-cache`);
|
core.info(`Resolved Java ${foundJava.version} from tool-cache`);
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ async function run() {
|
|||||||
constants.INPUT_CACHE_DEPENDENCY_PATH
|
constants.INPUT_CACHE_DEPENDENCY_PATH
|
||||||
);
|
);
|
||||||
const checkLatest = getBooleanInput(constants.INPUT_CHECK_LATEST, false);
|
const checkLatest = getBooleanInput(constants.INPUT_CHECK_LATEST, false);
|
||||||
|
const forceDownload = getBooleanInput(
|
||||||
|
constants.INPUT_FORCE_DOWNLOAD,
|
||||||
|
false
|
||||||
|
);
|
||||||
const setDefault = getBooleanInput(constants.INPUT_SET_DEFAULT, true);
|
const setDefault = getBooleanInput(constants.INPUT_SET_DEFAULT, true);
|
||||||
const verifySignature = getBooleanInput(
|
const verifySignature = getBooleanInput(
|
||||||
constants.INPUT_VERIFY_SIGNATURE,
|
constants.INPUT_VERIFY_SIGNATURE,
|
||||||
@@ -83,6 +87,7 @@ async function run() {
|
|||||||
architecture,
|
architecture,
|
||||||
packageType,
|
packageType,
|
||||||
checkLatest,
|
checkLatest,
|
||||||
|
forceDownload,
|
||||||
setDefault,
|
setDefault,
|
||||||
verifySignature,
|
verifySignature,
|
||||||
verifySignaturePublicKey,
|
verifySignaturePublicKey,
|
||||||
@@ -102,6 +107,7 @@ async function run() {
|
|||||||
architecture,
|
architecture,
|
||||||
packageType,
|
packageType,
|
||||||
checkLatest,
|
checkLatest,
|
||||||
|
forceDownload,
|
||||||
setDefault,
|
setDefault,
|
||||||
verifySignature,
|
verifySignature,
|
||||||
verifySignaturePublicKey,
|
verifySignaturePublicKey,
|
||||||
@@ -159,6 +165,7 @@ async function installVersion(
|
|||||||
architecture,
|
architecture,
|
||||||
packageType,
|
packageType,
|
||||||
checkLatest,
|
checkLatest,
|
||||||
|
forceDownload,
|
||||||
setDefault,
|
setDefault,
|
||||||
verifySignature,
|
verifySignature,
|
||||||
verifySignaturePublicKey,
|
verifySignaturePublicKey,
|
||||||
@@ -169,6 +176,7 @@ async function installVersion(
|
|||||||
architecture,
|
architecture,
|
||||||
packageType,
|
packageType,
|
||||||
checkLatest,
|
checkLatest,
|
||||||
|
forceDownload,
|
||||||
setDefault,
|
setDefault,
|
||||||
verifySignature,
|
verifySignature,
|
||||||
verifySignaturePublicKey,
|
verifySignaturePublicKey,
|
||||||
@@ -212,6 +220,7 @@ interface installerInputsOptions {
|
|||||||
architecture: string;
|
architecture: string;
|
||||||
packageType: string;
|
packageType: string;
|
||||||
checkLatest: boolean;
|
checkLatest: boolean;
|
||||||
|
forceDownload: boolean;
|
||||||
setDefault: boolean;
|
setDefault: boolean;
|
||||||
verifySignature: boolean;
|
verifySignature: boolean;
|
||||||
verifySignaturePublicKey: string | undefined;
|
verifySignaturePublicKey: string | undefined;
|
||||||
|
|||||||
Reference in New Issue
Block a user