Skip to content

Commit 2927754

Browse files
authored
Merge pull request #283 from gradle/erichaagdev/final-contract-changes
Update the contract of command line tools
2 parents 7e9796a + 7ff7ed0 commit 2927754

14 files changed

+93
-190
lines changed

components/fetch-build-scan-data-cmdline-tool/src/main/java/com/gradle/enterprise/cli/FetchBuildValidationDataCommand.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@
1111
import picocli.CommandLine.Parameters;
1212

1313
import java.io.IOException;
14-
import java.math.BigDecimal;
1514
import java.net.MalformedURLException;
1615
import java.net.URL;
1716
import java.nio.file.Path;
18-
import java.time.Duration;
1917
import java.util.ArrayList;
2018
import java.util.Collections;
2119
import java.util.List;
@@ -108,8 +106,8 @@ private BuildValidationData fetchBuildScanData(int index, URL buildScanUrl, Cust
108106
"",
109107
null,
110108
Collections.emptyMap(),
111-
Duration.ZERO,
112-
BigDecimal.ZERO);
109+
null,
110+
null);
113111
}
114112
}
115113

components/fetch-build-scan-data-cmdline-tool/src/main/java/com/gradle/enterprise/cli/Fields.java

Lines changed: 18 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.math.BigDecimal;
77
import java.time.Duration;
88
import java.util.Arrays;
9-
import java.util.Locale;
109
import java.util.function.Function;
1110
import java.util.stream.Stream;
1211

