Browse Source

Add utility methods for automatically including api/impl feature modules

test/jme/compound-poc
ganfra 2 years ago
parent
commit
91bff7fad4
  1. 2
      app/build.gradle.kts
  2. 2
      appnav/build.gradle.kts
  3. 43
      plugins/src/main/kotlin/extension/DependencyHandleScope.kt
  4. 37
      settings.gradle.kts
  5. 2
      tests/uitests/build.gradle.kts

2
app/build.gradle.kts

@ -203,7 +203,7 @@ knit {
dependencies { dependencies {
allLibrariesImpl() allLibrariesImpl()
allServicesImpl() allServicesImpl()
allFeaturesImpl() allFeaturesImpl(rootDir)
implementation(projects.tests.uitests) implementation(projects.tests.uitests)
implementation(projects.anvilannotations) implementation(projects.anvilannotations)
implementation(projects.appnav) implementation(projects.appnav)

2
appnav/build.gradle.kts

@ -38,7 +38,7 @@ dependencies {
implementation(libs.dagger) implementation(libs.dagger)
kapt(libs.dagger.compiler) kapt(libs.dagger.compiler)
allFeaturesApi() allFeaturesApi(rootDir)
implementation(projects.libraries.core) implementation(projects.libraries.core)
implementation(projects.libraries.architecture) implementation(projects.libraries.architecture)

43
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.accessors.dm.LibrariesForLibs
import org.gradle.kotlin.dsl.DependencyHandlerScope import org.gradle.kotlin.dsl.DependencyHandlerScope
import org.gradle.kotlin.dsl.project import org.gradle.kotlin.dsl.project
import java.io.File
/** /**
* Dependencies used by all the modules * 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") 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() { fun DependencyHandlerScope.allLibrariesImpl() {
implementation(project(":libraries:designsystem")) implementation(project(":libraries:designsystem"))
implementation(project(":libraries:matrix:impl")) implementation(project(":libraries:matrix:impl"))
@ -70,26 +86,11 @@ fun DependencyHandlerScope.allServicesImpl() {
implementation(project(":services:toolbox:impl")) implementation(project(":services:toolbox:impl"))
} }
fun DependencyHandlerScope.allFeaturesApi() { fun DependencyHandlerScope.allFeaturesApi(rootDir: File) {
implementation(project(":features:onboarding:api")) val featuresDir = File(rootDir, "features")
implementation(project(":features:login:api")) addImplementationProjects(featuresDir, ":features", "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.allFeaturesImpl(rootDir: File) {
fun DependencyHandlerScope.allFeaturesImpl() { val featuresDir = File(rootDir, "features")
implementation(project(":features:onboarding:impl")) addImplementationProjects(featuresDir, ":features", "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"))
} }

37
settings.gradle.kts

@ -73,22 +73,21 @@ include(":services:appnavstate:impl")
include(":services:toolbox:api") include(":services:toolbox:api")
include(":services:toolbox:impl") include(":services:toolbox:impl")
include(":features:onboarding:api")
include(":features:onboarding:impl") fun includeProjects(directory: File, path: String) {
include(":features:logout:api") directory.listFiles().orEmpty().forEach { file ->
include(":features:logout:impl") if (file.isDirectory) {
include(":features:roomlist:api") val newPath = "$path:${file.name}"
include(":features:roomlist:impl") val buildFile = File(file, "build.gradle.kts")
include(":features:rageshake:api") if (buildFile.exists()) {
include(":features:rageshake:impl") include(newPath)
include(":features:rageshake:test") println("Included project: $newPath")
include(":features:preferences:api") } else {
include(":features:preferences:impl") includeProjects(file, newPath)
include(":features:messages:api") }
include(":features:messages:impl") }
include(":features:login:api") }
include(":features:login:impl") }
include(":features:createroom:api")
include(":features:createroom:impl") val featuresDir = File(rootDir, "features")
include(":features:verifysession:api") includeProjects(featuresDir, ":features")
include(":features:verifysession:impl")

2
tests/uitests/build.gradle.kts

@ -40,5 +40,5 @@ dependencies {
ksp(libs.showkase.processor) ksp(libs.showkase.processor)
allLibrariesImpl() allLibrariesImpl()
allFeaturesImpl() allFeaturesImpl(rootDir)
} }

Loading…
Cancel
Save