Add git branch to http statistic

This commit is contained in:
nataliya.valtman
2022-11-14 16:33:07 +01:00
committed by Space Team
parent ad78f27cce
commit ff340505ec
6 changed files with 31 additions and 5 deletions
@@ -86,6 +86,9 @@ class BuildStatisticsWithKtorIT : KGPBaseTest() {
if (!startParameters.tasks.containsAll(validationData.tasks.toList())) {
validationErrors.add("Different set of executed tasks. Expected ${validationData.tasks.asList()} actual ${startParameters.tasks}")
}
if (gitBranch.isBlank()) {
validationErrors.add("Git branch is not set")
}
return validationErrors
}
@@ -97,6 +97,9 @@ internal class PropertiesProvider private constructor(private val project: Proje
val buildReportHttpVerboseEnvironment: Boolean
get() = property("kotlin.build.report.http.verbose_environment")?.toBoolean() ?: false
val buildReportHttpIncludeGitBranchName: Boolean
get() = property("kotlin.build.report.http.include_git_branch.name")?.toBoolean() ?: false
val buildReportBuildScanCustomValuesLimit: Int
get() = property("kotlin.build.report.build_scan.custom_values_limit")?.toInt() ?: 1000
@@ -73,6 +73,7 @@ data class BuildFinishStatisticsData(
val timestamp: String = formatter.format(finishTime),
val hostName: String? = "Unset",
val tags: List<String>,
val gitBranch: String = "Unset"
)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.gradle.report
import org.gradle.api.Project
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.invocation.Gradle
import org.gradle.api.logging.Logging
import org.gradle.api.provider.ListProperty
@@ -26,13 +27,14 @@ import org.jetbrains.kotlin.gradle.plugin.stat.StatTag
import org.jetbrains.kotlin.gradle.report.data.BuildExecutionData
import org.jetbrains.kotlin.gradle.utils.formatSize
import org.jetbrains.kotlin.gradle.utils.isConfigurationCacheAvailable
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.utils.addToStdlib.measureTimeMillisWithResult
import java.io.File
import java.net.InetAddress
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
import kotlin.system.measureTimeMillis
abstract class BuildReportsService : BuildService<BuildReportsService.Parameters>, AutoCloseable, OperationCompletionListener {
@@ -55,6 +57,7 @@ abstract class BuildReportsService : BuildService<BuildReportsService.Parameters
val reportingSettings: Property<ReportingSettings>
var buildMetricsService: Provider<BuildMetricsService>
val projectDir: DirectoryProperty
val label: Property<String?>
val projectName: Property<String>
val kotlinVersion: Property<String>
@@ -100,6 +103,17 @@ abstract class BuildReportsService : BuildService<BuildReportsService.Parameters
}
private fun reportBuildFinish() {
val httpReportSettings = parameters.reportingSettings.get().httpReportSettings ?: return
val branchName = if (httpReportSettings.includeGitBranchName) {
val process = ProcessBuilder("git", "rev-parse", "--abbrev-ref", "HEAD")
.directory(parameters.projectDir.asFile.get())
.start().also {
it.waitFor(5, TimeUnit.SECONDS)
}
process.inputStream.reader().readText()
} else "is not set"
val buildFinishData = BuildFinishStatisticsData(
projectName = parameters.projectName.get(),
startParameters = parameters.startParameters.get()
@@ -109,9 +123,11 @@ abstract class BuildReportsService : BuildService<BuildReportsService.Parameters
totalTime = (System.nanoTime() - startTime) / 1_000_000,
finishTime = System.currentTimeMillis(),
hostName = hostName,
tags = tags.toList()
tags = tags.toList(),
gitBranch = branchName
)
parameters.reportingSettings.get().httpReportSettings?.also { sendDataViaHttp(it, buildFinishData, log) }
sendDataViaHttp(httpReportSettings, buildFinishData, log)
}
private fun GradleBuildStartParameters.includeVerboseEnvironment(verboseEnvironment: Boolean): GradleBuildStartParameters {
@@ -301,6 +317,7 @@ abstract class BuildReportsService : BuildService<BuildReportsService.Parameters
it.parameters.startParameters.set(getStartParameters(project))
it.parameters.reportingSettings.set(reportingSettings)
it.parameters.buildMetricsService = buildMetricsService
it.parameters.projectDir.set(project.rootProject.layout.projectDirectory)
//init gradle tags for build scan and http reports
it.parameters.additionalTags.value(setupTags(gradle))
@@ -35,7 +35,8 @@ data class HttpReportSettings(
val url: String,
val password: String?,
val user: String?,
val verboseEnvironment: Boolean
val verboseEnvironment: Boolean,
val includeGitBranchName: Boolean
) : Serializable {
companion object {
const val serialVersionUID: Long = 0
@@ -34,7 +34,8 @@ internal fun reportingSettings(rootProject: Project): ReportingSettings {
?: 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)
val includeGitBranchName = properties.buildReportHttpIncludeGitBranchName
HttpReportSettings(url, password, user, properties.buildReportHttpVerboseEnvironment, includeGitBranchName)
} else {
null
}