From a6cdaf24dcd6cff6e734112369f21d9bf23ce20c Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 23 Mar 2023 18:06:32 +0100 Subject: [PATCH] Add utility methods for automatically including api/impl feature modules --- app/build.gradle.kts | 2 +- appnav/build.gradle.kts | 2 +- .../kotlin/extension/DependencyHandleScope.kt | 43 ++++++++++--------- settings.gradle.kts | 37 ++++++++-------- tests/uitests/build.gradle.kts | 2 +- 5 files changed, 43 insertions(+), 43 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index effa886c4d..50db9aa617 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -203,7 +203,7 @@ knit { dependencies { allLibrariesImpl() allServicesImpl() - allFeaturesImpl() + allFeaturesImpl(rootDir) implementation(projects.tests.uitests) implementation(projects.anvilannotations) implementation(projects.appnav) diff --git a/appnav/build.gradle.kts b/appnav/build.gradle.kts index 082d876fbd..1c1c1635b4 100644 --- a/appnav/build.gradle.kts +++ b/appnav/build.gradle.kts @@ -38,7 +38,7 @@ dependencies { implementation(libs.dagger) kapt(libs.dagger.compiler) - allFeaturesApi() + allFeaturesApi(rootDir) implementation(projects.libraries.core) implementation(projects.libraries.architecture) diff --git a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt index 52063dd08e..4287d74101 100644 --- a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt +++ b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt @@ -22,6 +22,7 @@ import gradle.kotlin.dsl.accessors._71f190358cebd46a469f2989484fd643.implementat import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.kotlin.dsl.DependencyHandlerScope import org.gradle.kotlin.dsl.project +import java.io.File /** * Dependencies used by all the modules @@ -51,6 +52,21 @@ fun DependencyHandlerScope.composeDependencies(libs: LibrariesForLibs) { implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.5") } +private fun DependencyHandlerScope.addImplementationProjects(directory: File, path: String, nameFilter: String) { + directory.listFiles().orEmpty().forEach { file -> + if (file.isDirectory) { + val newPath = "$path:${file.name}" + val buildFile = File(file, "build.gradle.kts") + if (buildFile.exists() && file.name == nameFilter) { + implementation(project(newPath)) + println("Added implementation(project($newPath))") + } else { + addImplementationProjects(file, newPath, nameFilter) + } + } + } +} + fun DependencyHandlerScope.allLibrariesImpl() { implementation(project(":libraries:designsystem")) implementation(project(":libraries:matrix:impl")) @@ -70,26 +86,11 @@ fun DependencyHandlerScope.allServicesImpl() { implementation(project(":services:toolbox:impl")) } -fun DependencyHandlerScope.allFeaturesApi() { - implementation(project(":features:onboarding:api")) - implementation(project(":features:login:api")) - implementation(project(":features:logout:api")) - implementation(project(":features:roomlist:api")) - implementation(project(":features:messages:api")) - implementation(project(":features:rageshake:api")) - implementation(project(":features:preferences:api")) - implementation(project(":features:createroom:api")) - implementation(project(":features:verifysession:api")) +fun DependencyHandlerScope.allFeaturesApi(rootDir: File) { + val featuresDir = File(rootDir, "features") + addImplementationProjects(featuresDir, ":features", "api") } - -fun DependencyHandlerScope.allFeaturesImpl() { - implementation(project(":features:onboarding:impl")) - implementation(project(":features:login:impl")) - implementation(project(":features:logout:impl")) - implementation(project(":features:roomlist:impl")) - implementation(project(":features:messages:impl")) - implementation(project(":features:rageshake:impl")) - implementation(project(":features:preferences:impl")) - implementation(project(":features:createroom:impl")) - implementation(project(":features:verifysession:impl")) +fun DependencyHandlerScope.allFeaturesImpl(rootDir: File) { + val featuresDir = File(rootDir, "features") + addImplementationProjects(featuresDir, ":features", "impl") } diff --git a/settings.gradle.kts b/settings.gradle.kts index 0fd8bc2938..4cab3cca2a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -73,22 +73,21 @@ include(":services:appnavstate:impl") include(":services:toolbox:api") include(":services:toolbox:impl") -include(":features:onboarding:api") -include(":features:onboarding:impl") -include(":features:logout:api") -include(":features:logout:impl") -include(":features:roomlist:api") -include(":features:roomlist:impl") -include(":features:rageshake:api") -include(":features:rageshake:impl") -include(":features:rageshake:test") -include(":features:preferences:api") -include(":features:preferences:impl") -include(":features:messages:api") -include(":features:messages:impl") -include(":features:login:api") -include(":features:login:impl") -include(":features:createroom:api") -include(":features:createroom:impl") -include(":features:verifysession:api") -include(":features:verifysession:impl") + +fun includeProjects(directory: File, path: String) { + directory.listFiles().orEmpty().forEach { file -> + if (file.isDirectory) { + val newPath = "$path:${file.name}" + val buildFile = File(file, "build.gradle.kts") + if (buildFile.exists()) { + include(newPath) + println("Included project: $newPath") + } else { + includeProjects(file, newPath) + } + } + } +} + +val featuresDir = File(rootDir, "features") +includeProjects(featuresDir, ":features") diff --git a/tests/uitests/build.gradle.kts b/tests/uitests/build.gradle.kts index b7abf23940..9c667beae0 100644 --- a/tests/uitests/build.gradle.kts +++ b/tests/uitests/build.gradle.kts @@ -40,5 +40,5 @@ dependencies { ksp(libs.showkase.processor) allLibrariesImpl() - allFeaturesImpl() + allFeaturesImpl(rootDir) }