Print build overview
This commit is contained in:
+29
-3
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user