diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/MutedTestPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/MutedTestPlugin.java index 4df99e7454f32..baa7704463a6d 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/MutedTestPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/MutedTestPlugin.java @@ -8,23 +8,34 @@ package org.elasticsearch.gradle.internal.test; -import org.elasticsearch.gradle.internal.conventions.util.Util; import org.elasticsearch.gradle.internal.info.BuildParams; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.file.RegularFile; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.testing.Test; -import java.io.File; +import java.util.Arrays; +import java.util.List; public class MutedTestPlugin implements Plugin { + private static final String ADDITIONAL_FILES_PROPERTY = "org.elasticsearch.additional.muted.tests"; + @Override public void apply(Project project) { - File infoPath = new File(Util.locateElasticsearchWorkspace(project.getGradle()), "build-tools-internal"); + String additionalFilePaths = project.hasProperty(ADDITIONAL_FILES_PROPERTY) + ? project.property(ADDITIONAL_FILES_PROPERTY).toString() + : ""; + List additionalFiles = Arrays.stream(additionalFilePaths.split(",")) + .filter(p -> p.isEmpty() == false) + .map(p -> project.getRootProject().getLayout().getProjectDirectory().file(p)) + .toList(); + Provider mutedTestsProvider = project.getGradle() .getSharedServices() .registerIfAbsent("mutedTests", MutedTestsBuildService.class, spec -> { - spec.getParameters().getInfoPath().set(infoPath); + spec.getParameters().getInfoPath().set(project.getRootProject().getProjectDir()); + spec.getParameters().getAdditionalFiles().set(additionalFiles); }); project.getTasks().withType(Test.class).configureEach(test -> { diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/MutedTestsBuildService.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/MutedTestsBuildService.java index 9e4a92f26d4dd..0fdb134c81649 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/MutedTestsBuildService.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/MutedTestsBuildService.java @@ -13,7 +13,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.gradle.api.file.RegularFile; import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.ListProperty; import org.gradle.api.services.BuildService; import org.gradle.api.services.BuildServiceParameters; @@ -28,17 +30,15 @@ import java.util.List; public abstract class MutedTestsBuildService implements BuildService { - private final List excludePatterns; + private final List excludePatterns = new ArrayList<>(); + private final ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); public MutedTestsBuildService() { File infoPath = getParameters().getInfoPath().get().getAsFile(); File mutedTestsFile = new File(infoPath, "muted-tests.yml"); - try (InputStream is = new BufferedInputStream(new FileInputStream(mutedTestsFile))) { - ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); - List mutedTests = objectMapper.readValue(is, MutedTests.class).getTests(); - excludePatterns = buildExcludePatterns(mutedTests == null ? Collections.emptyList() : mutedTests); - } catch (IOException e) { - throw new UncheckedIOException(e); + excludePatterns.addAll(buildExcludePatterns(mutedTestsFile)); + for (RegularFile regularFile : getParameters().getAdditionalFiles().get()) { + excludePatterns.addAll(buildExcludePatterns(regularFile.getAsFile())); } } @@ -46,7 +46,18 @@ public List getExcludePatterns() { return excludePatterns; } - private static List buildExcludePatterns(List mutedTests) { + private List buildExcludePatterns(File file) { + List mutedTests; + + try (InputStream is = new BufferedInputStream(new FileInputStream(file))) { + mutedTests = objectMapper.readValue(is, MutedTests.class).getTests(); + if (mutedTests == null) { + return Collections.emptyList(); + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } + List excludes = new ArrayList<>(); if (mutedTests.isEmpty() == false) { for (MutedTestsBuildService.MutedTest mutedTest : mutedTests) { @@ -84,6 +95,8 @@ private static List buildExcludePatterns(List mutedTests) { public interface Params extends BuildServiceParameters { RegularFileProperty getInfoPath(); + + ListProperty getAdditionalFiles(); } public static class MutedTest { diff --git a/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy b/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy index d90f1823a3185..2b6433f967025 100644 --- a/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy +++ b/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy @@ -53,7 +53,7 @@ abstract class AbstractGradleFuncTest extends Specification { propertiesFile << "org.gradle.java.installations.fromEnv=JAVA_HOME,RUNTIME_JAVA_HOME,JAVA15_HOME,JAVA14_HOME,JAVA13_HOME,JAVA12_HOME,JAVA11_HOME,JAVA8_HOME" - def mutedTestsFile = Files.createFile(Path.of(testProjectDir.newFolder("build-tools-internal").path, "muted-tests.yml")) + def mutedTestsFile = testProjectDir.newFile("muted-tests.yml") mutedTestsFile << """ tests: [] """ diff --git a/build-tools-internal/muted-tests.yml b/muted-tests.yml similarity index 100% rename from build-tools-internal/muted-tests.yml rename to muted-tests.yml