Skip to content

Commit

Permalink
Support develocity in JUnitXml reporting. (#386)
Browse files Browse the repository at this point in the history
  • Loading branch information
ZacSweers committed May 8, 2024
1 parent d312543 commit a66079e
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ class FladlePluginDelegate {
}
if (config.localResultsDir.hasValue && canImportReport()) {
try {
importReport(this@createTasksForConfig, execFlank)
importReport(project, execFlank)
} catch (e: Exception) {
project.logger.warn(e.message)
e.printStackTrace()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,95 @@
@file:Suppress("DEPRECATION")

package com.osacky.flank.gradle

import com.gradle.enterprise.gradleplugin.test.ImportJUnitXmlReports
import com.gradle.enterprise.gradleplugin.test.JUnitXmlDialect
import org.gradle.api.Project
import org.gradle.api.file.Directory
import org.gradle.api.file.RegularFile
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.TaskContainer
import org.gradle.api.tasks.TaskProvider
import com.gradle.develocity.agent.gradle.test.ImportJUnitXmlReports as DevelocityImportJUnitXmlReports
import com.gradle.develocity.agent.gradle.test.JUnitXmlDialect as DevelocityJUnitXmlDialect
import com.gradle.enterprise.gradleplugin.test.ImportJUnitXmlReports as GEImportJUnitXmlReports
import com.gradle.enterprise.gradleplugin.test.JUnitXmlDialect as GEJUnitXmlDialect

fun canImportReport(): Boolean {
return try {
Class.forName("com.gradle.enterprise.gradleplugin.test.ImportJUnitXmlReports")
true
} catch (e: ClassNotFoundException) {
false
}
}
fun canImportReport(): Boolean = JUnitXmlHandler.canImport()

fun importReport(tasks: TaskContainer, flankTask: TaskProvider<FlankExecutionTask>) {
val enableTestUploads = flankTask.get().project.providers
fun importReport(project: Project, flankTaskProvider: TaskProvider<FlankExecutionTask>) {
val enableTestUploads = project.providers
.gradleProperty("com.osacky.fladle.enableTestUploads")
.forUseAtConfigurationTime()
.getOrElse("true")
.toBoolean()
if (enableTestUploads) {
ImportJUnitXmlReports.register(tasks, flankTask, JUnitXmlDialect.ANDROID_FIREBASE).configure {
reports.setFrom("${project.buildDir}/fladle/${flankTask.get().config.localResultsDir.get()}/JUnitReport.xml")
val resultsProvider: Provider<RegularFile> = project.layout.buildDirectory
.dir("fladle")
.flatMap { fladleDir ->
val localResultsDirProvider: Provider<Directory> = fladleDir
.dir(flankTaskProvider.flatMap { task -> task.config.localResultsDir })

localResultsDirProvider.map { localResultsDir -> localResultsDir.file("JUnitReport.xml") }
}
JUnitXmlHandler.get()?.register(
project.tasks,
flankTaskProvider,
resultsProvider
)
}
}

/** Abstraction over Develocity and GE impls of JUnitXml reporting. */
sealed class JUnitXmlHandler {

abstract fun register(
tasks: TaskContainer,
flankTask: TaskProvider<FlankExecutionTask>,
reportsFile: Provider<RegularFile>,
)

companion object {
private fun canImport(name: String) = try {
Class.forName(name)
true
} catch (e: ClassNotFoundException) {
false
}

private val canImportDevelocity get() = canImport("com.gradle.develocity.agent.gradle.test.ImportJUnitXmlReports")

private val canImportGE get() = canImport("com.gradle.enterprise.gradleplugin.test.ImportJUnitXmlReports")

fun canImport() = canImportDevelocity || canImportGE

fun get() = if (canImportDevelocity) {
DevelocityJunitXmlHandler
} else if (canImportGE) {
GEJunitXmlHandler
} else {
null
}
}

object DevelocityJunitXmlHandler : JUnitXmlHandler() {
override fun register(
tasks: TaskContainer,
flankTask: TaskProvider<FlankExecutionTask>,
reportsFile: Provider<RegularFile>,
) {
DevelocityImportJUnitXmlReports.register(tasks, flankTask, DevelocityJUnitXmlDialect.ANDROID_FIREBASE).configure {
reports.setFrom(reportsFile)
}
}
}

object GEJunitXmlHandler : JUnitXmlHandler() {
override fun register(
tasks: TaskContainer,
flankTask: TaskProvider<FlankExecutionTask>,
reportsFile: Provider<RegularFile>,
) {
GEImportJUnitXmlReports.register(tasks, flankTask, GEJUnitXmlDialect.ANDROID_FIREBASE).configure {
reports.setFrom(reportsFile)
}
}
}
}
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,6 @@ junit = { group = "junit", name = "junit", version.ref = "junit-version" }

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

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

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

0 comments on commit a66079e

Please sign in to comment.