@@ -31,11 +30,12 @@ public enum Fields {
3130
EXECUTED_CACHEABLE_DURATION("Executed cacheable duration", d -> totalDuration(d, "executed_cacheable")),
3231
EXECUTED_NOT_CACHEABLE("Executed not cacheable", d -> totalTasks(d, "executed_not_cacheable")),
3332
EXECUTED_NOT_CACHEABLE_DURATION("Executed not cacheable duration", d -> totalDuration(d, "executed_not_cacheable")),
34-
EFFECTIVE_TASK_EXECUTION_DURATION("Effective task execution duration", d -> String.valueOf(d.getEffectiveTaskExecutionDuration().toMillis())),
35-
SERIALIZATION_FACTOR("Serialization factor", d -> formatBigDecimal(d.getSerializationFactor())),
36-
EXECUTED_CACHEABLE_DURATION_MILLISECONDS("Executed cacheable duration milliseconds", d -> totalDurationMillis(d, "executed_cacheable")),
33+
EFFECTIVE_TASK_EXECUTION_DURATION("Effective task execution duration", d -> formatDuration(d.getEffectiveTaskExecutionDuration())),
34+
SERIALIZATION_FACTOR("Serialization factor", d -> toStringSafely(d.getSerializationFactor())),
3735
;
3836

37+
private static final String NO_VALUE = "";
38+
3939
public final String label;
4040
public final Function<BuildValidationData, String> value;
4141

@@ -49,65 +49,33 @@ public static Stream<Fields> ordered() {
4949
}
5050

5151
private static String toStringSafely(Object object) {
52-
if (object == null) {
53-
return "";
54-
}
55-
return object.toString();
52+
return object == null ? NO_VALUE : object.toString();
53+
}
54+
55+
private static String toStringSafely(BigDecimal value) {
56+
return value == null ? NO_VALUE : value.toPlainString();
5657
}
5758

5859
private static String totalTasks(BuildValidationData data, String avoidanceOutcome) {
59-
if (data.getTasksByAvoidanceOutcome().containsKey(avoidanceOutcome)) {
60-
return data.getTasksByAvoidanceOutcome().get(avoidanceOutcome).totalTasks().toString();
61-
}
62-
return "";
60+
return summaryTotal(data, avoidanceOutcome, t -> String.valueOf(t.totalTasks()));
6361
}
6462

6563
private static String totalAvoidanceSavings(BuildValidationData data, String avoidanceOutcome) {
66-
return formatDuration(
67-
data.getTasksByAvoidanceOutcome()
68-
.getOrDefault(avoidanceOutcome, TaskExecutionSummary.ZERO)
69-
.totalAvoidanceSavings()
70-
);
64+
return summaryTotal(data, avoidanceOutcome, t -> formatDuration(t.totalAvoidanceSavings()));
7165
}
7266

7367
private static String totalDuration(BuildValidationData data, String avoidanceOutcome) {
74-
return formatDuration(
75-
data.getTasksByAvoidanceOutcome()
76-
.getOrDefault(avoidanceOutcome, TaskExecutionSummary.ZERO)
77-
.totalDuration()
78-
);
79-
}
80-
81-
private static String totalDurationMillis(BuildValidationData data, String avoidanceOutcome) {
82-
return String.valueOf(
83-
data.getTasksByAvoidanceOutcome()
84-
.getOrDefault(avoidanceOutcome, TaskExecutionSummary.ZERO)
85-
.totalDuration()
86-
.toMillis()
87-
);
68+
return summaryTotal(data, avoidanceOutcome, t -> formatDuration(t.totalDuration()));
8869
}
8970

90-
private static String formatDuration(Duration duration) {
91-
long hours = duration.toHours();
92-
long minutes = duration.minusHours(hours).toMinutes();
93-
double seconds = duration.minusHours(hours).minusMinutes(minutes).toMillis() / 1000d;
94-
95-
StringBuilder s = new StringBuilder();
96-
if (hours != 0) {
97-
s.append(hours + "h ");
98-
}
99-
if (minutes != 0) {
100-
s.append(minutes + "m ");
71+
private static String summaryTotal(BuildValidationData data, String avoidanceOutcome, Function<TaskExecutionSummary, String> toString) {
72+
if (data.getTasksByAvoidanceOutcome().containsKey(avoidanceOutcome)) {
73+
return toString.apply(data.getTasksByAvoidanceOutcome().get(avoidanceOutcome));
10174
}
102-
s.append(String.format(Locale.ROOT, "%.3fs", seconds));
103-
104-
return s.toString().trim();
75+
return NO_VALUE;
10576
}
10677

107-
private static String formatBigDecimal(BigDecimal value) {
108-
if (value.compareTo(BigDecimal.ZERO) == 0) {
109-
return "";
110-
}
111-
return value.toPlainString();
78+
private static String formatDuration(Duration duration) {
79+
return duration == null ? NO_VALUE : String.valueOf(duration.toMillis());
11280
}
11381
}

components/fetch-build-scan-data-cmdline-tool/src/main/java/com/gradle/enterprise/model/BuildValidationData.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,6 @@ public String getRootProjectName() {
5656
return rootProjectName;
5757
}
5858

59-
public boolean isRootProjectNameFound() {
60-
return isFound(rootProjectName);
61-
}
62-
6359
public String getBuildScanId() {
6460
return buildScanId;
6561
}
@@ -104,26 +100,14 @@ public List<String> getRequestedTasks() {
104100
return requestedTasks;
105101
}
106102

107-
public boolean isRequestedTasksFound() {
108-
return !requestedTasks.isEmpty();
109-
}
110-
111103
public String getBuildOutcome() {
112104
return buildOutcome;
113105
}
114106

115-
public boolean isBuildOutcomeFound() {
116-
return isFound(buildOutcome);
117-
}
118-
119107
public URL getRemoteBuildCacheUrl() {
120108
return remoteBuildCacheUrl;
121109
}
122110

123-
public boolean isRemoteBuildCacheUrlFound() {
124-
return remoteBuildCacheUrl != null;
125-
}
126-
127111
public String getRemoteBuildCacheShard() {
128112
if (remoteBuildCacheUrl == null) {
129113
return "";

components/scripts/gradle/01-validate-incremental-building.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,6 @@ fetch_build_cache_metrics() {
161161
fi
162162
}
163163

164-
# Overrides info.sh#print_performance_metrics
165-
print_performance_metrics() {
166-
print_performance_characteristics
167-
}
168-
169164
# Overrides info.sh#print_performance_characteristics
170165
print_performance_characteristics() {
171166
print_performance_characteristics_header

components/scripts/gradle/02-validate-local-build-caching-same-location.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,6 @@ fetch_build_cache_metrics() {
164164
fi
165165
}
166166

167-
# Overrides info.sh#print_performance_metrics
168-
print_performance_metrics() {
169-
print_performance_characteristics
170-
}
171-
172167
print_quick_links() {
173168
info "Investigation Quick Links"
174169
info "-------------------------"

components/scripts/gradle/03-validate-local-build-caching-different-locations.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,6 @@ fetch_build_cache_metrics() {
169169
fi
170170
}
171171

172-
# Overrides info.sh#print_performance_metrics
173-
print_performance_metrics() {
174-
print_performance_characteristics
175-
}
176-
177172
print_quick_links() {
178173
info "Investigation Quick Links"
179174
info "-------------------------"

components/scripts/gradle/04-validate-remote-build-caching-ci-ci.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,6 @@ print_experiment_specific_summary_info() {
153153
summary_row "Custom value mapping file:" "${mapping_file:-<none>}"
154154
}
155155

156-
# Overrides info.sh#print_performance_metrics
157-
print_performance_metrics() {
158-
print_performance_characteristics
159-
}
160-
161156
print_quick_links() {
162157
info "Investigation Quick Links"
163158
info "-------------------------"

components/scripts/gradle/05-validate-remote-build-caching-ci-local.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -213,11 +213,6 @@ print_experiment_specific_summary_info() {
213213
summary_row "Custom value mapping file:" "${mapping_file:-<none>}"
214214
}
215215

216-
# Overrides info.sh#print_performance_metrics
217-
print_performance_metrics() {
218-
print_performance_characteristics
219-
}
220-
221216
print_quick_links() {
222217
info "Investigation Quick Links"
223218
info "-------------------------"

components/scripts/lib/build-scan-parse.sh

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ executed_not_cacheable_duration=()
2828
# Build duration metrics
2929
effective_task_execution_duration=()
3030
serialization_factors=()
31-
executed_cacheable_duration_milliseconds=()
3231

3332
parse_build_scan_csv() {
3433
# This isn't the most robust way to read a CSV,
@@ -47,7 +46,7 @@ parse_build_scan_csv() {
4746
idx=0
4847

4948
# shellcheck disable=SC2034 # not all scripts use all of the fetched data
50-
while IFS=, read -r field_1 field_2 field_3 field_4 field_5 field_6 field_7 field_8 field_9 field_10 field_11 field_12 field_13 field_14 field_15 field_16 field_17 field_18 field_19 field_20 field_21 field_22; do
49+
while IFS=, read -r field_1 field_2 field_3 field_4 field_5 field_6 field_7 field_8 field_9 field_10 field_11 field_12 field_13 field_14 field_15 field_16 field_17 field_18 field_19 field_20 field_21; do
5150
if [[ "$header_row_read" == "false" ]]; then
5251
header_row_read=true
5352
continue;
@@ -78,18 +77,9 @@ parse_build_scan_csv() {
7877
executed_not_cacheable_num_tasks[idx]="${field_18}"
7978
executed_not_cacheable_duration[idx]="${field_19}"
8079

81-
# Conditional because build-scan-support-tool does not yet support these fields
82-
if [[ -n "$field_20" ]]; then
83-
effective_task_execution_duration[idx]="${field_20}"
84-
fi
85-
86-
if [[ -n "$field_21" ]]; then
87-
serialization_factors[idx]="${field_21}"
88-
fi
89-
90-
if [[ -n "$field_22" ]]; then
91-
executed_cacheable_duration_milliseconds[idx]="${field_22}"
92-
fi
80+
# Build duration metrics
81+
effective_task_execution_duration[idx]="${field_20}"
82+
serialization_factors[idx]="${field_21}"
9383

9484
((idx++))
9585
done <<< "${build_scan_csv}"

0 commit comments

Comments
 (0)