blob: 79e1c91c7b906721da0f60b52d87433529e7a9f8 [file] [log] [blame] [edit]
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") }
}
}
}
}
}