From 690f6fdd32b54ebe9c2b725a1d936af8e3e8f657 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 6 Feb 2019 15:58:10 +0300 Subject: [PATCH] Print build overview --- .../gradle/report/KotlinBuildReporter.kt | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/KotlinBuildReporter.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/KotlinBuildReporter.kt index 95a41de6a22..57d8f0f7025 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/KotlinBuildReporter.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/report/KotlinBuildReporter.kt @@ -40,7 +40,7 @@ internal fun configureBuildReporter(gradle: Gradle, log: Logger) { val ts = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(Calendar.getInstance().time) val perfReportFile = perfLogDir.resolve("${gradle.rootProject.name}-build-$ts.txt") - val reporter = KotlinBuildReporter(perfReportFile) + val reporter = KotlinBuildReporter(gradle, perfReportFile) gradle.addBuildListener(reporter) val buildReportMode = if (properties.buildReportVerbose) BuildReportMode.VERBOSE else BuildReportMode.SIMPLE @@ -54,7 +54,10 @@ internal fun configureBuildReporter(gradle: Gradle, log: Logger) { log.kotlinDebug { "Configured Kotlin build reporter" } } -internal class KotlinBuildReporter(private val perfReportFile: File) : BuildAdapter(), TaskExecutionListener { +internal class KotlinBuildReporter( + private val gradle: Gradle, + private val perfReportFile: File +) : BuildAdapter(), TaskExecutionListener { init { val dir = perfReportFile.parentFile check(dir.isDirectory) { "$dir does not exist or is a file" } @@ -111,15 +114,38 @@ internal class KotlinBuildReporter(private val perfReportFile: File) : BuildAdap override fun buildFinished(result: BuildResult) { val logger = result.gradle?.rootProject?.logger try { - perfReportFile.writeText(taskOverview() + tasksSb.toString()) + perfReportFile.writeText(buildInfo(result) + taskOverview() + tasksSb.toString()) logger?.lifecycle("Kotlin build report is written to ${perfReportFile.canonicalPath}") } catch (e: Throwable) { logger?.error("Could not write Kotlin build report to ${perfReportFile.canonicalPath}", e) } } + private fun buildInfo(result: BuildResult): String { + val startParams = arrayListOf() + gradle.startParameter.apply { + startParams.add("tasks = ${taskRequests.joinToString { it.args.toString() }}") + startParams.add("excluded tasks = $excludedTaskNames") + startParams.add("current dir = $currentDir") + startParams.add("project properties args = $projectProperties") + startParams.add("system properties args = $systemPropertiesArgs") + } + + return buildString { + appendln("Gradle start parameters:") + startParams.forEach { + appendln(" $it") + } + if (result.failure != null) { + appendln("Build failed: ${result.failure}") + } + appendln() + } + } + private fun taskOverview(): String { if (kotlinTaskTimeNs.isEmpty()) return buildString { appendln("No Kotlin task was run") } + val sb = StringBuilder() val kotlinTotalTimeNs = kotlinTaskTimeNs.values.sum() val ktTaskPercent = (kotlinTotalTimeNs.toDouble() / allTasksTimeNs * 100).asString(1)