From 40d429792f29c0d26158b24114a52f3b69069a55 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Thu, 3 Jul 2025 12:37:06 -0700 Subject: [PATCH 1/3] Reenable windows upload and fix archive paths When windows builds fail, we need the local logs for diagnosing the issue. This commit re-enables archiving the log files from windows builds for upload. It also fixes that archive to use the correct tar entry path separator on windows. relates #115449 --- .../internal/ElasticsearchBuildCompletePlugin.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java index 065a57f801c9e..80fd320fb8fb4 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java @@ -66,7 +66,7 @@ public void apply(Project target) { ? System.getenv("BUILD_NUMBER") : System.getenv("BUILDKITE_BUILD_NUMBER"); String performanceTest = System.getenv("BUILD_PERFORMANCE_TEST"); - if (buildNumber != null && performanceTest == null && GradleUtils.isIncludedBuild(target) == false && OS.current() != OS.WINDOWS) { + if (buildNumber != null && performanceTest == null && GradleUtils.isIncludedBuild(target) == false) { File targetFile = calculateTargetFile(target, buildNumber); File projectDir = target.getProjectDir(); File gradleWorkersDir = new File(target.getGradle().getGradleUserHomeDir(), "workers/"); @@ -276,7 +276,12 @@ private static void createBuildArchiveTar(List files, File projectDir, Fil @NotNull private static String calculateArchivePath(Path path, Path projectPath) { - return path.startsWith(projectPath) ? projectPath.relativize(path).toString() : path.getFileName().toString(); + String archivePath = path.startsWith(projectPath) ? projectPath.relativize(path).toString() : path.getFileName().toString(); + if (OS.current() == OS.WINDOWS) { + // tar always uses forward slashes + archivePath = archivePath.replace("\\", "/"); + } + return archivePath; } } } From be926b12bb0ae1aa21b2c4fe2876805db3273c12 Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Sat, 4 Oct 2025 06:42:34 -0700 Subject: [PATCH 2/3] remove symlinks --- .../ElasticsearchBuildCompletePlugin.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java index 80fd320fb8fb4..ffc9b3a63d0f8 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java @@ -38,11 +38,16 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; +import java.io.UncheckedIOException; +import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.Optional; import javax.inject.Inject; @@ -102,6 +107,23 @@ private File calculateTargetFile(Project target, String buildNumber) { } private List resolveProjectLogs(File projectDir) { + // HACK: Some tests leave behind symlinks, and gradle throws an exception if it encounters symlinks. + // Here we remove them before collecting logs to upload. We could instead build our own path matcher + // but that seemed more complex than just deleting the irrelevant files. + try { + Files.walkFileTree(projectDir.toPath(), new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (Files.isSymbolicLink(file)) { + Files.delete(file); + } + return FileVisitResult.CONTINUE; + } + }); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + var projectDirFiles = getFileOperations().fileTree(projectDir); projectDirFiles.include("**/*.hprof"); projectDirFiles.include("**/build/reports/configuration-cache/**"); From b0317cd0607337790b99ba3087feb5cd60e31280 Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Sat, 4 Oct 2025 13:56:44 +0000 Subject: [PATCH 3/3] [CI] Auto commit changes from spotless --- .../gradle/internal/ElasticsearchBuildCompletePlugin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java index ffc9b3a63d0f8..bf6b10681cbeb 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java @@ -47,7 +47,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Objects; import java.util.Optional; import javax.inject.Inject;