From cf7bb3226d3be0f5d0c7aa63891dfa9a7d44092e Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Thu, 28 Jul 2022 15:47:56 +0200
Subject: [PATCH] feat(manager/gradle-wrapper): support `binarySource=install`
 (#16830)

* feat(manager/gradle-wrapper): support `binarySource=install`

* docs: update docs
---
 docs/usage/self-hosted-configuration.md         |  1 +
 lib/modules/manager/gradle-wrapper/artifacts.ts | 13 ++++++++-----
 lib/modules/manager/gradle-wrapper/util.spec.ts |  4 ++--
 lib/modules/manager/gradle-wrapper/utils.ts     | 16 ++++------------
 lib/util/exec/buildpack.ts                      |  5 +++++
 5 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md
index 8247faa8f5..80c151a4b2 100644
--- a/docs/usage/self-hosted-configuration.md
+++ b/docs/usage/self-hosted-configuration.md
@@ -143,6 +143,7 @@ Supported tools for dynamic install are:
 
 - `composer`
 - `flux`
+- `gradle-wrapper`
 - `jb`
 - `npm`
 
diff --git a/lib/modules/manager/gradle-wrapper/artifacts.ts b/lib/modules/manager/gradle-wrapper/artifacts.ts
index 220edc5eb3..cc4c99f710 100644
--- a/lib/modules/manager/gradle-wrapper/artifacts.ts
+++ b/lib/modules/manager/gradle-wrapper/artifacts.ts
@@ -13,7 +13,6 @@ import type { UpdateArtifact, UpdateArtifactsResult } from '../types';
 import {
   extraEnv,
   getJavaContraint,
-  getJavaVersioning,
   gradleWrapperFileName,
   prepareGradleCommand,
 } from './utils';
@@ -88,12 +87,16 @@ export async function updateArtifacts({
     logger.debug(`Updating gradle wrapper: "${cmd}"`);
     const execOptions: ExecOptions = {
       docker: {
-        image: 'java',
-        tagConstraint:
-          config.constraints?.java ?? getJavaContraint(config.currentValue!),
-        tagScheme: getJavaVersioning(),
+        image: 'sidecar',
       },
       extraEnv,
+      toolConstraints: [
+        {
+          toolName: 'java',
+          constraint:
+            config.constraints?.java ?? getJavaContraint(config.currentValue),
+        },
+      ],
     };
     try {
       await exec(cmd, execOptions);
diff --git a/lib/modules/manager/gradle-wrapper/util.spec.ts b/lib/modules/manager/gradle-wrapper/util.spec.ts
index 108d2dde6f..384ca87531 100644
--- a/lib/modules/manager/gradle-wrapper/util.spec.ts
+++ b/lib/modules/manager/gradle-wrapper/util.spec.ts
@@ -3,8 +3,8 @@ import { extractGradleVersion, getJavaContraint } from './utils';
 
 describe('modules/manager/gradle-wrapper/util', () => {
   describe('getJavaContraint()', () => {
-    it('return null for global mode', () => {
-      expect(getJavaContraint('6')).toBeNull();
+    it('return ^8.0.0 for global mode', () => {
+      expect(getJavaContraint('4')).toBe('^8.0.0');
     });
 
     it('return ^11.0.0 for docker mode and undefined gradle', () => {
diff --git a/lib/modules/manager/gradle-wrapper/utils.ts b/lib/modules/manager/gradle-wrapper/utils.ts
index 8fb41e5753..ff3ff28936 100644
--- a/lib/modules/manager/gradle-wrapper/utils.ts
+++ b/lib/modules/manager/gradle-wrapper/utils.ts
@@ -4,7 +4,6 @@ import { logger } from '../../../logger';
 import { chmodLocalFile, statLocalFile } from '../../../util/fs';
 import { newlineRegex, regEx } from '../../../util/regex';
 import gradleVersioning from '../../versioning/gradle';
-import { id as npmVersioning } from '../../versioning/npm';
 import type { GradleVersionExtract } from './types';
 
 export const extraEnv = {
@@ -51,13 +50,10 @@ export async function prepareGradleCommand(
  * @param gradleVersion current gradle version
  * @returns A Java semver range
  */
-export function getJavaContraint(gradleVersion: string): string | null {
-  if (GlobalConfig.get('binarySource') !== 'docker') {
-    // ignore
-    return null;
-  }
-
-  const major = gradleVersioning.getMajor(gradleVersion);
+export function getJavaContraint(
+  gradleVersion: string | null | undefined
+): string | null {
+  const major = gradleVersion ? gradleVersioning.getMajor(gradleVersion) : null;
   if (major && major >= 7) {
     return '^16.0.0';
   }
@@ -68,10 +64,6 @@ export function getJavaContraint(gradleVersion: string): string | null {
   return '^11.0.0';
 }
 
-export function getJavaVersioning(): string {
-  return npmVersioning;
-}
-
 // https://regex101.com/r/IcOs7P/1
 const DISTRIBUTION_URL_REGEX = regEx(
   '^(?:distributionUrl\\s*=\\s*)(?<url>\\S*-(?<version>\\d+\\.\\d+(?:\\.\\d+)?(?:-\\w+)*)-(?<type>bin|all)\\.zip)\\s*$'
diff --git a/lib/util/exec/buildpack.ts b/lib/util/exec/buildpack.ts
index 8a456a98ca..09c94432c4 100644
--- a/lib/util/exec/buildpack.ts
+++ b/lib/util/exec/buildpack.ts
@@ -53,6 +53,11 @@ const allToolConfig: Record<string, ToolConfig> = {
     depName: 'helm/helm',
     versioning: semverVersioningId,
   },
+  java: {
+    datasource: 'adoptium-java',
+    depName: 'java',
+    versioning: npmVersioningId,
+  },
   jb: {
     datasource: 'github-releases',
     depName: 'jsonnet-bundler/jsonnet-bundler',
-- 
GitLab