From c13448c1b71c30248eac81632e853945566fcc29 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Sun, 18 Jun 2023 10:33:14 -0400 Subject: [PATCH 1/2] Collect BOM constraints automatically Closes: https://github.com/square/okio/issues/1121 --- build-support/src/main/kotlin/bom.kt | 45 ++++++++++++++++++++++++++++ okio-bom/build.gradle.kts | 11 +------ 2 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 build-support/src/main/kotlin/bom.kt diff --git a/build-support/src/main/kotlin/bom.kt b/build-support/src/main/kotlin/bom.kt new file mode 100644 index 0000000000..57f250969c --- /dev/null +++ b/build-support/src/main/kotlin/bom.kt @@ -0,0 +1,45 @@ +import org.gradle.api.Project +import org.gradle.api.artifacts.dsl.DependencyConstraintHandler +import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinJsPluginWrapper +import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper +import org.jetbrains.kotlin.gradle.plugin.KotlinTarget + +/** + * Collect all the root project's multiplatform targets and add them to the BOM. + * + * Only published subprojects are included. + * + * This supports Kotlin/Multiplatform and Kotlin/JS subprojects. + */ +fun Project.collectBomConstraints() { + val bomConstraints: DependencyConstraintHandler = dependencies.constraints + rootProject.subprojects { + val subproject = this + + subproject.plugins.withId("com.vanniktech.maven.publish.base") { + subproject.plugins.withType { + bomConstraints.api(subproject) + subproject.extensions.getByType().targets.all { + bomConstraints.api(dependencyConstraint(this)) + } + } + + subproject.plugins.withType { + bomConstraints.api(subproject) + bomConstraints.api( + dependencyConstraint(subproject.extensions.getByType().js()) + ) + } + } + } +} + +private fun Project.dependencyConstraint(target: KotlinTarget) = + "$group:$name-${target.targetName}:$version" + +private fun DependencyConstraintHandler.api(constraintNotation: Any) = + add("api", constraintNotation) diff --git a/okio-bom/build.gradle.kts b/okio-bom/build.gradle.kts index cf940b6eb7..8417d7613e 100644 --- a/okio-bom/build.gradle.kts +++ b/okio-bom/build.gradle.kts @@ -3,16 +3,7 @@ plugins { id("java-platform") } -dependencies { - constraints { - api(projects.okio) - api(projects.okioFakefilesystem) - if (kmpJsEnabled) { - // No typesafe project accessor as the accessor won't exist if kmpJs is not enabled. - api(project(":okio-nodefilesystem")) - } - } -} +collectBomConstraints() extensions.configure { publications.create("maven", MavenPublication::class) { From 5a5870d9121552c0dceb285dc07bff88c4c57b25 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Sun, 18 Jun 2023 11:22:30 -0400 Subject: [PATCH 2/2] Publish assetfilesystem --- build-support/src/main/kotlin/bom.kt | 30 ++++++++++++++++++--------- okio-assetfilesystem/build.gradle.kts | 5 ++--- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/build-support/src/main/kotlin/bom.kt b/build-support/src/main/kotlin/bom.kt index 57f250969c..0918e01c13 100644 --- a/build-support/src/main/kotlin/bom.kt +++ b/build-support/src/main/kotlin/bom.kt @@ -1,12 +1,15 @@ +import java.util.Locale import org.gradle.api.Project import org.gradle.api.artifacts.dsl.DependencyConstraintHandler import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper import org.jetbrains.kotlin.gradle.plugin.KotlinJsPluginWrapper import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget /** * Collect all the root project's multiplatform targets and add them to the BOM. @@ -21,25 +24,32 @@ fun Project.collectBomConstraints() { val subproject = this subproject.plugins.withId("com.vanniktech.maven.publish.base") { - subproject.plugins.withType { + subproject.plugins.withType { bomConstraints.api(subproject) - subproject.extensions.getByType().targets.all { - bomConstraints.api(dependencyConstraint(this)) - } } subproject.plugins.withType { bomConstraints.api(subproject) - bomConstraints.api( - dependencyConstraint(subproject.extensions.getByType().js()) - ) + } + + subproject.plugins.withType { + subproject.extensions.getByType().targets.all { + bomConstraints.api(dependencyConstraint(this)) + } } } } } -private fun Project.dependencyConstraint(target: KotlinTarget) = - "$group:$name-${target.targetName}:$version" +/** Returns a string like "com.squareup.okio:okio-iosarm64:3.4.0" for this target. */ +private fun Project.dependencyConstraint(target: KotlinTarget): String { + val artifactId = when (target) { + is KotlinMetadataTarget -> name + is KotlinJsTarget -> "$name-js" + else -> "$name-${target.targetName.toLowerCase(Locale.ROOT)}" + } + return "$group:$artifactId:$version" +} private fun DependencyConstraintHandler.api(constraintNotation: Any) = add("api", constraintNotation) diff --git a/okio-assetfilesystem/build.gradle.kts b/okio-assetfilesystem/build.gradle.kts index a31f9e32f1..3851b47ebe 100644 --- a/okio-assetfilesystem/build.gradle.kts +++ b/okio-assetfilesystem/build.gradle.kts @@ -1,5 +1,4 @@ -import com.vanniktech.maven.publish.JavadocJar.Dokka -import com.vanniktech.maven.publish.KotlinMultiplatform +import com.vanniktech.maven.publish.AndroidSingleVariantLibrary import com.vanniktech.maven.publish.MavenPublishBaseExtension plugins { @@ -31,6 +30,6 @@ dependencies { configure { configure( - KotlinMultiplatform(javadocJar = Dokka("dokkaGfm")) + AndroidSingleVariantLibrary() ) }