Skip to content

Commit f5ab956

Browse files
authored
Using compile only (#59)
* using compile only
1 parent c2c47d2 commit f5ab956

File tree

5 files changed

+158
-41
lines changed

5 files changed

+158
-41
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "io.github.cdsap"
9-
version = "0.2.0"
9+
version = "0.3.0"
1010

1111
java {
1212
toolchain {
@@ -18,7 +18,7 @@ dependencies {
1818
implementation("io.github.cdsap:jdk-tools-parser:0.1.1")
1919
implementation("io.github.cdsap:commandline-value-source:0.1.0")
2020
implementation("com.jakewharton.picnic:picnic:0.7.0")
21-
implementation("com.gradle:develocity-gradle-plugin:4.2.2")
21+
compileOnly("com.gradle:develocity-gradle-plugin:4.2.2")
2222
testImplementation("junit:junit:4.13.2")
2323
}
2424
tasks.withType<Test>().configureEach {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.github.cdsap.kotlinprocess
2+
3+
class Constants {
4+
companion object {
5+
const val KOTLIN_PROCESS_NAME = "KotlinCompileDaemon"
6+
}
7+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package io.github.cdsap.kotlinprocess
2+
3+
import com.gradle.develocity.agent.gradle.DevelocityConfiguration
4+
import io.github.cdsap.jdk.tools.parser.ConsolidateProcesses
5+
import io.github.cdsap.jdk.tools.parser.model.Process
6+
import io.github.cdsap.jdk.tools.parser.model.TypeProcess
7+
import io.github.cdsap.kotlinprocess.output.DevelocityValues
8+
import io.github.cdsap.valuesourceprocess.jInfo
9+
import io.github.cdsap.valuesourceprocess.jStat
10+
import org.gradle.api.Project
11+
import org.gradle.api.provider.Provider
12+
13+
class DevelocityWrapperConfiguration {
14+
15+
fun configureProjectWithDevelocity(target: Project) {
16+
val extension = target.extensions.findByType(DevelocityWrapperConfiguration::class.java) != null
17+
if (extension) {
18+
buildScanDevelocityReporting(target, target.extensions.findByType(DevelocityConfiguration::class.java)!!)
19+
target.extensions.create("develocity", DevelocityWrapperConfiguration::class.java)
20+
}
21+
}
22+
23+
private fun buildScanDevelocityReporting(
24+
project: Project,
25+
buildScanExtension: DevelocityConfiguration
26+
) {
27+
val (jStat, jInfo) = providerPair(project)
28+
29+
buildScanExtension.buildScan.buildFinished {
30+
val processes = processes(jStat, jInfo)
31+
DevelocityValues(buildScanExtension, processes).addProcessesInfoToBuildScan()
32+
}
33+
}
34+
35+
private fun processes(
36+
jStat: Provider<String>,
37+
jInfo: Provider<String>
38+
): List<Process> {
39+
val processes = ConsolidateProcesses().consolidate(jStat.get(), jInfo.get(), TypeProcess.Kotlin)
40+
return processes
41+
}
42+
43+
private fun providerPair(project: Project): Pair<Provider<String>, Provider<String>> {
44+
val jStat = project.jStat(Constants.KOTLIN_PROCESS_NAME)
45+
val jInfo = project.jInfo(Constants.KOTLIN_PROCESS_NAME)
46+
return Pair(jStat, jInfo)
47+
}
48+
}
Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
package io.github.cdsap.kotlinprocess
22

3-
import com.gradle.develocity.agent.gradle.DevelocityConfiguration
4-
import io.github.cdsap.jdk.tools.parser.ConsolidateProcesses
5-
import io.github.cdsap.jdk.tools.parser.model.Process
6-
import io.github.cdsap.jdk.tools.parser.model.TypeProcess
7-
import io.github.cdsap.kotlinprocess.output.DevelocityValues
83
import io.github.cdsap.valuesourceprocess.jInfo
94
import io.github.cdsap.valuesourceprocess.jStat
105
import org.gradle.api.Plugin
116
import org.gradle.api.Project
12-
import org.gradle.api.provider.Provider
137
import org.gradle.build.event.BuildEventsListenerRegistry
148
import org.gradle.kotlin.dsl.support.serviceOf
159

1610

1711
class InfoKotlinProcessPlugin : Plugin<Project> {
18-
private val nameProcess = "KotlinCompileDaemon"
1912
override fun apply(target: Project) {
2013
target.gradle.rootProject {
2114

22-
val develocityConfiguration = extensions.findByType(DevelocityConfiguration::class.java)
23-
24-
if (develocityConfiguration != null) {
25-
buildScanDevelocityReporting(project, develocityConfiguration)
15+
val hasDevelocity = try {
16+
Class.forName("com.gradle.develocity.agent.gradle.DevelocityConfiguration")
17+
true
18+
} catch (_: ClassNotFoundException) {
19+
false
20+
}
21+
if (hasDevelocity ) {
22+
DevelocityWrapperConfiguration().configureProjectWithDevelocity(target)
2623
} else {
2724
consoleReporting(target)
2825
}
@@ -33,35 +30,9 @@ class InfoKotlinProcessPlugin : Plugin<Project> {
3330
val service = project.gradle.sharedServices.registerIfAbsent(
3431
"kotlinProcessService", InfoKotlinProcessBuildService::class.java
3532
) {
36-
parameters.jInfoProvider = project.jInfo(nameProcess)
37-
parameters.jStatProvider = project.jStat(nameProcess)
33+
parameters.jInfoProvider = project.jInfo(Constants.KOTLIN_PROCESS_NAME)
34+
parameters.jStatProvider = project.jStat(Constants.KOTLIN_PROCESS_NAME)
3835
}
3936
project.serviceOf<BuildEventsListenerRegistry>().onTaskCompletion(service)
4037
}
41-
42-
private fun buildScanDevelocityReporting(
43-
project: Project,
44-
buildScanExtension: DevelocityConfiguration
45-
) {
46-
val (jStat, jInfo) = providerPair(project)
47-
48-
buildScanExtension.buildScan.buildFinished {
49-
val processes = processes(jStat, jInfo)
50-
DevelocityValues(buildScanExtension, processes).addProcessesInfoToBuildScan()
51-
}
52-
}
53-
54-
private fun processes(
55-
jStat: Provider<String>,
56-
jInfo: Provider<String>
57-
): List<Process> {
58-
val processes = ConsolidateProcesses().consolidate(jStat.get(), jInfo.get(), TypeProcess.Kotlin)
59-
return processes
60-
}
61-
62-
private fun providerPair(project: Project): Pair<Provider<String>, Provider<String>> {
63-
val jStat = project.jStat(nameProcess)
64-
val jInfo = project.jInfo(nameProcess)
65-
return Pair(jStat, jInfo)
66-
}
6738
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package io.github.cdsap.kotlinprocess
2+
3+
import junit.framework.TestCase
4+
import org.gradle.internal.impldep.org.junit.Assume
5+
import org.gradle.testkit.runner.GradleRunner
6+
import org.junit.Rule
7+
import org.junit.Test
8+
import org.junit.rules.TemporaryFolder
9+
10+
class InfoKotlinProcessNoDVTest {
11+
12+
@Rule
13+
@JvmField
14+
val testProjectDir = TemporaryFolder()
15+
16+
@Test
17+
fun testPluginIsCompatibleWithConfigurationCacheWithDevelocity() {
18+
19+
testProjectDir.newFile("settings.gradle").appendText(
20+
"""
21+
""".trimIndent()
22+
)
23+
testProjectDir.newFile("build.gradle").appendText(
24+
"""
25+
plugins {
26+
id 'org.jetbrains.kotlin.jvm' version '1.7.21'
27+
id 'application'
28+
id 'io.github.cdsap.kotlinprocess'
29+
}
30+
repositories {
31+
mavenCentral()
32+
}
33+
34+
""".trimIndent()
35+
)
36+
listOf("8.14.2").forEach {
37+
val firstBuild = GradleRunner.create()
38+
.withProjectDir(testProjectDir.root)
39+
.withArguments("compileKotlin", "--configuration-cache")
40+
.withPluginClasspath()
41+
.withGradleVersion(it)
42+
.build()
43+
val secondBuild = GradleRunner.create()
44+
.withProjectDir(testProjectDir.root)
45+
.withArguments("compileKotlin", "--configuration-cache")
46+
.withPluginClasspath()
47+
.withGradleVersion(it)
48+
.build()
49+
TestCase.assertTrue(firstBuild.output.contains("Configuration cache entry stored"))
50+
TestCase.assertTrue(secondBuild.output.contains("Configuration cache entry reused."))
51+
}
52+
}
53+
54+
@Test
55+
fun testPluginIsCompatibleWithProjectIsolation() {
56+
57+
testProjectDir.newFile("settings.gradle").appendText(
58+
"""
59+
""".trimIndent()
60+
)
61+
testProjectDir.newFile("build.gradle").appendText(
62+
"""
63+
plugins {
64+
id 'org.jetbrains.kotlin.jvm' version '2.0.20'
65+
id 'application'
66+
id 'io.github.cdsap.kotlinprocess'
67+
}
68+
repositories {
69+
mavenCentral()
70+
}
71+
72+
""".trimIndent()
73+
)
74+
listOf("8.14.2").forEach {
75+
val firstBuild = GradleRunner.create()
76+
.withProjectDir(testProjectDir.root)
77+
.withArguments("compileKotlin", "-Dorg.gradle.unsafe.isolated-projects=true")
78+
.withPluginClasspath()
79+
.withGradleVersion(it)
80+
.build()
81+
val secondBuild = GradleRunner.create()
82+
.withProjectDir(testProjectDir.root)
83+
.withArguments("compileKotlin", "-Dorg.gradle.unsafe.isolated-projects=true")
84+
.withPluginClasspath()
85+
.withGradleVersion(it)
86+
.build()
87+
TestCase.assertTrue(firstBuild.output.contains("Configuration cache entry stored"))
88+
TestCase.assertTrue(secondBuild.output.contains("Configuration cache entry reused."))
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)