Skip to content

Commit

Permalink
Merge pull request #35 from Automattic/remove_not_cc_compatible_fields
Browse files Browse the repository at this point in the history
Remove metrics that are not configuration cache compatible
  • Loading branch information
wzieba authored Feb 28, 2024
2 parents 7e1e86f + 3223274 commit a4a0430
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,22 @@ package com.automattic.android.measure.models
import com.automattic.android.measure.MeasureBuildsExtension
import kotlinx.serialization.Serializable

/**
* Be extra careful when adding new parameters to build data. It's resolved during configuration
* phase, so it's necessary to make sure that changes in those parameters will invalidate
* the configuration cache. You can do this in BuildTimePluginConfigurationCacheTests.
*
* Details: https://discuss.gradle.org/t/is-there-a-way-to-get-up-to-date-gradle-start-parameters-with-configuration-cache/47806/
*/
@Serializable
data class BuildData(
val forProject: MeasureBuildsExtension.AutomatticProject,
val user: String,
val tasks: List<String>,
val daemonsRunning: Int,
val thisDaemonBuilds: Int,
val gradleVersion: String,
val operatingSystem: String,
val environment: Environment,
val isConfigureOnDemand: Boolean,
val isConfigurationCache: Boolean,
val isBuildCache: Boolean,
val maxWorkers: Int,
val includedBuildsNames: List<String>,
val architecture: String,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,11 @@ fun InMemoryReport.toAppsInfraPayload(gradleScanId: String?): GroupedAppsMetrics
"build-time-ms" to executionData.buildTime.toString(),
"build-status" to if (executionData.failed) "Failure" else "Success",
"failure-message" to executionData.failure.toString(),
"number-of-running-daemons" to buildData.daemonsRunning.toString(),
"daemons-build-count" to buildData.thisDaemonBuilds.toString(),
"gradle-version" to buildData.gradleVersion,
"up-to-date-tasks" to taskGroups[UP_TO_DATE].sizeOrZero(),
"cached-tasks" to taskGroups[IS_FROM_CACHE].sizeOrZero(),
"executed-tasks" to taskGroups[EXECUTED].sizeOrZero(),
"configure-on-demand" to buildData.isConfigureOnDemand.toString(),
"configuration-cache" to buildData.isConfigurationCache.toString(),
"build-cache" to buildData.isBuildCache.toString(),
"max-workers" to buildData.maxWorkers.toString(),
"included-builds" to buildData.includedBuildsNames.joinToString(separator = ",")
.ifEmpty { "none" },
"build-finished-at" to executionData.buildFinishedTimestamp.toString(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import com.automattic.android.measure.models.BuildData
import com.automattic.android.measure.models.Environment
import org.gradle.api.Project
import org.gradle.api.invocation.Gradle
import org.gradle.invocation.DefaultGradle
import org.gradle.launcher.daemon.server.scaninfo.DaemonScanInfo

object BuildDataProvider {

Expand All @@ -16,25 +14,16 @@ object BuildDataProvider {
username: String,
): BuildData {
val gradle = project.gradle

val services = (gradle as DefaultGradle).services

val daemonInfo = services[DaemonScanInfo::class.java]
val startParameter = gradle.startParameter

@Suppress("UnstableApiUsage")
return BuildData(
forProject = automatticProject,
daemonsRunning = daemonInfo.numberOfRunningDaemons,
thisDaemonBuilds = daemonInfo.numberOfBuilds,
tasks = startParameter.taskNames,
environment = gradle.environment(),
gradleVersion = gradle.gradleVersion,
operatingSystem = System.getProperty("os.name").lowercase(),
isConfigureOnDemand = startParameter.isConfigureOnDemand,
isConfigurationCache = startParameter.isConfigurationCacheRequested,
isBuildCache = startParameter.isBuildCacheEnabled,
maxWorkers = startParameter.maxWorkerCount,
includedBuildsNames = gradle.includedBuilds.toList().map { it.name },
architecture = architecture(project),
user = username,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.automattic.android.measure

import com.automattic.android.measure.models.BuildData
import com.automattic.android.measure.models.Environment
import com.automattic.android.measure.models.ExecutionData
import kotlinx.serialization.json.Json
import org.assertj.core.api.Assertions.assertThat
import org.gradle.testkit.runner.GradleRunner
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test
import java.io.File

Expand Down Expand Up @@ -74,16 +74,12 @@ class BuildTimePluginConfigurationCacheTests {
}

@Test
@Disabled(
"This test is the reason, why we have to be extra careful with the configuration cache. Build data won't always be invalidated." +
"This means that we can have a situation where the build data is, reused what is not expected. "
)
fun `given a project utilizes configuration cache, when build finishes twice with the same task, then assert that build data was not reused`() {
runner("help", "-Dorg.gradle.workers.max=3").build()
runner("help", "-Dorg.gradle.workers.max=5").build()
val maxWorkers = buildData.maxWorkers

assertThat(maxWorkers).isEqualTo(5)
fun `verify if environment change invalidates CC cache`() {
runner("help").build()
assertThat(buildData.environment).isNotEqualTo(Environment.IDE)

runner("help", "-Pandroid.injected.invoked.from.ide=true").build()
assertThat(buildData.environment).isEqualTo(Environment.IDE)
}

private fun runner(vararg arguments: String): GradleRunner {
Expand Down

0 comments on commit a4a0430

Please sign in to comment.