Skip to content

Commit e568f70

Browse files
authored
[ci] Attach correct build artifact link to build scan when multiple are uploaded (#105530)
1 parent f86532b commit e568f70

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
import java.nio.file.Files;
3333
import java.nio.file.Path;
3434
import java.util.ArrayList;
35+
import java.util.Arrays;
3536
import java.util.List;
37+
import java.util.Optional;
3638

3739
import javax.inject.Inject;
3840

@@ -142,6 +144,8 @@ public void execute(BuildFinishedFlowAction.Parameters parameters) throws FileNo
142144

143145
System.out.println("Generating buildscan link for artifact...");
144146

147+
// Output should be in the format: "<UUID><space><ISO-8601-timestamp>\n"
148+
// and multiple artifacts could be returned
145149
Process process = new ProcessBuilder(
146150
"buildkite-agent",
147151
"artifact",
@@ -150,7 +154,7 @@ public void execute(BuildFinishedFlowAction.Parameters parameters) throws FileNo
150154
"--step",
151155
System.getenv("BUILDKITE_JOB_ID"),
152156
"--format",
153-
"%i"
157+
"%i %c"
154158
).start();
155159
process.waitFor();
156160
String processOutput;
@@ -159,7 +163,17 @@ public void execute(BuildFinishedFlowAction.Parameters parameters) throws FileNo
159163
} catch (IOException e) {
160164
processOutput = "";
161165
}
162-
String artifactUuid = processOutput.trim();
166+
167+
// Sort them by timestamp, and grab the most recent one
168+
Optional<String> artifact = Arrays.stream(processOutput.trim().split("\n")).map(String::trim).min((a, b) -> {
169+
String[] partsA = a.split(" ");
170+
String[] partsB = b.split(" ");
171+
// ISO-8601 timestamps can be sorted lexicographically
172+
return partsB[1].compareTo(partsA[1]);
173+
});
174+
175+
// Grab just the UUID from the artifact
176+
String artifactUuid = artifact.orElse("").split(" ")[0];
163177

164178
System.out.println("Artifact UUID: " + artifactUuid);
165179
if (artifactUuid.isEmpty() == false) {

0 commit comments

Comments
 (0)