Skip to content

Commit d2749bc

Browse files
authored
Merge pull request #13 from stslex/dev
update libs and refactor mvi
2 parents 1c1cb8d + b62829a commit d2749bc

File tree

164 files changed

+2836
-1810
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

164 files changed

+2836
-1810
lines changed

.github/workflows/build_mac_os.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,8 @@ jobs:
3333
LOCAL_PROPERTIES: ${{ secrets.LOCAL_PROPERTIES }}
3434
run: echo "$LOCAL_PROPERTIES" > ./local.properties
3535

36+
- name: generate Ksp metadata
37+
run: ./gradlew kspKotlinMetadata
38+
3639
- name: Build with Gradle
3740
run: cd iosApp && xcodebuild -workspace ./iosApp.xcworkspace -scheme iosApp -configuration Debug -destination 'platform=iOS Simulator,OS=latest,name=iPhone 15' CODE_SIGNING_ALLOWED='NO'

build-logic/convention/build.gradle.kts

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,36 @@ dependencies {
88
compileOnly(libs.android.gradlePlugin) //if targetting Android
99
compileOnly(libs.kotlin.gradlePlugin)
1010
compileOnly(libs.compose.gradlePlugin) //if you are using Compose Multiplatform
11-
compileOnly(libs.ksp.gradlePlugin)
11+
implementation(libs.ksp.gradlePlugin)
1212
compileOnly(libs.room.gradlePlugin) //if you are using Room
1313
}
1414

15+
tasks {
16+
validatePlugins {
17+
enableStricterValidation = true
18+
failOnWarning = true
19+
}
20+
}
21+
1522
gradlePlugin {
1623
plugins {
17-
register("kotlinLibraryMultiplatform") {
18-
id = "convention.kmp.library"
19-
implementationClass = "KMPLibraryConventionPlugin"
20-
}
21-
register("kotlinApplicationMultiplatform") {
22-
id = "convention.kmp.application"
23-
implementationClass = "KMPApplicationConventionPlugin"
24-
}
25-
register("kotlinLibraryComposeMultiplatform") {
26-
id = "convention.kmp.library.compose"
27-
implementationClass = "KMPLibraryComposeConventionPlugin"
28-
}
29-
register("kotlinLibraryComposeAndroid") {
30-
id = "convention.android.library.compose"
31-
implementationClass = "KotlinLibraryComposePlugin"
32-
}
33-
register("kotlinLibraryRoom") {
34-
id = "convention.kmp.library.room"
35-
implementationClass = "RoomLibraryConventionPlugin"
36-
}
24+
setup("KMPApplicationConventionPlugin", libs.plugins.convention.kmp.application)
25+
setup("KMPLibraryConventionPlugin", libs.plugins.convention.kmp.library.asProvider())
26+
setup("KMPLibraryComposeConventionPlugin", libs.plugins.convention.kmp.library.compose)
27+
setup("KotlinLibraryComposePlugin", libs.plugins.convention.android.library.compose)
28+
setup("RoomLibraryConventionPlugin", libs.plugins.convention.kmp.room)
29+
setup("KMPComposeNavigationPlugin", libs.plugins.convention.kmp.navigation)
30+
setup("KmpConventionFeature", libs.plugins.convention.kmp.feature)
31+
}
32+
}
33+
34+
fun NamedDomainObjectContainer<PluginDeclaration>.setup(
35+
className: String,
36+
provider: Provider<PluginDependency>,
37+
) {
38+
val plugin = provider.get()
39+
register(plugin.pluginId) {
40+
id = plugin.pluginId
41+
implementationClass = className
3742
}
3843
}

build-logic/convention/src/main/kotlin/KMPApplicationConventionPlugin.kt

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,16 @@ import AppExt.findVersionInt
44
import AppExt.findVersionString
55
import AppExt.libs
66
import com.android.build.api.dsl.ApplicationExtension
7-
import com.android.build.api.dsl.CommonExtension
8-
import com.google.devtools.ksp.gradle.KspExtension
97
import com.stslex.atten.convention.configureKMPCompose
8+
import com.stslex.atten.convention.configureKMPComposeNavigation
109
import com.stslex.atten.convention.configureKotlin
1110
import com.stslex.atten.convention.configureKotlinAndroid
1211
import com.stslex.atten.convention.configureKotlinAndroidCompose
1312
import com.stslex.atten.convention.configureKotlinMultiplatform
13+
import com.stslex.atten.convention.configureKsp
1414
import org.gradle.api.Plugin
1515
import org.gradle.api.Project
1616
import org.gradle.kotlin.dsl.configure
17-
import org.gradle.kotlin.dsl.getByType
18-
import org.jetbrains.compose.ComposeExtension
19-
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
2017

