diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e35bde84c..a2a8ef658c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,8 @@ Breaking: non-null if it's detached due to exception. -`Content.awaitContent()` now accepts an optional `Int` parameter for the number of updates to observe before the function returns. +- MacOS targets have been (temporarily) removed from all modules. + ## [0.11.0] - 2024-05-15 [0.11.0]: https://github.com/cashapp/redwood/releases/tag/0.11.0 diff --git a/build-support/src/main/kotlin/app/cash/redwood/buildsupport/KmpTargets.kt b/build-support/src/main/kotlin/app/cash/redwood/buildsupport/KmpTargets.kt deleted file mode 100644 index f2f19a2286..0000000000 --- a/build-support/src/main/kotlin/app/cash/redwood/buildsupport/KmpTargets.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2023 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:JvmName("KmpTargets") - -package app.cash.redwood.buildsupport - -import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension - -@JvmOverloads -fun addAllTargets(project: Project, skipJs: Boolean = false) { - project.plugins.withId("org.jetbrains.kotlin.multiplatform") { - project.extensions.getByType(KotlinMultiplatformExtension::class.java).apply { - if (project.plugins.hasPlugin("com.android.library")) { - androidTarget { - publishLibraryVariants("release") - } - } - - if (!skipJs) { - js { - browser() - } - } - - iosArm64() - iosX64() - iosSimulatorArm64() - - jvm() - - macosArm64() - macosX64() - - // This will happen by default, but we explicitly invoke it so that projects can add custom - // source sets that depend on the ones produced as a result of these defaults. - applyDefaultHierarchyTemplate() - } - } -} diff --git a/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildExtension.kt b/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildExtension.kt index f57663b3d4..00a4df51cc 100644 --- a/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildExtension.kt +++ b/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildExtension.kt @@ -16,6 +16,8 @@ package app.cash.redwood.buildsupport interface RedwoodBuildExtension { + fun targets(group: TargetGroup) + /** Add the Compose compiler plugin. */ fun composeCompiler() @@ -39,3 +41,27 @@ interface RedwoodBuildExtension { /** Consume a Zipline application in an Android application and embed it within assets. */ fun embedZiplineApplication(dependencyNotation: Any) } + +enum class TargetGroup { + /** Common targets supported by core modules which are not specific to any platform. */ + Common, + + /** Same as [Common], but with an additional Android target rather than relying on JVM. */ + CommonWithAndroid, + + /** Tooling only runs on the JVM. */ + Tooling, + + /** All toolkit targets for common modules. Includes JVM but not Android. */ + ToolkitAllWithoutAndroid, + ToolkitAndroid, + ToolkitIos, + ToolkitHtml, + ToolkitComposeUi, + + /** Guest code which runs inside Treehouse. This also includes the JVM for easier testing. */ + TreehouseGuest, + + /** Host code which supports loading Treehouse guest code. */ + TreehouseHost, +} diff --git a/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildPlugin.kt b/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildPlugin.kt index 5f043a3b9c..2cc581d9c1 100644 --- a/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildPlugin.kt +++ b/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildPlugin.kt @@ -15,6 +15,16 @@ */ package app.cash.redwood.buildsupport +import app.cash.redwood.buildsupport.TargetGroup.Common +import app.cash.redwood.buildsupport.TargetGroup.CommonWithAndroid +import app.cash.redwood.buildsupport.TargetGroup.Tooling +import app.cash.redwood.buildsupport.TargetGroup.ToolkitAllWithoutAndroid +import app.cash.redwood.buildsupport.TargetGroup.ToolkitAndroid +import app.cash.redwood.buildsupport.TargetGroup.ToolkitComposeUi +import app.cash.redwood.buildsupport.TargetGroup.ToolkitHtml +import app.cash.redwood.buildsupport.TargetGroup.ToolkitIos +import app.cash.redwood.buildsupport.TargetGroup.TreehouseGuest +import app.cash.redwood.buildsupport.TargetGroup.TreehouseHost import com.android.build.api.variant.AndroidComponentsExtension import com.android.build.gradle.BaseExtension import com.diffplug.gradle.spotless.SpotlessExtension @@ -276,6 +286,73 @@ class RedwoodBuildPlugin : Plugin { } private class RedwoodBuildExtensionImpl(private val project: Project) : RedwoodBuildExtension { + override fun targets(group: TargetGroup) { + when (group) { + Common -> { + project.applyKotlinMultiplatform { + iosTargets() + js().browser() + jvm() + } + } + CommonWithAndroid -> { + project.plugins.apply("com.android.library") + project.applyKotlinMultiplatform { + androidTarget().publishLibraryVariants("release") + iosTargets() + js().browser() + jvm() + } + } + Tooling -> { + project.plugins.apply("org.jetbrains.kotlin.jvm") + } + ToolkitAllWithoutAndroid -> { + project.applyKotlinMultiplatform { + iosTargets() + js().browser() + jvm() + } + } + ToolkitAndroid -> { + project.plugins.apply("com.android.library") + project.plugins.apply("org.jetbrains.kotlin.android") + } + ToolkitIos -> { + project.applyKotlinMultiplatform { + iosTargets() + } + } + ToolkitHtml -> { + project.applyKotlinMultiplatform { + js().browser() + } + } + ToolkitComposeUi -> { + project.plugins.apply("com.android.library") + project.applyKotlinMultiplatform { + androidTarget().publishLibraryVariants("release") + iosTargets() + jvm() + } + } + TreehouseGuest -> { + project.applyKotlinMultiplatform { + js().nodejs() + jvm() // For easier testing. + } + } + TreehouseHost -> { + project.plugins.apply("com.android.library") + project.applyKotlinMultiplatform { + androidTarget().publishLibraryVariants("release") + iosTargets() + jvm() + } + } + } + } + override fun composeCompiler() { project.plugins.apply(ComposePlugin::class.java) } @@ -506,3 +583,16 @@ private fun Project.withKotlinPlugins(block: KotlinProjectExtension.() -> Unit) pluginManager.withPlugin("org.jetbrains.kotlin.jvm", handler) pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform", handler) } + +private fun Project.applyKotlinMultiplatform(block: KotlinMultiplatformExtension.() -> Unit) { + pluginManager.apply("org.jetbrains.kotlin.multiplatform") + val kotlin = extensions.getByType(KotlinMultiplatformExtension::class.java) + kotlin.block() + kotlin.applyDefaultHierarchyTemplate() +} + +private fun KotlinMultiplatformExtension.iosTargets() { + iosArm64() + iosSimulatorArm64() + iosX64() +} diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index cd2c4f1220..6405f6001c 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -2300,7 +2300,7 @@ source-map-loader@4.0.1: iconv-lite "^0.6.3" source-map-js "^1.0.2" -source-map-support@~0.5.20: +source-map-support@0.5.21, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== diff --git a/redwood-compose/build.gradle b/redwood-compose/build.gradle index 804de947f8..4932508b39 100644 --- a/redwood-compose/build.gradle +++ b/redwood-compose/build.gradle @@ -1,17 +1,14 @@ import app.cash.redwood.buildsupport.ComposeHelpers -import app.cash.redwood.buildsupport.KmpTargets -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'com.android.library' +import static app.cash.redwood.buildsupport.TargetGroup.CommonWithAndroid redwoodBuild { + targets(CommonWithAndroid) composeCompiler() publishing() } kotlin { - KmpTargets.addAllTargets(project) - sourceSets { commonMain { kotlin.srcDir(ComposeHelpers.get(tasks, 'app.cash.redwood.compose')) diff --git a/redwood-composeui/build.gradle b/redwood-composeui/build.gradle index 8645d5211e..b275f51c4a 100644 --- a/redwood-composeui/build.gradle +++ b/redwood-composeui/build.gradle @@ -1,16 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.multiplatform' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitComposeUi redwoodBuild { + targets(ToolkitComposeUi) composeCompiler() publishing() } kotlin { - KmpTargets.addAllTargets(project, true /* skipJs */) - sourceSets { commonMain { dependencies { diff --git a/redwood-layout-api/build.gradle b/redwood-layout-api/build.gradle index 115eadf4f1..89ab07ce03 100644 --- a/redwood-layout-api/build.gradle +++ b/redwood-layout-api/build.gradle @@ -1,16 +1,14 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) composeCompiler() publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-layout-compose/build.gradle b/redwood-layout-compose/build.gradle index 66d6f03bf5..845fa3c3eb 100644 --- a/redwood-layout-compose/build.gradle +++ b/redwood-layout-compose/build.gradle @@ -1,15 +1,13 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'app.cash.redwood.generator.compose' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'app.cash.redwood.generator.compose' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-layout-composeui/build.gradle b/redwood-layout-composeui/build.gradle index 0e6c4f1a9d..ede57d2543 100644 --- a/redwood-layout-composeui/build.gradle +++ b/redwood-layout-composeui/build.gradle @@ -1,19 +1,17 @@ import app.cash.redwood.buildsupport.FlexboxHelpers -import app.cash.redwood.buildsupport.KmpTargets -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'app.cash.paparazzi' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitComposeUi redwoodBuild { + targets(ToolkitComposeUi) composeCompiler() publishing() } -kotlin { - KmpTargets.addAllTargets(project, true /* skipJs */) +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'app.cash.paparazzi' +kotlin { sourceSets { commonMain { kotlin.srcDir(FlexboxHelpers.get(tasks, 'app.cash.redwood.layout.composeui').get()) diff --git a/redwood-layout-dom/build.gradle b/redwood-layout-dom/build.gradle index 0c88acc6fb..d567a876d4 100644 --- a/redwood-layout-dom/build.gradle +++ b/redwood-layout-dom/build.gradle @@ -1,14 +1,11 @@ -apply plugin: 'org.jetbrains.kotlin.multiplatform' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitHtml redwoodBuild { + targets(ToolkitHtml) publishing() } kotlin { - js { - browser() - } - sourceSets { commonMain { dependencies { diff --git a/redwood-layout-modifiers/build.gradle b/redwood-layout-modifiers/build.gradle index 681e72d14a..937c5d4996 100644 --- a/redwood-layout-modifiers/build.gradle +++ b/redwood-layout-modifiers/build.gradle @@ -1,15 +1,13 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'app.cash.redwood.generator.modifiers' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'app.cash.redwood.generator.modifiers' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-layout-schema/build.gradle b/redwood-layout-schema/build.gradle index 927c8dad74..b64b9e382f 100644 --- a/redwood-layout-schema/build.gradle +++ b/redwood-layout-schema/build.gradle @@ -1,10 +1,12 @@ -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'app.cash.redwood.schema' +import static app.cash.redwood.buildsupport.TargetGroup.Tooling redwoodBuild { + targets(Tooling) publishing() } +apply plugin: 'app.cash.redwood.schema' + dependencies { api projects.redwoodLayoutApi } diff --git a/redwood-layout-shared-test/build.gradle b/redwood-layout-shared-test/build.gradle index fd0bda475b..c7a93b009f 100644 --- a/redwood-layout-shared-test/build.gradle +++ b/redwood-layout-shared-test/build.gradle @@ -1,10 +1,10 @@ -import app.cash.redwood.buildsupport.KmpTargets +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitAllWithoutAndroid -apply plugin: 'org.jetbrains.kotlin.multiplatform' +redwoodBuild { + targets(ToolkitAllWithoutAndroid) +} kotlin { - KmpTargets.addAllTargets(project, true /* skipJs */) - sourceSets { commonMain { dependencies { diff --git a/redwood-layout-testing/build.gradle b/redwood-layout-testing/build.gradle index d8bb8c9a98..98a404c2fc 100644 --- a/redwood-layout-testing/build.gradle +++ b/redwood-layout-testing/build.gradle @@ -1,15 +1,13 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'app.cash.redwood.generator.testing' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'app.cash.redwood.generator.testing' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-layout-uiview/build.gradle b/redwood-layout-uiview/build.gradle index 5146de327b..84b65a9b39 100644 --- a/redwood-layout-uiview/build.gradle +++ b/redwood-layout-uiview/build.gradle @@ -1,21 +1,21 @@ import app.cash.redwood.buildsupport.ComposeHelpers import app.cash.redwood.buildsupport.FlexboxHelpers -apply plugin: 'org.jetbrains.kotlin.multiplatform' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitIos +import static org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.common redwoodBuild { + targets(ToolkitIos) publishing() } kotlin { - [ - iosArm64(), - iosX64(), - iosSimulatorArm64(), - ].each { iosTarget -> - iosTarget.binaries.framework { - compilation = iosTarget.compilations.test - baseName = 'RedwoodLayoutUIViewTestKt' + targets.configureEach { target -> + if (target.platformType != common) { + target.binaries.framework { + compilation = target.compilations.test + baseName = 'RedwoodLayoutUIViewTestKt' + } } } diff --git a/redwood-layout-view/build.gradle b/redwood-layout-view/build.gradle index a642a774ca..cf5e00db93 100644 --- a/redwood-layout-view/build.gradle +++ b/redwood-layout-view/build.gradle @@ -1,15 +1,16 @@ import app.cash.redwood.buildsupport.ComposeHelpers import app.cash.redwood.buildsupport.FlexboxHelpers -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.android' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'app.cash.paparazzi' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitAndroid redwoodBuild { + targets(ToolkitAndroid) publishing() } +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'app.cash.paparazzi' + dependencies { api projects.redwoodLayoutWidget implementation projects.redwoodYoga diff --git a/redwood-layout-widget/build.gradle b/redwood-layout-widget/build.gradle index b8e2269d87..86be1aa258 100644 --- a/redwood-layout-widget/build.gradle +++ b/redwood-layout-widget/build.gradle @@ -1,15 +1,13 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'app.cash.redwood.generator.widget' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'app.cash.redwood.generator.widget' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-lazylayout-api/build.gradle b/redwood-lazylayout-api/build.gradle index dca9627690..165bfa13cd 100644 --- a/redwood-lazylayout-api/build.gradle +++ b/redwood-lazylayout-api/build.gradle @@ -1,17 +1,15 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'dev.drewhamilton.poko' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) composeCompiler() publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'dev.drewhamilton.poko' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-lazylayout-compose/build.gradle b/redwood-lazylayout-compose/build.gradle index d3f4ed9672..61f96f690e 100644 --- a/redwood-lazylayout-compose/build.gradle +++ b/redwood-lazylayout-compose/build.gradle @@ -1,15 +1,13 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'app.cash.redwood.generator.compose' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'app.cash.redwood.generator.compose' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-lazylayout-composeui/build.gradle b/redwood-lazylayout-composeui/build.gradle index 57086d7edf..58017b9fc6 100644 --- a/redwood-lazylayout-composeui/build.gradle +++ b/redwood-lazylayout-composeui/build.gradle @@ -1,17 +1,14 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'app.cash.paparazzi' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitComposeUi redwoodBuild { + targets(ToolkitComposeUi) composeCompiler() publishing() } -kotlin { - KmpTargets.addAllTargets(project, true /* skipJs */) +apply plugin: 'app.cash.paparazzi' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-lazylayout-dom/build.gradle b/redwood-lazylayout-dom/build.gradle index d5b7ab898c..e8624a4f47 100644 --- a/redwood-lazylayout-dom/build.gradle +++ b/redwood-lazylayout-dom/build.gradle @@ -1,14 +1,11 @@ -apply plugin: 'org.jetbrains.kotlin.multiplatform' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitHtml redwoodBuild { + targets(ToolkitHtml) publishing() } kotlin { - js { - browser() - } - sourceSets { commonMain { dependencies { diff --git a/redwood-lazylayout-schema/build.gradle b/redwood-lazylayout-schema/build.gradle index 12f7f2df65..ad4e3f05d4 100644 --- a/redwood-lazylayout-schema/build.gradle +++ b/redwood-lazylayout-schema/build.gradle @@ -1,10 +1,12 @@ -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'app.cash.redwood.schema' +import static app.cash.redwood.buildsupport.TargetGroup.Tooling redwoodBuild { + targets(Tooling) publishing() } +apply plugin: 'app.cash.redwood.schema' + dependencies { api projects.redwoodLayoutApi api projects.redwoodLazylayoutApi diff --git a/redwood-lazylayout-testing/build.gradle b/redwood-lazylayout-testing/build.gradle index 9179c31695..231fb26c0b 100644 --- a/redwood-lazylayout-testing/build.gradle +++ b/redwood-lazylayout-testing/build.gradle @@ -1,15 +1,13 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'app.cash.redwood.generator.testing' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'app.cash.redwood.generator.testing' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-lazylayout-uiview/build.gradle b/redwood-lazylayout-uiview/build.gradle index 0e412f6c7a..8609c29661 100644 --- a/redwood-lazylayout-uiview/build.gradle +++ b/redwood-lazylayout-uiview/build.gradle @@ -1,16 +1,11 @@ -import app.cash.redwood.buildsupport.ComposeHelpers - -apply plugin: 'org.jetbrains.kotlin.multiplatform' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitIos redwoodBuild { + targets(ToolkitIos) publishing() } kotlin { - iosArm64() - iosX64() - iosSimulatorArm64() - sourceSets { commonMain { dependencies { diff --git a/redwood-lazylayout-view/build.gradle b/redwood-lazylayout-view/build.gradle index e52921d997..3a566918f6 100644 --- a/redwood-lazylayout-view/build.gradle +++ b/redwood-lazylayout-view/build.gradle @@ -1,14 +1,13 @@ -import app.cash.redwood.buildsupport.ComposeHelpers - -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.android' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'app.cash.paparazzi' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitAndroid redwoodBuild { + targets(ToolkitAndroid) publishing() } +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'app.cash.paparazzi' + dependencies { api projects.redwoodLazylayoutWidget implementation libs.androidx.core diff --git a/redwood-lazylayout-widget/build.gradle b/redwood-lazylayout-widget/build.gradle index d288b08610..f09fab0617 100644 --- a/redwood-lazylayout-widget/build.gradle +++ b/redwood-lazylayout-widget/build.gradle @@ -1,16 +1,15 @@ import app.cash.redwood.buildsupport.ComposeHelpers -import app.cash.redwood.buildsupport.KmpTargets -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'app.cash.redwood.generator.widget' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'app.cash.redwood.generator.widget' +kotlin { sourceSets { commonMain { kotlin.srcDir(ComposeHelpers.get(tasks, 'app.cash.redwood.lazylayout.widget')) diff --git a/redwood-protocol-guest/build.gradle b/redwood-protocol-guest/build.gradle index b121e3bf1f..0c2212c3ed 100644 --- a/redwood-protocol-guest/build.gradle +++ b/redwood-protocol-guest/build.gradle @@ -1,17 +1,16 @@ import app.cash.redwood.buildsupport.ComposeHelpers -import app.cash.redwood.buildsupport.KmpTargets -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'com.github.gmazzo.buildconfig' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) composeCompiler() publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'com.github.gmazzo.buildconfig' +kotlin { sourceSets { commonMain { kotlin.srcDir(ComposeHelpers.get(tasks, 'app.cash.redwood.protocol.guest')) diff --git a/redwood-protocol-host/build.gradle b/redwood-protocol-host/build.gradle index ebf073e5c3..5f2c2ef5c7 100644 --- a/redwood-protocol-host/build.gradle +++ b/redwood-protocol-host/build.gradle @@ -1,16 +1,15 @@ import app.cash.redwood.buildsupport.ComposeHelpers -import app.cash.redwood.buildsupport.KmpTargets -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'com.github.gmazzo.buildconfig' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'com.github.gmazzo.buildconfig' +kotlin { sourceSets { commonMain { kotlin.srcDir(ComposeHelpers.get(tasks, 'app.cash.redwood.protocol.host')) diff --git a/redwood-protocol/build.gradle b/redwood-protocol/build.gradle index fb78020f5f..fdb9432770 100644 --- a/redwood-protocol/build.gradle +++ b/redwood-protocol/build.gradle @@ -1,16 +1,14 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'dev.drewhamilton.poko' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'dev.drewhamilton.poko' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-runtime/build.gradle b/redwood-runtime/build.gradle index 8e7059ec08..263f3cb22e 100644 --- a/redwood-runtime/build.gradle +++ b/redwood-runtime/build.gradle @@ -1,18 +1,15 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'com.android.library' -apply plugin: 'dev.drewhamilton.poko' +import static app.cash.redwood.buildsupport.TargetGroup.CommonWithAndroid redwoodBuild { + targets(CommonWithAndroid) composeCompiler() publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'dev.drewhamilton.poko' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-schema/build.gradle b/redwood-schema/build.gradle index 2b4c12a6c7..c35ff595d2 100644 --- a/redwood-schema/build.gradle +++ b/redwood-schema/build.gradle @@ -1,5 +1,6 @@ -apply plugin: 'org.jetbrains.kotlin.jvm' +import static app.cash.redwood.buildsupport.TargetGroup.Tooling redwoodBuild { + targets(Tooling) publishing() } diff --git a/redwood-testing/build.gradle b/redwood-testing/build.gradle index 60e5ff1f20..c2c9d80598 100644 --- a/redwood-testing/build.gradle +++ b/redwood-testing/build.gradle @@ -1,17 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'com.android.library' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) composeCompiler() publishing() } kotlin { - KmpTargets.addAllTargets(project) - sourceSets { commonMain { dependencies { @@ -33,11 +28,3 @@ kotlin { } } } - -android { - namespace 'app.cash.redwood.testing' - - testOptions { - unitTests.returnDefaultValues = true - } -} diff --git a/redwood-tooling-codegen/build.gradle b/redwood-tooling-codegen/build.gradle index 93ece5729d..c48c79cfee 100644 --- a/redwood-tooling-codegen/build.gradle +++ b/redwood-tooling-codegen/build.gradle @@ -1,6 +1,7 @@ -apply plugin: 'org.jetbrains.kotlin.jvm' +import static app.cash.redwood.buildsupport.TargetGroup.Tooling redwoodBuild { + targets(Tooling) publishing() cliApplication('redwood-codegen', 'app.cash.redwood.tooling.codegen.Main') } diff --git a/redwood-tooling-lint/build.gradle b/redwood-tooling-lint/build.gradle index c7848ea654..466bf1abc0 100644 --- a/redwood-tooling-lint/build.gradle +++ b/redwood-tooling-lint/build.gradle @@ -1,14 +1,16 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +import static app.cash.redwood.buildsupport.TargetGroup.Tooling redwoodBuild { + targets(Tooling) publishing() cliApplication('redwood-lint', 'app.cash.redwood.tooling.lint.Main') } +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' + dependencies { implementation libs.clikt implementation libs.kotlinx.serialization.core diff --git a/redwood-tooling-schema/build.gradle b/redwood-tooling-schema/build.gradle index 9a195eb2a6..6f2b916b64 100644 --- a/redwood-tooling-schema/build.gradle +++ b/redwood-tooling-schema/build.gradle @@ -1,14 +1,15 @@ +import static app.cash.redwood.buildsupport.TargetGroup.Tooling import static org.gradle.api.plugins.JavaPlugin.TEST_TASK_NAME import static org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.TEST_COMPILATION_NAME -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' - redwoodBuild { + targets(Tooling) publishing() cliApplication('redwood-schema', 'app.cash.redwood.tooling.schema.Main') } +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' + dependencies { api projects.redwoodSchema api libs.kotlin.reflect diff --git a/redwood-treehouse-guest-compose/build.gradle b/redwood-treehouse-guest-compose/build.gradle index 22973237b6..a1c783df97 100644 --- a/redwood-treehouse-guest-compose/build.gradle +++ b/redwood-treehouse-guest-compose/build.gradle @@ -1,15 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' +import static app.cash.redwood.buildsupport.TargetGroup.TreehouseGuest redwoodBuild { + targets(TreehouseGuest) composeCompiler() publishing() } kotlin { - KmpTargets.addAllTargets(project) - sourceSets { commonMain { dependencies { diff --git a/redwood-treehouse-guest/build.gradle b/redwood-treehouse-guest/build.gradle index 9ba84fc7bf..5b182a653e 100644 --- a/redwood-treehouse-guest/build.gradle +++ b/redwood-treehouse-guest/build.gradle @@ -1,17 +1,14 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'com.android.library' -apply plugin: 'app.cash.zipline' +import static app.cash.redwood.buildsupport.TargetGroup.TreehouseGuest redwoodBuild { + targets(TreehouseGuest) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'app.cash.zipline' +kotlin { sourceSets { commonMain { dependencies { @@ -25,21 +22,5 @@ kotlin { api projects.redwoodTreehouseGuestCompose } } - nonJsMain { - dependsOn(commonMain) - } - androidMain { - dependsOn(nonJsMain) - } - jvmMain { - dependsOn(nonJsMain) - } - nativeMain { - dependsOn(nonJsMain) - } } } - -android { - namespace 'app.cash.treehouse.guest' -} diff --git a/redwood-treehouse-guest/src/nonJsMain/kotlin/app/cash/redwood/treehouse/PrepareEnvironmentNonJs.kt b/redwood-treehouse-guest/src/jvmMain/kotlin/app/cash/redwood/treehouse/PrepareEnvironmentJvm.kt similarity index 100% rename from redwood-treehouse-guest/src/nonJsMain/kotlin/app/cash/redwood/treehouse/PrepareEnvironmentNonJs.kt rename to redwood-treehouse-guest/src/jvmMain/kotlin/app/cash/redwood/treehouse/PrepareEnvironmentJvm.kt diff --git a/redwood-treehouse-host-composeui/build.gradle b/redwood-treehouse-host-composeui/build.gradle index ee07096668..83c542d161 100644 --- a/redwood-treehouse-host-composeui/build.gradle +++ b/redwood-treehouse-host-composeui/build.gradle @@ -1,20 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'com.android.library' -apply plugin: 'org.jetbrains.kotlin.multiplatform' +import static app.cash.redwood.buildsupport.TargetGroup.TreehouseHost redwoodBuild { + targets(TreehouseHost) composeCompiler() publishing() } kotlin { - androidTarget { - publishLibraryVariants('release') - } - - KmpTargets.addAllTargets(project, true /* skipJs */) - sourceSets { commonMain { dependencies { diff --git a/redwood-treehouse-host/build.gradle b/redwood-treehouse-host/build.gradle index 3e1793425d..928c3165ee 100644 --- a/redwood-treehouse-host/build.gradle +++ b/redwood-treehouse-host/build.gradle @@ -1,17 +1,14 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'com.android.library' -apply plugin: 'app.cash.zipline' +import static app.cash.redwood.buildsupport.TargetGroup.TreehouseHost redwoodBuild { + targets(TreehouseHost) publishing() } -kotlin { - KmpTargets.addAllTargets(project, true /* skipJs */) +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'app.cash.zipline' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-treehouse/build.gradle b/redwood-treehouse/build.gradle index c36eddac3a..9a53819fa5 100644 --- a/redwood-treehouse/build.gradle +++ b/redwood-treehouse/build.gradle @@ -1,17 +1,14 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'org.jetbrains.kotlin.plugin.serialization' -apply plugin: 'com.android.library' -apply plugin: 'app.cash.zipline' +import static app.cash.redwood.buildsupport.TargetGroup.CommonWithAndroid redwoodBuild { + targets(CommonWithAndroid) publishing() } -kotlin { - KmpTargets.addAllTargets(project) +apply plugin: 'org.jetbrains.kotlin.plugin.serialization' +apply plugin: 'app.cash.zipline' +kotlin { sourceSets { commonMain { dependencies { diff --git a/redwood-widget-compose/build.gradle b/redwood-widget-compose/build.gradle index 858717cf85..4ad534c76e 100644 --- a/redwood-widget-compose/build.gradle +++ b/redwood-widget-compose/build.gradle @@ -1,16 +1,14 @@ import app.cash.redwood.buildsupport.ComposeHelpers -import app.cash.redwood.buildsupport.KmpTargets -apply plugin: 'org.jetbrains.kotlin.multiplatform' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) composeCompiler() publishing() } kotlin { - KmpTargets.addAllTargets(project) - sourceSets { commonMain { kotlin.srcDir(ComposeHelpers.get(tasks, 'app.cash.redwood.widget.compose')) diff --git a/redwood-widget-testing/build.gradle b/redwood-widget-testing/build.gradle index 85104d96e8..a427fdb314 100644 --- a/redwood-widget-testing/build.gradle +++ b/redwood-widget-testing/build.gradle @@ -1,15 +1,11 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'com.android.library' +import static app.cash.redwood.buildsupport.TargetGroup.Common redwoodBuild { + targets(Common) publishing() } kotlin { - KmpTargets.addAllTargets(project) - sourceSets { commonMain { dependencies { @@ -18,14 +14,6 @@ kotlin { api projects.redwoodWidget } } - androidMain { - dependencies { - // The kotlin.test library provides JVM variants for multiple testing frameworks. When used - // as a test dependency this selection is transparent. But since we are publishing a library - // we need to select one ourselves at compilation time. - api libs.kotlin.test.junit - } - } jvmMain { dependencies { // The kotlin.test library provides JVM variants for multiple testing frameworks. When used @@ -36,7 +24,3 @@ kotlin { } } } - -android { - namespace 'app.cash.redwood.widget.testing' -} diff --git a/redwood-widget/build.gradle b/redwood-widget/build.gradle index f34a0ff9a9..5a81bd6442 100644 --- a/redwood-widget/build.gradle +++ b/redwood-widget/build.gradle @@ -1,16 +1,13 @@ import app.cash.redwood.buildsupport.ComposeHelpers -import app.cash.redwood.buildsupport.KmpTargets -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'com.android.library' +import static app.cash.redwood.buildsupport.TargetGroup.CommonWithAndroid redwoodBuild { + targets(CommonWithAndroid) publishing() } kotlin { - KmpTargets.addAllTargets(project) - sourceSets { commonMain { kotlin.srcDir(ComposeHelpers.get(tasks, 'app.cash.redwood.widget')) diff --git a/redwood-yoga/build.gradle b/redwood-yoga/build.gradle index d63d8f9bfe..d716534bac 100644 --- a/redwood-yoga/build.gradle +++ b/redwood-yoga/build.gradle @@ -1,16 +1,14 @@ -import app.cash.redwood.buildsupport.KmpTargets - -apply plugin: 'org.jetbrains.kotlin.multiplatform' -apply plugin: 'kotlinx-atomicfu' -apply plugin: 'dev.drewhamilton.poko' +import static app.cash.redwood.buildsupport.TargetGroup.ToolkitAllWithoutAndroid redwoodBuild { + targets(ToolkitAllWithoutAndroid) publishing() } -kotlin { - KmpTargets.addAllTargets(project, true /* skipJs */) +apply plugin: 'kotlinx-atomicfu' +apply plugin: 'dev.drewhamilton.poko' +kotlin { sourceSets { commonTest { dependencies { diff --git a/test-app/schema/compose/build.gradle b/test-app/schema/compose/build.gradle index ac267fc856..0248e2ee9e 100644 --- a/test-app/schema/compose/build.gradle +++ b/test-app/schema/compose/build.gradle @@ -1,11 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets +import static app.cash.redwood.buildsupport.TargetGroup.Common + +redwoodBuild { + targets(Common) +} -apply plugin: 'org.jetbrains.kotlin.multiplatform' apply plugin: 'app.cash.redwood.generator.compose' kotlin { - KmpTargets.addAllTargets(project) - // Ensure our codegen correctly works in explicit API mode. explicitApi() diff --git a/test-app/schema/modifiers/build.gradle b/test-app/schema/modifiers/build.gradle index cf3264de20..b6f4206114 100644 --- a/test-app/schema/modifiers/build.gradle +++ b/test-app/schema/modifiers/build.gradle @@ -1,11 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets +import static app.cash.redwood.buildsupport.TargetGroup.Common + +redwoodBuild { + targets(Common) +} -apply plugin: 'org.jetbrains.kotlin.multiplatform' apply plugin: 'app.cash.redwood.generator.modifiers' kotlin { - KmpTargets.addAllTargets(project) - // Ensure our codegen correctly works in explicit API mode. explicitApi() diff --git a/test-app/schema/protocol-guest/build.gradle b/test-app/schema/protocol-guest/build.gradle index ee87270988..12b10310c7 100644 --- a/test-app/schema/protocol-guest/build.gradle +++ b/test-app/schema/protocol-guest/build.gradle @@ -1,11 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets +import static app.cash.redwood.buildsupport.TargetGroup.Common + +redwoodBuild { + targets(Common) +} -apply plugin: 'org.jetbrains.kotlin.multiplatform' apply plugin: 'app.cash.redwood.generator.protocol.guest' kotlin { - KmpTargets.addAllTargets(project) - // Ensure our codegen correctly works in explicit API mode. explicitApi() diff --git a/test-app/schema/protocol-host/build.gradle b/test-app/schema/protocol-host/build.gradle index 258141858e..a896657ed0 100644 --- a/test-app/schema/protocol-host/build.gradle +++ b/test-app/schema/protocol-host/build.gradle @@ -1,11 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets +import static app.cash.redwood.buildsupport.TargetGroup.Common + +redwoodBuild { + targets(Common) +} -apply plugin: 'org.jetbrains.kotlin.multiplatform' apply plugin: 'app.cash.redwood.generator.protocol.host' kotlin { - KmpTargets.addAllTargets(project) - // Ensure our codegen correctly works in explicit API mode. explicitApi() diff --git a/test-app/schema/testing/build.gradle b/test-app/schema/testing/build.gradle index 2111726902..62f75c2b7d 100644 --- a/test-app/schema/testing/build.gradle +++ b/test-app/schema/testing/build.gradle @@ -1,11 +1,14 @@ -import app.cash.redwood.buildsupport.KmpTargets +import app.cash.redwood.buildsupport.TargetGroup + +import static app.cash.redwood.buildsupport.TargetGroup.Common + +redwoodBuild { + targets(Common) +} -apply plugin: 'org.jetbrains.kotlin.multiplatform' apply plugin: 'app.cash.redwood.generator.testing' kotlin { - KmpTargets.addAllTargets(project) - sourceSets { commonMain { dependencies { diff --git a/test-app/schema/widget/build.gradle b/test-app/schema/widget/build.gradle index d662bb1f7f..24027dcbbc 100644 --- a/test-app/schema/widget/build.gradle +++ b/test-app/schema/widget/build.gradle @@ -1,11 +1,12 @@ -import app.cash.redwood.buildsupport.KmpTargets +import static app.cash.redwood.buildsupport.TargetGroup.Common + +redwoodBuild { + targets(Common) +} -apply plugin: 'org.jetbrains.kotlin.multiplatform' apply plugin: 'app.cash.redwood.generator.widget' kotlin { - KmpTargets.addAllTargets(project) - sourceSets { commonMain { dependencies {