-
Notifications
You must be signed in to change notification settings - Fork 356
feat(GradleInspector): Custom JDK bootstrap download #11039
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
|
|
||
|
|
@@ -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
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. There was a problem hiding this comment. Choose a reason for hiding this commentThe 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: 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 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I was meaning without the need to run ORT. There was a problem hiding this comment. Choose a reason for hiding this commentThe 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." } | ||
|
|
@@ -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) | ||
| } | ||
| } | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is the feature designed so that the
javaVersionis actually required? The version only seem to be used to name the download directory, which is not strictly necessary. Not requiring thejavaVersionto be set would make this more similar to settingjavaHome, which also does not require the version.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed the logic to use a unique hashed directory for all cases, so the download function will always generate a directory based on the URL passed, whether from Disco or custom