It compares build scan information for a sequence of builds executed under two different variants in a common experiment.
curl -L https://github.com/cdsap/BuildExperimentResults/releases/download/v0.4.1/build-experiment-results --output build-experiment-results
chmod 0757 build-experiment-results
./build-experiment-results --experiment-id 154 --variants lint-4-1 --variants lint-2-1 \
--api-key $GE_API \
--url $GE_URL
- --experiment-id: experiment id tag
- --variants: name of the branches/variants of the experiment
- --requested-task: requested task in the experiment
- --api-key: Develocity Key
- --url: Develocity url
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Experiment β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Experiment id β 154 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Experiment task β lintDemoRelease β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β lint-4-1 β Builds processed: 5 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β lint-2-1 β Builds processed: 5 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β β Mean β P50 β P90 β
β Category β Metric ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββΌβββββββββββββββββββββββββ¬βββββββββββββββββββββββββΌβββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β β β lint-4-1 β lint-2-1 β lint-4-1 β lint-2-1 β lint-4-1 β lint-2-1 β
β β β β β β β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Build β Build time β 513368 ms β 503779 ms β 473524 ms β 497573 ms β 599878 ms β 570158 ms β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Gradle process state β Gradle-Process-capacit β 1.93 β 1.32 β 1.91 β 1.33 β 2.02 β 1.39 β
β β y β β β β β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Gradle process state β Gradle-Process-gcTime β 0.19 β 0.22 β 0.18 β 0.22 β 0.21 β 0.26 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Gradle process state β Gradle-Process-max β 4.0 β 2.0 β 4.0 β 2.0 β 4.0 β 2.0 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Gradle process state β Gradle-Process-uptime β 8.49 β 8.32 β 7.82 β 8.23 β 9.93 β 9.43 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Gradle process state β Gradle-Process-usage β 1.25 β 0.77 β 1.31 β 0.7 β 1.63 β 0.93 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Kotlin process state β Kotlin-Process-capacit β 1.31 β 0.77 β 1.26 β 0.78 β 2.19 β 0.85 β
β β y β β β β β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Kotlin process state β Kotlin-Process-gcTime β 0.05 β 0.05 β 0.05 β 0.05 β 0.06 β 0.08 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Kotlin process state β Kotlin-Process-max β 4.0 β 2.0 β 4.0 β 2.0 β 4.0 β 2.0 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Kotlin process state β Kotlin-Process-uptime β 4.87 β 4.78 β 4.58 β 4.61 β 6.15 β 5.6 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β Kotlin process state β Kotlin-Process-usage β 0.69 β 0.47 β 0.71 β 0.53 β 0.85 β 0.59 β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β org.jetbrains.kotlin.g β β β β β β β
β Task Type β radle.tasks.KotlinComp β 5481 ms β 5540 ms β 3539 ms β 3692 ms β 12574 ms β 12708 ms β
β β ile β β β β β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β com.android.build.grad β β β β β β β
β Task Type β le.tasks.MergeSourceSe β 132 ms β 139 ms β 126 ms β 126 ms β 254 ms β 301 ms β
β β tFolders β β β β β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β com.android.build.grad β β β β β β β
β Task Type β le.tasks.MergeResource β 286 ms β 286 ms β 30 ms β 31 ms β 1052 ms β 1001 ms β
β β s β β β β β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β com.android.build.grad β β β β β β β
β Task Type β le.tasks.ExtractDeepLi β 5 ms β 7 ms β 5 ms β 7 ms β 10 ms β 16 ms β
β β nksTask β β β β β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
β β com.android.build.grad β β β β β β β
β Task Type β le.internal.res.ParseL β 219 ms β 211 ms β 16 ms β 17 ms β 681 ms β 616 ms β
β β ibraryResourcesTask β β β β β β β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββ€
...
type,metric,mean_lint-4-1-different-process,mean_lint-2-1-different-process,mean_unit,p50_lint-4-1-different-process,p50_lint-2-1-different-process,p50_unit,p90_lint-4-1-different-process,p50_lint-2-1-different-process,p90_unit
Build,Build time,513368,503779,ms,473524,497573,ms,599878,570158,ms
Gradle process state,Gradle-Process-capacity,1.93,1.32,,1.91,1.33,,2.02,1.39,
Gradle process state,Gradle-Process-gcTime,0.19,0.22,,0.18,0.22,,0.21,0.26,
Gradle process state,Gradle-Process-max,4.0,2.0,,4.0,2.0,,4.0,2.0,
Gradle process state,Gradle-Process-uptime,8.49,8.32,,7.82,8.23,,9.93,9.43,
Gradle process state,Gradle-Process-usage,1.25,0.77,,1.31,0.7,,1.63,0.93,
Kotlin process state,Kotlin-Process-capacity,1.31,0.77,,1.26,0.78,,2.19,0.85,
Kotlin process state,Kotlin-Process-gcTime,0.05,0.05,,0.05,0.05,,0.06,0.08,
Kotlin process state,Kotlin-Process-max,4.0,2.0,,4.0,2.0,,4.0,2.0,
Kotlin process state,Kotlin-Process-uptime,4.87,4.78,,4.58,4.61,,6.15,5.6,
Kotlin process state,Kotlin-Process-usage,0.69,0.47,,0.71,0.53,,0.85,0.59,
...
Used in GitHub Action summaries
<table>
<tr><td colspan=8>Experiment</td></tr>
<tr><td>Task experiment</td><td colspan=7>lintDemoRelease</td></tr>
<tr><td>lint-4-1-different-process</td><td colspan=7>5 builds processed</td></tr><tr><td>lint-2-1-different-process</td><td colspan=7>5 builds processed</td></tr><tr><td rowspan=2>Category</td><td rowspan=2>Metric</td><td colspan=2>Mean</td><td colspan=2>P50</td><td colspan=2>P90</td></tr><tr><td>lint-4-1-different-process</td><td>lint-2-1-different-process</td><td>lint-4-1-different-process</td><td>lint-2-1-different-process</td><td>lint-4-1-different-process</td><td>lint-2-1-different-process</td>
</tr>
<tr><td>Build</td><td>Build time</td><td>513368 ms</td><td>503779 ms</td><td>473524 ms</td><td>497573 ms</td><td>599878 ms</td><td>570158 ms</td></tr>
<tr><td>Task Type</td><td>org.jetbrains.kotlin.gradle.tasks.KotlinCompile</td><td>5481 ms</td><td>5540 ms</td><td>3539 ms</td><td>3692 ms</td><td>12574 ms</td><td>12708 ms</td></tr>
...
</table>
The CLI generates the following metrics for the experiment
- Build time
- Duration by task type
- Duration by task path
- Processes information (Requires Info Kotlin process and/or Info Gradle process)
- Kotlin Build Reports (Requires Kotlin Build Reports)
Name | Description | Default | Required | Example |
---|---|---|---|---|
api-key | String token | Yes | --api-key=$GE_KEY | |
url | Gradle Enterprise instance | Yes | --url=https://ge.acme.dev | |
requested-task | Requested task in the build | No | --requested-task=assemble | |
variants | name of the branches/variants of the experiment | Yes | --variants=main --variants=gradle_8_4 | |
experiment-id | experiment-id (represented as tag) | empty | Yes | --experiment-id=experiment_gradle_8_4 |
max-builds | Max builds to be processed | 500 | No | --max-builds=600 |
profile | Starting build to apply the reverse search | false | No | --profile |
build-report | Generates build report metrics | true | No | Exclude it with --no-build-report |
task-path-report | Generates task path report metrics | true | No | Exclude it with --no-task-path-report |
task-type-report | Generates task type report metrics | true | No | Exclude it with --no-task-type-report |
process-report | Generates process report metrics | false | No | Exclude it with --no-process-report |
kotlin-build-report | Generates Kotlin build report metrics | true | No | Exclude it with --no-kotlin-build-report |
resource-usage-report | Generates Resource usage report metrics (requires DV 2024.2) | true | No | Exclude it with --no-resource-usage-report |
only-cacheable-outcome | Process only cacheable tasks | true | No | Exclude it with --no-only-cacheable-outcome |
warmups-to-discard | If is a Gradle Profiler experiment, the warmups to discard | No | --exclusive-tags | |
threshold-task-duration | Threshold of task duration(ms) for the task path report | -1 | No | --threshold-task-duration 1000 |
- https://github.com/cdsap/Pagan/actions/runs/5672476887
- Using Gradle Profiler https://github.com/cdsap/Pagan/actions/runs/6382400113
- picnic
- geapi-data
- clickt
- kotlin-statistics