2118
class KMPApplicationConventionPlugin : Plugin<Project> {
2219

@@ -27,25 +24,17 @@ class KMPApplicationConventionPlugin : Plugin<Project> {
2724
apply(libs.findPluginId("androidApplication"))
2825
apply(libs.findPluginId("jetbrainsCompose"))
2926
apply(libs.findPluginId("composeCompiler"))
30-
apply(libs.findPluginId("ksp"))
3127
apply(libs.findPluginId("serialization"))
3228
}
3329

34-
extensions.configure<KotlinMultiplatformExtension> {
35-
val kspExtension = extensions.getByType<KspExtension>()
36-
configureKotlinMultiplatform(this, kspExtension)
37-
configureKMPCompose(
38-
extension = this,
39-
compose = extensions.getByType<ComposeExtension>().dependencies
40-
)
41-
}
30+
configureKsp()
31+
configureKotlinMultiplatform()
32+
configureKMPCompose()
33+
configureKotlin()
34+
configureKMPComposeNavigation()
4235

4336
extensions.configure<ApplicationExtension> {
44-
configureKotlin()
45-
configureKotlinAndroid(
46-
extension = this,
47-
isApp = true
48-
)
37+
configureKotlinAndroid(this)
4938
configureKotlinAndroidCompose(this)
5039
defaultConfig.apply {
5140
applicationId = APP_PREFIX
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import com.stslex.atten.convention.configureKMPComposeNavigation
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
5+
class KMPComposeNavigationPlugin : Plugin<Project> {
6+
7+
override fun apply(target: Project) {
8+
target.configureKMPComposeNavigation()
9+
}
10+
}
Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,10 @@
1-
import AppExt.findPluginId
2-
import AppExt.libs
3-
import com.android.build.api.dsl.LibraryExtension
4-
import com.stslex.atten.convention.configureKMPCompose
5-
import com.stslex.atten.convention.configureKotlin
6-
import com.stslex.atten.convention.configureKotlinAndroid
7-
import com.stslex.atten.convention.configureKotlinMultiplatform
1+
import com.stslex.atten.convention.configureKMPComposeLibrary
82
import org.gradle.api.Plugin
93
import org.gradle.api.Project
10-
import org.gradle.kotlin.dsl.configure
11-
import org.gradle.kotlin.dsl.getByType
12-
import org.jetbrains.compose.ComposeExtension
13-
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
144

155
class KMPLibraryComposeConventionPlugin : Plugin<Project> {
166

177
override fun apply(target: Project): Unit = with(target) {
18-
with(pluginManager) {
19-
apply(libs.findPluginId("kotlinMultiplatform"))
20-
apply(libs.findPluginId("jetbrainsCompose"))
21-
apply(libs.findPluginId("composeCompiler"))
22-
apply(libs.findPluginId("kotlinCocoapods"))
23-
apply(libs.findPluginId("androidLibrary"))
24-
apply(libs.findPluginId("ksp"))
25-
apply(libs.findPluginId("serialization"))
26-
}
27-
28-
extensions.configure<KotlinMultiplatformExtension> {
29-
configureKMPCompose(
30-
extension = this,
31-
compose = extensions.getByType<ComposeExtension>().dependencies
32-
)
33-
configureKotlinMultiplatform(
34-
extension = this,
35-
kspExtension = extensions.getByType()
36-
)
37-
}
38-
39-
extensions.configure<LibraryExtension> {
40-
configureKotlin()
41-
configureKotlinAndroid(this)
42-
}
8+
configureKMPComposeLibrary()
439
}
4410
}
Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,10 @@
1-
import AppExt.findPluginId
2-
import AppExt.libs
3-
import com.android.build.api.dsl.LibraryExtension
4-
import com.stslex.atten.convention.configureKotlin
5-
import com.stslex.atten.convention.configureKotlinAndroid
6-
import com.stslex.atten.convention.configureKotlinMultiplatform
1+
import com.stslex.atten.convention.configureKmpLibrary
72
import org.gradle.api.Plugin
83
import org.gradle.api.Project
9-
import org.gradle.kotlin.dsl.configure
10-
import org.gradle.kotlin.dsl.getByType
11-
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
124

135
class KMPLibraryConventionPlugin : Plugin<Project> {
146

157
override fun apply(target: Project): Unit = with(target) {
16-
with(pluginManager) {
17-
apply(libs.findPluginId("kotlinMultiplatform"))
18-
apply(libs.findPluginId("kotlinCocoapods"))
19-
apply(libs.findPluginId("androidLibrary"))
20-
apply(libs.findPluginId("ksp"))
21-
apply(libs.findPluginId("serialization"))
22-
}
23-
24-
extensions.configure<KotlinMultiplatformExtension> {
25-
configureKotlinMultiplatform(
26-
extension = this,
27-
kspExtension = extensions.getByType()
28-
)
29-
}
30-
extensions.configure<LibraryExtension> {
31-
configureKotlinAndroid(this)
32-
configureKotlin()
33-
}
8+
configureKmpLibrary()
349
}
3510
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import com.stslex.atten.convention.configureKMPComposeLibrary
2+
import com.stslex.atten.convention.configureKMPComposeNavigation
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
6+
class KmpConventionFeature : Plugin<Project> {
7+
8+
override fun apply(target: Project) = target.run {
9+
configureKMPComposeLibrary()
10+
configureKMPComposeNavigation()
11+
}
12+
}

build-logic/convention/src/main/kotlin/KotlinLibraryComposePlugin.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import AppExt.libs
33
import com.android.build.api.dsl.LibraryExtension
44
import com.stslex.atten.convention.configureKotlin
55
import com.stslex.atten.convention.configureKotlinAndroidCompose
6+
import com.stslex.atten.convention.configureKsp
67
import org.gradle.api.Plugin
78
import org.gradle.api.Project
89
import org.gradle.kotlin.dsl.configure
@@ -13,10 +14,10 @@ class KotlinLibraryComposePlugin : Plugin<Project> {
1314
with(pluginManager) {
1415
apply(libs.findPluginId("androidLibrary"))
1516
apply(libs.findPluginId("composeCompiler"))
16-
apply(libs.findPluginId("ksp"))
1717
}
18+
configureKsp()
19+
configureKotlin()
1820
extensions.configure<LibraryExtension> {
19-
configureKotlin()
2021
configureKotlinAndroidCompose(this)
2122
}
2223
}

build-logic/convention/src/main/kotlin/RoomLibraryConventionPlugin.kt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import AppExt.findPluginId
22
import AppExt.libs
33
import androidx.room.gradle.RoomExtension
4-
import com.google.devtools.ksp.gradle.KspExtension
4+
import com.stslex.atten.convention.configs.KspConfig
5+
import com.stslex.atten.convention.configureKsp
56
import org.gradle.api.Plugin
67
import org.gradle.api.Project
78
import org.gradle.kotlin.dsl.configure
@@ -14,12 +15,11 @@ class RoomLibraryConventionPlugin : Plugin<Project> {
1415
with(target) {
1516
pluginManager.apply {
1617
apply(libs.findPluginId("room"))
17-
apply(libs.findPluginId("ksp"))
1818
apply(libs.findPluginId("kotlinMultiplatform"))
1919
apply(libs.findPluginId("serialization"))
2020
}
2121

22-
extensions.configure<KspExtension> {
22+
configureKsp {
2323
arg("room.generateKotlin", "true")
2424
}
2525

@@ -30,14 +30,12 @@ class RoomLibraryConventionPlugin : Plugin<Project> {
3030
schemaDirectory("$projectDir/schemas")
3131
}
3232

33+
dependencies {
34+
val roomCompiler = libs.findLibrary("room-compiler").get()
35+
KspConfig.platform.forEach { task -> add(task.configName, roomCompiler) }
36+
}
37+
3338
extensions.configure<KotlinMultiplatformExtension> {
34-
dependencies {
35-
val roomCompiler = libs.findLibrary("room-compiler").get()
36-
add("kspAndroid", roomCompiler)
37-
add("kspIosSimulatorArm64", roomCompiler)
38-
add("kspIosX64", roomCompiler)
39-
add("kspIosArm64", roomCompiler)
40-
}
4139
sourceSets.apply {
4240
commonMain.dependencies {
4341
implementation(libs.findLibrary("room-runtime").get())

build-logic/convention/src/main/kotlin/com/stslex/atten/convention/KmpCompose.kt

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,26 @@ package com.stslex.atten.convention
22

33
import AppExt.libs
44
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.configure
6+
import org.gradle.kotlin.dsl.getByType
57
import org.jetbrains.compose.ComposePlugin
68
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
79

8-
fun Project.configureKMPCompose(
9-
extension: KotlinMultiplatformExtension,
10-
compose: ComposePlugin.Dependencies
11-
) = extension.apply {
10+
fun Project.configureKMPCompose() = extensions.configure<KotlinMultiplatformExtension> {
11+
val dependencies = extensions.getByType<ComposePlugin.Dependencies>()
1212
sourceSets.apply {
1313
commonMain.dependencies {
14-
// todo need to add compose dependencies
15-
implementation(compose.ui)
16-
implementation(compose.material3)
17-
implementation(compose.foundation)
18-
implementation(compose.components.uiToolingPreview)
19-
implementation(compose.components.resources)
20-
implementation(compose.runtime)
14+
implementation(dependencies.ui)
15+
implementation(dependencies.material3)
16+
implementation(dependencies.foundation)
17+
implementation(dependencies.components.uiToolingPreview)
18+
implementation(dependencies.components.resources)
19+
implementation(dependencies.runtime)
20+
implementation(dependencies.materialIconsExtended)
21+
2122
implementation(libs.findLibrary("kotlinx-collections-immutable").get())
2223
implementation(libs.findLibrary("koin-compose").get())
24+
implementation(libs.findLibrary("koin-compose-viewmodel").get())
2325
implementation(libs.findLibrary("lifecycle-viewmodel").get())
2426
}
2527
}

0 commit comments

Comments
 (0)