Skip to content

Commit 99b9b57

Browse files
authored
Merge pull request quarkusio#38148 from gastaldi/liberica
Support Liberica NIK GraalVM version parsing
2 parents 4d4f3a8 + bac4131 commit 99b9b57

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed

core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/GraalVM.java

+36-5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ static final class VersionParseHelper {
1818
private static final String JVMCI_BUILD_PREFIX = "jvmci-";
1919
private static final String MANDREL_VERS_PREFIX = "Mandrel-";
2020

21+
private static final String LIBERICA_NIK_VERS_PREFIX = "Liberica-NIK-";
22+
2123
// Java version info (suitable for Runtime.Version.parse()). See java.lang.VersionProps
2224
private static final String VNUM = "(?<VNUM>[1-9][0-9]*(?:(?:\\.0)*\\.[1-9][0-9]*)*)";
2325
private static final String PRE = "(?:-(?<PRE>[a-zA-Z0-9]+))?";
@@ -68,19 +70,47 @@ static Version parse(List<String> lines) {
6870
if (vendorVersion.contains("-dev")) {
6971
graalVersion = graalVersion + "-dev";
7072
}
71-
String mandrelVersion = mandrelVersion(vendorVersion);
72-
Distribution dist = isMandrel(vendorVersion) ? Distribution.MANDREL : Distribution.GRAALVM;
73-
String versNum = (dist == Distribution.MANDREL ? mandrelVersion : graalVersion);
73+
String versNum;
74+
Distribution dist;
75+
if (isMandrel(vendorVersion)) {
76+
dist = Distribution.MANDREL;
77+
versNum = mandrelVersion(vendorVersion);
78+
} else if (isLiberica(vendorVersion)) {
79+
dist = Distribution.LIBERICA;
80+
versNum = libericaVersion(vendorVersion);
81+
} else {
82+
dist = Distribution.GRAALVM;
83+
versNum = graalVersion;
84+
}
7485
if (versNum == null) {
7586
return UNKNOWN_VERSION;
7687
}
77-
return new Version(lines.stream().collect(Collectors.joining("\n")),
88+
return new Version(String.join("\n", lines),
7889
versNum, v, dist);
7990
} else {
8091
return UNKNOWN_VERSION;
8192
}
8293
}
8394

95+
private static boolean isLiberica(String vendorVersion) {
96+
if (vendorVersion == null) {
97+
return false;
98+
}
99+
return !vendorVersion.isBlank() && vendorVersion.startsWith(LIBERICA_NIK_VERS_PREFIX);
100+
}
101+
102+
private static String libericaVersion(String vendorVersion) {
103+
if (vendorVersion == null) {
104+
return null;
105+
}
106+
int idx = vendorVersion.indexOf(LIBERICA_NIK_VERS_PREFIX);
107+
if (idx < 0) {
108+
return null;
109+
}
110+
String version = vendorVersion.substring(idx + LIBERICA_NIK_VERS_PREFIX.length());
111+
return matchVersion(version);
112+
}
113+
84114
private static boolean isMandrel(String vendorVersion) {
85115
if (vendorVersion == null) {
86116
return false;
@@ -244,7 +274,7 @@ public static Version of(Stream<String> output) {
244274
String stringOutput = output.collect(Collectors.joining("\n"));
245275
List<String> lines = stringOutput.lines()
246276
.dropWhile(l -> !l.startsWith("GraalVM") && !l.startsWith("native-image"))
247-
.collect(Collectors.toUnmodifiableList());
277+
.toList();
248278

249279
if (lines.size() == 3) {
250280
// Attempt to parse the new 3-line version scheme first.
@@ -322,6 +352,7 @@ public boolean isJava17() {
322352

323353
enum Distribution {
324354
GRAALVM,
355+
LIBERICA,
325356
MANDREL;
326357
}
327358
}

core/deployment/src/test/java/io/quarkus/deployment/pkg/steps/GraalVMTest.java

+12
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,18 @@ static void assertVersion(Version graalVmVersion, Distribution distro, Version v
104104
}
105105
}
106106

107+
@Test
108+
public void testGraalVM21LibericaVersionParser() {
109+
Version graalVM21Dev = Version.of(Stream.of(("native-image 21.0.1 2023-10-17\n"
110+
+ "GraalVM Runtime Environment Liberica-NIK-23.1.1-1 (build 21.0.1+12-LTS)\n"
111+
+ "Substrate VM Liberica-NIK-23.1.1-1 (build 21.0.1+12-LTS, serial gc)").split("\\n")));
112+
assertThat(graalVM21Dev.distribution.name()).isEqualTo("LIBERICA");
113+
assertThat(graalVM21Dev.getVersionAsString()).isEqualTo("23.1.1");
114+
assertThat(graalVM21Dev.javaVersion.toString()).isEqualTo("21.0.1+12-LTS");
115+
assertThat(graalVM21Dev.javaVersion.feature()).isEqualTo(21);
116+
assertThat(graalVM21Dev.javaVersion.update()).isEqualTo(1);
117+
}
118+
107119
@Test
108120
public void testGraalVM21VersionParser() {
109121
Version graalVM21Dev = Version.of(Stream.of(("native-image 21 2023-09-19\n"

0 commit comments

Comments
 (0)