From dcd0f723137da54ef2afedcc41cf822a32bed9fe Mon Sep 17 00:00:00 2001 From: Mateusz Armatys Date: Tue, 29 Mar 2022 14:38:19 +0200 Subject: [PATCH] build: Add `core-platform` module for aligning dependencies. --- README.md | 1 + core-platform/build.gradle.kts | 36 +++++++++++++++++++ key/data/build.gradle.kts | 2 -- plugins/core/src/main/kotlin/Dependencies.kt | 2 ++ .../gradle/plugin/BuildConventionPlugin.kt | 13 ++++++- .../plugin/android/BaseAndroidPlugin.kt | 8 ++--- .../plugin/android/ComposeUiLibraryPlugin.kt | 4 +-- .../core/gradle/plugin/dagger/DaggerPlugin.kt | 8 ++--- .../plugin/kotlin/KotlinLibraryPlugin.kt | 10 +++--- plugins/core/src/main/kotlin/modules.kt | 1 + .../core/src/main/kotlin/versionsConfig.kt | 1 + user/data/build.gradle.kts | 2 -- 12 files changed, 67 insertions(+), 21 deletions(-) create mode 100644 core-platform/build.gradle.kts diff --git a/README.md b/README.md index 9de67d929..c2edd633e 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ Core libraries coordinates can be found under [coordinates section](#coordinates |me.proton.core:contact-data| |me.proton.core:contact-domain| |me.proton.core:contact-dagger| +|me.proton.core:core-platform| |me.proton.core:country| |me.proton.core:country-dagger| |me.proton.core:country-data| diff --git a/core-platform/build.gradle.kts b/core-platform/build.gradle.kts new file mode 100644 index 000000000..3e9e55f1b --- /dev/null +++ b/core-platform/build.gradle.kts @@ -0,0 +1,36 @@ +import studio.forface.easygradle.dsl.android.* + +/* + * Copyright (c) 2022 Proton Technologies AG + * This file is part of Proton AG and ProtonCore. + * + * ProtonCore is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ProtonCore is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with ProtonCore. If not, see . + */ + +plugins { + `java-platform` +} + +publishOption.shouldBePublishedAsLib = true + +dependencies { + constraints { + api(activity) + api(`android-ktx`) + api(appcompat) + api(drawerLayout) + api(fragment) + api(material) + } +} diff --git a/key/data/build.gradle.kts b/key/data/build.gradle.kts index 7646ba8e3..779eb7bf2 100644 --- a/key/data/build.gradle.kts +++ b/key/data/build.gradle.kts @@ -49,8 +49,6 @@ dependencies { project(Module.data), project(Module.authDomain), `coroutines-core`, - appcompat, // TODO - material, // TODO `room-ktx`, store4 ) diff --git a/plugins/core/src/main/kotlin/Dependencies.kt b/plugins/core/src/main/kotlin/Dependencies.kt index 6b39a6a2a..bfc878e99 100644 --- a/plugins/core/src/main/kotlin/Dependencies.kt +++ b/plugins/core/src/main/kotlin/Dependencies.kt @@ -110,6 +110,8 @@ public val DependencyHandler.coordinatorlayout: Any get() = dependency("androidx.coordinatorlayout", module = "coordinatorlayout") version `coordinatorlayout version` public val DependencyHandler.datastore: Any get() = dependency("androidx.datastore", module = "datastore") version `datastore version` +public val DependencyHandler.drawerLayout: Any + get() = androidx("drawerlayout") version `drawerLayout version` public val DependencyHandler.googlePlayBilling: Any get() = dependency("com.android.billingclient", module = "billing") version `googlePlayBilling version` public val DependencyHandler.googleTink: Any diff --git a/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/BuildConventionPlugin.kt b/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/BuildConventionPlugin.kt index c8435dcbc..64c10e0f6 100644 --- a/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/BuildConventionPlugin.kt +++ b/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/BuildConventionPlugin.kt @@ -18,18 +18,29 @@ package me.proton.core.gradle.plugin +import Module.corePlatform import applyRepositories import initVersions import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.project +import studio.forface.easygradle.dsl.* import javax.annotation.OverridingMethodsMustInvokeSuper public abstract class BuildConventionPlugin : Plugin { @OverridingMethodsMustInvokeSuper - override fun apply(target: Project) { + final override fun apply(target: Project) { initVersions(target.rootProject.extensions.getByType().named("libs")) target.applyRepositories() + + onApplyPlugins(target) + target.dependencies { api(platform(project(corePlatform))) } + onPluginsApplied(target) } + + protected abstract fun onApplyPlugins(target: Project) + protected abstract fun onPluginsApplied(target: Project) } diff --git a/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/android/BaseAndroidPlugin.kt b/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/android/BaseAndroidPlugin.kt index 563bb53dc..cc4f137ea 100644 --- a/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/android/BaseAndroidPlugin.kt +++ b/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/android/BaseAndroidPlugin.kt @@ -31,13 +31,13 @@ public abstract class BaseAndroidPlugin : BuildConventionPlugin() where E : K protected abstract fun createConventionSettings(): AndroidConventionSettings protected abstract fun createPluginExtension(target: Project): E - override fun apply(target: Project) { - super.apply(target) - val ext = createPluginExtension(target) - + override fun onApplyPlugins(target: Project) { target.pluginManager.apply(androidPluginId) target.pluginManager.apply(PluginIds.kotlinAndroid) + } + override fun onPluginsApplied(target: Project) { + val ext = createPluginExtension(target) target.applyAndroidConvention(createConventionSettings()) target.applyKotlinConvention(ext) } diff --git a/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/android/ComposeUiLibraryPlugin.kt b/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/android/ComposeUiLibraryPlugin.kt index 846d116b8..68c892287 100644 --- a/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/android/ComposeUiLibraryPlugin.kt +++ b/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/android/ComposeUiLibraryPlugin.kt @@ -36,8 +36,8 @@ public class ComposeUiLibraryPlugin : BaseAndroidPlugin("protonDagger") - + override fun onApplyPlugins(target: Project) { target.pluginManager.apply(PluginIds.kapt) target.pluginManager.apply(PluginIds.hilt) + } + override fun onPluginsApplied(target: Project) { + val ext = target.createProtonExt("protonDagger") target.applyDaggerConvention(ext) } } diff --git a/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/kotlin/KotlinLibraryPlugin.kt b/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/kotlin/KotlinLibraryPlugin.kt index 9a17c003d..9fb07a50f 100644 --- a/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/kotlin/KotlinLibraryPlugin.kt +++ b/plugins/core/src/main/kotlin/me/proton/core/gradle/plugin/kotlin/KotlinLibraryPlugin.kt @@ -27,15 +27,13 @@ import me.proton.core.gradle.plugin.createProtonExt import org.gradle.api.Project public class KotlinLibraryPlugin : BuildConventionPlugin() { - private lateinit var ext: KotlinLibraryExtension - - override fun apply(target: Project) { - super.apply(target) - ext = target.createProtonExt() - + override fun onApplyPlugins(target: Project) { target.pluginManager.apply(PluginIds.javaLibrary) target.pluginManager.apply(PluginIds.kotlinJvm) + } + override fun onPluginsApplied(target: Project) { + val ext = target.createProtonExt() target.applyJavaConvention() target.applyKotlinConvention(ext) } diff --git a/plugins/core/src/main/kotlin/modules.kt b/plugins/core/src/main/kotlin/modules.kt index 4c1d1c43a..a750dd96a 100644 --- a/plugins/core/src/main/kotlin/modules.kt +++ b/plugins/core/src/main/kotlin/modules.kt @@ -37,6 +37,7 @@ public object Module { // endregion // region Shared + public const val corePlatform: String = ":core-platform" public const val domain: String = ":domain" public const val presentation: String = ":presentation" public const val presentationCompose: String = ":presentation-compose" diff --git a/plugins/core/src/main/kotlin/versionsConfig.kt b/plugins/core/src/main/kotlin/versionsConfig.kt index 0688cf63c..f86dd2e0a 100644 --- a/plugins/core/src/main/kotlin/versionsConfig.kt +++ b/plugins/core/src/main/kotlin/versionsConfig.kt @@ -69,6 +69,7 @@ public const val `compose version`: String = "1.2.0-alpha01" public const val `coordinatorlayout version`: String = "1.1.0" public const val `googlePlayBilling version`: String = "5.0.0" public const val `datastore version`: String = "1.0.0" +public const val `drawerLayout version`: String = "1.1.1" public const val `hilt-navigation-compose version`: String = "1.0.0-rc01" public const val `material3 version`: String = "1.0.0-alpha03" public const val `navigation version`: String = "2.4.0-rc01" diff --git a/user/data/build.gradle.kts b/user/data/build.gradle.kts index 7a7bb73f0..3456fdf45 100644 --- a/user/data/build.gradle.kts +++ b/user/data/build.gradle.kts @@ -60,8 +60,6 @@ dependencies { `coroutines-core`, // Other - appcompat, // TODO appcompat.. - material, // TODO ..and material libraries are only needed, so that libraries are compatible with the ones in androidTest; otherwise, the `implementation` would use old versions of those `room-ktx`, store4 )