Add property validation for single file report

#KT-54335 Fixed
#KT-54356 Fixed
This commit is contained in:
nataliya.valtman
2022-10-10 18:31:13 +02:00
committed by Space Team
parent 5e96bf0795
commit 512f7b3231
3 changed files with 41 additions and 14 deletions
@@ -12,10 +12,7 @@ import org.jetbrains.kotlin.gradle.report.BuildReportType
import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.DisplayName
import java.io.ObjectInputStream
import kotlin.io.path.exists
import kotlin.io.path.listDirectoryEntries
import kotlin.io.path.name
import kotlin.io.path.notExists
import kotlin.io.path.*
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue
@@ -97,6 +94,33 @@ class BuildReportsIT : KGPBaseTest() {
}
}
@DisplayName("validation")
@GradleTest
fun testSingleBuildMetricsFileValidation(gradleVersion: GradleVersion) {
project("simpleProject", gradleVersion) {
buildAndFail(
"compileKotlin", "-Pkotlin.build.report.output=SINGLE_FILE",
) {
assertOutputContains("Can't configure single file report: 'kotlin.build.report.single_file' property is mandatory")
}
}
}
@DisplayName("deprecated property")
@GradleTest
fun testDeprecatedAndNewSingleBuildMetricsFile(gradleVersion: GradleVersion) {
project("simpleProject", gradleVersion) {
val newMetricsPath = projectPath.resolve("metrics.bin")
val deprecatedMetricsPath = projectPath.resolve("deprecated_metrics.bin")
build(
"compileKotlin", "-Pkotlin.build.report.single_file=${newMetricsPath.pathString}",
"-Pkotlin.internal.single.build.metrics.file=${deprecatedMetricsPath.pathString}"
)
assertTrue { deprecatedMetricsPath.exists() }
assertTrue { newMetricsPath.notExists() }
}
}
@DisplayName("smoke")
@GradleTest
fun testSingleBuildMetricsFileSmoke(gradleVersion: GradleVersion) {
@@ -59,7 +59,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
get() = this.property("kotlin.internal.single.build.metrics.file")?.let { File(it) }
val buildReportSingleFile: File?
get() = this.property("kotlin.build.report.single_file")?.let { File(it) }
get() = this.property(PropertyNames.KOTLIN_BUILD_REPORT_SINGLE_FILE)?.let { File(it) }
@Deprecated(message = "Please use kotlin.build.report.output instead ")
val buildReportEnabled: Boolean
@@ -86,10 +86,8 @@ internal class PropertiesProvider private constructor(private val project: Proje
val buildReportFileOutputDir: File?
get() = this.property("kotlin.build.report.file.output_dir")?.let { File(it) }
val buildReportHttpUrlProperty = "kotlin.build.report.http.url"
val buildReportHttpUrl: String?
get() = this.property(buildReportHttpUrlProperty)
get() = this.property(PropertyNames.KOTLIN_BUILD_REPORT_HTTP_URL)
val buildReportHttpUser: String?
get() = this.property("kotlin.build.report.http.user")
@@ -515,6 +513,8 @@ internal class PropertiesProvider private constructor(private val project: Proje
const val KOTLIN_MPP_ENABLE_PLATFORM_INTEGER_COMMONIZATION = "kotlin.mpp.enablePlatformIntegerCommonization"
const val KOTLIN_ABI_SNAPSHOT = "kotlin.incremental.classpath.snapshot.enabled"
const val KOTLIN_JS_KARMA_BROWSERS = "kotlin.js.browser.karma.browsers"
const val KOTLIN_BUILD_REPORT_SINGLE_FILE = "kotlin.build.report.single_file"
const val KOTLIN_BUILD_REPORT_HTTP_URL = "kotlin.build.report.http.url"
}
companion object {
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.gradle.report
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_BUILD_REPORT_SINGLE_FILE
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_BUILD_REPORT_HTTP_URL
internal fun reportingSettings(rootProject: Project): ReportingSettings {
val properties = PropertiesProvider(rootProject)
@@ -29,7 +31,7 @@ internal fun reportingSettings(rootProject: Project): ReportingSettings {
val httpReportSettings = if (buildReportOutputTypes.contains(BuildReportType.HTTP)) {
val url = properties.buildReportHttpUrl
?: throw IllegalStateException("Can't configure http report: '${properties.buildReportHttpUrlProperty}' property is mandatory")
?: throw IllegalStateException("Can't configure http report: '$KOTLIN_BUILD_REPORT_HTTP_URL' property is mandatory")
val password = properties.buildReportHttpPassword
val user = properties.buildReportHttpUser
HttpReportSettings(url, password, user, properties.buildReportHttpVerboseEnvironment)
@@ -43,13 +45,14 @@ internal fun reportingSettings(rootProject: Project): ReportingSettings {
null
}
val singleOutputFile = if (buildReportOutputTypes.contains(BuildReportType.SINGLE_FILE)) {
properties.buildReportSingleFile
?: throw IllegalStateException("Can't configure single file report: '$KOTLIN_BUILD_REPORT_SINGLE_FILE' property is mandatory")
} else null
//temporary solution. support old property
val oldSingleBuildMetric = properties.singleBuildMetricsFile?.also { buildReportOutputTypes.add(BuildReportType.SINGLE_FILE) }
val singleOutputFile = if (buildReportOutputTypes.contains(BuildReportType.SINGLE_FILE)) {
properties.buildReportSingleFile ?: oldSingleBuildMetric
} else null
return ReportingSettings(
buildReportMode = buildReportMode,
buildReportLabel = properties.buildReportLabel,
@@ -57,7 +60,7 @@ internal fun reportingSettings(rootProject: Project): ReportingSettings {
httpReportSettings = httpReportSettings,
buildScanReportSettings = buildScanSettings,
buildReportOutputs = buildReportOutputTypes,
singleOutputFile = singleOutputFile,
singleOutputFile = singleOutputFile ?: oldSingleBuildMetric,
)
}