KT-58662 Fix build reports for Gradle 8.1 with Configuration Cache
This commit is contained in:
committed by
Space Team
parent
f2f979134d
commit
af05f4c201
+80
@@ -29,6 +29,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
get() = projectPath.getSingleFileInDir("build/reports/kotlin-build")
|
get() = projectPath.getSingleFileInDir("build/reports/kotlin-build")
|
||||||
|
|
||||||
@DisplayName("Build report is created")
|
@DisplayName("Build report is created")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildReportSmokeTest(gradleVersion: GradleVersion) {
|
fun testBuildReportSmokeTest(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -43,6 +48,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("Build report output property accepts only certain values")
|
@DisplayName("Build report output property accepts only certain values")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildReportOutputProperty(gradleVersion: GradleVersion) {
|
fun testBuildReportOutputProperty(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -53,24 +63,44 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("Build metrics produces valid report")
|
@DisplayName("Build metrics produces valid report")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildMetricsSmokeTest(gradleVersion: GradleVersion) {
|
fun testBuildMetricsSmokeTest(gradleVersion: GradleVersion) {
|
||||||
testBuildReportInFile("simpleProject", "assemble", gradleVersion)
|
testBuildReportInFile("simpleProject", "assemble", gradleVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("Build metrics produces valid report for mpp-jvm")
|
@DisplayName("Build metrics produces valid report for mpp-jvm")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildMetricsForMppJvm(gradleVersion: GradleVersion) {
|
fun testBuildMetricsForMppJvm(gradleVersion: GradleVersion) {
|
||||||
testBuildReportInFile("mppJvmWithJava", "assemble", gradleVersion)
|
testBuildReportInFile("mppJvmWithJava", "assemble", gradleVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("Build metrics produces valid report for mpp-js")
|
@DisplayName("Build metrics produces valid report for mpp-js")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildMetricsForMppJs(gradleVersion: GradleVersion) {
|
fun testBuildMetricsForMppJs(gradleVersion: GradleVersion) {
|
||||||
testBuildReportInFile("kotlin-js-package-module-name", "assemble", gradleVersion)
|
testBuildReportInFile("kotlin-js-package-module-name", "assemble", gradleVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("Build metrics produces valid report for JS project")
|
@DisplayName("Build metrics produces valid report for JS project")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildMetricsForJsProject(gradleVersion: GradleVersion) {
|
fun testBuildMetricsForJsProject(gradleVersion: GradleVersion) {
|
||||||
testBuildReportInFile("kotlin-js-plugin-project", "compileKotlinJs", gradleVersion,
|
testBuildReportInFile("kotlin-js-plugin-project", "compileKotlinJs", gradleVersion,
|
||||||
@@ -119,6 +149,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("Compiler build metrics report is produced")
|
@DisplayName("Compiler build metrics report is produced")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testCompilerBuildMetricsSmokeTest(gradleVersion: GradleVersion) {
|
fun testCompilerBuildMetricsSmokeTest(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -135,6 +170,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("with no kotlin task executed")
|
@DisplayName("with no kotlin task executed")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testFileReportWithoutKotlinTask(gradleVersion: GradleVersion) {
|
fun testFileReportWithoutKotlinTask(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -149,6 +189,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("validation")
|
@DisplayName("validation")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testSingleBuildMetricsFileValidation(gradleVersion: GradleVersion) {
|
fun testSingleBuildMetricsFileValidation(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -161,6 +206,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("deprecated property")
|
@DisplayName("deprecated property")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testDeprecatedAndNewSingleBuildMetricsFile(gradleVersion: GradleVersion) {
|
fun testDeprecatedAndNewSingleBuildMetricsFile(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -176,6 +226,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("smoke")
|
@DisplayName("smoke")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testSingleBuildMetricsFileSmoke(gradleVersion: GradleVersion) {
|
fun testSingleBuildMetricsFileSmoke(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -195,6 +250,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("custom value limit")
|
@DisplayName("custom value limit")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testCustomValueLimitForBuildScan(gradleVersion: GradleVersion) {
|
fun testCustomValueLimitForBuildScan(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion, buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) {
|
project("simpleProject", gradleVersion, buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) {
|
||||||
@@ -210,6 +270,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("build scan listener lazy initialisation")
|
@DisplayName("build scan listener lazy initialisation")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildScanListenerLazyInitialisation(gradleVersion: GradleVersion) {
|
fun testBuildScanListenerLazyInitialisation(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion, buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) {
|
project("simpleProject", gradleVersion, buildOptions = defaultBuildOptions.copy(logLevel = LogLevel.DEBUG)) {
|
||||||
@@ -226,6 +291,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
private val kotlinErrorPath = ".gradle/kotlin/errors"
|
private val kotlinErrorPath = ".gradle/kotlin/errors"
|
||||||
|
|
||||||
@DisplayName("Error file is created")
|
@DisplayName("Error file is created")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testErrorsFileSmokeTest(gradleVersion: GradleVersion) {
|
fun testErrorsFileSmokeTest(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -265,6 +335,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("Error file should not contain compilation exceptions")
|
@DisplayName("Error file should not contain compilation exceptions")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testErrorsFileWithCompilationError(gradleVersion: GradleVersion) {
|
fun testErrorsFileWithCompilationError(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
@@ -280,6 +355,11 @@ class BuildReportsIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@DisplayName("build scan metrics validation")
|
@DisplayName("build scan metrics validation")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildScanMetricsValidation(gradleVersion: GradleVersion) {
|
fun testBuildScanMetricsValidation(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
|
|||||||
+10
@@ -232,6 +232,11 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() {
|
|||||||
|
|
||||||
@JvmGradlePluginTests
|
@JvmGradlePluginTests
|
||||||
@DisplayName("with build report")
|
@DisplayName("with build report")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6, TestVersions.Gradle.G_8_0],
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildReportSmokeTestForConfigurationCache(gradleVersion: GradleVersion) {
|
fun testBuildReportSmokeTestForConfigurationCache(gradleVersion: GradleVersion) {
|
||||||
project(
|
project(
|
||||||
@@ -251,6 +256,11 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() {
|
|||||||
|
|
||||||
@JvmGradlePluginTests
|
@JvmGradlePluginTests
|
||||||
@DisplayName("with build scan report")
|
@DisplayName("with build scan report")
|
||||||
|
@GradleTestVersions(
|
||||||
|
minVersion = TestVersions.Gradle.MIN_SUPPORTED,
|
||||||
|
additionalVersions = [TestVersions.Gradle.G_7_6], //build scan reports doesn't work properly for Gradle 8.0
|
||||||
|
maxVersion = TestVersions.Gradle.G_8_1
|
||||||
|
)
|
||||||
@GradleTest
|
@GradleTest
|
||||||
fun testBuildScanReportSmokeTestForConfigurationCache(gradleVersion: GradleVersion) {
|
fun testBuildScanReportSmokeTestForConfigurationCache(gradleVersion: GradleVersion) {
|
||||||
project("simpleProject", gradleVersion) {
|
project("simpleProject", gradleVersion) {
|
||||||
|
|||||||
+1
-1
@@ -54,7 +54,7 @@ internal class BuildScanFlowAction : FlowAction<BuildScanFlowAction.Parameters>
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun execute(parameters: Parameters) {
|
override fun execute(parameters: Parameters) {
|
||||||
parameters.buildMetricService.orNull?.addCollectedTagsToBuildScan(parameters.buildScanExtensionHolder.orNull)
|
parameters.buildMetricService.orNull?.addBuildScanReport(parameters.buildScanExtensionHolder.orNull)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+45
-23
@@ -17,6 +17,7 @@ import org.gradle.api.services.BuildService
|
|||||||
import org.gradle.api.services.BuildServiceParameters
|
import org.gradle.api.services.BuildServiceParameters
|
||||||
import org.gradle.api.tasks.Internal
|
import org.gradle.api.tasks.Internal
|
||||||
import org.gradle.tooling.events.FailureResult
|
import org.gradle.tooling.events.FailureResult
|
||||||
|
import org.gradle.tooling.events.FinishEvent
|
||||||
import org.gradle.tooling.events.OperationCompletionListener
|
import org.gradle.tooling.events.OperationCompletionListener
|
||||||
import org.gradle.tooling.events.task.TaskExecutionResult
|
import org.gradle.tooling.events.task.TaskExecutionResult
|
||||||
import org.gradle.tooling.events.task.TaskFailureResult
|
import org.gradle.tooling.events.task.TaskFailureResult
|
||||||
@@ -52,7 +53,7 @@ internal interface UsesBuildMetricsService : Task {
|
|||||||
val buildMetricsService: Property<BuildMetricsService?>
|
val buildMetricsService: Property<BuildMetricsService?>
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class BuildMetricsService : BuildService<BuildMetricsService.Parameters>, AutoCloseable {
|
abstract class BuildMetricsService : BuildService<BuildMetricsService.Parameters>, AutoCloseable, OperationCompletionListener {
|
||||||
|
|
||||||
//Part of BuildReportService
|
//Part of BuildReportService
|
||||||
interface Parameters : BuildServiceParameters {
|
interface Parameters : BuildServiceParameters {
|
||||||
@@ -165,6 +166,14 @@ abstract class BuildMetricsService : BuildService<BuildMetricsService.Parameters
|
|||||||
buildReportService.close(buildOperationRecords, failureMessages.toList(), parameters.toBuildReportParameters())
|
buildReportService.close(buildOperationRecords, failureMessages.toList(), parameters.toBuildReportParameters())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onFinish(event: FinishEvent?) {
|
||||||
|
if (event is TaskFinishEvent) {
|
||||||
|
val buildOperation = updateBuildOperationRecord(event)
|
||||||
|
val buildParameters = parameters.toBuildReportParameters()
|
||||||
|
buildReportService.onFinish(event, buildOperation, buildParameters)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val serviceClass = BuildMetricsService::class.java
|
private val serviceClass = BuildMetricsService::class.java
|
||||||
private val serviceName = "${serviceClass.name}_${serviceClass.classLoader.hashCode()}"
|
private val serviceName = "${serviceClass.name}_${serviceClass.classLoader.hashCode()}"
|
||||||
@@ -221,35 +230,46 @@ abstract class BuildMetricsService : BuildService<BuildMetricsService.Parameters
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun subscribeForTaskEvents(project: Project, buildMetricService: Provider<BuildMetricsService>) {
|
private fun subscribeForTaskEvents(project: Project, buildMetricServiceProvider: Provider<BuildMetricsService>) {
|
||||||
// BuildScanExtension cant be parameter nor BuildService's field
|
// BuildScanExtension cant be parameter nor BuildService's field
|
||||||
val buildScanExtension = project.rootProject.extensions.findByName("buildScan")
|
val buildScanExtension = project.rootProject.extensions.findByName("buildScan")
|
||||||
val buildScan = buildScanExtension?.let { BuildScanExtensionHolder(it) }
|
val buildScan = buildScanExtension?.let { BuildScanExtensionHolder(it) }
|
||||||
|
val buildMetricService = buildMetricServiceProvider.get()
|
||||||
|
val buildScanReportSettings = buildMetricService.parameters.reportingSettings.orNull?.buildScanReportSettings
|
||||||
|
val gradle80withBuildScanReport =
|
||||||
|
GradleVersion.current().baseVersion == GradleVersion.version("8.0") && buildScanReportSettings != null && buildScan != null
|
||||||
|
|
||||||
|
if (!gradle80withBuildScanReport) {
|
||||||
|
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(buildMetricServiceProvider)
|
||||||
|
}
|
||||||
|
|
||||||
val buildScanReportSettings = buildMetricService.get().parameters.reportingSettings.orNull?.buildScanReportSettings
|
|
||||||
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
|
|
||||||
OperationCompletionListener { event ->
|
|
||||||
if (event is TaskFinishEvent) {
|
|
||||||
val buildOperation = buildMetricService.get().updateBuildOperationRecord(event)
|
|
||||||
val buildParameters = buildMetricService.get().parameters.toBuildReportParameters()
|
|
||||||
val buildReportService = buildMetricService.map { it.buildReportService }
|
|
||||||
buildReportService.get().onFinish(event, buildOperation, buildParameters, buildScan)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if (buildScanReportSettings != null) {
|
if (buildScanReportSettings != null) {
|
||||||
buildScan?.also {
|
buildScan?.also { buildScanHolder ->
|
||||||
buildMetricService.map { it.buildReportService }.get().initBuildScanTags(
|
when {
|
||||||
it, buildMetricService.get().parameters.label.orNull
|
GradleVersion.current().baseVersion < GradleVersion.version("8.0") -> {
|
||||||
)
|
buildScanHolder.buildScan.buildFinished {
|
||||||
if (GradleVersion.current().baseVersion < GradleVersion.version("8.0")) {
|
buildMetricServiceProvider.map {it.addBuildScanReport(buildScan)}.get()
|
||||||
it.buildScan.buildFinished {
|
}
|
||||||
buildMetricService.map { it.addCollectedTagsToBuildScan(buildScan) }
|
|
||||||
}
|
}
|
||||||
|
GradleVersion.current().baseVersion < GradleVersion.version("8.1") -> {
|
||||||
|
buildMetricService.buildReportService.initBuildScanTags(buildScan, buildMetricService.parameters.label.orNull)
|
||||||
|
BuildEventsListenerRegistryHolder.getInstance(project).listenerRegistry.onTaskCompletion(project.provider {
|
||||||
|
OperationCompletionListener { event ->
|
||||||
|
if (event is TaskFinishEvent) {
|
||||||
|
val buildOperation = buildMetricService.updateBuildOperationRecord(event)
|
||||||
|
val buildParameters = buildMetricService.parameters.toBuildReportParameters()
|
||||||
|
val buildReportService = buildMetricServiceProvider.map { it.buildReportService }.get()
|
||||||
|
buildReportService.addBuildScanReport(event, buildOperation, buildParameters, buildScanHolder)
|
||||||
|
buildReportService.onFinish(event, buildOperation, buildParameters)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else -> {}//do nothing, BuildScanFlowAction is used
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun registerIfAbsent(project: Project) = registerIfAbsentImpl(project)?.also { serviceProvider ->
|
fun registerIfAbsent(project: Project) = registerIfAbsentImpl(project)?.also { serviceProvider ->
|
||||||
@@ -276,11 +296,13 @@ abstract class BuildMetricsService : BuildService<BuildMetricsService.Parameters
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun addCollectedTagsToBuildScan(buildScan: BuildScanExtensionHolder?) {
|
internal fun addBuildScanReport(buildScan: BuildScanExtensionHolder?) {
|
||||||
if (buildScan == null) return
|
if (buildScan == null) return
|
||||||
|
buildReportService.initBuildScanTags(buildScan, parameters.label.orNull)
|
||||||
|
buildReportService.addBuildScanReport(buildOperationRecords, parameters.toBuildReportParameters(), buildScan)
|
||||||
|
parameters.buildConfigurationTags.orNull?.forEach { buildScan.buildScan.tag(it.readableString) }
|
||||||
buildReportService.addCollectedTags(buildScan)
|
buildReportService.addCollectedTags(buildScan)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class TaskRecord(
|
internal class TaskRecord(
|
||||||
|
|||||||
+47
-18
@@ -68,21 +68,7 @@ class BuildReportsService {
|
|||||||
it.buildReportDir,
|
it.buildReportDir,
|
||||||
parameters.projectName,
|
parameters.projectName,
|
||||||
it.includeMetricsInReport,
|
it.includeMetricsInReport,
|
||||||
buildOperationRecords.mapNotNull {
|
transformOperationRecordsToCompileStatisticsData(buildOperationRecords, parameters, onlyKotlinTask = false),
|
||||||
prepareData(
|
|
||||||
taskResult = null,
|
|
||||||
it.path,
|
|
||||||
it.startTimeMs,
|
|
||||||
it.totalTimeMs + it.startTimeMs,
|
|
||||||
parameters.projectName,
|
|
||||||
buildUuid,
|
|
||||||
parameters.label,
|
|
||||||
parameters.kotlinVersion,
|
|
||||||
it,
|
|
||||||
onlyKotlinTask = false,
|
|
||||||
parameters.additionalTags
|
|
||||||
)
|
|
||||||
},
|
|
||||||
parameters.startParameters,
|
parameters.startParameters,
|
||||||
failureMessages.filter { it.isNotEmpty() },
|
failureMessages.filter { it.isNotEmpty() },
|
||||||
loggerAdapter
|
loggerAdapter
|
||||||
@@ -101,11 +87,32 @@ class BuildReportsService {
|
|||||||
executorService.shutdown()
|
executorService.shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun transformOperationRecordsToCompileStatisticsData(
|
||||||
|
buildOperationRecords: Collection<BuildOperationRecord>,
|
||||||
|
parameters: BuildReportParameters,
|
||||||
|
onlyKotlinTask: Boolean,
|
||||||
|
metricsToShow: Set<String>? = null
|
||||||
|
) = buildOperationRecords.mapNotNull {
|
||||||
|
prepareData(
|
||||||
|
taskResult = null,
|
||||||
|
it.path,
|
||||||
|
it.startTimeMs,
|
||||||
|
it.totalTimeMs + it.startTimeMs,
|
||||||
|
parameters.projectName,
|
||||||
|
buildUuid,
|
||||||
|
parameters.label,
|
||||||
|
parameters.kotlinVersion,
|
||||||
|
it,
|
||||||
|
onlyKotlinTask = onlyKotlinTask,
|
||||||
|
parameters.additionalTags,
|
||||||
|
metricsToShow = metricsToShow
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
fun onFinish(
|
fun onFinish(
|
||||||
event: TaskFinishEvent, buildOperation: BuildOperationRecord,
|
event: TaskFinishEvent, buildOperation: BuildOperationRecord,
|
||||||
parameters: BuildReportParameters, buildScan: BuildScanExtensionHolder?
|
parameters: BuildReportParameters
|
||||||
) {
|
) {
|
||||||
buildScan?.also { addBuildScanReport(event, buildOperation, parameters, it) }
|
|
||||||
addHttpReport(event, buildOperation, parameters)
|
addHttpReport(event, buildOperation, parameters)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +184,7 @@ class BuildReportsService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addBuildScanReport(
|
internal fun addBuildScanReport(
|
||||||
event: TaskFinishEvent,
|
event: TaskFinishEvent,
|
||||||
buildOperationRecord: BuildOperationRecord,
|
buildOperationRecord: BuildOperationRecord,
|
||||||
parameters: BuildReportParameters,
|
parameters: BuildReportParameters,
|
||||||
@@ -201,6 +208,28 @@ class BuildReportsService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun addBuildScanReport(
|
||||||
|
buildOperationRecords: Collection<BuildOperationRecord>,
|
||||||
|
parameters: BuildReportParameters,
|
||||||
|
buildScanExtension: BuildScanExtensionHolder
|
||||||
|
) {
|
||||||
|
val buildScanSettings = parameters.reportingSettings.buildScanReportSettings ?: return
|
||||||
|
|
||||||
|
val (collectDataDuration, compileStatData) = measureTimeMillisWithResult {
|
||||||
|
transformOperationRecordsToCompileStatisticsData(
|
||||||
|
buildOperationRecords,
|
||||||
|
parameters,
|
||||||
|
onlyKotlinTask = true,
|
||||||
|
metricsToShow = buildScanSettings.metrics
|
||||||
|
)
|
||||||
|
}
|
||||||
|
log.debug("Collect data takes $collectDataDuration: $compileStatData")
|
||||||
|
|
||||||
|
compileStatData.forEach {
|
||||||
|
addBuildScanReport(it, buildScanSettings.customValueLimit, buildScanExtension)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun addBuildScanReport(data: CompileStatisticsData, customValuesLimit: Int, buildScan: BuildScanExtensionHolder) {
|
private fun addBuildScanReport(data: CompileStatisticsData, customValuesLimit: Int, buildScan: BuildScanExtensionHolder) {
|
||||||
val elapsedTime = measureTimeMillis {
|
val elapsedTime = measureTimeMillis {
|
||||||
tags.addAll(data.tags)
|
tags.addAll(data.tags)
|
||||||
|
|||||||
Reference in New Issue
Block a user