Skip to content

Commit a66079e

Browse files
authored
Support develocity in JUnitXml reporting. (#386)
1 parent d312543 commit a66079e

File tree

3 files changed

+84
-17
lines changed

3 files changed

+84
-17
lines changed

fladle-plugin/src/main/java/com/osacky/flank/gradle/FladlePluginDelegate.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class FladlePluginDelegate {
142142
}
143143
if (config.localResultsDir.hasValue && canImportReport()) {
144144
try {
145-
importReport(this@createTasksForConfig, execFlank)
145+
importReport(project, execFlank)
146146
} catch (e: Exception) {
147147
project.logger.warn(e.message)
148148
e.printStackTrace()
Lines changed: 82 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,95 @@
1+
@file:Suppress("DEPRECATION")
2+
13
package com.osacky.flank.gradle
24

3-
import com.gradle.enterprise.gradleplugin.test.ImportJUnitXmlReports
4-
import com.gradle.enterprise.gradleplugin.test.JUnitXmlDialect
5+
import org.gradle.api.Project
6+
import org.gradle.api.file.Directory
7+
import org.gradle.api.file.RegularFile
8+
import org.gradle.api.provider.Provider
59
import org.gradle.api.tasks.TaskContainer
610
import org.gradle.api.tasks.TaskProvider
11+
import com.gradle.develocity.agent.gradle.test.ImportJUnitXmlReports as DevelocityImportJUnitXmlReports
12+
import com.gradle.develocity.agent.gradle.test.JUnitXmlDialect as DevelocityJUnitXmlDialect
13+
import com.gradle.enterprise.gradleplugin.test.ImportJUnitXmlReports as GEImportJUnitXmlReports
14+
import com.gradle.enterprise.gradleplugin.test.JUnitXmlDialect as GEJUnitXmlDialect
715

8-
fun canImportReport(): Boolean {
9-
return try {
10-
Class.forName("com.gradle.enterprise.gradleplugin.test.ImportJUnitXmlReports")
11-
true
12-
} catch (e: ClassNotFoundException) {
13-
false
14-
}
15-
}
16+
fun canImportReport(): Boolean = JUnitXmlHandler.canImport()
1617

17-
fun importReport(tasks: TaskContainer, flankTask: TaskProvider<FlankExecutionTask>) {
18-
val enableTestUploads = flankTask.get().project.providers
18+
fun importReport(project: Project, flankTaskProvider: TaskProvider<FlankExecutionTask>) {
19+
val enableTestUploads = project.providers
1920
.gradleProperty("com.osacky.fladle.enableTestUploads")
20-
.forUseAtConfigurationTime()
2121
.getOrElse("true")
2222
.toBoolean()
2323
if (enableTestUploads) {
24-
ImportJUnitXmlReports.register(tasks, flankTask, JUnitXmlDialect.ANDROID_FIREBASE).configure {
25-
reports.setFrom("${project.buildDir}/fladle/${flankTask.get().config.localResultsDir.get()}/JUnitReport.xml")
24+
val resultsProvider: Provider<RegularFile> = project.layout.buildDirectory
25+
.dir("fladle")
26+
.flatMap { fladleDir ->
27+
val localResultsDirProvider: Provider<Directory> = fladleDir
28+
.dir(flankTaskProvider.flatMap { task -> task.config.localResultsDir })
29+
30+
localResultsDirProvider.map { localResultsDir -> localResultsDir.file("JUnitReport.xml") }
31+
}
32+
JUnitXmlHandler.get()?.register(
33+
project.tasks,
34+
flankTaskProvider,
35+
resultsProvider
36+
)
37+
}
38+
}
39+
40+
/** Abstraction over Develocity and GE impls of JUnitXml reporting. */
41+
sealed class JUnitXmlHandler {
42+
43+
abstract fun register(
44+
tasks: TaskContainer,
45+
flankTask: TaskProvider<FlankExecutionTask>,
46+
reportsFile: Provider<RegularFile>,
47+
)
48+
49+
companion object {
50+
private fun canImport(name: String) = try {
51+
Class.forName(name)
52+
true
53+
} catch (e: ClassNotFoundException) {
54+
false
55+
}
56+
57+
private val canImportDevelocity get() = canImport("com.gradle.develocity.agent.gradle.test.ImportJUnitXmlReports")
58+
59+
private val canImportGE get() = canImport("com.gradle.enterprise.gradleplugin.test.ImportJUnitXmlReports")
60+
61+
fun canImport() = canImportDevelocity || canImportGE
62+
63+
fun get() = if (canImportDevelocity) {
64+
DevelocityJunitXmlHandler
65+
} else if (canImportGE) {
66+
GEJunitXmlHandler
67+
} else {
68+
null
69+
}
70+
}
71+
72+
object DevelocityJunitXmlHandler : JUnitXmlHandler() {
73+
override fun register(
74+
tasks: TaskContainer,
75+
flankTask: TaskProvider<FlankExecutionTask>,
76+
reportsFile: Provider<RegularFile>,
77+
) {
78+
DevelocityImportJUnitXmlReports.register(tasks, flankTask, DevelocityJUnitXmlDialect.ANDROID_FIREBASE).configure {
79+
reports.setFrom(reportsFile)
80+
}
81+
}
82+
}
83+
84+
object GEJunitXmlHandler : JUnitXmlHandler() {
85+
override fun register(
86+
tasks: TaskContainer,
87+
flankTask: TaskProvider<FlankExecutionTask>,
88+
reportsFile: Provider<RegularFile>,
89+
) {
90+
GEImportJUnitXmlReports.register(tasks, flankTask, GEJUnitXmlDialect.ANDROID_FIREBASE).configure {
91+
reports.setFrom(reportsFile)
92+
}
2693
}
2794
}
2895
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ junit = { group = "junit", name = "junit", version.ref = "junit-version" }
5555

5656
kotlin-stdlib-jdk7 = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk7", version.ref = "kotlin" }
5757

58-
gradle-enterprise = { module = "com.gradle:gradle-enterprise-gradle-plugin", version = "3.16.1" }
58+
gradle-enterprise = { module = "com.gradle:gradle-enterprise-gradle-plugin", version = "3.17.1" }
5959

6060
truth = "com.google.truth:truth:1.3.0"

0 commit comments

Comments
 (0)