From 5e39bb97a00218163fa5184301362c8d95fa1181 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Mon, 15 May 2023 12:26:21 +0200 Subject: [PATCH] Download d8 using configuration to make use of Gradle dependency caching #KTI-72 --- gradle/verification-metadata.xml | 12 +++++++++ .../kotlin/gradle/targets/js/d8/D8Env.kt | 3 ++- .../gradle/targets/js/d8/D8RootExtension.kt | 3 ++- .../gradle/targets/js/d8/D8RootPlugin.kt | 27 ++++++++++++++----- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 60cc42ea903..fce51e89e61 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -2654,6 +2654,18 @@ + + + + + + + + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8Env.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8Env.kt index 2d9212e5bde..68706cef86c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8Env.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8Env.kt @@ -10,5 +10,6 @@ data class D8Env( val targetPath: File, val executablePath: File, val isWindows: Boolean, - val downloadUrl: URL + val downloadUrl: URL, + val ivyDependency: String ) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt index 8bfba18a215..8832fee679c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt @@ -60,7 +60,8 @@ open class D8RootExtension(@Transient val rootProject: Project) : ConfigurationP targetPath = targetPath, executablePath = targetPath.resolve(if (isWindows) "d8.exe" else "d8"), isWindows = isWindows, - downloadUrl = URL("${downloadBaseUrl.trimEnd('/')}/$requiredZipName"), + downloadUrl = URL(downloadBaseUrl), + ivyDependency = "google.d8:v8:${D8Platform.platform}-$edition-$version@zip" ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootPlugin.kt index c057d710687..b35a2b945f3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootPlugin.kt @@ -5,16 +5,17 @@ package org.jetbrains.kotlin.gradle.targets.js.d8 -import de.undercouch.gradle.tasks.download.Download import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.BasePlugin import org.gradle.api.tasks.Copy +import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.targets.js.MultiplePluginDeclarationDetector import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootExtension.Companion.EXTENSION_NAME import org.jetbrains.kotlin.gradle.tasks.CleanDataTask import org.jetbrains.kotlin.gradle.tasks.registerTask + open class D8RootPlugin : Plugin { override fun apply(project: Project) { MultiplePluginDeclarationDetector.detect(project) @@ -27,13 +28,27 @@ open class D8RootPlugin : Plugin { val settings = project.extensions.create(EXTENSION_NAME, D8RootExtension::class.java, project) - val downloadTask = project.registerTask("${TASKS_GROUP_NAME}Download") { - val env = settings.requireConfigured() + project.gradle.projectsEvaluated { + val downloadUrl = settings.requireConfigured().downloadUrl + project.repositories.ivy { repo -> + repo.name = "D8 Distributions at $downloadUrl" + repo.url = downloadUrl.toURI() + repo.patternLayout { + it.artifact("[artifact]-[revision].[ext]") + } + repo.metadataSources { it.artifact() } + repo.content { it.includeModule("google.d8", "v8") } + } + } + + val downloadTask = project.registerTask("${TASKS_GROUP_NAME}Download") { it.group = TASKS_GROUP_NAME - it.src(env.downloadUrl) - it.dest(env.zipPath) - it.overwrite(false) it.description = "Download local d8 version" + + val env = settings.requireConfigured() + val configuration = project.configurations.detachedConfiguration(project.dependencies.create(env.ivyDependency)) + it.from(project.provider { configuration.singleFile }) + it.into(env.zipPath.parentFile) } project.registerTask(INSTALL_TASK_NAME) {