01b6af452f
It is used on the build server to pre-download all dependencies and check that verification-metadata.xml is up-to-date #KTI-72
76 lines
3.2 KiB
Kotlin
76 lines
3.2 KiB
Kotlin
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") }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |