Skip to content

Commit 83bb86d

Browse files
committed
Wrap build.gradle.kts code in setupBuildLogic { ... }
1 parent 04b021b commit 83bb86d

File tree

17 files changed

+234
-154
lines changed

17 files changed

+234
-154
lines changed

build-logic/build-logic-base/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ dependencies {
77
api(libs.android.gradle)
88
api(libs.kotlin.gradle)
99
api(libs.dokka.gradle)
10-
api(libs.gradleVersions)
1110
}
1211

1312
gradlePlugin {

build-logic/build-logic-base/src/main/kotlin/com/ensody/buildlogic/AndroidExt.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ fun Project.setupAndroid(
1212
coreLibraryDesugaring: Provider<MinimalExternalModuleDependency>?,
1313
javaVersion: JavaVersion = JavaVersion.VERSION_17,
1414
) {
15-
pluginManager.apply("com.android.library")
16-
1715
configure<BaseExtension> {
1816
namespace = "$group.${name.replace('-', '.')}"
1917
val sdk = 35

build-logic/build-logic-base/src/main/kotlin/com/ensody/buildlogic/BuildLogicBasePlugin.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,21 @@ class BuildLogicBaseDependencies(
2020

2121
lateinit var buildLogicBaseDeps: BuildLogicBaseDependencies
2222

23-
fun Project.initBuildLogicBase() {
23+
fun Project.initBuildLogicBase(block: Project.() -> Unit) {
2424
require(isRootProject) { "initBuildLogic() must be called on the root project!" }
2525
buildLogicBaseDeps = BuildLogicBaseDependencies(this)
2626
version = detectProjectVersion()
2727
println("Version: $version")
2828
subprojects {
2929
version = rootProject.version
3030
}
31-
setupBuildLogicBase()
31+
block()
3232
}
3333

34-
fun Project.setupBuildLogicBase() {
35-
pluginManager.apply("com.ensody.build-logic-base")
36-
37-
if (isRootProject) return
38-
34+
fun Project.setupBuildLogicBase(block: Project.() -> Unit) {
3935
group = (listOf(rootProject.group) + project.path.trimStart(':').split(".").dropLast(1))
4036
.joinToString(".")
37+
block()
4138
}
4239

4340
val libs get() = buildLogicBaseDeps.libs

build-logic/build-logic-base/src/main/kotlin/com/ensody/buildlogic/DokkaExt.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import org.jetbrains.dokka.gradle.engine.plugins.DokkaHtmlPluginParameters
1010
import java.time.LocalDate
1111

1212
fun Project.setupDokka(copyright: String) {
13-
plugins.apply("org.jetbrains.dokka")
14-
1513
extra.set(dokkaDoneMarker, true)
1614

1715
if (!isRootProject) {

build-logic/build-logic-base/src/main/kotlin/com/ensody/buildlogic/KotlinJvmExt.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@ fun Project.setupKotlinJvm(
1818
javaVersion: JavaVersion = JavaVersion.VERSION_17,
1919
block: KotlinJvmExtension.() -> Unit = {},
2020
) {
21-
pluginManager.apply("org.jetbrains.kotlin.jvm")
2221
tasks.withType<Test> {
2322
testLogging {
2423
exceptionFormat = TestExceptionFormat.FULL
2524
}
2625
}
27-
configure< KotlinJvmExtension> {
26+
configure<KotlinJvmExtension> {
2827
explicitApi = ExplicitApiMode.Strict
2928
jvmToolchain {
3029
languageVersion.set(JavaLanguageVersion.of(javaVersion.majorVersion))

build-logic/build-logic-base/src/main/kotlin/com/ensody/buildlogic/KotlinMultiplatformExt.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ fun Project.setupKmp(
1919
javaVersion: JavaVersion = JavaVersion.VERSION_17,
2020
block: KotlinMultiplatformExtension.() -> Unit,
2121
) {
22-
pluginManager.apply("org.jetbrains.kotlin.multiplatform")
2322
tasks.withType<Test> {
2423
testLogging {
2524
exceptionFormat = TestExceptionFormat.FULL
2625
}
2726
}
27+
2828
configure<KotlinMultiplatformExtension> {
2929
explicitApi = ExplicitApiMode.Strict
3030
jvmToolchain {

build-logic/build-logic-base/src/main/kotlin/com/ensody/buildlogic/PlatformProjectExt.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import org.gradle.api.publish.maven.MavenPublication
77
import org.gradle.kotlin.dsl.getByType
88

99
fun Project.setupPlatformProject() {
10-
pluginManager.apply("java-platform")
11-
1210
extensions.getByType<JavaPlatformExtension>().allowDependencies()
1311

1412
afterEvaluate {

build-logic/build-logic-base/src/main/kotlin/com/ensody/buildlogic/PublishingExt.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ fun Project.setupPublication(
2929
signingKeyInfo: SigningKeyInfo? = null,
3030
block: MavenPublication.() -> Unit = {},
3131
) {
32-
plugins.apply("maven-publish")
33-
3432
if (pluginManager.hasPlugin("java-platform")) {
3533
configure<PublishingExtension> {
3634
publications {
@@ -94,12 +92,12 @@ fun Project.setupPublication(
9492
}
9593

9694
if (signingKeyInfo != null) {
97-
plugins.apply("signing")
95+
pluginManager.apply("signing")
9896
configure<SigningExtension> {
9997
useInMemoryPgpKeys(signingKeyInfo.keyId, signingKeyInfo.keyRing, signingKeyInfo.keyPassword)
10098
}
10199
}
102-
if (plugins.hasPlugin("signing")) {
100+
if (pluginManager.hasPlugin("signing")) {
103101
configure<SigningExtension> {
104102
sign(extensions.getByType<PublishingExtension>().publications)
105103
}

build-logic/build-logic/src/main/kotlin/com/ensody/buildlogic/BuildLogicPlugin.kt

Lines changed: 106 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -2,119 +2,146 @@
22

33
package com.ensody.buildlogic
44

5+
import com.android.build.gradle.BaseExtension
56
import io.github.gradlenexus.publishplugin.NexusPublishExtension
67
import org.gradle.api.Plugin
78
import org.gradle.api.Project
9+
import org.gradle.api.artifacts.ProjectDependency
10+
import org.gradle.api.plugins.JavaPlatformExtension
11+
import org.gradle.api.publish.PublishingExtension
812
import org.gradle.kotlin.dsl.assign
913
import org.gradle.kotlin.dsl.configure
10-
import org.gradle.kotlin.dsl.dependencies
14+
import org.gradle.kotlin.dsl.findByType
1115
import org.gradle.kotlin.dsl.repositories
16+
import org.jetbrains.dokka.gradle.DokkaExtension
17+
import org.jetbrains.kotlin.gradle.dsl.KotlinBaseExtension
18+
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
1219
import java.net.URI
1320

1421
class BuildLogicPlugin : Plugin<Project> {
15-
override fun apply(target: Project) {}
22+
override fun apply(target: Project) {
23+
target.run {
24+
pluginManager.apply("com.ensody.build-logic-base")
25+
if (!isRootProject) {
26+
if (name.endsWith("-bom")) {
27+
pluginManager.apply("java-platform")
28+
} else {
29+
pluginManager.apply("com.android.library")
30+
pluginManager.apply("org.jetbrains.kotlin.multiplatform")
31+
if ("-compose" in name) {
32+
pluginManager.apply("org.jetbrains.compose")
33+
pluginManager.apply("org.jetbrains.kotlin.plugin.compose")
34+
}
35+
}
36+
pluginManager.apply("maven-publish")
37+
}
38+
pluginManager.apply("org.jetbrains.dokka")
39+
}
40+
}
1641
}
1742

1843
fun Project.initBuildLogic() {
1944
group = "com.ensody.reactivestate"
2045

21-
initBuildLogicBase()
22-
allprojects {
23-
setupBuildLogic()
24-
}
46+
initBuildLogicBase {
47+
setupRepositories()
2548

26-
configure<NexusPublishExtension> {
27-
repositories {
28-
sonatype {
29-
nexusUrl.set(URI("https://s01.oss.sonatype.org/service/local/"))
30-
snapshotRepositoryUrl.set(URI("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
31-
username = System.getenv("PUBLICATION_USERNAME")
32-
password = System.getenv("PUBLICATION_PASSWORD")
49+
configure<NexusPublishExtension> {
50+
repositories {
51+
sonatype {
52+
nexusUrl.set(URI("https://s01.oss.sonatype.org/service/local/"))
53+
snapshotRepositoryUrl.set(URI("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
54+
username = System.getenv("PUBLICATION_USERNAME")
55+
password = System.getenv("PUBLICATION_PASSWORD")
56+
}
3357
}
3458
}
3559
}
3660
}
3761

38-
fun Project.setupBuildLogic() {
39-
pluginManager.apply("com.ensody.build-logic")
40-
62+
fun Project.setupRepositories() {
4163
repositories {
4264
google()
4365
mavenCentral()
4466
if (System.getenv("RUNNING_ON_CI") != "true") {
4567
mavenLocal()
4668
}
4769
}
70+
}
4871

49-
if (isRootProject) return
50-
51-
setupBuildLogicBase()
52-
53-
if (project.name.endsWith("-bom")) {
54-
setupPlatformProject()
55-
} else {
56-
setupAndroid(coreLibraryDesugaring = libs.findLibrary("desugarJdkLibs").get())
57-
setupKmp {
58-
addAllTargets(onlyComposeSupport = project.name == "reactivestate-compose")
59-
compilerOptions {
60-
optIn.add("kotlinx.coroutines.ExperimentalCoroutinesApi")
61-
optIn.add("kotlinx.coroutines.ExperimentalForInheritanceCoroutinesApi")
62-
optIn.add("kotlinx.coroutines.FlowPreview")
63-
optIn.add("com.ensody.reactivestate.ExperimentalReactiveStateApi")
64-
}
65-
}
66-
tasks.register("testAll") {
67-
group = "verification"
68-
dependsOn(
69-
"testDebugUnitTest",
70-
"jvmTest",
71-
"iosSimulatorArm64Test",
72-
"iosX64Test",
73-
"macosArm64Test",
74-
"macosX64Test",
75-
"mingwX64Test",
76-
"linuxX64Test",
77-
// "linuxArm64Test",
78-
// "tvosSimulatorArm64Test",
79-
// "tvosX64Test",
80-
// "watchosSimulatorArm64Test",
81-
// "watchosX64Test",
82-
// "jsIrNodeTest",
83-
)
72+
fun Project.setupBuildLogic(block: Project.() -> Unit) {
73+
setupBuildLogicBase {
74+
setupRepositories()
75+
if (extensions.findByType<JavaPlatformExtension>() != null) {
76+
setupPlatformProject()
8477
}
85-
86-
dependencies {
87-
add("commonMainApi", platform(libs.findLibrary("coroutines-bom").get()))
78+
if (extensions.findByType<BaseExtension>() != null) {
79+
setupAndroid(coreLibraryDesugaring = libs.findLibrary("desugarJdkLibs").get())
8880
}
89-
90-
setupKtLint(libs.findLibrary("ktlint-cli").get())
91-
setupDokka(copyright = "Ensody GmbH")
92-
}
93-
94-
setupPublication(
95-
withJavadocJar = true,
96-
withSources = true,
97-
signingKeyInfo = SigningKeyInfo.loadFromEnvOrNull(),
98-
) {
99-
pom {
100-
name = "${rootProject.name}: ${project.name}"
101-
description = "Kotlin Multiplatform ViewModels and reactive state management based on StateFlow"
102-
url = "https://github.com/ensody/ReactiveState-Kotlin"
103-
licenses {
104-
apache2()
81+
if (extensions.findByType<KotlinMultiplatformExtension>() != null) {
82+
setupKmp {
83+
addAllTargets(onlyComposeSupport = project.name == "reactivestate-compose")
84+
compilerOptions {
85+
optIn.add("kotlinx.coroutines.ExperimentalCoroutinesApi")
86+
optIn.add("kotlinx.coroutines.ExperimentalForInheritanceCoroutinesApi")
87+
optIn.add("kotlinx.coroutines.FlowPreview")
88+
optIn.add("com.ensody.reactivestate.ExperimentalReactiveStateApi")
89+
}
10590
}
106-
scm {
107-
url.set(this@pom.url)
91+
tasks.register("testAll") {
92+
group = "verification"
93+
dependsOn(
94+
"testDebugUnitTest",
95+
"jvmTest",
96+
"iosSimulatorArm64Test",
97+
"iosX64Test",
98+
"macosArm64Test",
99+
"macosX64Test",
100+
"mingwX64Test",
101+
"linuxX64Test",
102+
// "linuxArm64Test",
103+
// "tvosSimulatorArm64Test",
104+
// "tvosX64Test",
105+
// "watchosSimulatorArm64Test",
106+
// "watchosX64Test",
107+
// "jsIrNodeTest",
108+
)
108109
}
109-
developers {
110-
developer {
111-
id = "wkornewald"
112-
name = "Waldemar Kornewald"
113-
url = "https://www.ensody.com"
114-
organization = "Ensody GmbH"
115-
organizationUrl = url
110+
}
111+
if (extensions.findByType<KotlinBaseExtension>() != null) {
112+
setupKtLint(libs.findLibrary("ktlint-cli").get())
113+
}
114+
if (extensions.findByType<DokkaExtension>() != null) {
115+
setupDokka(copyright = "Ensody GmbH")
116+
}
117+
if (extensions.findByType<PublishingExtension>() != null) {
118+
setupPublication(
119+
withJavadocJar = true,
120+
withSources = true,
121+
signingKeyInfo = SigningKeyInfo.loadFromEnvOrNull(),
122+
) {
123+
pom {
124+
name = "${rootProject.name}: ${project.name}"
125+
description = "Kotlin Multiplatform ViewModels and reactive state management based on StateFlow"
126+
url = "https://github.com/ensody/ReactiveState-Kotlin"
127+
licenses {
128+
apache2()
129+
}
130+
scm {
131+
url.set(this@pom.url)
132+
}
133+
developers {
134+
developer {
135+
id = "wkornewald"
136+
name = "Waldemar Kornewald"
137+
url = "https://www.ensody.com"
138+
organization = "Ensody GmbH"
139+
organizationUrl = url
140+
}
141+
}
116142
}
117143
}
118144
}
145+
block()
119146
}
120147
}

build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ plugins {
77
alias(libs.plugins.jetbrains.compose) apply false
88
alias(libs.plugins.kotlin.compose) apply false
99
alias(libs.plugins.dokka) apply false
10-
alias(libs.plugins.versions)
1110
alias(libs.plugins.nexusPublish)
1211
}
1312

0 commit comments

Comments
 (0)