Skip to content

Commit 2fa0049

Browse files
author
babichev.a
committed
convention gradle plugin
1 parent c758b44 commit 2fa0049

16 files changed

Lines changed: 123 additions & 43 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2+
3+
plugins {
4+
`kotlin-dsl`
5+
}
6+
7+
group = "com.softartdev.notedelight.buildlogic"
8+
9+
java {
10+
sourceCompatibility = JavaVersion.toVersion(libs.versions.jdk.get().toInt())
11+
targetCompatibility = JavaVersion.toVersion(libs.versions.jdk.get().toInt())
12+
}
13+
tasks.withType<KotlinCompile>().configureEach {
14+
kotlinOptions {
15+
jvmTarget = JavaVersion.toVersion(libs.versions.jdk.get().toInt()).toString()
16+
}
17+
}
18+
19+
dependencies {
20+
compileOnly(kotlin("gradle-plugin", version = libs.versions.kotlin.get()))
21+
}
22+
23+
tasks {
24+
validatePlugins {
25+
enableStricterValidation = true
26+
failOnWarning = true
27+
}
28+
}
29+
30+
gradlePlugin {
31+
plugins {
32+
register("gradleConvention") {
33+
id = "com.softartdev.notedelight.buildlogic.convention"
34+
implementationClass = "GradleConventionPlugin"
35+
}
36+
}
37+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import org.gradle.api.Plugin
2+
import org.gradle.api.Project
3+
4+
class GradleConventionPlugin : Plugin<Project> {
5+
6+
override fun apply(target: Project) {
7+
}
8+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.softartdev.notedelight
2+
3+
import org.gradle.api.Project
4+
import org.gradle.api.artifacts.VersionCatalog
5+
import org.gradle.api.artifacts.VersionCatalogsExtension
6+
import org.gradle.kotlin.dsl.getByType
7+
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME
8+
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME
9+
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
10+
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_MAIN_SOURCE_SET_NAME
11+
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_TEST_SOURCE_SET_NAME
12+
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer
13+
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
14+
15+
val Project.libs
16+
get(): VersionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")
17+
18+
//FIXME https://github.com/cashapp/sqldelight/issues/4523
19+
fun KotlinSourceSetContainer.iosIntermediateSourceSets(vararg iosTargets: KotlinNativeTarget) {
20+
val children: List<Pair<KotlinSourceSet, KotlinSourceSet>> = iosTargets.map { target ->
21+
val main = target.compilations.getByName(MAIN_COMPILATION_NAME).defaultSourceSet
22+
val test = target.compilations.getByName(TEST_COMPILATION_NAME).defaultSourceSet
23+
return@map main to test
24+
}
25+
val parent: Pair<KotlinSourceSet, KotlinSourceSet> = Pair(
26+
first = sourceSets.getByName(COMMON_MAIN_SOURCE_SET_NAME),
27+
second = sourceSets.getByName(COMMON_TEST_SOURCE_SET_NAME)
28+
)
29+
createIntermediateSourceSet("iosMain", children.map { it.first }, parent.first)
30+
createIntermediateSourceSet("iosTest", children.map { it.second }, parent.second)
31+
}
32+
33+
private fun KotlinSourceSetContainer.createIntermediateSourceSet(
34+
name: String,
35+
children: List<KotlinSourceSet>,
36+
parent: KotlinSourceSet
37+
): KotlinSourceSet = sourceSets.maybeCreate(name).apply {
38+
dependsOn(parent)
39+
children.forEach { it.dependsOn(this) }
40+
}

build-logic/gradle.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534
2+
org.gradle.parallel=true
3+
org.gradle.caching=true
4+
org.gradle.configureondemand=true

build-logic/settings.gradle.kts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
dependencyResolutionManagement {
2+
repositories {
3+
google()
4+
mavenCentral()
5+
}
6+
versionCatalogs {
7+
create("libs") {
8+
from(files("../gradle/libs.versions.toml"))
9+
}
10+
}
11+
}
12+
13+
rootProject.name = "build-logic"
14+
include(":convention")

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
plugins {
2+
alias(libs.plugins.gradle.convention).apply(false)
23
alias(libs.plugins.kotlin.multiplatform).apply(false)
34
alias(libs.plugins.kotlin.android).apply(false)
45
alias(libs.plugins.kotlin.jvm).apply(false)

gradle/libs.versions.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ crashlytics = "2.9.9"
1010
compose = "1.6.1"
1111
composeCompiler = "1.5.10"
1212
coroutines = "1.8.0"
13-
sqlDelight = "2.0.1"
13+
sqlDelight = "2.0.2"
1414
androidxSqlite = "2.4.0"
1515
saferoom = "1.3.0"
1616
androidSqlCipher = "4.5.4"
@@ -138,6 +138,8 @@ espresso-idling-resource = { module = "androidx.test.espresso:espresso-idling-re
138138
desugar = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar" }
139139

140140
[plugins]
141+
gradle-convention = { id = "com.softartdev.notedelight.buildlogic.convention", version = "unspecified" }
142+
141143
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
142144
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
143145
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Sun Feb 11 01:50:04 GET 2024
1+
#Fri Apr 05 16:36:26 GET 2024
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
4-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip
4+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
55
zipStoreBase=GRADLE_USER_HOME
66
zipStorePath=wrapper/dists

ios-compose-kit/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import com.softartdev.notedelight.iosIntermediateSourceSets
12
import org.gradle.internal.os.OperatingSystem
23

34
plugins {
@@ -9,8 +10,7 @@ compose {
910
kotlinCompilerPlugin.set(libs.versions.composeCompiler.get())
1011
}
1112
kotlin {
12-
iosArm64()
13-
iosSimulatorArm64()
13+
iosIntermediateSourceSets(iosArm64(), iosSimulatorArm64())
1414
applyDefaultHierarchyTemplate()
1515

1616
cocoapods {

iosApp/Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ SPEC CHECKSUMS:
2424

2525
PODFILE CHECKSUM: 0dc93a6f6109335ea8cd3f91d2c87cc8c99f04a3
2626

27-
COCOAPODS: 1.15.2
27+
COCOAPODS: 1.12.1

0 commit comments

Comments
 (0)