Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions utils/ort/src/main/kotlin/JavaBootstrapper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@
package org.ossreviewtoolkit.utils.ort

import java.io.File
import java.security.MessageDigest

import kotlin.text.toByteArray
import kotlin.time.measureTime
import kotlin.time.measureTimedValue

Expand Down Expand Up @@ -131,7 +133,20 @@ object JavaBootstrapper {
return Result.failure(it)
}

val installDir = (ortToolsDirectory / "jdks" / pkg.distribution / pkg.distributionVersion)
return downloadJdk(pkg.links.pkgDownloadRedirect)
}

/**
* Download the resolved JDK Url and return its directory on success, or an exception on failure.
*/
fun downloadJdk(sdkUrl: String): Result<File> {
val safeHash =
MessageDigest.getInstance("SHA-256")
.digest(sdkUrl.toByteArray())
.joinToString("") { "%02x".format(it) }
.take(16)
Comment on lines +143 to +147
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I liked the fact that you previously could tell from the JDK directory what distribution / version it is. Maybe that's not a strictly needed feature, but I'd like @oss-review-toolkit/tsc to share their views here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, that was redundant information, since you already know which SDK is there anyway:
Example:

13:25:00.020 [DefaultDispatcher-worker-1] INFO  org.gradle.tooling.ModelBuilder - Setting Java home for project analysis to '.../.ort/tools/jdks/c00aa1a4c19d36aa/jdk-17.0.17+10/Contents/Home'.

So, Java 17.0.17+10 is there, and anticipating the next question, why not use the direct JDK directory? It's because the jdk-170.17+10 will be the same unpacked dir from any of the archs, but he url diffs.

You can arg to add maybe the architecture if you have different "runners" with shared home folder, but then is a very specific corner case

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, that was redundant information, since you already know which SDK is there anyway:

I was meaning without the need to run ORT.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But the directory is there, one folder below. What could be done is taking the actual last path from the url minus tar.gz, but then it's not fun and always error-prone to manipulate urls that can come with, for example, a + in the path.


val installDir = (ortToolsDirectory / "jdks" / safeHash)
.apply {
if (isDirectory) {
logger.info { "Not downloading the JDK again as the directory '$this' already exists." }
Expand All @@ -141,11 +156,10 @@ object JavaBootstrapper {
safeMkdirs()
}

val url = pkg.links.pkgDownloadRedirect
logger.info { "Downloading the JDK package from $url..." }
logger.info { "Downloading the JDK package from $sdkUrl..." }

val (archive, downloadDuration) = measureTimedValue {
okHttpClient.downloadFile(url, installDir).getOrElse {
okHttpClient.downloadFile(sdkUrl, installDir).getOrElse {
return Result.failure(it)
}
}
Expand Down