Build: Introduce resolveDependencies task

It is used on the build server to pre-download all dependencies and
check that verification-metadata.xml is up-to-date
 #KTI-72
This commit is contained in:
Vyacheslav Gerasimov
2023-05-03 14:37:35 +02:00
committed by Space Team
parent 7c1ffc4eb2
commit 01b6af452f
2 changed files with 82 additions and 5 deletions
+6 -5
View File
@@ -95,6 +95,7 @@ rootProject.apply {
from(rootProject.file("gradle/retryPublishing.gradle.kts"))
from(rootProject.file("gradle/modularizedTestConfigurations.gradle.kts"))
from(rootProject.file("gradle/ideaRtHack.gradle.kts"))
from(rootProject.file("gradle/resolveDependencies.gradle.kts"))
}
IdeVersionConfigurator.setCurrentIde(project)
@@ -168,11 +169,11 @@ val firCompilerCoreModules = arrayOf(
).also { extra["firCompilerCoreModules"] = it }
val firAllCompilerModules = firCompilerCoreModules +
arrayOf(
":compiler:fir:raw-fir:light-tree2fir",
":compiler:fir:analysis-tests",
":compiler:fir:analysis-tests:legacy-fir-tests"
)
arrayOf(
":compiler:fir:raw-fir:light-tree2fir",
":compiler:fir:analysis-tests",
":compiler:fir:analysis-tests:legacy-fir-tests"
)
val fe10CompilerModules = arrayOf(
":compiler",
+76
View File
@@ -0,0 +1,76 @@
import java.net.URI
import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootExtension
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension
import org.spdx.sbom.gradle.SpdxSbomExtension
/*
* When called with `--write-verification-metadata` resolves all build dependencies including implicit dependecies for all platforms and
* dependencies downloaded by plugins. Usefull to populate Gradle dependency cache or update `verification-metadata.xml` properly.
*
* `./gradlew resolveDependencies --write-verification-metadata md5,sha256`
*/
tasks.register("resolveDependencies") {
doFirst {
allprojects {
logger.info("Resolving dependencies in $this")
// resolve implicit dependencies one by one to avoid conflicts between them
configurations.implicitDependencies.get().allDependencies.forEach { implicitDependency ->
configurations.detachedConfiguration(implicitDependency).resolve()
}
plugins.withId("java-base") {
val service = project.extensions.getByType<JavaToolchainService>()
val javaExtension = extensions.getByType<JavaPluginExtension>()
service.compilerFor(javaExtension.toolchain).get()
}
project.extensions.findByType<SpdxSbomExtension>()?.run {
targets.forEach { target ->
target.configurations.get().forEach { configurationName ->
val pomDependencies = project.configurations[configurationName].incoming.resolutionResult.allComponents
.map { it.id }
.filterIsInstance<ModuleComponentIdentifier>()
.map { project.dependencies.create(it.displayName + "@pom") }
project.configurations.detachedConfiguration(*pomDependencies.toTypedArray()).resolve()
}
}
}
}
fun Project.resolveDependencies(
vararg dependency: String,
repositoryHandler: (RepositoryHandler.() -> ArtifactRepository)? = null
) {
val repo = repositoryHandler?.let { repositories.repositoryHandler() }
dependency.forEach {
configurations.detachedConfiguration(dependencies.create(it)).resolve()
}
repo?.run { repositories.remove(this) }
}
rootProject.extensions.findByType<D8RootExtension>()?.run {
project.resolveDependencies(
"google.d8:v8:linux64-rel-$version@zip",
"google.d8:v8:win64-rel-$version@zip",
"google.d8:v8:mac-arm64-rel-$version@zip",
"google.d8:v8:mac64-rel-$version@zip"
)
}
rootProject.extensions.findByType<YarnRootExtension>()?.run {
project.resolveDependencies("com.yarnpkg:yarn:$version@tar.gz") {
ivy {
url = URI(downloadBaseUrl)
patternLayout {
artifact("v[revision]/[artifact](-v[revision]).[ext]")
}
metadataSources { artifact() }
content { includeModule("com.yarnpkg", "yarn") }
}
}
}
}
}