Skip to content

Commit aef7740

Browse files
committed
Support UBI 9 Java 25 images
1 parent 77e71ff commit aef7740

File tree

6 files changed

+61
-18
lines changed

6 files changed

+61
-18
lines changed

core/deployment/src/main/java/io/quarkus/deployment/images/ContainerImages.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.quarkus.deployment.images;
22

33
import io.quarkus.deployment.pkg.builditem.CompiledJavaVersionBuildItem;
4+
import io.quarkus.deployment.pkg.builditem.CompiledJavaVersionBuildItem.JavaVersion.Status;
45

56
/**
67
* This class is used to define the container images that are used by Quarkus.
@@ -33,12 +34,12 @@ public class ContainerImages {
3334
/**
3435
* Version used for more UBI9 Java images.
3536
*/
36-
public static final String UBI9_JAVA_VERSION = "1.23";
37+
public static final String UBI9_JAVA_VERSION = "1.24";
3738

3839
/**
3940
* Version uses for the native builder image.
4041
*/
41-
public static final String NATIVE_BUILDER_VERSION = "jdk-21";
42+
public static final String NATIVE_BUILDER_VERSION = "jdk-25";
4243

4344
// === Runtime images for containers (native)
4445

@@ -89,6 +90,11 @@ public class ContainerImages {
8990
public static final String UBI9_JAVA_21_VERSION = UBI9_JAVA_VERSION;
9091
public static final String UBI9_JAVA_21 = UBI9_JAVA_21_IMAGE_NAME + ":" + UBI9_JAVA_21_VERSION;
9192

93+
// UBI 9 OpenJDK 25 Runtime - https://catalog.redhat.com/en/software/containers/ubi9/openjdk-25-runtime/69204990c46419100ce30a5b
94+
public static final String UBI9_JAVA_25_IMAGE_NAME = "registry.access.redhat.com/ubi9/openjdk-25-runtime";
95+
public static final String UBI9_JAVA_25_VERSION = UBI9_JAVA_VERSION;
96+
public static final String UBI9_JAVA_25 = UBI9_JAVA_25_IMAGE_NAME + ":" + UBI9_JAVA_25_VERSION;
97+
9298
// === Source To Image images
9399

94100
// UBI 8 Quarkus Binary Source To Image - https://quay.io/repository/quarkus/ubi-quarkus-native-binary-s2i?tab=tags
@@ -118,6 +124,11 @@ public class ContainerImages {
118124
public static final String S2I_JAVA_21_VERSION = UBI9_JAVA_VERSION;
119125
public static final String S2I_JAVA_21 = S2I_JAVA_21_IMAGE_NAME + ":" + S2I_JAVA_21_VERSION;
120126

127+
// Java Source To Image - https://catalog.redhat.com/en/software/containers/ubi9/openjdk-25/69204893fc0d23c633bf5c29
128+
public static final String S2I_JAVA_25_IMAGE_NAME = "registry.access.redhat.com/ubi9/openjdk-25";
129+
public static final String S2I_JAVA_25_VERSION = UBI9_JAVA_VERSION;
130+
public static final String S2I_JAVA_25 = S2I_JAVA_25_IMAGE_NAME + ":" + S2I_JAVA_25_VERSION;
131+
121132
// === Native Builder images
122133

123134
// Mandrel Builder Image - https://quay.io/repository/quarkus/ubi-quarkus-mandrel-builder-image?tab=tags
@@ -141,11 +152,14 @@ public class ContainerImages {
141152
public static final String UBI9_GRAALVM_BUILDER = UBI9_GRAALVM_BUILDER_IMAGE_NAME + ":" + UBI9_GRAALVM_BUILDER_VERSION;
142153

143154
public static String getDefaultJvmImage(CompiledJavaVersionBuildItem.JavaVersion version) {
144-
switch (version.isJava21OrHigher()) {
145-
case TRUE:
146-
return UBI9_JAVA_21;
147-
default:
148-
return UBI9_JAVA_17;
155+
if (version.isJava25OrHigher() == Status.TRUE) {
156+
return UBI9_JAVA_25;
149157
}
158+
159+
if (version.isJava21OrHigher() == Status.TRUE) {
160+
return UBI9_JAVA_21;
161+
}
162+
163+
return UBI9_JAVA_17;
150164
}
151165
}

core/deployment/src/main/java/io/quarkus/deployment/pkg/builditem/CompiledJavaVersionBuildItem.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public JavaVersion getJavaVersion() {
2929

3030
public interface JavaVersion {
3131

32+
Status isJava25OrHigher();
33+
3234
Status isJava21OrHigher();
3335

3436
Status isJava19OrHigher();
@@ -44,6 +46,11 @@ final class Unknown implements JavaVersion {
4446
Unknown() {
4547
}
4648

49+
@Override
50+
public Status isJava25OrHigher() {
51+
return Status.UNKNOWN;
52+
}
53+
4754
@Override
4855
public Status isJava21OrHigher() {
4956
return Status.UNKNOWN;
@@ -59,6 +66,7 @@ final class Known implements JavaVersion {
5966

6067
private static final int JAVA_19_MAJOR = 63;
6168
private static final int JAVA_21_MAJOR = 65;
69+
private static final int JAVA_25_MAJOR = 69;
6270

6371
private final int determinedMajor;
6472

@@ -76,6 +84,11 @@ public Status isJava21OrHigher() {
7684
return higherOrEqualStatus(JAVA_21_MAJOR);
7785
}
7886

87+
@Override
88+
public Status isJava25OrHigher() {
89+
return higherOrEqualStatus(JAVA_25_MAJOR);
90+
}
91+
7992
private Status higherOrEqualStatus(int javaMajor) {
8093
return determinedMajor >= javaMajor ? Status.TRUE : Status.FALSE;
8194
}

core/deployment/src/test/java/io/quarkus/deployment/pkg/NativeConfigTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ class NativeConfigTest {
99
@Test
1010
public void testBuilderImageProperlyDetected() {
1111
assertThat(createConfig("graalvm").builderImage().getEffectiveImage()).contains("ubi9-quarkus-graalvmce-builder-image")
12-
.contains("jdk-21");
12+
.contains("jdk-25");
1313
assertThat(createConfig("GraalVM").builderImage().getEffectiveImage()).contains("ubi9-quarkus-graalvmce-builder-image")
14-
.contains("jdk-21");
14+
.contains("jdk-25");
1515
assertThat(createConfig("GraalVM").builderImage().getEffectiveImage()).contains("ubi9-quarkus-graalvmce-builder-image")
16-
.contains("jdk-21");
16+
.contains("jdk-25");
1717
assertThat(createConfig("GRAALVM").builderImage().getEffectiveImage()).contains("ubi9-quarkus-graalvmce-builder-image")
18-
.contains("jdk-21");
18+
.contains("jdk-25");
1919

2020
assertThat(createConfig("mandrel").builderImage().getEffectiveImage()).contains("ubi9-quarkus-mandrel-builder-image")
21-
.contains("jdk-21");
21+
.contains("jdk-25");
2222
assertThat(createConfig("Mandrel").builderImage().getEffectiveImage()).contains("ubi9-quarkus-mandrel-builder-image")
23-
.contains("jdk-21");
23+
.contains("jdk-25");
2424
assertThat(createConfig("MANDREL").builderImage().getEffectiveImage()).contains("ubi9-quarkus-mandrel-builder-image")
25-
.contains("jdk-21");
25+
.contains("jdk-25");
2626

2727
assertThat(createConfig("aRandomString").builderImage().getEffectiveImage()).isEqualTo("aRandomString");
2828
}

extensions/container-image/container-image-openshift/deployment/src/main/java/io/quarkus/container/image/openshift/deployment/ContainerImageOpenshiftConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ public interface ContainerImageOpenshiftConfig {
2929
public static final String FALLBACK_NATIVE_BINARY_DIRECTORY = "/home/quarkus/";
3030

3131
public static String getDefaultJvmImage(CompiledJavaVersionBuildItem.JavaVersion version) {
32+
if (version.isJava25OrHigher() == CompiledJavaVersionBuildItem.JavaVersion.Status.TRUE) {
33+
return ContainerImages.S2I_JAVA_25;
34+
}
3235
if (version.isJava21OrHigher() == CompiledJavaVersionBuildItem.JavaVersion.Status.TRUE) {
3336
return ContainerImages.S2I_JAVA_21;
3437
}

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/project/JavaVersion.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ public String toString() {
6666
}
6767

6868
// ordering is important here, so let's keep them ordered
69-
public static final SortedSet<Integer> JAVA_VERSIONS_LTS = new TreeSet<>(List.of(17, 21));
69+
public static final SortedSet<Integer> JAVA_VERSIONS_LTS = new TreeSet<>(List.of(17, 21, 25));
7070
public static final int DEFAULT_JAVA_VERSION = 17;
7171
// we want to maximize the compatibility of extensions with the Quarkus ecosystem so let's stick to 17 by default
7272
public static final String DEFAULT_JAVA_VERSION_FOR_EXTENSION = "17";
73-
public static final int MAX_LTS_SUPPORTED_BY_KOTLIN = 21;
73+
public static final int MAX_LTS_SUPPORTED_BY_KOTLIN = 25;
7474
public static final String DETECT_JAVA_RUNTIME_VERSION = "<<detect java runtime version>>";
7575
public static final Pattern JAVA_VERSION_PATTERN = Pattern.compile("(\\d+)(?:\\..*)?");
7676

independent-projects/tools/devtools-common/src/test/java/io/quarkus/devtools/project/JavaVersionTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,21 @@ public void givenJavaVersion21ShouldReturn21() {
3535
assertEquals("21", computeJavaVersion(JAVA, "21"));
3636
}
3737

38+
@Test
39+
public void givenJavaVersion26ShouldReturn25() {
40+
assertEquals("25", computeJavaVersion(JAVA, "26.0.1"));
41+
}
42+
43+
@Test
44+
public void givenJavaVersion25ShouldReturn25() {
45+
assertEquals("25", computeJavaVersion(JAVA, "25"));
46+
}
47+
3848
@Test
3949
void shouldProperlyUseMinJavaVersion() {
40-
assertThat(getCompatibleLTSVersions(new JavaVersion("17"))).containsExactly(17, 21);
41-
assertThat(getCompatibleLTSVersions(new JavaVersion("21"))).containsExactly(21);
50+
assertThat(getCompatibleLTSVersions(new JavaVersion("17"))).containsExactly(17, 21, 25);
51+
assertThat(getCompatibleLTSVersions(new JavaVersion("21"))).containsExactly(21, 25);
52+
assertThat(getCompatibleLTSVersions(new JavaVersion("25"))).containsExactly(25);
4253
assertThat(getCompatibleLTSVersions(new JavaVersion("100"))).isEmpty();
4354
assertThat(getCompatibleLTSVersions(JavaVersion.NA)).isEqualTo(JAVA_VERSIONS_LTS);
4455
}
@@ -55,6 +66,8 @@ public void testDetermineBestLtsVersion() {
5566
assertEquals(17, determineBestJavaLtsVersion(18));
5667
assertEquals(21, determineBestJavaLtsVersion(21));
5768
assertEquals(21, determineBestJavaLtsVersion(22));
69+
assertEquals(25, determineBestJavaLtsVersion(25));
70+
assertEquals(25, determineBestJavaLtsVersion(26));
5871
}
5972

6073
@Test

0 commit comments

Comments
 (0)