From f87fdb43faec567a62590c1060fd506b2c5b7960 Mon Sep 17 00:00:00 2001 From: "Nataliya.Valtman" Date: Thu, 4 May 2023 00:22:17 +0200 Subject: [PATCH] KT-57224: Add kotlin language version to file report --- .../statistics/file/FileReportService.kt | 6 ++ .../build.gradle.kts | 1 + .../jetbrains/kotlin/gradle/BuildReportsIT.kt | 76 ++++++++++++++----- .../kotlin/gradle/testbase/testDsl.kt | 1 + 4 files changed, 66 insertions(+), 18 deletions(-) diff --git a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/statistics/file/FileReportService.kt b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/statistics/file/FileReportService.kt index f10eec27c74..df1e0e7fa02 100644 --- a/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/statistics/file/FileReportService.kt +++ b/compiler/build-tools/kotlin-build-statistics/src/org/jetbrains/kotlin/build/report/statistics/file/FileReportService.kt @@ -278,6 +278,12 @@ class FileReportService( p.println("Task '${statisticsData.taskName}' finished in ${formatTime(statisticsData.durationMs)}") } + statisticsData.kotlinLanguageVersion?.also { + p.withIndent("Task info:") { + p.println("Kotlin language version: $it") + } + } + if (statisticsData.icLogLines.isNotEmpty()) { p.withIndent("Compilation log for task '${statisticsData.taskName}':") { statisticsData.icLogLines.forEach { p.println(it) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts index eb1cfb37a90..cade05db554 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts @@ -55,6 +55,7 @@ dependencies { } } + testImplementation(project(":kotlin-gradle-compiler-types")) testImplementation(project(":kotlin-gradle-plugin-idea")) testImplementation(testFixtures(project(":kotlin-gradle-plugin-idea"))) testImplementation(project(":kotlin-gradle-plugin-idea-proto")) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt index 94250088da4..060e6e619ed 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildReportsIT.kt @@ -15,6 +15,7 @@ import java.io.ObjectInputStream import java.nio.file.Path import kotlin.io.path.* import kotlin.test.assertTrue +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion @DisplayName("Build reports") @JvmGradlePluginTests @@ -54,28 +55,67 @@ class BuildReportsIT : KGPBaseTest() { @DisplayName("Build metrics produces valid report") @GradleTest fun testBuildMetricsSmokeTest(gradleVersion: GradleVersion) { - project("simpleProject", gradleVersion) { - build("assemble") { + testBuildReportInFile("simpleProject", "assemble", gradleVersion) + } + + @DisplayName("Build metrics produces valid report for mpp-jvm") + @GradleTest + fun testBuildMetricsForMppJvm(gradleVersion: GradleVersion) { + testBuildReportInFile("mppJvmWithJava", "assemble", gradleVersion) + } + + @DisplayName("Build metrics produces valid report for mpp-js") + @GradleTest + fun testBuildMetricsForMppJs(gradleVersion: GradleVersion) { + testBuildReportInFile("kotlin-js-package-module-name", "assemble", gradleVersion) + } + + @DisplayName("Build metrics produces valid report for JS project") + @GradleTest + fun testBuildMetricsForJsProject(gradleVersion: GradleVersion) { + testBuildReportInFile("kotlin-js-plugin-project", "compileKotlinJs", gradleVersion, + languageVersion = KotlinVersion.KOTLIN_1_7.version) + } + + private fun testBuildReportInFile(project: String, task: String, gradleVersion: GradleVersion, + languageVersion: String = KotlinVersion.KOTLIN_2_0.version) { + project(project, gradleVersion) { + build(task) { assertBuildReportPathIsPrinted() } //Should contains build metrics for all compile kotlin tasks - assertFileContains( - reportFile, - "Time metrics:", - "Run compilation:", - "Incremental compilation in daemon:", - "Size metrics:", - "Total size of the cache directory:", - "Total compiler iteration:", - "ABI snapshot size:", - //for non-incremental builds - "Build attributes:", - "REBUILD_REASON:", - //gc metrics - "GC count:", - "GC time:", - ) + validateBuildReportFile(KotlinVersion.DEFAULT.version) } + + project(project, gradleVersion, buildOptions = defaultBuildOptions.copy(languageVersion = languageVersion)) { + build(task, buildOptions = buildOptions.copy(languageVersion = languageVersion)) { + assertBuildReportPathIsPrinted() + } + //Should contains build metrics for all compile kotlin tasks + validateBuildReportFile(languageVersion) + } + } + + private fun TestProject.validateBuildReportFile(kotlinLanguageVersion: String) { + assertFileContains( + reportFile, + "Time metrics:", + "Run compilation:", + "Incremental compilation in daemon:", + "Size metrics:", + "Total size of the cache directory:", + "Total compiler iteration:", + "ABI snapshot size:", + //for non-incremental builds + "Build attributes:", + "REBUILD_REASON:", + //gc metrics + "GC count:", + "GC time:", + //task info + "Task info:", + "Kotlin language version: $kotlinLanguageVersion", + ) } @DisplayName("Compiler build metrics report is produced") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt index 9650b8d3126..3dd98223514 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt @@ -565,6 +565,7 @@ internal fun Path.enableAndroidSdk() { applyAndroidTestFixes() } + internal fun Path.enableCacheRedirector() { // Path relative to the current gradle module project dir val redirectorScript = Paths.get("../../../repo/scripts/cache-redirector.settings.gradle.kts")