From 67120465dad8b51c1b6165832cbe053af6033f2f Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:31:26 -0600 Subject: [PATCH] refactor(build): Use version catalog for Compose Multiplatform (#4452) --- app/build.gradle.kts | 2 +- .../KmpLibraryComposeConventionPlugin.kt | 7 ++-- .../meshtastic/buildlogic/AndroidCompose.kt | 7 ++-- .../meshtastic/buildlogic/KotlinAndroid.kt | 15 +++----- .../meshtastic/buildlogic/MeshtasticFlavor.kt | 38 ++++++++----------- gradle/libs.versions.toml | 4 ++ 6 files changed, 31 insertions(+), 42 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c3a453433..663b4b85e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -187,7 +187,7 @@ androidComponents { } } -project.afterEvaluate { logger.lifecycle("Version code is set to: ${android.defaultConfig.versionCode}") } +project.afterEvaluate { logger.lifecycle("Version code is set to: ${extensions.getByType().defaultConfig.versionCode}") } dependencies { implementation(projects.core.analytics) diff --git a/build-logic/convention/src/main/kotlin/KmpLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KmpLibraryComposeConventionPlugin.kt index 28a70e587..2a9504221 100644 --- a/build-logic/convention/src/main/kotlin/KmpLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/KmpLibraryComposeConventionPlugin.kt @@ -19,9 +19,9 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.configure -import org.jetbrains.compose.ComposeExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.meshtastic.buildlogic.configureComposeCompiler +import org.meshtastic.buildlogic.library import org.meshtastic.buildlogic.libs import org.meshtastic.buildlogic.plugin @@ -31,12 +31,11 @@ class KmpLibraryComposeConventionPlugin : Plugin { apply(plugin = libs.plugin("compose-compiler").get().pluginId) apply(plugin = libs.plugin("compose-multiplatform").get().pluginId) - val compose = extensions.getByType(ComposeExtension::class.java) extensions.configure { sourceSets.getByName("commonMain").dependencies { - implementation(compose.dependencies.runtime) + implementation(libs.library("compose-multiplatform-runtime")) // API because consuming modules will usually need the resource types - api(compose.dependencies.components.resources) + api(libs.library("compose-multiplatform-resources")) } } configureComposeCompiler() diff --git a/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/AndroidCompose.kt index 80a8705b4..cb8c13fc4 100644 --- a/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/AndroidCompose.kt @@ -17,9 +17,7 @@ package org.meshtastic.buildlogic -import com.android.build.api.dsl.ApplicationExtension import com.android.build.api.dsl.CommonExtension -import com.android.build.api.dsl.LibraryExtension import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies @@ -29,8 +27,9 @@ import org.gradle.kotlin.dsl.dependencies internal fun Project.configureAndroidCompose( commonExtension: CommonExtension, ) { - (commonExtension as? ApplicationExtension)?.buildFeatures?.compose = true - (commonExtension as? LibraryExtension)?.buildFeatures?.compose = true + commonExtension.apply { + buildFeatures.compose = true + } dependencies { val bom = libs.library("androidx-compose-bom") diff --git a/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/KotlinAndroid.kt index c7dd39194..e0cf40cf0 100644 --- a/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/KotlinAndroid.kt @@ -20,7 +20,6 @@ package org.meshtastic.buildlogic import com.android.build.api.dsl.ApplicationExtension import com.android.build.api.dsl.CommonExtension import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget -import com.android.build.api.dsl.LibraryExtension import org.gradle.api.JavaVersion import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -44,17 +43,13 @@ internal fun Project.configureKotlinAndroid( val targetSdkVersion = configProperties.getProperty("TARGET_SDK").toInt() commonExtension.apply { - when (this) { - is ApplicationExtension -> { - compileSdk = compileSdkVersion - defaultConfig.targetSdk = targetSdkVersion - } - is LibraryExtension -> { - compileSdk = compileSdkVersion - } - } + compileSdk = compileSdkVersion defaultConfig.minSdk = minSdkVersion + + if (this is ApplicationExtension) { + defaultConfig.targetSdk = targetSdkVersion + } compileOptions.sourceCompatibility = JavaVersion.VERSION_17 compileOptions.targetCompatibility = JavaVersion.VERSION_17 diff --git a/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/MeshtasticFlavor.kt b/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/MeshtasticFlavor.kt index ca4e6474c..cf8bd1afb 100644 --- a/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/MeshtasticFlavor.kt +++ b/build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/MeshtasticFlavor.kt @@ -18,7 +18,6 @@ package org.meshtastic.buildlogic import com.android.build.api.dsl.ApplicationExtension -import com.android.build.api.dsl.ApplicationProductFlavor import com.android.build.api.dsl.CommonExtension import com.android.build.api.dsl.LibraryExtension import com.android.build.api.dsl.ProductFlavor @@ -38,34 +37,28 @@ fun configureFlavors( commonExtension: CommonExtension, flavorConfigurationBlock: ProductFlavor.(flavor: MeshtasticFlavor) -> Unit = {}, ) { - (commonExtension as? ApplicationExtension)?.apply { + commonExtension.apply { FlavorDimension.entries.forEach { flavorDimension -> flavorDimensions += flavorDimension.name } - productFlavors { - MeshtasticFlavor.entries.forEach { meshtasticFlavor -> - register(meshtasticFlavor.name) { - dimension = meshtasticFlavor.dimension.name - flavorConfigurationBlock(this, meshtasticFlavor) - if (meshtasticFlavor.default) { - isDefault = true + when (this) { + is ApplicationExtension -> productFlavors { + MeshtasticFlavor.entries.forEach { meshtasticFlavor -> + register(meshtasticFlavor.name) { + dimension = meshtasticFlavor.dimension.name + flavorConfigurationBlock(this, meshtasticFlavor) + if (meshtasticFlavor.default) { + isDefault = true + } } } } - } - } - (commonExtension as? LibraryExtension)?.apply { - FlavorDimension.entries.forEach { flavorDimension -> - flavorDimensions += flavorDimension.name - } - - productFlavors { - MeshtasticFlavor.entries.forEach { meshtasticFlavor -> - register(meshtasticFlavor.name) { - dimension = meshtasticFlavor.dimension.name - flavorConfigurationBlock(this, meshtasticFlavor) - if (this@apply is ApplicationExtension && this is ApplicationProductFlavor) { + is LibraryExtension -> productFlavors { + MeshtasticFlavor.entries.forEach { meshtasticFlavor -> + register(meshtasticFlavor.name) { + dimension = meshtasticFlavor.dimension.name + flavorConfigurationBlock(this, meshtasticFlavor) if (meshtasticFlavor.default) { isDefault = true } @@ -75,4 +68,3 @@ fun configureFlavors( } } } - diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2f8f9809b..d079bc822 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -101,6 +101,10 @@ androidx-compose-ui-text = { module = "androidx.compose.ui:ui-text" } androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } +# Compose Multiplatform +compose-multiplatform-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "compose-multiplatform" } +compose-multiplatform-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "compose-multiplatform" } + # Google firebase-analytics = { module = "com.google.firebase:firebase-analytics" } firebase-bom = { module = "com.google.firebase:firebase-bom", version = "34.8.0" }