From f119b096445cbcd5554df60c12c4ea09455ac01c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 24 Sep 2024 12:26:48 +0200 Subject: [PATCH] Introduce ModulesConfig for easier configurations of modules. --- plugins/src/main/kotlin/ModulesConfig.kt | 15 +++++++++++ .../src/main/kotlin/config/AnalyticsConfig.kt | 23 ++++++++++++++++ .../kotlin/extension/DependencyHandleScope.kt | 26 ++++++++++++------- 3 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 plugins/src/main/kotlin/ModulesConfig.kt create mode 100644 plugins/src/main/kotlin/config/AnalyticsConfig.kt diff --git a/plugins/src/main/kotlin/ModulesConfig.kt b/plugins/src/main/kotlin/ModulesConfig.kt new file mode 100644 index 0000000000..649c948e26 --- /dev/null +++ b/plugins/src/main/kotlin/ModulesConfig.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +import config.AnalyticsConfig + +object ModulesConfig { + val analyticsConfig: AnalyticsConfig = AnalyticsConfig.Enabled( + withPosthog = true, + withSentry = true + ) +} diff --git a/plugins/src/main/kotlin/config/AnalyticsConfig.kt b/plugins/src/main/kotlin/config/AnalyticsConfig.kt new file mode 100644 index 0000000000..5bc92da723 --- /dev/null +++ b/plugins/src/main/kotlin/config/AnalyticsConfig.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package config + +sealed interface AnalyticsConfig { + data class Enabled( + val withPosthog: Boolean, + val withSentry: Boolean, + ) : AnalyticsConfig { + init { + require(withPosthog || withSentry) { + "At least one analytics provider must be enabled" + } + } + } + + object Disabled : AnalyticsConfig +} diff --git a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt index 5a8df0694d..fef1ea147a 100644 --- a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt +++ b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt @@ -7,14 +7,14 @@ package extension +import config.AnalyticsConfig +import ModulesConfig import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.api.Action import org.gradle.api.artifacts.ExternalModuleDependency import org.gradle.api.logging.Logger -import org.gradle.api.provider.Provider import org.gradle.kotlin.dsl.DependencyHandlerScope import org.gradle.kotlin.dsl.closureOf -import org.gradle.kotlin.dsl.exclude import org.gradle.kotlin.dsl.project import java.io.File @@ -24,7 +24,7 @@ private fun DependencyHandlerScope.implementation(dependency: Any) = dependencie private fun DependencyHandlerScope.implementation( dependency: Any, config: Action -) = dependencies.add("implementation", dependency, closureOf { config.execute(this) }) +) = dependencies.add("implementation", dependency, closureOf { config.execute(this) }) private fun DependencyHandlerScope.androidTestImplementation(dependency: Any) = dependencies.add("androidTestImplementation", dependency) @@ -111,13 +111,21 @@ fun DependencyHandlerScope.allLibrariesImpl() { } fun DependencyHandlerScope.allServicesImpl() { - // For analytics configuration, either use noop, or use the impl, with at least one analyticsproviders implementation - // implementation(project(":services:analytics:noop")) - implementation(project(":services:analytics:impl")) implementation(project(":services:analytics:compose")) - implementation(project(":services:analyticsproviders:posthog")) - implementation(project(":services:analyticsproviders:sentry")) - + when (ModulesConfig.analyticsConfig) { + AnalyticsConfig.Disabled -> { + implementation(project(":services:analytics:noop")) + } + is AnalyticsConfig.Enabled -> { + implementation(project(":services:analytics:impl")) + if (ModulesConfig.analyticsConfig.withPosthog) { + implementation(project(":services:analyticsproviders:posthog")) + } + if (ModulesConfig.analyticsConfig.withSentry) { + implementation(project(":services:analyticsproviders:sentry")) + } + } + } implementation(project(":services:apperror:impl")) implementation(project(":services:appnavstate:impl")) implementation(project(":services:toolbox:impl"))