Print build overview

This commit is contained in:
Alexey Tsvetkov
2019-02-06 15:58:10 +03:00
parent 7084fd8966
commit 690f6fdd32
@@ -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 ts = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(Calendar.getInstance().time)
val perfReportFile = perfLogDir.resolve("${gradle.rootProject.name}-build-$ts.txt") val perfReportFile = perfLogDir.resolve("${gradle.rootProject.name}-build-$ts.txt")
val reporter = KotlinBuildReporter(perfReportFile) val reporter = KotlinBuildReporter(gradle, perfReportFile)
gradle.addBuildListener(reporter) gradle.addBuildListener(reporter)
val buildReportMode = if (properties.buildReportVerbose) BuildReportMode.VERBOSE else BuildReportMode.SIMPLE 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" } 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 { init {
val dir = perfReportFile.parentFile val dir = perfReportFile.parentFile
check(dir.isDirectory) { "$dir does not exist or is a file" } 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) { override fun buildFinished(result: BuildResult) {
val logger = result.gradle?.rootProject?.logger val logger = result.gradle?.rootProject?.logger
try { try {
perfReportFile.writeText(taskOverview() + tasksSb.toString()) perfReportFile.writeText(buildInfo(result) + taskOverview() + tasksSb.toString())
logger?.lifecycle("Kotlin build report is written to ${perfReportFile.canonicalPath}") logger?.lifecycle("Kotlin build report is written to ${perfReportFile.canonicalPath}")
} catch (e: Throwable) { } catch (e: Throwable) {
logger?.error("Could not write Kotlin build report to ${perfReportFile.canonicalPath}", e) logger?.error("Could not write Kotlin build report to ${perfReportFile.canonicalPath}", e)
} }
} }
private fun buildInfo(result: BuildResult): String {
val startParams = arrayListOf<String>()
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 { private fun taskOverview(): String {
if (kotlinTaskTimeNs.isEmpty()) return buildString { appendln("No Kotlin task was run") } if (kotlinTaskTimeNs.isEmpty()) return buildString { appendln("No Kotlin task was run") }
val sb = StringBuilder() val sb = StringBuilder()
val kotlinTotalTimeNs = kotlinTaskTimeNs.values.sum() val kotlinTotalTimeNs = kotlinTaskTimeNs.values.sum()
val ktTaskPercent = (kotlinTotalTimeNs.toDouble() / allTasksTimeNs * 100).asString(1) val ktTaskPercent = (kotlinTotalTimeNs.toDouble() / allTasksTimeNs * 100).asString(1)