From 862d46f58be9f2ff2e488f0d4c6973da358b12b2 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Tue, 5 Oct 2021 17:46:39 +0200 Subject: [PATCH] Enable publishing test build build-scan. ^KT-45745 In Progress --- .../gradle/testbase/projectSetupDefaults.kt | 1 + .../kotlin/gradle/testbase/testDsl.kt | 46 +++++++++++++++++-- .../testProject/simpleProject/settings.gradle | 1 + 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt index 0603c31f346..e4ada6973f4 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/projectSetupDefaults.kt @@ -14,6 +14,7 @@ internal val DEFAULT_GROOVY_SETTINGS_FILE = repositories { mavenLocal() mavenCentral() + gradlePluginPortal() } plugins { 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 ad33786891b..aa8ff813b66 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 @@ -30,6 +30,7 @@ fun KGPBaseTest.project( gradleVersion: GradleVersion, buildOptions: KGPBaseTest.BuildOptions = defaultBuildOptions, forceOutput: Boolean = false, + enableBuildScan: Boolean = false, addHeapDumpOptions: Boolean = true, enableGradleDebug: Boolean = false, projectPathAdditionalSuffix: String = "", @@ -60,7 +61,8 @@ fun KGPBaseTest.project( projectPath, gradleVersion, enableGradleDebug, - forceOutput + forceOutput, + enableBuildScan ) if (buildJdk != null) testProject.setupNonDefaultJdk(buildJdk) @@ -77,13 +79,17 @@ fun TestProject.build( forceOutput: Boolean = this.forceOutput, enableGradleDebug: Boolean = this.enableGradleDebug, enableBuildCacheDebug: Boolean = false, + enableBuildScan: Boolean = this.enableBuildScan, buildOptions: KGPBaseTest.BuildOptions = this.buildOptions, assertions: BuildResult.() -> Unit = {} ) { + if (enableBuildScan) agreeToBuildScanService() + val allBuildArguments = commonBuildSetup( buildArguments.toList(), buildOptions, enableBuildCacheDebug, + enableBuildScan, gradleVersion ) val gradleRunnerForBuild = gradleRunner @@ -92,6 +98,7 @@ fun TestProject.build( .withArguments(allBuildArguments) withBuildSummary(allBuildArguments) { val buildResult = gradleRunnerForBuild.build() + if (enableBuildScan) buildResult.printBuildScanUrl() assertions(buildResult) } } @@ -104,13 +111,17 @@ fun TestProject.buildAndFail( forceOutput: Boolean = this.forceOutput, enableGradleDebug: Boolean = this.enableGradleDebug, enableBuildCacheDebug: Boolean = false, + enableBuildScan: Boolean = this.enableBuildScan, buildOptions: KGPBaseTest.BuildOptions = this.buildOptions, assertions: BuildResult.() -> Unit = {} ) { + if (enableBuildScan) agreeToBuildScanService() + val allBuildArguments = commonBuildSetup( buildArguments.toList(), buildOptions, enableBuildCacheDebug, + enableBuildScan, gradleVersion ) val gradleRunnerForBuild = gradleRunner @@ -119,6 +130,7 @@ fun TestProject.buildAndFail( .withArguments(allBuildArguments) withBuildSummary(allBuildArguments) { val buildResult = gradleRunnerForBuild.buildAndFail() + if (enableBuildScan) buildResult.printBuildScanUrl() assertions(buildResult) } @@ -152,7 +164,8 @@ class TestProject( val projectPath: Path, val gradleVersion: GradleVersion, val enableGradleDebug: Boolean, - val forceOutput: Boolean + val forceOutput: Boolean, + val enableBuildScan: Boolean ) { val rootBuildGradle: Path get() = projectPath.resolve("build.gradle") val settingsGradle: Path get() = projectPath.resolve("settings.gradle") @@ -173,15 +186,18 @@ private fun commonBuildSetup( buildArguments: List, buildOptions: KGPBaseTest.BuildOptions, enableBuildCacheDebug: Boolean, + enableBuildScan: Boolean, gradleVersion: GradleVersion ): List { val buildOptionsArguments = buildOptions.toArguments(gradleVersion) val buildCacheDebugOption = if (enableBuildCacheDebug) "-Dorg.gradle.caching.debug=true" else null + val buildScanOption = if (enableBuildScan) "--scan" else null return buildOptionsArguments + buildArguments + listOfNotNull( "--full-stacktrace", - buildCacheDebugOption + buildCacheDebugOption, + buildScanOption ) } @@ -254,6 +270,30 @@ private fun Path.addDefaultBuildFiles() { } } +@OptIn(ExperimentalPathApi::class) +private fun TestProject.agreeToBuildScanService() { + settingsGradle.appendText( + """ + + gradleEnterprise { + buildScan { + termsOfServiceUrl = "https://gradle.com/terms-of-service" + termsOfServiceAgree = "yes" + } + } + + """.trimIndent() + ) +} + +private fun BuildResult.printBuildScanUrl() { + val buildScanUrl = output + .lineSequence() + .first { it.contains("https://gradle.com/s/") } + .replaceBefore("https://gradle", "") + println("Build scan url: $buildScanUrl") +} + private fun TestProject.setupNonDefaultJdk(pathToJdk: File) { gradleProperties.modify { """ diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleProject/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleProject/settings.gradle index 3d37bf0b81c..de7969b173a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleProject/settings.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/simpleProject/settings.gradle @@ -2,6 +2,7 @@ pluginManagement { repositories { mavenLocal() mavenCentral() + gradlePluginPortal() } plugins {