From 9a44ab06dc5ef51821678c5cc0146a7efb5ea9e1 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 4 Jun 2024 11:20:16 +0200 Subject: [PATCH] feat(cli/java): resolve latest lts version - #1384 --- src/cli/install-tool/index.ts | 8 +++++ src/cli/install-tool/tool-version-resolver.ts | 7 +++-- src/cli/tools/java/resolver.ts | 31 +++++++++++++++++++ test/java/Dockerfile | 10 ++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/cli/tools/java/resolver.ts diff --git a/src/cli/install-tool/index.ts b/src/cli/install-tool/index.ts index 156ac3dda5..38c17f116d 100644 --- a/src/cli/install-tool/index.ts +++ b/src/cli/install-tool/index.ts @@ -14,6 +14,11 @@ import { InstallJavaService, } from '../tools/java'; import { InstallMavenService } from '../tools/java/maven'; +import { + JavaJdkVersionResolver, + JavaJreVersionResolver, + JavaVersionResolver, +} from '../tools/java/resolver'; import { InstallNodeService } from '../tools/node'; import { InstallRenovateService, @@ -77,6 +82,9 @@ function prepareResolveContainer(): Container { // tool version resolver container.bind(TOOL_VERSION_RESOLVER).to(NodeVersionResolver); + container.bind(TOOL_VERSION_RESOLVER).to(JavaVersionResolver); + container.bind(TOOL_VERSION_RESOLVER).to(JavaJreVersionResolver); + container.bind(TOOL_VERSION_RESOLVER).to(JavaJdkVersionResolver); logger.trace('preparing container done'); return container; diff --git a/src/cli/install-tool/tool-version-resolver.ts b/src/cli/install-tool/tool-version-resolver.ts index ac9c8d7bcc..9f42981ffa 100644 --- a/src/cli/install-tool/tool-version-resolver.ts +++ b/src/cli/install-tool/tool-version-resolver.ts @@ -1,5 +1,5 @@ import { inject, injectable } from 'inversify'; -import { HttpService } from '../services'; +import { EnvService, HttpService } from '../services'; export const TOOL_VERSION_RESOLVER = Symbol('TOOL_VERSION_RESOLVER'); @@ -7,7 +7,10 @@ export const TOOL_VERSION_RESOLVER = Symbol('TOOL_VERSION_RESOLVER'); export abstract class ToolVersionResolver { abstract readonly tool: string; - constructor(@inject(HttpService) protected readonly http: HttpService) {} + constructor( + @inject(HttpService) protected readonly http: HttpService, + @inject(EnvService) protected readonly env: EnvService, + ) {} abstract resolve(version: string | undefined): Promise; } diff --git a/src/cli/tools/java/resolver.ts b/src/cli/tools/java/resolver.ts new file mode 100644 index 0000000000..d6bc90afe3 --- /dev/null +++ b/src/cli/tools/java/resolver.ts @@ -0,0 +1,31 @@ +import is from '@sindresorhus/is'; +import { injectable } from 'inversify'; +import { ToolVersionResolver } from '../../install-tool/tool-version-resolver'; +import { resolveLatestJavaLtsVersion } from './utils'; + +@injectable() +export class JavaVersionResolver extends ToolVersionResolver { + readonly tool: string = 'java'; + + async resolve(version: string | undefined): Promise { + if (!is.nonEmptyStringAndNotWhitespace(version) || version === 'latest') { + // we know that the latest version is the first entry, so search for first lts + return await resolveLatestJavaLtsVersion( + this.http, + this.tool === 'java-jre' ? 'jre' : 'jdk', + this.env.arch, + ); + } + return version; + } +} + +@injectable() +export class JavaJreVersionResolver extends JavaVersionResolver { + override readonly tool = 'java-jre'; +} + +@injectable() +export class JavaJdkVersionResolver extends JavaVersionResolver { + override readonly tool = 'java-jdk'; +} diff --git a/test/java/Dockerfile b/test/java/Dockerfile index 2cb83bcdb8..e397c4d683 100644 --- a/test/java/Dockerfile +++ b/test/java/Dockerfile @@ -195,6 +195,15 @@ RUN set -ex; \ ls -la; env; \ sbt compile + +#-------------------------------------- +# test: Resolve latest versions +#-------------------------------------- +FROM base as test-latest-version + +RUN install-tool java-jre + + #-------------------------------------- # final #-------------------------------------- @@ -206,3 +215,4 @@ COPY --from=test-gradle-c /.dummy /.dummy COPY --from=test-gradle-d /.dummy /.dummy COPY --from=test-maven-a /.dummy /.dummy COPY --from=test-others /.dummy /.dummy +COPY --from=test-latest-version /.dummy /.dummy