From ac5ec2b7231b0860217584dc4ab2a3026c692ea5 Mon Sep 17 00:00:00 2001
From: Adam Setch <adam.setch@outlook.com>
Date: Tue, 4 Oct 2022 11:53:51 -0400
Subject: [PATCH] feat(java): add workaround to limit releases to java LTS
 versions (#18007)

---
 docs/usage/java.md                         | 14 ++++++++++++++
 lib/config/presets/internal/workarounds.ts | 21 +++++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/docs/usage/java.md b/docs/usage/java.md
index 164868f745..9b7b5e209c 100644
--- a/docs/usage/java.md
+++ b/docs/usage/java.md
@@ -8,6 +8,20 @@ description: Java versions support in Renovate
 Renovate can update Gradle and Maven dependencies.
 This includes libraries and plugins as well as the Gradle Wrapper.
 
+## LTS releases
+
+The `config:base` preset includes the `workarounds:javaLTSVersions` preset.
+The workaround limits Renovate to upgrade to LTS versions of the Java runtime only.
+
+If you want Renovate to offer all `major` Java updates then add `workarounds:javaLTSVersions` to the `ignorePreset` array:
+
+```
+{
+  "extends": ["config:base"],
+  "ignorePresets": ["workarounds:javaLTSVersions"]
+}
+```
+
 ## Gradle
 
 Renovate detects versions that are specified in a string `'group:artifact:version'` and those specified in a map `(group:groupName, name:ArtifactName, version:Version)`.
diff --git a/lib/config/presets/internal/workarounds.ts b/lib/config/presets/internal/workarounds.ts
index 0e9c2028d5..5ce11b2c73 100644
--- a/lib/config/presets/internal/workarounds.ts
+++ b/lib/config/presets/internal/workarounds.ts
@@ -14,6 +14,7 @@ export const presets: Record<string, Preset> = {
       'workarounds:reduceRepologyServerLoad',
       'workarounds:doNotUpgradeFromAlpineStableToEdge',
       'workarounds:supportRedHatImageVersion',
+      'workarounds:javaLTSVersions',
     ],
     ignoreDeps: [],
   },
@@ -118,4 +119,24 @@ export const presets: Record<string, Preset> = {
       },
     ],
   },
+  javaLTSVersions: {
+    description: 'Limit Java runtime versions to LTS releases',
+    packageRules: [
+      {
+        description:
+          'Limit Java runtime versions to LTS releases. To receive all major releases add `javaLTSVersions` to the `ignorePresets` array.',
+        matchDatasources: ['docker', 'adoptium-java'],
+        matchPackageNames: [
+          'eclipse-temurin',
+          'amazoncorretto',
+          'adoptopenjdk',
+          'openjdk',
+          'java',
+        ],
+        versioning:
+          'regex:^(?<major>\\d+)?(\\.(?<minor>\\d+))?(\\.(?<patch>\\d+))?([\\._+](?<build>\\d+))?(-(?<compatibility>.*))?$',
+        allowedVersions: '/^(?:8|11|17|21|25|29)(?:\\.|$)/',
+      },
+    ],
+  },
 };
-- 
GitLab