|
@@ -11,7 +11,6 @@ package org.elasticsearch.gradle.internal.toolchain;
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
|
-import org.apache.commons.compress.utils.Lists;
|
|
|
import org.gradle.jvm.toolchain.JavaLanguageVersion;
|
|
|
import org.gradle.jvm.toolchain.JavaToolchainDownload;
|
|
|
import org.gradle.jvm.toolchain.JavaToolchainRequest;
|
|
@@ -21,17 +20,17 @@ import java.io.FileNotFoundException;
|
|
|
import java.io.IOException;
|
|
|
import java.net.URI;
|
|
|
import java.net.URL;
|
|
|
-import java.util.Comparator;
|
|
|
import java.util.Map;
|
|
|
import java.util.Optional;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.stream.StreamSupport;
|
|
|
|
|
|
import static org.gradle.jvm.toolchain.JavaToolchainDownload.fromUri;
|
|
|
|
|
|
public abstract class AdoptiumJdkToolchainResolver extends AbstractCustomJavaToolchainResolver {
|
|
|
|
|
|
// package protected for better testing
|
|
|
- final Map<AdoptiumVersionRequest, Optional<AdoptiumVersionInfo>> CACHED_SEMVERS = new ConcurrentHashMap<>();
|
|
|
+ final Map<AdoptiumVersionRequest, Optional<String>> CACHED_RELEASES = new ConcurrentHashMap<>();
|
|
|
|
|
|
@Override
|
|
|
public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
|
|
@@ -39,7 +38,7 @@ public abstract class AdoptiumJdkToolchainResolver extends AbstractCustomJavaToo
|
|
|
return Optional.empty();
|
|
|
}
|
|
|
AdoptiumVersionRequest versionRequestKey = toVersionRequest(request);
|
|
|
- Optional<AdoptiumVersionInfo> versionInfo = CACHED_SEMVERS.computeIfAbsent(
|
|
|
+ Optional<String> versionInfo = CACHED_RELEASES.computeIfAbsent(
|
|
|
versionRequestKey,
|
|
|
(r) -> resolveAvailableVersion(versionRequestKey)
|
|
|
);
|
|
@@ -54,12 +53,12 @@ public abstract class AdoptiumJdkToolchainResolver extends AbstractCustomJavaToo
|
|
|
return new AdoptiumVersionRequest(platform, arch, javaLanguageVersion);
|
|
|
}
|
|
|
|
|
|
- private Optional<AdoptiumVersionInfo> resolveAvailableVersion(AdoptiumVersionRequest requestKey) {
|
|
|
+ private Optional<String> resolveAvailableVersion(AdoptiumVersionRequest requestKey) {
|
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
|
try {
|
|
|
int languageVersion = requestKey.languageVersion.asInt();
|
|
|
URL source = new URL(
|
|
|
- "https://api.adoptium.net/v3/info/release_versions?architecture="
|
|
|
+ "https://api.adoptium.net/v3/info/release_names?architecture="
|
|
|
+ requestKey.arch
|
|
|
+ "&image_type=jdk&os="
|
|
|
+ requestKey.platform
|
|
@@ -71,14 +70,8 @@ public abstract class AdoptiumJdkToolchainResolver extends AbstractCustomJavaToo
|
|
|
+ ")"
|
|
|
);
|
|
|
JsonNode jsonNode = mapper.readTree(source);
|
|
|
- JsonNode versionsNode = jsonNode.get("versions");
|
|
|
- return Optional.of(
|
|
|
- Lists.newArrayList(versionsNode.iterator())
|
|
|
- .stream()
|
|
|
- .map(this::toVersionInfo)
|
|
|
- .max(Comparator.comparing(AdoptiumVersionInfo::semver))
|
|
|
- .get()
|
|
|
- );
|
|
|
+ JsonNode versionsNode = jsonNode.get("releases");
|
|
|
+ return StreamSupport.stream(versionsNode.spliterator(), false).map(JsonNode::textValue).findFirst();
|
|
|
} catch (FileNotFoundException e) {
|
|
|
// request combo not supported (e.g. aarch64 + windows
|
|
|
return Optional.empty();
|
|
@@ -87,21 +80,10 @@ public abstract class AdoptiumJdkToolchainResolver extends AbstractCustomJavaToo
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private AdoptiumVersionInfo toVersionInfo(JsonNode node) {
|
|
|
- return new AdoptiumVersionInfo(
|
|
|
- node.get("build").asInt(),
|
|
|
- node.get("major").asInt(),
|
|
|
- node.get("minor").asInt(),
|
|
|
- node.get("openjdk_version").asText(),
|
|
|
- node.get("security").asInt(),
|
|
|
- node.get("semver").asText()
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- private URI resolveDownloadURI(AdoptiumVersionRequest request, AdoptiumVersionInfo versionInfo) {
|
|
|
+ private URI resolveDownloadURI(AdoptiumVersionRequest request, String version) {
|
|
|
return URI.create(
|
|
|
- "https://api.adoptium.net/v3/binary/version/jdk-"
|
|
|
- + versionInfo.semver
|
|
|
+ "https://api.adoptium.net/v3/binary/version/"
|
|
|
+ + version
|
|
|
+ "/"
|
|
|
+ request.platform
|
|
|
+ "/"
|
|
@@ -118,7 +100,5 @@ public abstract class AdoptiumJdkToolchainResolver extends AbstractCustomJavaToo
|
|
|
return anyVendorOr(request.getJavaToolchainSpec().getVendor().get(), JvmVendorSpec.ADOPTIUM);
|
|
|
}
|
|
|
|
|
|
- record AdoptiumVersionInfo(int build, int major, int minor, String openjdkVersion, int security, String semver) {}
|
|
|
-
|
|
|
record AdoptiumVersionRequest(String platform, String arch, JavaLanguageVersion languageVersion) {}
|
|
|
}
|