Merge pull request #3530 from element-hq/feature/bma/moduleConfig

Introduce ModulesConfig
This commit is contained in:
Benoit Marty 2024-09-25 17:56:45 +02:00 committed by GitHub
commit a6977e70f7
5 changed files with 86 additions and 13 deletions

View file

@ -250,10 +250,12 @@ dependencies {
implementation(projects.libraries.uiStrings) implementation(projects.libraries.uiStrings)
anvil(projects.anvilcodegen) anvil(projects.anvilcodegen)
// Comment to not include firebase in the project if (ModulesConfig.pushProvidersConfig.includeFirebase) {
"gplayImplementation"(projects.libraries.pushproviders.firebase) "gplayImplementation"(projects.libraries.pushproviders.firebase)
// Comment to not include unified push in the project }
implementation(projects.libraries.pushproviders.unifiedpush) if (ModulesConfig.pushProvidersConfig.includeUnifiedPush) {
implementation(projects.libraries.pushproviders.unifiedpush)
}
implementation(libs.appyx.core) implementation(libs.appyx.core)
implementation(libs.androidx.splash) implementation(libs.androidx.splash)

View file

@ -0,0 +1,21 @@
/*
* 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
import config.PushProvidersConfig
object ModulesConfig {
val pushProvidersConfig = PushProvidersConfig(
includeFirebase = true,
includeUnifiedPush = true,
)
val analyticsConfig: AnalyticsConfig = AnalyticsConfig.Enabled(
withPosthog = true,
withSentry = true,
)
}

View file

@ -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
}

View file

@ -0,0 +1,19 @@
/*
* Copyright 2024 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only
* Please see LICENSE in the repository root for full details.
*/
package config
data class PushProvidersConfig(
val includeFirebase: Boolean,
val includeUnifiedPush: Boolean,
) {
init {
require(includeFirebase || includeUnifiedPush) {
"At least one push provider must be included"
}
}
}

View file

@ -7,14 +7,14 @@
package extension package extension
import config.AnalyticsConfig
import ModulesConfig
import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Action import org.gradle.api.Action
import org.gradle.api.artifacts.ExternalModuleDependency import org.gradle.api.artifacts.ExternalModuleDependency
import org.gradle.api.logging.Logger import org.gradle.api.logging.Logger
import org.gradle.api.provider.Provider
import org.gradle.kotlin.dsl.DependencyHandlerScope import org.gradle.kotlin.dsl.DependencyHandlerScope
import org.gradle.kotlin.dsl.closureOf import org.gradle.kotlin.dsl.closureOf
import org.gradle.kotlin.dsl.exclude
import org.gradle.kotlin.dsl.project import org.gradle.kotlin.dsl.project
import java.io.File import java.io.File
@ -24,7 +24,7 @@ private fun DependencyHandlerScope.implementation(dependency: Any) = dependencie
private fun DependencyHandlerScope.implementation( private fun DependencyHandlerScope.implementation(
dependency: Any, dependency: Any,
config: Action<ExternalModuleDependency> config: Action<ExternalModuleDependency>
) = dependencies.add("implementation", dependency, closureOf<ExternalModuleDependency> { config.execute(this) }) ) = dependencies.add("implementation", dependency, closureOf<ExternalModuleDependency> { config.execute(this) })
private fun DependencyHandlerScope.androidTestImplementation(dependency: Any) = dependencies.add("androidTestImplementation", dependency) private fun DependencyHandlerScope.androidTestImplementation(dependency: Any) = dependencies.add("androidTestImplementation", dependency)
@ -111,13 +111,21 @@ fun DependencyHandlerScope.allLibrariesImpl() {
} }
fun DependencyHandlerScope.allServicesImpl() { 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:analytics:compose"))
implementation(project(":services:analyticsproviders:posthog")) when (ModulesConfig.analyticsConfig) {
implementation(project(":services:analyticsproviders:sentry")) 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:apperror:impl"))
implementation(project(":services:appnavstate:impl")) implementation(project(":services:appnavstate:impl"))
implementation(project(":services:toolbox:impl")) implementation(project(":services:toolbox:impl"))