diff --git a/build-conventions/build.gradle b/build-conventions/build.gradle new file mode 100644 index 000000000000..ab406056876c --- /dev/null +++ b/build-conventions/build.gradle @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +plugins { + id 'java-gradle-plugin' + id 'java-test-fixtures' +} + +group = "org.elasticsearch" + +targetCompatibility = 11 +sourceCompatibility = 11 + +gradlePlugin { + // We already configure publication and we don't need or want the one that comes + // with the java-gradle-plugin + automatedPublishing = false + plugins { + internalLicenseheaders { + id = 'elasticsearch.internal-licenseheaders' + implementationClass = 'org.elasticsearch.gradle.internal.conventions.precommit.LicenseHeadersPrecommitPlugin' + } + publish { + id = 'elasticsearch.publish' + implementationClass = 'org.elasticsearch.gradle.internal.conventions.PublishPlugin' + } + licensing { + id = 'elasticsearch.licensing' + implementationClass = 'org.elasticsearch.gradle.internal.conventions.LicensingPlugin' + } + basics { + id = 'elasticsearch.basic-build-tool-conventions' + implementationClass = 'org.elasticsearch.gradle.internal.conventions.BasicBuildToolConventionsPlugin' + } + } +} + +repositories { + mavenCentral() + gradlePluginPortal() +} + +dependencies { + api 'org.apache.maven:maven-model:3.6.2' + api 'gradle.plugin.com.github.jengelman.gradle.plugins:shadow:7.0.0' + api 'org.apache.rat:apache-rat:0.11' +} diff --git a/build-conventions/settings.gradle b/build-conventions/settings.gradle new file mode 100644 index 000000000000..c69e832a21a7 --- /dev/null +++ b/build-conventions/settings.gradle @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +rootProject.name = 'build-conventions' \ No newline at end of file diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BasicBuildToolConventionsPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BasicBuildToolConventionsPlugin.java new file mode 100644 index 000000000000..2c0f95e880a4 --- /dev/null +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BasicBuildToolConventionsPlugin.java @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.conventions; + +import org.elasticsearch.gradle.internal.conventions.info.ParallelDetector; +import org.elasticsearch.gradle.internal.conventions.util.Util; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.tasks.bundling.Jar; +import org.gradle.api.tasks.testing.Test; + +import java.io.File; + +public class BasicBuildToolConventionsPlugin implements Plugin { + + @Override + public void apply(Project project) { + int defaultParallel = ParallelDetector.findDefaultParallel(project); + project.getTasks().withType(Test.class).configureEach(test -> { + test.onlyIf((t) -> Util.getBooleanProperty("tests.fips.enabled", false) == false); + test.setMaxParallelForks(defaultParallel); + }); + // we put all our distributable files under distributions + project.getTasks().withType(Jar.class).configureEach(j -> + j.getDestinationDirectory().set(new File(project.getBuildDir(), "distributions")) + ); + } +} diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/GUtils.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/GUtils.java new file mode 100644 index 000000000000..fdfa6d942ab0 --- /dev/null +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/GUtils.java @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.conventions; + +import java.util.Locale; + +public abstract class GUtils { + + public static String capitalize(String s) { + return s.substring(0, 1).toUpperCase(Locale.ROOT) + s.substring(1); + } +} diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/GitInfoPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/GitInfoPlugin.java new file mode 100644 index 000000000000..dbc36e25dd75 --- /dev/null +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/GitInfoPlugin.java @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.conventions; + +import org.elasticsearch.gradle.internal.conventions.info.GitInfo; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.model.ObjectFactory; +import org.gradle.api.provider.Property; +import org.gradle.api.provider.Provider; +import org.gradle.api.provider.ProviderFactory; +import org.gradle.initialization.layout.BuildLayout; + +import javax.inject.Inject; +import java.io.File; + +class GitInfoPlugin implements Plugin { + + private ProviderFactory factory; + private ObjectFactory objectFactory; + + private Provider revision; + private Property gitInfo; + + @Inject + public GitInfoPlugin(ProviderFactory factory, ObjectFactory objectFactory) { + this.factory = factory; + this.objectFactory = objectFactory; + } + + @Override + public void apply(Project project) { + File rootDir = (project.getGradle().getParent() == null) ? + project.getRootDir() : + project.getGradle().getParent().getRootProject().getRootDir(); + + gitInfo = objectFactory.property(GitInfo.class).value(factory.provider(() -> + GitInfo.gitInfo(rootDir) + )); + gitInfo.disallowChanges(); + gitInfo.finalizeValueOnRead(); + + revision = gitInfo.map(info -> info.getRevision() == null ? info.getRevision() : "master"); + } + + public Property getGitInfo() { + return gitInfo; + } + + public Provider getRevision() { + return revision; + } +} diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/LicensingPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/LicensingPlugin.java new file mode 100644 index 000000000000..96b9419ea182 --- /dev/null +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/LicensingPlugin.java @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.conventions; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.provider.MapProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.provider.Provider; +import org.gradle.api.provider.ProviderFactory; + +import javax.inject.Inject; +import java.util.Map; +import java.util.concurrent.Callable; + +public class LicensingPlugin implements Plugin { + final static String ELASTIC_LICENSE_URL_PREFIX = "https://raw.githubusercontent.com/elastic/elasticsearch/"; + final static String ELASTIC_LICENSE_URL_POSTFIX = "/licenses/ELASTIC-LICENSE-2.0.txt"; + + private ProviderFactory providerFactory; + + @Inject + public LicensingPlugin(ProviderFactory providerFactory) { + this.providerFactory = providerFactory; + } + + @Override + public void apply(Project project) { + Provider revision = project.getRootProject().getPlugins().apply(GitInfoPlugin.class).getRevision(); + Provider licenseCommitProvider = providerFactory.provider(() -> + isSnapshotVersion(project) ? revision.get() : "v" + project.getVersion().toString() + ); + + MapProperty licensesProperty = project.getObjects().mapProperty(String.class, String.class); + Provider projectLicenseURL = licenseCommitProvider.map(licenseCommit -> ELASTIC_LICENSE_URL_PREFIX + + licenseCommit + ELASTIC_LICENSE_URL_POSTFIX); + // But stick the Elastic license url in project.ext so we can get it if we need to switch to it + project.getExtensions().getExtraProperties().set("elasticLicenseUrl", projectLicenseURL); + + MapProperty convention = licensesProperty.convention( + providerFactory.provider((Callable>) () -> Map.of( + "Server Side Public License, v 1", "https://www.mongodb.com/licensing/server-side-public-license", + "Elastic License 2.0", projectLicenseURL.get()) + ) + ); + // Default to the SSPL+Elastic dual license + project.getExtensions().getExtraProperties().set("licenseCommit", licenseCommitProvider); + project.getExtensions().getExtraProperties().set("projectLicenses", convention); + } + + private boolean isSnapshotVersion(Project project) { + return project.getVersion().toString().endsWith("-SNAPSHOT"); + } + +} \ No newline at end of file diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/PublishPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java similarity index 62% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/PublishPlugin.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java index 3458f5cd5a3b..02d16c95b5c7 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/PublishPlugin.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java @@ -6,22 +6,26 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal; +package org.elasticsearch.gradle.internal.conventions; +import org.elasticsearch.gradle.internal.conventions.precommit.PomValidationPrecommitPlugin; import com.github.jengelman.gradle.plugins.shadow.ShadowExtension; import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin; import groovy.util.Node; -import org.elasticsearch.gradle.internal.info.BuildParams; -import org.elasticsearch.gradle.internal.precommit.PomValidationPrecommitPlugin; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; +import org.elasticsearch.gradle.internal.conventions.info.GitInfo; import org.gradle.api.NamedDomainObjectSet; import org.gradle.api.Plugin; -import org.gradle.api.Project; import org.gradle.api.Task; +import org.gradle.api.Project; import org.gradle.api.XmlProvider; import org.gradle.api.plugins.BasePlugin; import org.gradle.api.plugins.BasePluginConvention; +import org.gradle.api.plugins.JavaLibraryPlugin; import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.provider.MapProperty; +import org.gradle.api.provider.Property; +import org.gradle.api.provider.Provider; import org.gradle.api.publish.PublishingExtension; import org.gradle.api.publish.maven.MavenPublication; import org.gradle.api.publish.maven.plugins.MavenPublishPlugin; @@ -30,9 +34,10 @@ import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskProvider; import org.gradle.api.tasks.bundling.Jar; import org.gradle.language.base.plugins.LifecycleBasePlugin; -import java.util.concurrent.Callable; -import static org.elasticsearch.gradle.util.GradleUtils.maybeConfigure; +import java.io.File; +import java.util.Map; +import java.util.concurrent.Callable; public class PublishPlugin implements Plugin { @@ -41,15 +46,18 @@ public class PublishPlugin implements Plugin { project.getPluginManager().apply(BasePlugin.class); project.getPluginManager().apply(MavenPublishPlugin.class); project.getPluginManager().apply(PomValidationPrecommitPlugin.class); - configurePublications(project); + project.getPluginManager().apply(LicensingPlugin.class); + configureJavadocJar(project); configureSourcesJar(project); configurePomGeneration(project); + configurePublications(project); } private void configurePublications(Project project) { PublishingExtension publishingExtension = project.getExtensions().getByType(PublishingExtension.class); MavenPublication publication = publishingExtension.getPublications().create("elastic", MavenPublication.class); + project.afterEvaluate(project1 -> { if (project1.getPlugins().hasPlugin(ShadowPlugin.class)) { configureWithShadowPlugin(project1, publication); @@ -57,6 +65,25 @@ public class PublishPlugin implements Plugin { publication.from(project.getComponents().getByName("java")); } }); + publication.getPom().withXml(xml -> { + Node node = xml.asNode(); + node.appendNode("inceptionYear", "2009"); + Node licensesNode = node.appendNode("licenses"); + MapProperty projectLicenses = (MapProperty) project.getExtensions().getExtraProperties().get("projectLicenses"); + projectLicenses.get().entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> { + Node license = licensesNode.appendNode("license"); + license.appendNode("name", entry.getKey()); + license.appendNode("url", entry.getValue()); + license.appendNode("distribution", "repo"); + }); + Node developer = node.appendNode("developers").appendNode("developer"); + developer.appendNode("name", "Elastic"); + developer.appendNode("url", "https://www.elastic.co"); + }); + publishingExtension.getRepositories().maven(mavenArtifactRepository -> { + mavenArtifactRepository.setName("test"); + mavenArtifactRepository.setUrl(new File(project.getRootProject().getBuildDir(), "local-test-repo")); + }); } private static String getArchivesBaseName(Project project) { @@ -67,27 +94,29 @@ public class PublishPlugin implements Plugin { * Configuration generation of maven poms. */ private static void configurePomGeneration(Project project) { + Property gitInfo = project.getRootProject().getPlugins().apply(GitInfoPlugin.class).getGitInfo(); + TaskProvider generatePomTask = project.getTasks().register("generatePom"); project.getTasks().named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).configure(assemble -> assemble.dependsOn(generatePomTask)); project.getTasks() - .withType(GenerateMavenPom.class) - .configureEach( - pomTask -> pomTask.setDestination( - (Callable) () -> String.format( - "%s/distributions/%s-%s.pom", - project.getBuildDir(), - getArchivesBaseName(project), - project.getVersion() - ) - ) - ); + .withType(GenerateMavenPom.class) + .configureEach( + pomTask -> pomTask.setDestination( + (Callable) () -> String.format( + "%s/distributions/%s-%s.pom", + project.getBuildDir(), + getArchivesBaseName(project), + project.getVersion() + ) + ) + ); PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); - final var mavenPublications = publishing.getPublications().withType(MavenPublication.class); + final NamedDomainObjectSet mavenPublications = publishing.getPublications().withType(MavenPublication.class); addNameAndDescriptiontoPom(project, mavenPublications); mavenPublications.all(publication -> { // Add git origin info to generated POM files for internal builds - BuildParams.withInternalBuild(() -> publication.getPom().withXml(PublishPlugin::addScmInfo)); + publication.getPom().withXml((xmlProvider) -> addScmInfo(xmlProvider, gitInfo.get())); // have to defer this until archivesBaseName is set project.afterEvaluate(p -> publication.setArtifactId(getArchivesBaseName(project))); generatePomTask.configure(t -> t.dependsOn(project.getTasks().withType(GenerateMavenPom.class))); @@ -99,7 +128,7 @@ public class PublishPlugin implements Plugin { Node root = xml.asNode(); root.appendNode("name", project.getName()); String description = project.getDescription() != null ? project.getDescription() : ""; - root.appendNode("description", project.getDescription()); + root.appendNode("description", description); })); } @@ -108,18 +137,18 @@ public class PublishPlugin implements Plugin { shadow.component(publication); } - private static void addScmInfo(XmlProvider xml) { + private static void addScmInfo(XmlProvider xml, GitInfo gitInfo) { Node root = xml.asNode(); - root.appendNode("url", Util.urlFromOrigin(BuildParams.getGitOrigin())); + root.appendNode("url", gitInfo.urlFromOrigin()); Node scmNode = root.appendNode("scm"); - scmNode.appendNode("url", BuildParams.getGitOrigin()); + scmNode.appendNode("url", gitInfo.getOrigin()); } /** * Adds a javadocJar task to generate a jar containing javadocs. */ private static void configureJavadocJar(Project project) { - project.getPlugins().withId("elasticsearch.java", p -> { + project.getPlugins().withType(JavaLibraryPlugin.class, p -> { TaskProvider javadocJarTask = project.getTasks().register("javadocJar", Jar.class); javadocJarTask.configure(jar -> { jar.getArchiveClassifier().set("javadoc"); @@ -127,12 +156,12 @@ public class PublishPlugin implements Plugin { jar.setDescription("Assembles a jar containing javadocs."); jar.from(project.getTasks().named(JavaPlugin.JAVADOC_TASK_NAME)); }); - maybeConfigure(project.getTasks(), BasePlugin.ASSEMBLE_TASK_NAME, t -> t.dependsOn(javadocJarTask)); + project.getTasks().named(BasePlugin.ASSEMBLE_TASK_NAME).configure(t -> t.dependsOn(javadocJarTask)); }); } static void configureSourcesJar(Project project) { - project.getPlugins().withId("elasticsearch.java", p -> { + project.getPlugins().withType(JavaLibraryPlugin.class, p -> { TaskProvider sourcesJarTask = project.getTasks().register("sourcesJar", Jar.class); sourcesJarTask.configure(jar -> { jar.getArchiveClassifier().set("sources"); @@ -141,7 +170,7 @@ public class PublishPlugin implements Plugin { SourceSet mainSourceSet = Util.getJavaMainSourceSet(project).get(); jar.from(mainSourceSet.getAllSource()); }); - maybeConfigure(project.getTasks(), BasePlugin.ASSEMBLE_TASK_NAME, t -> t.dependsOn(sourcesJarTask)); + project.getTasks().named(BasePlugin.ASSEMBLE_TASK_NAME).configure(t -> t.dependsOn(sourcesJarTask)); }); } } diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/VersionPropertiesLoader.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/VersionPropertiesLoader.java new file mode 100644 index 000000000000..c7307ce98f65 --- /dev/null +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/VersionPropertiesLoader.java @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.conventions; + + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +// Define this here because we need it early. +public class VersionPropertiesLoader { + static Properties loadBuildSrcVersion(File input) throws IOException { + Properties props = new Properties(); + InputStream is = new FileInputStream(input); + try { + props.load(is); + } finally { + is.close(); + } + loadBuildSrcVersion(props, System.getProperties()); + return props; + } + + protected static void loadBuildSrcVersion(Properties loadedProps, Properties systemProperties) { + String elasticsearch = loadedProps.getProperty("elasticsearch"); + if (elasticsearch == null) { + throw new IllegalStateException("Elasticsearch version is missing from properties."); + } + if (elasticsearch.matches("[0-9]+\\.[0-9]+\\.[0-9]+") == false) { + throw new IllegalStateException( + "Expected elasticsearch version to be numbers only of the form X.Y.Z but it was: " + + elasticsearch + ); + } + String qualifier = systemProperties.getProperty("build.version_qualifier", ""); + if (qualifier.isEmpty() == false) { + if (qualifier.matches("(alpha|beta|rc)\\d+") == false) { + throw new IllegalStateException("Invalid qualifier: " + qualifier); + } + elasticsearch += "-" + qualifier; + } + final String buildSnapshotSystemProperty = systemProperties.getProperty("build.snapshot", "true"); + switch (buildSnapshotSystemProperty) { + case "true": + elasticsearch += "-SNAPSHOT"; + break; + case "false": + // do nothing + break; + default: + throw new IllegalArgumentException( + "build.snapshot was set to [" + buildSnapshotSystemProperty + "] but can only be unset or [true|false]"); + } + loadedProps.put("elasticsearch", elasticsearch); + } +} + diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/GitInfo.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/GitInfo.java new file mode 100644 index 000000000000..7ada49bdbd85 --- /dev/null +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/GitInfo.java @@ -0,0 +1,186 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.conventions.info; + +import org.gradle.api.GradleException; +import org.gradle.api.logging.Logging; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class GitInfo { + private static final Pattern GIT_PATTERN = Pattern.compile("git@([^:]+):([^\\.]+)\\.git"); + + private final String revision; + private final String origin; + + private GitInfo(String revision, String origin) { + this.revision = revision; + this.origin = origin; + } + + public String getRevision() { + return revision; + } + + public String getOrigin() { + return origin; + } + + public static GitInfo gitInfo(File rootDir) { + try { + /* + * We want to avoid forking another process to run git rev-parse HEAD. Instead, we will read the refs manually. The + * documentation for this follows from https://git-scm.com/docs/gitrepository-layout and https://git-scm.com/docs/git-worktree. + * + * There are two cases to consider: + * - a plain repository with .git directory at the root of the working tree + * - a worktree with a plain text .git file at the root of the working tree + * + * In each case, our goal is to parse the HEAD file to get either a ref or a bare revision (in the case of being in detached + * HEAD state). + * + * In the case of a plain repository, we can read the HEAD file directly, resolved directly from the .git directory. + * + * In the case of a worktree, we read the gitdir from the plain text .git file. This resolves to a directory from which we read + * the HEAD file and resolve commondir to the plain git repository. + */ + final Path dotGit = rootDir.toPath().resolve(".git"); + final String revision; + if (Files.exists(dotGit) == false) { + return new GitInfo("unknown", "unknown"); + } + final Path head; + final Path gitDir; + if (Files.isDirectory(dotGit)) { + // this is a git repository, we can read HEAD directly + head = dotGit.resolve("HEAD"); + gitDir = dotGit; + } else { + // this is a git worktree, follow the pointer to the repository + final Path workTree = Paths.get(readFirstLine(dotGit).substring("gitdir:".length()).trim()); + if (Files.exists(workTree) == false) { + return new GitInfo("unknown", "unknown"); + } + head = workTree.resolve("HEAD"); + final Path commonDir = Paths.get(readFirstLine(workTree.resolve("commondir"))); + if (commonDir.isAbsolute()) { + gitDir = commonDir; + } else { + // this is the common case + gitDir = workTree.resolve(commonDir); + } + } + final String ref = readFirstLine(head); + if (ref.startsWith("ref:")) { + String refName = ref.substring("ref:".length()).trim(); + Path refFile = gitDir.resolve(refName); + if (Files.exists(refFile)) { + revision = readFirstLine(refFile); + } else if (Files.exists(gitDir.resolve("packed-refs"))) { + // Check packed references for commit ID + Pattern p = Pattern.compile("^([a-f0-9]{40}) " + refName + "$"); + try (Stream lines = Files.lines(gitDir.resolve("packed-refs"))) { + revision = lines.map(p::matcher) + .filter(Matcher::matches) + .map(m -> m.group(1)) + .findFirst() + .orElseThrow(() -> new IOException("Packed reference not found for refName " + refName)); + } + } else { + File refsDir = gitDir.resolve("refs").toFile(); + if (refsDir.exists()) { + String foundRefs = Arrays.stream(refsDir.listFiles()).map(f -> f.getName()).collect(Collectors.joining("\n")); + Logging.getLogger(GitInfo.class).error("Found git refs\n" + foundRefs); + } else { + Logging.getLogger(GitInfo.class).error("No git refs dir found"); + } + throw new GradleException("Can't find revision for refName " + refName); + } + } else { + // we are in detached HEAD state + revision = ref; + } + return new GitInfo(revision, findOriginUrl(gitDir.resolve("config"))); + } catch (final IOException e) { + // for now, do not be lenient until we have better understanding of real-world scenarios where this happens + throw new GradleException("unable to read the git revision", e); + } + } + + + private static String findOriginUrl(final Path configFile) throws IOException { + Map props = new HashMap<>(); + + try (Stream stream = Files.lines(configFile, StandardCharsets.UTF_8)) { + Iterator lines = stream.iterator(); + boolean foundOrigin = false; + while (lines.hasNext()) { + String line = lines.next().trim(); + if (line.startsWith(";") || line.startsWith("#")) { + // ignore comments + continue; + } + if (foundOrigin) { + if (line.startsWith("[")) { + // we're on to the next config item so stop looking + break; + } + String[] pair = line.trim().split("=", 2); + props.put(pair[0].trim(), pair[1].trim()); + } else { + if (line.equals("[remote \"origin\"]")) { + foundOrigin = true; + } + } + } + } + + String originUrl = props.get("url"); + return originUrl == null ? "unknown" : originUrl; + } + + private static String readFirstLine(final Path path) throws IOException { + String firstLine; + try (Stream lines = Files.lines(path, StandardCharsets.UTF_8)) { + firstLine = lines.findFirst().orElseThrow(() -> new IOException("file [" + path + "] is empty")); + } + return firstLine; + } + + /** Find the reponame. */ + public String urlFromOrigin() { + String oritin = getOrigin(); + if (origin == null) { + return null; // best effort, the url doesnt really matter, it is just required by maven central + } + if (origin.startsWith("https")) { + return origin; + } + Matcher matcher = GIT_PATTERN.matcher(origin); + if (matcher.matches()) { + return String.format("https://%s/%s", matcher.group(1), matcher.group(2)); + } else { + return origin; // best effort, the url doesnt really matter, it is just required by maven central + } + } + +} diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/ParallelDetector.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/ParallelDetector.java new file mode 100644 index 000000000000..c4c0cb8f46d4 --- /dev/null +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/ParallelDetector.java @@ -0,0 +1,83 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.conventions.info; + +import org.gradle.api.Project; + +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class ParallelDetector { + + private static Integer _defaultParallel = null; + + public static int findDefaultParallel(Project project) { + // Since it costs IO to compute this, and is done at configuration time we want to cache this if possible + // It's safe to store this in a static variable since it's just a primitive so leaking memory isn't an issue + if (_defaultParallel == null) { + File cpuInfoFile = new File("/proc/cpuinfo"); + if (cpuInfoFile.exists()) { + // Count physical cores on any Linux distro ( don't count hyper-threading ) + Map socketToCore = new HashMap<>(); + String currentID = ""; + + try (BufferedReader reader = new BufferedReader(new FileReader(cpuInfoFile))) { + for (String line = reader.readLine(); line != null; line = reader.readLine()) { + if (line.contains(":")) { + List parts = Arrays.stream(line.split(":", 2)).map(String::trim).collect(Collectors.toList()); + String name = parts.get(0); + String value = parts.get(1); + // the ID of the CPU socket + if (name.equals("physical id")) { + currentID = value; + } + // Number of cores not including hyper-threading + if (name.equals("cpu cores")) { + assert currentID.isEmpty() == false; + socketToCore.put("currentID", Integer.valueOf(value)); + currentID = ""; + } + } + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } + _defaultParallel = socketToCore.values().stream().mapToInt(i -> i).sum(); + } else if (isMac()) { + // Ask macOS to count physical CPUs for us + ByteArrayOutputStream stdout = new ByteArrayOutputStream(); + project.exec(spec -> { + spec.setExecutable("sysctl"); + spec.args("-n", "hw.physicalcpu"); + spec.setStandardOutput(stdout); + }); + + _defaultParallel = Integer.parseInt(stdout.toString().trim()); + } + + _defaultParallel = Runtime.getRuntime().availableProcessors() / 2; + } + + return _defaultParallel; + } + + private static boolean isMac() { + return System.getProperty("os.name", "").startsWith("Mac"); + } + +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersPrecommitPlugin.java similarity index 80% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPlugin.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersPrecommitPlugin.java index 9d65aadb6894..e93c6bab74f0 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPlugin.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersPrecommitPlugin.java @@ -6,14 +6,12 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal.precommit; +package org.elasticsearch.gradle.internal.conventions.precommit; -import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; -import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.plugins.JavaBasePlugin; +import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.provider.ProviderFactory; import org.gradle.api.tasks.SourceSetContainer; import org.gradle.api.tasks.TaskProvider; @@ -21,7 +19,7 @@ import org.gradle.api.tasks.TaskProvider; import javax.inject.Inject; import java.util.stream.Collectors; -public class LicenseHeadersPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { +public class LicenseHeadersPrecommitPlugin extends PrecommitPlugin { @Inject public LicenseHeadersPrecommitPlugin(ProviderFactory providerFactory) { this.providerFactory = providerFactory; @@ -31,7 +29,7 @@ public class LicenseHeadersPrecommitPlugin extends PrecommitPlugin implements In public TaskProvider createTask(Project project) { return project.getTasks().register("licenseHeaders", LicenseHeadersTask.class, licenseHeadersTask -> { project.getPlugins().withType(JavaBasePlugin.class, javaBasePlugin -> { - final SourceSetContainer sourceSets = GradleUtils.getJavaSourceSets(project); + final SourceSetContainer sourceSets = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets(); licenseHeadersTask.getSourceFolders() .addAll(providerFactory.provider(() -> sourceSets.stream().map(s -> s.getAllJava()).collect(Collectors.toList()))); }); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseHeadersTask.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersTask.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseHeadersTask.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersTask.java index a7a34a2d729c..83a1b79f5749 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseHeadersTask.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersTask.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal.precommit; +package org.elasticsearch.gradle.internal.conventions.precommit; import org.apache.rat.Defaults; import org.apache.rat.ReportConfiguration; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/PomValidationPrecommitPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationPrecommitPlugin.java similarity index 87% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/PomValidationPrecommitPlugin.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationPrecommitPlugin.java index 752b73f9c5fa..0f7de8573e3c 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/PomValidationPrecommitPlugin.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationPrecommitPlugin.java @@ -6,10 +6,9 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal.precommit; +package org.elasticsearch.gradle.internal.conventions.precommit; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.GUtils; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.publish.PublishingExtension; @@ -26,7 +25,7 @@ public class PomValidationPrecommitPlugin extends PrecommitPlugin { TaskProvider validatePom = project.getTasks().register("validatePom"); PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); publishing.getPublications().all(publication -> { - String publicationName = Util.capitalize(publication.getName()); + String publicationName = GUtils.capitalize(publication.getName()); TaskProvider validateTask = project.getTasks() .register("validate" + publicationName + "Pom", PomValidationTask.class); validatePom.configure(t -> t.dependsOn(validateTask)); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/PomValidationTask.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationTask.java similarity index 95% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/PomValidationTask.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationTask.java index 45daa084f55d..ac7d4c787313 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/PomValidationTask.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationTask.java @@ -6,11 +6,11 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal.precommit; +package org.elasticsearch.gradle.internal.conventions.precommit; import org.apache.maven.model.Model; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; -import org.elasticsearch.gradle.precommit.PrecommitTask; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTask; import org.gradle.api.GradleException; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.tasks.InputFile; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitPlugin.java similarity index 79% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitPlugin.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitPlugin.java index b12a7cae15d6..6bf3cc5e93b9 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitPlugin.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitPlugin.java @@ -6,12 +6,12 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.conventions.precommit; -import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; +import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.TaskProvider; /** @@ -27,10 +27,11 @@ public abstract class PrecommitPlugin implements Plugin { TaskProvider task = createTask(project); TaskProvider precommit = project.getTasks().named(PRECOMMIT_TASK_NAME); precommit.configure(t -> t.dependsOn(task)); - project.getPluginManager().withPlugin("java", p -> { // We want to get any compilation error before running the pre-commit checks. - GradleUtils.getJavaSourceSets(project).all(sourceSet -> task.configure(t -> t.shouldRunAfter(sourceSet.getClassesTaskName()))); + project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all(sourceSet -> + task.configure(t -> t.shouldRunAfter(sourceSet.getClassesTaskName())) + ); }); } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTask.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTask.java similarity index 94% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTask.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTask.java index 7046df15b9e9..5cdc291895ff 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTask.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTask.java @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.conventions.precommit; import org.gradle.api.DefaultTask; import org.gradle.api.file.ProjectLayout; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTaskPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTaskPlugin.java similarity index 71% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTaskPlugin.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTaskPlugin.java index f5d554dca271..0493b30149bf 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTaskPlugin.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTaskPlugin.java @@ -6,13 +6,13 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.conventions.precommit; -import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.plugins.JavaBasePlugin; +import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.TaskProvider; import org.gradle.api.tasks.testing.Test; import org.gradle.language.base.plugins.LifecycleBasePlugin; @@ -27,14 +27,15 @@ public class PrecommitTaskPlugin implements Plugin { }); project.getPluginManager() - .withPlugin( - "lifecycle-base", - p -> project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(precommit)) - ); + .withPlugin( + "lifecycle-base", + p -> project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(precommit)) + ); project.getPluginManager().withPlugin("java", p -> { // run compilation as part of precommit - GradleUtils.getJavaSourceSets(project).all(sourceSet -> precommit.configure(t -> t.dependsOn(sourceSet.getClassesTaskName()))); - + project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all(sourceSet -> + precommit.configure(t -> t.shouldRunAfter(sourceSet.getClassesTaskName())) + ); // make sure tests run after all precommit tasks project.getTasks().withType(Test.class).configureEach(t -> t.mustRunAfter(precommit)); }); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/util/FileUtils.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/FileUtils.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/util/FileUtils.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/FileUtils.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/Util.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/Util.java similarity index 65% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/Util.java rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/Util.java index f00c32bda3ec..3c90df54c0db 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/Util.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/Util.java @@ -6,30 +6,22 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal.util; +package org.elasticsearch.gradle.internal.conventions.util; -import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin; -import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Action; import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.file.FileTree; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.SourceSetContainer; import org.gradle.api.tasks.util.PatternFilterable; import javax.annotation.Nullable; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.UncheckedIOException; import java.net.URI; import java.net.URISyntaxException; -import java.util.Locale; import java.util.Optional; import java.util.function.Supplier; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class Util { @@ -47,36 +39,6 @@ public class Util { } } - public static String getResourceContents(String resourcePath) { - try ( - BufferedReader reader = new BufferedReader(new InputStreamReader(GlobalBuildInfoPlugin.class.getResourceAsStream(resourcePath))) - ) { - StringBuilder b = new StringBuilder(); - for (String line = reader.readLine(); line != null; line = reader.readLine()) { - if (b.length() != 0) { - b.append('\n'); - } - b.append(line); - } - - return b.toString(); - } catch (IOException e) { - throw new UncheckedIOException("Error trying to read classpath resource: " + resourcePath, e); - } - } - - public static String capitalize(String s) { - return s.substring(0, 1).toUpperCase(Locale.ROOT) + s.substring(1); - } - - public static URI getBuildSrcCodeSource() { - try { - return Util.class.getProtectionDomain().getCodeSource().getLocation().toURI(); - } catch (URISyntaxException e) { - throw new GradleException("Error determining build tools JAR location", e); - } - } - /** * @param project The project to look for resources. * @param filter Optional filter function to filter the returned resources @@ -125,7 +87,7 @@ public class Util { public static Optional getJavaTestSourceSet(Project project) { return project.getConvention().findPlugin(JavaPluginConvention.class) == null ? Optional.empty() - : Optional.ofNullable(GradleUtils.getJavaSourceSets(project).findByName(SourceSet.TEST_SOURCE_SET_NAME)); + : Optional.ofNullable(getJavaSourceSets(project).findByName(SourceSet.TEST_SOURCE_SET_NAME)); } /** @@ -135,26 +97,9 @@ public class Util { public static Optional getJavaMainSourceSet(Project project) { return project.getConvention().findPlugin(JavaPluginConvention.class) == null ? Optional.empty() - : Optional.ofNullable(GradleUtils.getJavaSourceSets(project).findByName(SourceSet.MAIN_SOURCE_SET_NAME)); + : Optional.ofNullable(getJavaSourceSets(project).findByName(SourceSet.MAIN_SOURCE_SET_NAME)); } - static final Pattern GIT_PATTERN = Pattern.compile("git@([^:]+):([^\\.]+)\\.git"); - - /** Find the reponame. */ - public static String urlFromOrigin(String origin) { - if (origin == null) { - return null; // best effort, the url doesnt really matter, it is just required by maven central - } - if (origin.startsWith("https")) { - return origin; - } - Matcher matcher = GIT_PATTERN.matcher(origin); - if (matcher.matches()) { - return String.format("https://%s/%s", matcher.group(1), matcher.group(2)); - } else { - return origin; // best effort, the url doesnt really matter, it is just required by maven central - } - } public static Object toStringable(Supplier getter) { return new Object() { @@ -164,4 +109,9 @@ public class Util { } }; } + + public static SourceSetContainer getJavaSourceSets(Project project) { + return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets(); + } + } diff --git a/buildSrc/.gitignore b/build-tools-internal/.gitignore similarity index 100% rename from buildSrc/.gitignore rename to build-tools-internal/.gitignore diff --git a/buildSrc/build.gradle b/build-tools-internal/build.gradle similarity index 50% rename from buildSrc/build.gradle rename to build-tools-internal/build.gradle index 534199bfe574..ae716a38e789 100644 --- a/buildSrc/build.gradle +++ b/build-tools-internal/build.gradle @@ -8,30 +8,18 @@ import org.gradle.internal.jvm.Jvm import org.gradle.util.GradleVersion +import org.elasticsearch.gradle.internal.conventions.VersionPropertiesLoader plugins { id 'java-gradle-plugin' + id 'groovy-gradle-plugin' id 'groovy' - id 'java-test-fixtures' + id 'elasticsearch.internal-licenseheaders' + id 'elasticsearch.basic-build-tool-conventions' } group = 'org.elasticsearch.gradle' -String minimumGradleVersion = file('src/main/resources/minimumGradleVersion').text.trim() -if (GradleVersion.current() < GradleVersion.version(minimumGradleVersion)) { - throw new GradleException("Gradle ${minimumGradleVersion}+ is required to build elasticsearch") -} - -if (project == rootProject) { - // change the build dir used during build init, so that doing a clean - // won't wipe out the buildscript jar - buildDir = 'build-bootstrap' -} - -/***************************************************************************** - * Propagating version.properties to the rest of the build * - *****************************************************************************/ - // we update the version property to reflect if we are building a snapshot or a release build // we write this back out below to load it in the Build.java which will be shown in rest main action // to indicate this being a snapshot build or a release build. @@ -47,10 +35,6 @@ gradlePlugin { id = 'elasticsearch.build' implementationClass = 'org.elasticsearch.gradle.internal.BuildPlugin' } - distributionDownload { - id = 'elasticsearch.distribution-download' - implementationClass = 'org.elasticsearch.gradle.DistributionDownloadPlugin' - } distroTest { id = 'elasticsearch.distro-test' implementationClass = 'org.elasticsearch.gradle.internal.test.DistroTestPlugin' @@ -63,10 +47,6 @@ gradlePlugin { id = 'elasticsearch.docs-test' implementationClass = 'org.elasticsearch.gradle.internal.doc.DocsTestPlugin' } - esPlugin { - id = 'elasticsearch.esplugin' - implementationClass = 'org.elasticsearch.gradle.plugin.PluginBuildPlugin' - } globalBuildInfo { id = 'elasticsearch.global-build-info' implementationClass = 'org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin' @@ -95,10 +75,6 @@ gradlePlugin { id = 'elasticsearch.internal-distribution-download' implementationClass = 'org.elasticsearch.gradle.internal.InternalDistributionDownloadPlugin' } - internalLicenseheaders { - id = 'elasticsearch.internal-licenseheaders' - implementationClass = 'org.elasticsearch.gradle.internal.precommit.LicenseHeadersPrecommitPlugin' - } internalPlugin { id = 'elasticsearch.internal-es-plugin' implementationClass = 'org.elasticsearch.gradle.internal.InternalPluginBuildPlugin' @@ -127,18 +103,6 @@ gradlePlugin { id = 'elasticsearch.java-rest-test' implementationClass = 'org.elasticsearch.gradle.internal.test.rest.JavaRestTestPlugin' } - jdkDownload { - id = 'elasticsearch.jdk-download' - implementationClass = 'org.elasticsearch.gradle.internal.JdkDownloadPlugin' - } - publish { - id = 'elasticsearch.publish' - implementationClass = 'org.elasticsearch.gradle.internal.PublishPlugin' - } - reaper { - id = 'elasticsearch.reaper' - implementationClass = 'org.elasticsearch.gradle.ReaperPlugin' - } repositories { id = 'elasticsearch.repositories' implementationClass = 'org.elasticsearch.gradle.internal.RepositoriesSetupPlugin' @@ -175,33 +139,16 @@ gradlePlugin { id = 'elasticsearch.test-with-ssl' implementationClass = 'org.elasticsearch.gradle.internal.test.TestWithSslPlugin' } - testclusters { - id = 'elasticsearch.testclusters' - implementationClass = 'org.elasticsearch.gradle.testclusters.TestClustersPlugin' - } validateRestSpec { id = 'elasticsearch.validate-rest-spec' implementationClass = 'org.elasticsearch.gradle.internal.precommit.ValidateRestSpecPlugin' } - yamlRestCompatTest { - id = 'elasticsearch.yaml-rest-compat-test' - implementationClass = 'org.elasticsearch.gradle.internal.rest.compat.YamlRestCompatTestPlugin' - } yamlRestTest { id = 'elasticsearch.yaml-rest-test' implementationClass = 'org.elasticsearch.gradle.internal.test.rest.YamlRestTestPlugin' } } } -def generateVersionProperties = tasks.register("generateVersionProperties", WriteProperties) { - outputFile = "${buildDir}/version.properties" - comment = 'Generated version properties' - properties(props) -} - -tasks.named("processResources").configure { - from(generateVersionProperties) -} /***************************************************************************** * Java version * @@ -211,11 +158,8 @@ if (JavaVersion.current() < JavaVersion.VERSION_11) { throw new GradleException('At least Java 11 is required to build elasticsearch gradle tools') } -allprojects { - apply plugin: 'java' - targetCompatibility = '11' - sourceCompatibility = '11' -} +targetCompatibility = 11 +sourceCompatibility = 11 sourceSets { integTest { @@ -228,6 +172,10 @@ tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' } +tasks.named('licenseHeaders').configure { + // ignore gradle generated binary script plugins + excludes << "Elasticsearch*Plugin.java" +} /***************************************************************************** * Dependencies used by the entire build * *****************************************************************************/ @@ -244,6 +192,9 @@ dependencies { api localGroovy() + api "org.elasticsearch:build-conventions:$version" + api "org.elasticsearch:build-tools:$version" + api 'commons-codec:commons-codec:1.12' api 'org.apache.commons:commons-compress:1.19' api 'org.apache.ant:ant:1.10.8' @@ -265,22 +216,26 @@ dependencies { compileOnly "com.puppycrawl.tools:checkstyle:${props.getProperty('checkstyle')}" testImplementation "com.puppycrawl.tools:checkstyle:${props.getProperty('checkstyle')}" - testFixturesApi "junit:junit:${props.getProperty('junit')}" - testFixturesApi "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${props.getProperty('randomizedrunner')}" - testFixturesApi gradleApi() - testFixturesApi gradleTestKit() + testImplementation "junit:junit:${props.getProperty('junit')}" +// testFixturesApi "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${props.getProperty('randomizedrunner')}" +// testFixturesApi gradleApi() +// testFixturesApi gradleTestKit() testImplementation 'com.github.tomakehurst:wiremock-jre8-standalone:2.23.2' testImplementation 'org.mockito:mockito-core:1.9.5' testImplementation "org.hamcrest:hamcrest:${props.getProperty('hamcrest')}" + testImplementation testFixtures("org.elasticsearch:build-tools:$version") + integTestImplementation(platform("org.junit:junit-bom:${props.getProperty('junit5')}")) integTestImplementation("org.junit.jupiter:junit-jupiter") { because 'allows to write and run Jupiter tests' } + integTestImplementation("net.bytebuddy:byte-buddy:1.11.0") { + because 'Generating dynamic mocks of internal libraries like JdkJarHell' + } testRuntimeOnly("org.junit.vintage:junit-vintage-engine") { because 'allows JUnit 3 and JUnit 4 tests to run' } - integTestRuntimeOnly("org.junit.platform:junit-platform-launcher") { because 'allows tests to run from IDEs that bundle older version of launcher' } @@ -298,183 +253,10 @@ dependencies { integTestImplementation "org.xmlunit:xmlunit-core:2.8.2" } -/***************************************************************************** - * Bootstrap repositories * - *****************************************************************************/ -// this will only happen when buildSrc is built on its own during build init -if (project == rootProject) { - apply plugin: 'groovy-gradle-plugin' - - repositories { - if (System.getProperty("repos.mavenLocal") != null) { - mavenLocal() - } - } - dependencies { - // add this so the runtime classpath so Gradle will properly track it as a build runtime classpath input - runtimeOnly project('reaper') - } - // only run tests as build-tools - tasks.named("test").configure { - enabled = false - } -} - -/***************************************************************************** - * Normal project checks * - *****************************************************************************/ - -// this happens when included as a normal project in the build, which we do -// to enforce precommit checks like forbidden apis, as well as setup publishing -if (project != rootProject) { - apply plugin: 'elasticsearch.build' - apply plugin: 'elasticsearch.publish' - - // We have to set this again down here since the elasticsearch.java plugin defaults to minimumRuntimeVersion - targetCompatibility = '11' - sourceCompatibility = '11' - - // groovydoc succeeds, but has some weird internal exception... - tasks.named("groovydoc").configure { - enabled = false - } - - // build-tools is not ready for primetime with these... - tasks.named("dependencyLicenses").configure { enabled = false } - tasks.named("dependenciesInfo").configure {enabled = false } - disableTasks('forbiddenApisMain', 'forbiddenApisTest', 'forbiddenApisIntegTest', 'forbiddenApisTestFixtures') - tasks.named("jarHell").configure { - enabled = false - } - tasks.named("thirdPartyAudit").configure { - enabled = false - } - configurations.register("distribution") - configurations.register("reaper") - - dependencies { - reaper project('reaper') - distribution project(':distribution:archives:windows-zip') - distribution project(':distribution:archives:darwin-tar') - distribution project(':distribution:archives:darwin-aarch64-tar') - distribution project(':distribution:archives:linux-aarch64-tar') - distribution project(':distribution:archives:linux-tar') - integTestRuntimeOnly(project(":libs:elasticsearch-core")) - } - - // for external projects we want to remove the marker file indicating we are running the Elasticsearch project - tasks.named("processResources").configure { - exclude 'buildSrc.marker' - into('META-INF') { - from configurations.reaper - } - } - - tasks.withType(Test).configureEach { - // Track reaper jar as a test input using runtime classpath normalization strategy - inputs.files(configurations.reaper).withNormalizer(ClasspathNormalizer) - useJUnitPlatform() - } - - tasks.named("test").configure { - include("**/*TestSpec.class") - } - - normalization { - runtimeClasspath { - // We already include the reaper jar as part of our runtime classpath. Ignore the copy in META-INF. - ignore('META-INF/reaper.jar') - } - } - - tasks.named("forbiddenPatterns").configure { - exclude '**/*.wav' - exclude '**/*.p12' - exclude '**/*.jks' - exclude '**/*.crt' - // the file that actually defines nocommit - exclude '**/ForbiddenPatternsTask.java' - exclude '**/*.bcfks' - } - - tasks.named("testingConventions") { - naming.clear() - naming { - Tests { - baseClass 'org.elasticsearch.gradle.internal.test.GradleUnitTestCase' - } - TestSpec { - baseClass 'spock.lang.Specification' - } - } - } - - tasks.register("integTest", Test) { - inputs.dir(file("src/testKit")).withPropertyName("testkit dir").withPathSensitivity(PathSensitivity.RELATIVE) - systemProperty 'test.version_under_test', version - testClassesDirs = sourceSets.integTest.output.classesDirs - classpath = sourceSets.integTest.runtimeClasspath - useJUnitPlatform() - } - tasks.named("check").configure { dependsOn("integTest") } - - // for now we hardcode the tests for our build to use the gradle jvm. - tasks.withType(Test).configureEach { - onlyIf { org.elasticsearch.gradle.internal.info.BuildParams.inFipsJvm == false } - it.executable = Jvm.current().getJavaExecutable() - maxParallelForks = providers.systemProperty('tests.jvms').forUseAtConfigurationTime().getOrElse(org.elasticsearch.gradle.internal.info.BuildParams.defaultParallel.toString()) as Integer - } - - publishing.publications.named("elastic").configure { - suppressPomMetadataWarningsFor("testFixturesApiElements") - suppressPomMetadataWarningsFor("testFixturesRuntimeElements") - } -} - -// Define this here because we need it early. -class VersionPropertiesLoader { - static Properties loadBuildSrcVersion(File input) throws IOException { - Properties props = new Properties(); - InputStream is = new FileInputStream(input) - try { - props.load(is) - } finally { - is.close() - } - loadBuildSrcVersion(props, System.getProperties()) - return props - } - - protected static void loadBuildSrcVersion(Properties loadedProps, Properties systemProperties) { - String elasticsearch = loadedProps.getProperty("elasticsearch") - if (elasticsearch == null) { - throw new IllegalStateException("Elasticsearch version is missing from properties.") - } - if (elasticsearch.matches("[0-9]+\\.[0-9]+\\.[0-9]+") == false) { - throw new IllegalStateException( - "Expected elasticsearch version to be numbers only of the form X.Y.Z but it was: " + - elasticsearch - ) - } - String qualifier = systemProperties.getProperty("build.version_qualifier", "") - if (qualifier.isEmpty() == false) { - if (qualifier.matches("(alpha|beta|rc)\\d+") == false) { - throw new IllegalStateException("Invalid qualifier: " + qualifier) - } - elasticsearch += "-" + qualifier - } - final String buildSnapshotSystemProperty = systemProperties.getProperty("build.snapshot", "true"); - switch (buildSnapshotSystemProperty) { - case "true": - elasticsearch += "-SNAPSHOT" - break; - case "false": - // do nothing - break; - default: - throw new IllegalArgumentException( - "build.snapshot was set to [" + buildSnapshotSystemProperty + "] but can only be unset or [true|false]"); - } - loadedProps.put("elasticsearch", elasticsearch) - } +tasks.register("integTest", Test) { + inputs.dir(file("src/testKit")).withPropertyName("testkit dir").withPathSensitivity(PathSensitivity.RELATIVE) + systemProperty 'test.version_under_test', version + testClassesDirs = sourceSets.integTest.output.classesDirs + classpath = sourceSets.integTest.runtimeClasspath + useJUnitPlatform() } diff --git a/build-tools-internal/elastic.importorder b/build-tools-internal/elastic.importorder new file mode 100644 index 000000000000..78e051ed1e2a --- /dev/null +++ b/build-tools-internal/elastic.importorder @@ -0,0 +1,7 @@ +#Eclipse configuration for import order for Elasticsearch +0= +1=com +2=org +3=java +4=javax +5=\# diff --git a/buildSrc/formatterConfig.xml b/build-tools-internal/formatterConfig.xml similarity index 100% rename from buildSrc/formatterConfig.xml rename to build-tools-internal/formatterConfig.xml diff --git a/build-tools-internal/settings.gradle b/build-tools-internal/settings.gradle new file mode 100644 index 000000000000..6981f837d4a2 --- /dev/null +++ b/build-tools-internal/settings.gradle @@ -0,0 +1,2 @@ +includeBuild '../build-conventions' +includeBuild '../build-tools' diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy similarity index 96% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy index b0eea457df0c..fd486051d74d 100644 --- a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGitAwareGradleFuncTest.groovy @@ -9,6 +9,7 @@ package org.elasticsearch.gradle.fixtures import org.apache.commons.io.FileUtils +import org.elasticsearch.gradle.internal.test.InternalAwareGradleRunner import org.gradle.testkit.runner.GradleRunner import org.junit.Rule import org.junit.rules.TemporaryFolder diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/ElasticsearchJavaPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/ElasticsearchJavaPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/ElasticsearchJavaPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/ElasticsearchJavaPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/ElasticsearchTestBasePluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/ElasticsearchTestBasePluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/ElasticsearchTestBasePluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/ElasticsearchTestBasePluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalBwcGitPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalBwcGitPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalBwcGitPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalBwcGitPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/JdkDownloadPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/JdkDownloadPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/JdkDownloadPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/JdkDownloadPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy similarity index 58% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy index 6155e858780a..9b9a9e9b7064 100644 --- a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy @@ -10,8 +10,10 @@ package org.elasticsearch.gradle.internal import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest import org.gradle.testkit.runner.TaskOutcome +import org.junit.Ignore import org.xmlunit.builder.DiffBuilder import org.xmlunit.builder.Input +import spock.lang.IgnoreRest class PublishPluginFuncTest extends AbstractGradleFuncTest { @@ -38,16 +40,42 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest { file("build/distributions/hello-world-1.0-sources.jar").exists() file("build/distributions/hello-world-1.0.pom").exists() assertXmlEquals(file("build/distributions/hello-world-1.0.pom").text, """ - - 4.0.0 - org.acme - hello-world - 1.0 - hello-world - custom project description - """ + + + + + + + 4.0.0 + org.acme + hello-world + 1.0 + hello-world + custom project description + unknown + + unknown + + 2009 + + + Elastic License 2.0 + https://raw.githubusercontent.com/elastic/elasticsearch/v1.0/licenses/ELASTIC-LICENSE-2.0.txt + repo + + + Server Side Public License, v 1 + https://www.mongodb.com/licensing/server-side-public-license + repo + + + + + Elastic + https://www.elastic.co + + +""" ) } @@ -99,6 +127,29 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest { 1.0 hello-world some description + unknown + + unknown + + 2009 + + + Elastic License 2.0 + https://raw.githubusercontent.com/elastic/elasticsearch/v1.0/licenses/ELASTIC-LICENSE-2.0.txt + repo + + + Server Side Public License, v 1 + https://www.mongodb.com/licensing/server-side-public-license + repo + + + + + Elastic + https://www.elastic.co + + org.slf4j @@ -160,6 +211,29 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest { 1.0 hello-world some description + unknown + + unknown + + 2009 + + + Elastic License 2.0 + https://raw.githubusercontent.com/elastic/elasticsearch/v1.0/licenses/ELASTIC-LICENSE-2.0.txt + repo + + + Server Side Public License, v 1 + https://www.mongodb.com/licensing/server-side-public-license + repo + + + + + Elastic + https://www.elastic.co + + org.acme @@ -216,15 +290,41 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest { file("build/distributions/hello-world-plugin-1.0-sources.jar").exists() file("build/distributions/hello-world-plugin-1.0.pom").exists() assertXmlEquals(file("build/distributions/hello-world-plugin-1.0.pom").text, """ - + + + + + + 4.0.0 org.acme hello-world-plugin 1.0 hello-world custom project description + unknown + + unknown + + 2009 + + + Elastic License 2.0 + https://raw.githubusercontent.com/elastic/elasticsearch/v1.0/licenses/ELASTIC-LICENSE-2.0.txt + repo + + + Server Side Public License, v 1 + https://www.mongodb.com/licensing/server-side-public-license + repo + + + + + Elastic + https://www.elastic.co + + """ ) @@ -250,7 +350,7 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest { tasks.named('bundlePlugin').configure { enabled = false } licenseFile = file('license.txt') noticeFile = file('notice.txt') - version = "1.0" + version = "2.0" group = 'org.acme' """ @@ -259,22 +359,48 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest { then: result.task(":generatePom").outcome == TaskOutcome.SUCCESS - file("build/distributions/hello-world-plugin-1.0.pom").exists() - assertXmlEquals(file("build/distributions/hello-world-plugin-1.0.pom").text, """ - + file("build/distributions/hello-world-plugin-2.0.pom").exists() + assertXmlEquals(file("build/distributions/hello-world-plugin-2.0.pom").text, """ + + + + + + 4.0.0 org.acme hello-world-plugin - 1.0 + 2.0 hello-world custom project description + unknown + + unknown + + 2009 + + + Elastic License 2.0 + https://raw.githubusercontent.com/elastic/elasticsearch/v2.0/licenses/ELASTIC-LICENSE-2.0.txt + repo + + + Server Side Public License, v 1 + https://www.mongodb.com/licensing/server-side-public-license + repo + + + + + Elastic + https://www.elastic.co + + """ ) } - def "generated pom can be tweaked and validated"() { + def "generated pom can be validated"() { given: // scm info only added for internal builds internalBuild() @@ -288,68 +414,47 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest { group = 'org.acme' description = "just a test project" - // this is currently required to have validation passed - // In our elasticsearch build this is currently setup in the - // root build.gradle file. - plugins.withType(MavenPublishPlugin) { - publishing { - publications { - // add license information to generated poms - all { - pom.withXml { XmlProvider xml -> - Node node = xml.asNode() - node.appendNode('inceptionYear', '2009') - - Node license = node.appendNode('licenses').appendNode('license') - license.appendNode('name', "The Apache Software License, Version 2.0") - license.appendNode('url', "http://www.apache.org/licenses/LICENSE-2.0.txt") - license.appendNode('distribution', 'repo') - - Node developer = node.appendNode('developers').appendNode('developer') - developer.appendNode('name', 'Elastic') - developer.appendNode('url', 'https://www.elastic.co') - } - } - } - } - } + ext.projectLicenses.set(['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0']) """ when: - def result = gradleRunner('generatePom', 'validatElasticPom').build() + def result = gradleRunner('generatePom', 'validateElasticPom').build() then: result.task(":generatePom").outcome == TaskOutcome.SUCCESS file("build/distributions/hello-world-1.0.pom").exists() assertXmlEquals(file("build/distributions/hello-world-1.0.pom").text, """ - - 4.0.0 - org.acme - hello-world - 1.0 - hello-world - just a test project - https://some-repo.com/repo.git - - https://some-repo.com/repo.git - - 2009 - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - Elastic - https://www.elastic.co - - - """ + + + + + + + 4.0.0 + org.acme + hello-world + 1.0 + hello-world + just a test project + unknown + + unknown + + 2009 + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0 + repo + + + + + Elastic + https://www.elastic.co + + + """ ) } diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rerun/InternalTestRerunPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rerun/InternalTestRerunPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rerun/InternalTestRerunPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rerun/InternalTestRerunPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/RestResourcesPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/RestResourcesPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/RestResourcesPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/RestResourcesPluginFuncTest.groovy diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestCompatTestPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestCompatTestPluginFuncTest.groovy new file mode 100644 index 000000000000..d176f7897a68 --- /dev/null +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestCompatTestPluginFuncTest.groovy @@ -0,0 +1,368 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test.rest + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.SequenceWriter +import com.fasterxml.jackson.databind.node.ObjectNode +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory +import org.elasticsearch.gradle.Version +import org.elasticsearch.gradle.fixtures.AbstractRestResourcesFuncTest +import org.elasticsearch.gradle.VersionProperties +import org.gradle.testkit.runner.TaskOutcome + +class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest { + + def compatibleVersion = Version.fromString(VersionProperties.getVersions().get("elasticsearch")).getMajor() - 1 + def specIntermediateDir = "restResources/v${compatibleVersion}/yamlSpecs" + def testIntermediateDir = "restResources/v${compatibleVersion}/yamlTests" + def transformTask = ":transformV${compatibleVersion}RestTests" + def YAML_FACTORY = new YAMLFactory() + def MAPPER = new ObjectMapper(YAML_FACTORY) + def READER = MAPPER.readerFor(ObjectNode.class) + def WRITER = MAPPER.writerFor(ObjectNode.class) + + def "yamlRestCompatTest does nothing when there are no tests"() { + given: + addSubProject(":distribution:bwc:minor") << """ + configurations { checkout } + artifacts { + checkout(new File(projectDir, "checkoutDir")) + } + """ + + buildFile << """ + plugins { + id 'elasticsearch.yaml-rest-compat-test' + } + """ + + when: + def result = gradleRunner("yamlRestCompatTest").build() + + then: + result.task(':yamlRestCompatTest').outcome == TaskOutcome.NO_SOURCE + result.task(':copyRestCompatApiTask').outcome == TaskOutcome.NO_SOURCE + result.task(':copyRestCompatTestTask').outcome == TaskOutcome.NO_SOURCE + result.task(transformTask).outcome == TaskOutcome.NO_SOURCE + } + + def "yamlRestCompatTest executes and copies api and transforms tests from :bwc:minor"() { + given: + internalBuild() + + addSubProject(":distribution:bwc:minor") << """ + configurations { checkout } + artifacts { + checkout(new File(projectDir, "checkoutDir")) + } + """ + + buildFile << """ + apply plugin: 'elasticsearch.yaml-rest-compat-test' + + // avoids a dependency problem in this test, the distribution in use here is inconsequential to the test + import org.elasticsearch.gradle.testclusters.TestDistribution; + + dependencies { + yamlRestTestImplementation "junit:junit:4.12" + } + + // can't actually spin up test cluster from this test + tasks.withType(Test).configureEach{ enabled = false } + """ + + String wrongApi = "wrong_version.json" + String wrongTest = "wrong_version.yml" + String additionalTest = "additional_test.yml" + setupRestResources([wrongApi], [wrongTest]) //setups up resources for current version, which should not be used for this test + addRestTestsToProject([additionalTest], "yamlRestCompatTest") + //intentionally adding to yamlRestTest source set since the .classes are copied from there + file("src/yamlRestTest/java/MockIT.java") << "import org.junit.Test;class MockIT { @Test public void doNothing() { }}" + + String api = "foo.json" + String test = "10_basic.yml" + //add the compatible test and api files, these are the prior version's normal yaml rest tests + file("distribution/bwc/minor/checkoutDir/rest-api-spec/src/main/resources/rest-api-spec/api/" + api) << "" + file("distribution/bwc/minor/checkoutDir/src/yamlRestTest/resources/rest-api-spec/test/" + test) << "" + + when: + def result = gradleRunner("yamlRestCompatTest").build() + + then: + result.task(':yamlRestCompatTest').outcome == TaskOutcome.SKIPPED + result.task(':copyRestCompatApiTask').outcome == TaskOutcome.SUCCESS + result.task(':copyRestCompatTestTask').outcome == TaskOutcome.SUCCESS + result.task(transformTask).outcome == TaskOutcome.SUCCESS + + file("/build/${specIntermediateDir}/rest-api-spec/api/" + api).exists() + file("/build/${testIntermediateDir}/original/rest-api-spec/test/" + test).exists() + file("/build/${testIntermediateDir}/transformed/rest-api-spec/test/" + test).exists() + file("/build/${testIntermediateDir}/original/rest-api-spec/test/" + test).exists() + file("/build/${testIntermediateDir}/transformed/rest-api-spec/test/" + test).exists() + file("/build/${testIntermediateDir}/transformed/rest-api-spec/test/" + test).text.contains("headers") //transformation adds this + file("/build/resources/yamlRestCompatTest/rest-api-spec/test/" + additionalTest).exists() + + //additionalTest is not copied from the prior version, and thus not in the intermediate directory, nor transformed + file("/build/resources/yamlRestCompatTest/" + testIntermediateDir + "/rest-api-spec/test/" + additionalTest).exists() == false + file("/build/resources/yamlRestCompatTest/rest-api-spec/test/" + additionalTest).text.contains("headers") == false + + file("/build/classes/java/yamlRestTest/MockIT.class").exists() //The "standard" runner is used to execute the compat test + + file("/build/resources/yamlRestCompatTest/rest-api-spec/api/" + wrongApi).exists() == false + file("/build/resources/yamlRestCompatTest/" + testIntermediateDir + "/rest-api-spec/test/" + wrongTest).exists() == false + file("/build/resources/yamlRestCompatTest/rest-api-spec/test/" + wrongTest).exists() == false + + result.task(':copyRestApiSpecsTask').outcome == TaskOutcome.NO_SOURCE + result.task(':copyYamlTestsTask').outcome == TaskOutcome.NO_SOURCE + + when: + result = gradleRunner("yamlRestCompatTest").build() + + then: + result.task(':yamlRestCompatTest').outcome == TaskOutcome.SKIPPED + result.task(':copyRestCompatApiTask').outcome == TaskOutcome.UP_TO_DATE + result.task(':copyRestCompatTestTask').outcome == TaskOutcome.UP_TO_DATE + result.task(transformTask).outcome == TaskOutcome.UP_TO_DATE + } + + def "yamlRestCompatTest is wired into check and checkRestCompat"() { + given: + + addSubProject(":distribution:bwc:minor") << """ + configurations { checkout } + artifacts { + checkout(new File(projectDir, "checkoutDir")) + } + """ + + buildFile << """ + plugins { + id 'elasticsearch.yaml-rest-compat-test' + } + + """ + + when: + def result = gradleRunner("check").build() + + then: + result.task(':check').outcome == TaskOutcome.UP_TO_DATE + result.task(':checkRestCompat').outcome == TaskOutcome.UP_TO_DATE + result.task(':yamlRestCompatTest').outcome == TaskOutcome.NO_SOURCE + result.task(':copyRestCompatApiTask').outcome == TaskOutcome.NO_SOURCE + result.task(':copyRestCompatTestTask').outcome == TaskOutcome.NO_SOURCE + result.task(transformTask).outcome == TaskOutcome.NO_SOURCE + + when: + buildFile << """ + ext.bwc_tests_enabled = false + """ + result = gradleRunner("check").build() + + then: + result.task(':check').outcome == TaskOutcome.UP_TO_DATE + result.task(':checkRestCompat').outcome == TaskOutcome.UP_TO_DATE + result.task(':yamlRestCompatTest').outcome == TaskOutcome.SKIPPED + result.task(':copyRestCompatApiTask').outcome == TaskOutcome.SKIPPED + result.task(':copyRestCompatTestTask').outcome == TaskOutcome.SKIPPED + result.task(transformTask).outcome == TaskOutcome.SKIPPED + } + + def "transform task executes and works as configured"() { + given: + internalBuild() + + addSubProject(":distribution:bwc:minor") << """ + configurations { checkout } + artifacts { + checkout(new File(projectDir, "checkoutDir")) + } + """ + + buildFile << """ + apply plugin: 'elasticsearch.yaml-rest-compat-test' + + // avoids a dependency problem in this test, the distribution in use here is inconsequential to the test + import org.elasticsearch.gradle.testclusters.TestDistribution; + + dependencies { + yamlRestTestImplementation "junit:junit:4.12" + } + tasks.named("transformV7RestTests").configure({ task -> + task.replaceValueInMatch("_type", "_doc") + task.replaceValueInMatch("_source.values", ["z", "x", "y"], "one") + task.removeMatch("_source.blah") + task.removeMatch("_source.junk", "two") + task.addMatch("_source.added", [name: 'jake', likes: 'cheese'], "one") + task.addWarning("one", "warning1", "warning2") + task.addWarningRegex("two", "regex warning here .* [a-z]") + task.addAllowedWarning("added allowed warning") + task.addAllowedWarningRegex("added allowed warning regex .* [0-9]") + task.removeWarning("one", "warning to remove") + task.replaceIsTrue("value_to_replace", "replaced_value") + task.replaceIsFalse("value_to_replace", "replaced_value") + task.replaceKeyInDo("do_.some.key_to_replace", "do_.some.key_that_was_replaced") + task.replaceKeyInMatch("match_.some.key_to_replace", "match_.some.key_that_was_replaced") + task.replaceKeyInLength("key.in_length_to_replace", "key.in_length_that_was_replaced") + }) + // can't actually spin up test cluster from this test + tasks.withType(Test).configureEach{ enabled = false } + """ + + setupRestResources([], []) + + file("distribution/bwc/minor/checkoutDir/src/yamlRestTest/resources/rest-api-spec/test/test.yml" ) << """ + "one": + - do: + do_.some.key_to_replace: + index: test + id: 1 + warnings: + - "warning to remove" + - match: { _source.values: ["foo"] } + - match: { _type: "_foo" } + - match: { _source.blah: 1234 } + - match: { _source.junk: true } + - match: { match_.some.key_to_replace: true } + - is_true: "value_to_replace" + - is_false: "value_to_replace" + - is_true: "value_not_to_replace" + - is_false: "value_not_to_replace" + - length: { key.in_length_to_replace: 1 } + --- + "two": + - do: + get: + index: test + id: 1 + - match: { _source.values: ["foo"] } + - match: { _type: "_foo" } + - match: { _source.blah: 1234 } + - match: { _source.junk: true } + - is_true: "value_to_replace" + - is_false: "value_to_replace" + - is_true: "value_not_to_replace" + - is_false: "value_not_to_replace" + + """.stripIndent() + when: + def result = gradleRunner("yamlRestCompatTest").build() + + then: + + result.task(transformTask).outcome == TaskOutcome.SUCCESS + + + file("/build/${testIntermediateDir}/transformed/rest-api-spec/test/test.yml" ).exists() + List actual = READER.readValues(file("/build/${testIntermediateDir}/transformed/rest-api-spec/test/test.yml")).readAll() + List expectedAll = READER.readValues( + """ + --- + setup: + - skip: + features: + - "headers" + - "warnings" + - "warnings_regex" + - "allowed_warnings" + - "allowed_warnings_regex" + --- + one: + - do: + do_.some.key_that_was_replaced: + index: "test" + id: 1 + warnings: + - "warning1" + - "warning2" + headers: + Content-Type: "application/vnd.elasticsearch+json;compatible-with=7" + Accept: "application/vnd.elasticsearch+json;compatible-with=7" + allowed_warnings: + - "added allowed warning" + allowed_warnings_regex: + - "added allowed warning regex .* [0-9]" + - match: + _source.values: + - "z" + - "x" + - "y" + - match: + _type: "_doc" + - match: {} + - match: + _source.junk: true + - match: + match_.some.key_that_was_replaced: true + - is_true: "replaced_value" + - is_false: "replaced_value" + - is_true: "value_not_to_replace" + - is_false: "value_not_to_replace" + - length: { key.in_length_that_was_replaced: 1 } + - match: + _source.added: + name: "jake" + likes: "cheese" + + --- + two: + - do: + get: + index: "test" + id: 1 + headers: + Content-Type: "application/vnd.elasticsearch+json;compatible-with=7" + Accept: "application/vnd.elasticsearch+json;compatible-with=7" + warnings_regex: + - "regex warning here .* [a-z]" + allowed_warnings: + - "added allowed warning" + allowed_warnings_regex: + - "added allowed warning regex .* [0-9]" + - match: + _source.values: + - "foo" + - match: + _type: "_doc" + - match: {} + - match: {} + - is_true: "replaced_value" + - is_false: "replaced_value" + - is_true: "value_not_to_replace" + - is_false: "value_not_to_replace" + """.stripIndent()).readAll() + + expectedAll.eachWithIndex{ ObjectNode expected, int i -> + if(expected != actual.get(i)) { + println("\nTransformed Test:") + SequenceWriter sequenceWriter = WRITER.writeValues(System.out) + for (ObjectNode transformedTest : actual) { + sequenceWriter.write(transformedTest) + } + sequenceWriter.close() + } + assert expected == actual.get(i) + } + + when: + result = gradleRunner(transformTask).build() + + then: + result.task(transformTask).outcome == TaskOutcome.UP_TO_DATE + + when: + buildFile.write(buildFile.text.replace("blah", "baz")) + result = gradleRunner(transformTask).build() + + then: + result.task(transformTask).outcome == TaskOutcome.SUCCESS + } + +} diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestTestPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestTestPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestTestPluginFuncTest.groovy rename to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestTestPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java similarity index 100% rename from buildSrc/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java rename to build-tools-internal/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java diff --git a/buildSrc/src/integTest/java/org/elasticsearch/gradle/internal/BuildPluginIT.java b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/BuildPluginIT.java similarity index 99% rename from buildSrc/src/integTest/java/org/elasticsearch/gradle/internal/BuildPluginIT.java rename to build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/BuildPluginIT.java index 44ce9e3f44f5..f57dfa4ca97b 100644 --- a/buildSrc/src/integTest/java/org/elasticsearch/gradle/internal/BuildPluginIT.java +++ b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/BuildPluginIT.java @@ -46,11 +46,8 @@ public class BuildPluginIT extends GradleIntegrationTestCase { public void testLicenseAndNotice() throws IOException { BuildResult result = getGradleRunner().withArguments("clean", "assemble").build(); - assertTaskSuccessful(result, ":assemble"); - assertBuildFileExists(result, projectName(), "distributions/elasticsearch.build.jar"); - try (ZipFile zipFile = new ZipFile(new File(getBuildDir(projectName()), "distributions/elasticsearch.build.jar"))) { ZipEntry licenseEntry = zipFile.getEntry("META-INF/LICENSE.txt"); ZipEntry noticeEntry = zipFile.getEntry("META-INF/NOTICE.txt"); diff --git a/buildSrc/src/integTest/java/org/elasticsearch/gradle/internal/ExportElasticsearchBuildResourcesTaskIT.java b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/ExportElasticsearchBuildResourcesTaskIT.java similarity index 100% rename from buildSrc/src/integTest/java/org/elasticsearch/gradle/internal/ExportElasticsearchBuildResourcesTaskIT.java rename to build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/ExportElasticsearchBuildResourcesTaskIT.java diff --git a/buildSrc/src/integTest/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTarIT.java b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTarIT.java similarity index 100% rename from buildSrc/src/integTest/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTarIT.java rename to build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTarIT.java diff --git a/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/test/TestClasspathUtils.java b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/test/TestClasspathUtils.java new file mode 100644 index 000000000000..0dc47b456ae1 --- /dev/null +++ b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/internal/test/TestClasspathUtils.java @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test; + +import java.io.File; +import java.io.IOException; + +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.description.modifier.Ownership; +import net.bytebuddy.description.modifier.Visibility; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.dynamic.scaffold.InstrumentedType; +import net.bytebuddy.implementation.ExceptionMethod; +import net.bytebuddy.implementation.FixedValue; +import net.bytebuddy.implementation.Implementation; +import net.bytebuddy.implementation.bytecode.ByteCodeAppender; + +import static org.junit.Assert.fail; + +public class TestClasspathUtils { + + public static void setupJarJdkClasspath(File projectRoot) { + generateJdkJarHellCheck(projectRoot, FixedValue.value(TypeDescription.VOID)); + } + + public static void setupJarJdkClasspath(File projectRoot, String errorMessage) { + generateJdkJarHellCheck(projectRoot, + ExceptionMethod.throwing(IllegalStateException.class, errorMessage)); + } + + private static void generateJdkJarHellCheck(File projectRoot, Implementation mainImplementation) { + DynamicType.Unloaded dynamicType = new ByteBuddy() + .subclass(Object.class) + .name("org.elasticsearch.bootstrap.JdkJarHellCheck") + .defineMethod("main", void.class, Visibility.PUBLIC, Ownership.STATIC) + .withParameters(String[].class) + .intercept(mainImplementation) + .make(); + try { + dynamicType.toJar(targetFile(projectRoot)); + } catch (IOException e) { + e.printStackTrace(); + fail("Cannot setup jdk jar hell classpath"); + } + } + + private static File targetFile(File projectRoot) { + File targetFile = new File( + projectRoot, + "sample_jars/build/testrepo/org/elasticsearch/elasticsearch-core/current/elasticsearch-core-current.jar" + ); + + targetFile.getParentFile().mkdirs(); + return targetFile; + } + + + private static class InconsistentParameterReferenceMethod implements net.bytebuddy.implementation.Implementation { + @Override + public ByteCodeAppender appender(Target implementationTarget) { + return null; + } + + @Override + public InstrumentedType prepare(InstrumentedType instrumentedType) { + return null; + } + } + + public static class JdkJarHellBase { + public static void main(String[] args) { + System.out.println("args = " + args); + } + } +} diff --git a/buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/TestingConventionsTasksIT.java b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/jarhell/TestingConventionsTasksIT.java similarity index 99% rename from buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/TestingConventionsTasksIT.java rename to build-tools-internal/src/integTest/java/org/elasticsearch/gradle/jarhell/TestingConventionsTasksIT.java index 6ecf6582e723..ae85c8d68131 100644 --- a/buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/TestingConventionsTasksIT.java +++ b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/jarhell/TestingConventionsTasksIT.java @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.jarhell; import org.elasticsearch.gradle.internal.test.GradleIntegrationTestCase; import org.gradle.testkit.runner.BuildResult; diff --git a/buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/jarhell/ThirdPartyAuditTaskIT.java similarity index 55% rename from buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java rename to build-tools-internal/src/integTest/java/org/elasticsearch/gradle/jarhell/ThirdPartyAuditTaskIT.java index 5bd91e0bf3ac..5a3a968c3f6a 100644 --- a/buildSrc/src/integTest/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditTaskIT.java +++ b/build-tools-internal/src/integTest/java/org/elasticsearch/gradle/jarhell/ThirdPartyAuditTaskIT.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.jarhell; import org.elasticsearch.gradle.internal.test.GradleIntegrationTestCase; import org.gradle.testkit.runner.BuildResult; @@ -26,32 +26,33 @@ public class ThirdPartyAuditTaskIT extends GradleIntegrationTestCase { // Build the sample jars getGradleRunner().withArguments(":sample_jars:build", "-s").build(); // propagate jdkjarhell jar - setupJarJdkClasspath(getProjectDir()); } public void testElasticsearchIgnored() { BuildResult result = getGradleRunner().withArguments( - ":clean", - ":empty", - "-s", - "-PcompileOnlyGroup=elasticsearch.gradle:broken-log4j", - "-PcompileOnlyVersion=0.0.1", - "-PcompileGroup=elasticsearch.gradle:dummy-io", - "-PcompileVersion=0.0.1" + ":clean", + ":empty", + "-s", + "-PcompileOnlyGroup=elasticsearch.gradle:broken-log4j", + "-PcompileOnlyVersion=0.0.1", + "-PcompileGroup=elasticsearch.gradle:dummy-io", + "-PcompileVersion=0.0.1" ).build(); assertTaskNoSource(result, ":empty"); assertNoDeprecationWarning(result); } public void testViolationFoundAndCompileOnlyIgnored() { + setupJarJdkClasspath(getProjectDir()); + BuildResult result = getGradleRunner().withArguments( - ":clean", - ":absurd", - "-s", - "-PcompileOnlyGroup=other.gradle:broken-log4j", - "-PcompileOnlyVersion=0.0.1", - "-PcompileGroup=other.gradle:dummy-io", - "-PcompileVersion=0.0.1" + ":clean", + ":absurd", + "-s", + "-PcompileOnlyGroup=other.gradle:broken-log4j", + "-PcompileOnlyVersion=0.0.1", + "-PcompileGroup=other.gradle:dummy-io", + "-PcompileVersion=0.0.1" ).buildAndFail(); assertTaskFailed(result, ":absurd"); @@ -61,44 +62,49 @@ public class ThirdPartyAuditTaskIT extends GradleIntegrationTestCase { } public void testClassNotFoundAndCompileOnlyIgnored() { + setupJarJdkClasspath(getProjectDir()); BuildResult result = getGradleRunner().withArguments( - ":clean", - ":absurd", - "-s", - "-PcompileGroup=other.gradle:broken-log4j", - "-PcompileVersion=0.0.1", - "-PcompileOnlyGroup=other.gradle:dummy-io", - "-PcompileOnlyVersion=0.0.1" + ":clean", + ":absurd", + "-s", + "-PcompileGroup=other.gradle:broken-log4j", + "-PcompileVersion=0.0.1", + "-PcompileOnlyGroup=other.gradle:dummy-io", + "-PcompileOnlyVersion=0.0.1" ).buildAndFail(); assertTaskFailed(result, ":absurd"); assertOutputContains( - result.getOutput(), - "Missing classes:", - " * org.apache.logging.log4j.LogManager", - "> Audit of third party dependencies failed" + result.getOutput(), + "Missing classes:", + " * org.apache.logging.log4j.LogManager", + "> Audit of third party dependencies failed" ); assertOutputMissing(result.getOutput(), "Classes with violations:"); assertNoDeprecationWarning(result); } public void testJarHellWithJDK() { + setupJarJdkClasspath(getProjectDir(), "> Audit of third party dependencies failed:" + + " Jar Hell with the JDK:" + + " * java.lang.String" + ); BuildResult result = getGradleRunner().withArguments( - ":clean", - ":absurd", - "-s", - "-PcompileGroup=other.gradle:jarhellJdk", - "-PcompileVersion=0.0.1", - "-PcompileOnlyGroup=other.gradle:dummy-io", - "-PcompileOnlyVersion=0.0.1" + ":clean", + ":absurd", + "-s", + "-PcompileGroup=other.gradle:jarhellJdk", + "-PcompileVersion=0.0.1", + "-PcompileOnlyGroup=other.gradle:dummy-io", + "-PcompileOnlyVersion=0.0.1" ).buildAndFail(); assertTaskFailed(result, ":absurd"); assertOutputContains( - result.getOutput(), - "> Audit of third party dependencies failed:", - " Jar Hell with the JDK:", - " * java.lang.String" + result.getOutput(), + "> Audit of third party dependencies failed:", + " Jar Hell with the JDK:", + " * java.lang.String" ); assertOutputMissing(result.getOutput(), "Classes with violations:"); assertNoDeprecationWarning(result); @@ -106,13 +112,13 @@ public class ThirdPartyAuditTaskIT extends GradleIntegrationTestCase { public void testElasticsearchIgnoredWithViolations() { BuildResult result = getGradleRunner().withArguments( - ":clean", - ":absurd", - "-s", - "-PcompileOnlyGroup=elasticsearch.gradle:broken-log4j", - "-PcompileOnlyVersion=0.0.1", - "-PcompileGroup=elasticsearch.gradle:dummy-io", - "-PcompileVersion=0.0.1" + ":clean", + ":absurd", + "-s", + "-PcompileOnlyGroup=elasticsearch.gradle:broken-log4j", + "-PcompileOnlyVersion=0.0.1", + "-PcompileGroup=elasticsearch.gradle:dummy-io", + "-PcompileVersion=0.0.1" ).build(); assertTaskNoSource(result, ":absurd"); assertNoDeprecationWarning(result); diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-config.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-config.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-config.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-config.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-jar.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-jar.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-jar.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-jar.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.zip b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.zip similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.zip rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.zip diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_linux.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_linux.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_linux.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_linux.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_osx.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_osx.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_osx.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_osx.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_windows.zip b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_windows.zip similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_windows.zip rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_adoptopenjdk_windows.zip diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_azuljdk_linux_aarch64.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_azuljdk_linux_aarch64.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_azuljdk_linux_aarch64.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_azuljdk_linux_aarch64.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_azuljdk_osx_aarch64.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_azuljdk_osx_aarch64.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_azuljdk_osx_aarch64.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_azuljdk_osx_aarch64.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/buildSrc/src/main/resources/minimumCompilerVersion b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/buildSrc/src/main/resources/minimumCompilerVersion similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/buildSrc/src/main/resources/minimumCompilerVersion rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/buildSrc/src/main/resources/minimumCompilerVersion diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/darwin-aarch64-tar/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/darwin-aarch64-tar/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/darwin-aarch64-tar/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/darwin-aarch64-tar/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/darwin-tar/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/darwin-tar/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/darwin-tar/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/darwin-tar/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/linux-aarch64-tar/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/linux-aarch64-tar/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/linux-aarch64-tar/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/linux-aarch64-tar/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-darwin-aarch64-tar/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-darwin-aarch64-tar/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-darwin-aarch64-tar/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-darwin-aarch64-tar/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-darwin-tar/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-darwin-tar/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-darwin-tar/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-darwin-tar/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-linux-aarch64-tar/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-linux-aarch64-tar/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-linux-aarch64-tar/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/archives/oss-linux-aarch64-tar/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/bugfix/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/major/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/major/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/major/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/major/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/minor/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/minor/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/minor/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/minor/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/staged/build.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/staged/build.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/staged/build.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/distribution/bwc/staged/build.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/gradle.properties b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/gradle.properties similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/gradle.properties rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/gradle.properties diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/settings.gradle b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/settings.gradle similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/settings.gradle rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_git/remote/settings.gradle diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_linux.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_linux.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_linux.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_linux.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_osx.tar.gz b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_osx.tar.gz similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_osx.tar.gz rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_osx.tar.gz diff --git a/buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_windows.zip b/build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_windows.zip similarity index 100% rename from buildSrc/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_windows.zip rename to build-tools-internal/src/integTest/resources/org/elasticsearch/gradle/internal/fake_openjdk_windows.zip diff --git a/buildSrc/src/main/groovy/elasticsearch.build-complete.gradle b/build-tools-internal/src/main/groovy/elasticsearch.build-complete.gradle similarity index 100% rename from buildSrc/src/main/groovy/elasticsearch.build-complete.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.build-complete.gradle diff --git a/buildSrc/src/main/groovy/elasticsearch.build-scan.gradle b/build-tools-internal/src/main/groovy/elasticsearch.build-scan.gradle similarity index 100% rename from buildSrc/src/main/groovy/elasticsearch.build-scan.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.build-scan.gradle diff --git a/buildSrc/src/main/groovy/elasticsearch.bwc-test.gradle b/build-tools-internal/src/main/groovy/elasticsearch.bwc-test.gradle similarity index 100% rename from buildSrc/src/main/groovy/elasticsearch.bwc-test.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.bwc-test.gradle diff --git a/buildSrc/src/main/groovy/elasticsearch.fips.gradle b/build-tools-internal/src/main/groovy/elasticsearch.fips.gradle similarity index 100% rename from buildSrc/src/main/groovy/elasticsearch.fips.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.fips.gradle diff --git a/buildSrc/src/main/groovy/elasticsearch.forbidden-dependencies.gradle b/build-tools-internal/src/main/groovy/elasticsearch.forbidden-dependencies.gradle similarity index 100% rename from buildSrc/src/main/groovy/elasticsearch.forbidden-dependencies.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.forbidden-dependencies.gradle diff --git a/buildSrc/src/main/groovy/elasticsearch.formatting.gradle b/build-tools-internal/src/main/groovy/elasticsearch.formatting.gradle similarity index 98% rename from buildSrc/src/main/groovy/elasticsearch.formatting.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.formatting.gradle index 881a14ae2a48..71819cf845e1 100644 --- a/buildSrc/src/main/groovy/elasticsearch.formatting.gradle +++ b/build-tools-internal/src/main/groovy/elasticsearch.formatting.gradle @@ -170,7 +170,7 @@ subprojects { target 'src/**/*.java' removeUnusedImports() - eclipse().configFile rootProject.file('buildSrc/formatterConfig.xml') + eclipse().configFile rootProject.file('build-tools-internal/formatterConfig.xml') trimTrailingWhitespace() // See CONTRIBUTING.md for details of when to enabled this. diff --git a/buildSrc/src/main/groovy/elasticsearch.ide.gradle b/build-tools-internal/src/main/groovy/elasticsearch.ide.gradle similarity index 94% rename from buildSrc/src/main/groovy/elasticsearch.ide.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.ide.gradle index 09c16adcb433..545f5fef2207 100644 --- a/buildSrc/src/main/groovy/elasticsearch.ide.gradle +++ b/build-tools-internal/src/main/groovy/elasticsearch.ide.gradle @@ -13,17 +13,6 @@ import java.nio.file.Files import java.nio.file.Paths import java.nio.file.StandardCopyOption -buildscript { - repositories { - maven { - url "https://plugins.gradle.org/m2/" - } - } - dependencies { - classpath "gradle.plugin.org.jetbrains.gradle.plugin.idea-ext:gradle-idea-ext:0.7" - } -} - allprojects { apply plugin: 'idea' @@ -36,9 +25,9 @@ tasks.register('configureIdeCheckstyle') { group = 'ide' description = 'Generated a suitable checkstyle config for IDEs' - String checkstyleConfig = 'buildSrc/src/main/resources/checkstyle.xml' - String checkstyleSuppressions = 'buildSrc/src/main/resources/checkstyle_suppressions.xml' - String checkstyleIdeFragment = 'buildSrc/src/main/resources/checkstyle_ide_fragment.xml' + String checkstyleConfig = 'build-tools-internal/src/main/resources/checkstyle.xml' + String checkstyleSuppressions = 'build-tools-internal/src/main/resources/checkstyle_suppressions.xml' + String checkstyleIdeFragment = 'build-tools-internal/src/main/resources/checkstyle_ide_fragment.xml' String checkstyleIdeConfig = "$rootDir/checkstyle_ide.xml" inputs.files(file(checkstyleConfig), file(checkstyleIdeFragment)) diff --git a/buildSrc/src/main/groovy/elasticsearch.local-distribution.gradle b/build-tools-internal/src/main/groovy/elasticsearch.local-distribution.gradle similarity index 100% rename from buildSrc/src/main/groovy/elasticsearch.local-distribution.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.local-distribution.gradle diff --git a/buildSrc/src/main/groovy/elasticsearch.run.gradle b/build-tools-internal/src/main/groovy/elasticsearch.run.gradle similarity index 100% rename from buildSrc/src/main/groovy/elasticsearch.run.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.run.gradle diff --git a/buildSrc/src/main/groovy/elasticsearch.runtime-jdk-provision.gradle b/build-tools-internal/src/main/groovy/elasticsearch.runtime-jdk-provision.gradle similarity index 93% rename from buildSrc/src/main/groovy/elasticsearch.runtime-jdk-provision.gradle rename to build-tools-internal/src/main/groovy/elasticsearch.runtime-jdk-provision.gradle index 4aaa5e825587..9e1da136cd22 100644 --- a/buildSrc/src/main/groovy/elasticsearch.runtime-jdk-provision.gradle +++ b/build-tools-internal/src/main/groovy/elasticsearch.runtime-jdk-provision.gradle @@ -16,7 +16,7 @@ import org.elasticsearch.gradle.internal.info.BuildParams // apply plugin: 'elasticsearch.jdk-download' if (BuildParams.getIsRuntimeJavaHomeSet()) { - configure(allprojects - project(':build-tools')) { + configure(allprojects) { project.tasks.withType(Test).configureEach { Test test -> if (BuildParams.getIsRuntimeJavaHomeSet()) { test.executable = "${BuildParams.runtimeJavaHome}/bin/java" @@ -33,7 +33,7 @@ if (BuildParams.getIsRuntimeJavaHomeSet()) { } } - configure(allprojects - project(':build-tools')) { +configure(allprojects) { project.tasks.withType(Test).configureEach { Test test -> test.dependsOn(rootProject.jdks.provisioned_runtime) test.executable = rootProject.jdks.provisioned_runtime.getBinJavaPath() diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/AntFixtureStop.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntFixtureStop.groovy similarity index 97% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/AntFixtureStop.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntFixtureStop.groovy index 71ef7f0c306c..09077cb2a9ea 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/AntFixtureStop.groovy +++ b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntFixtureStop.groovy @@ -9,7 +9,6 @@ package org.elasticsearch.gradle.internal import org.apache.tools.ant.taskdefs.condition.Os -import org.elasticsearch.gradle.FixtureStop import org.elasticsearch.gradle.LoggedExec import org.elasticsearch.gradle.internal.test.AntFixture import org.gradle.api.file.FileSystemOperations diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/AntTask.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntTask.groovy similarity index 100% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/AntTask.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/AntTask.groovy diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/doc/DocsTestPlugin.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/doc/DocsTestPlugin.groovy similarity index 100% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/doc/DocsTestPlugin.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/doc/DocsTestPlugin.groovy diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/doc/RestTestsFromSnippetsTask.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/doc/RestTestsFromSnippetsTask.groovy similarity index 100% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/doc/RestTestsFromSnippetsTask.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/doc/RestTestsFromSnippetsTask.groovy diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/doc/SnippetsTask.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/doc/SnippetsTask.groovy similarity index 100% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/doc/SnippetsTask.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/doc/SnippetsTask.groovy diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/test/AntFixture.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/test/AntFixture.groovy similarity index 100% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/test/AntFixture.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/internal/test/AntFixture.groovy diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/ClusterConfiguration.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/test/ClusterConfiguration.groovy similarity index 100% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/test/ClusterConfiguration.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/test/ClusterConfiguration.groovy diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/ClusterFormationTasks.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/test/ClusterFormationTasks.groovy similarity index 100% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/test/ClusterFormationTasks.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/test/ClusterFormationTasks.groovy diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/NodeInfo.groovy b/build-tools-internal/src/main/groovy/org/elasticsearch/gradle/test/NodeInfo.groovy similarity index 100% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/test/NodeInfo.groovy rename to build-tools-internal/src/main/groovy/org/elasticsearch/gradle/test/NodeInfo.groovy diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/BwcGitExtension.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BwcGitExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/BwcGitExtension.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BwcGitExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/BwcSetupExtension.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BwcSetupExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/BwcSetupExtension.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BwcSetupExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/BwcVersions.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BwcVersions.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/BwcVersions.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BwcVersions.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/ConcatFilesTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ConcatFilesTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/ConcatFilesTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ConcatFilesTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/DistributionArchive.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DistributionArchive.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/DistributionArchive.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DistributionArchive.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/DistributionArchiveCheckExtension.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DistributionArchiveCheckExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/DistributionArchiveCheckExtension.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DistributionArchiveCheckExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/DockerBase.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DockerBase.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/DockerBase.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DockerBase.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java index 1de94522cb31..d45e3b623603 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java @@ -13,9 +13,9 @@ import nebula.plugin.info.InfoBrokerPlugin; import org.elasticsearch.gradle.VersionProperties; import org.elasticsearch.gradle.internal.info.BuildParams; import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin; -import org.elasticsearch.gradle.precommit.PrecommitTaskPlugin; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTaskPlugin; import org.elasticsearch.gradle.util.GradleUtils; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.gradle.api.Action; import org.gradle.api.JavaVersion; import org.gradle.api.Plugin; @@ -49,7 +49,7 @@ import java.util.Objects; import java.util.function.Consumer; import java.util.stream.Stream; -import static org.elasticsearch.gradle.internal.util.Util.toStringable; +import static org.elasticsearch.gradle.internal.conventions.util.Util.toStringable; /** * A wrapper around Gradle's Java plugin that applies our common configuration. diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java index 13fbd8a30be7..7a7619e61f45 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java @@ -15,7 +15,7 @@ import org.elasticsearch.gradle.internal.test.SystemPropertyCommandLineArgumentP import org.elasticsearch.gradle.internal.info.BuildParams; import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin; import org.elasticsearch.gradle.internal.test.ErrorReportingTestListener; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.gradle.api.Action; import org.gradle.api.JavaVersion; import org.gradle.api.Plugin; @@ -46,10 +46,6 @@ public class ElasticsearchTestBasePlugin implements Plugin { maybeConfigure(project.getTasks(), "test", Test.class, task -> task.include("**/*Tests.class")); // none of this stuff is applicable to the `:buildSrc` project tests - if (project.getPath().equals(":build-tools")) { - return; - } - File heapdumpDir = new File(project.getBuildDir(), "heapdump"); project.getTasks().withType(Test.class).configureEach(test -> { diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/EmptyDirTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/EmptyDirTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/EmptyDirTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/EmptyDirTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/ExportElasticsearchBuildResourcesTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ExportElasticsearchBuildResourcesTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/ExportElasticsearchBuildResourcesTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ExportElasticsearchBuildResourcesTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/FixtureStop.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/FixtureStop.java similarity index 90% rename from buildSrc/src/main/java/org/elasticsearch/gradle/FixtureStop.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/FixtureStop.java index c98d6110dc85..cc5a3bc2bcf2 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/FixtureStop.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/FixtureStop.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle; +package org.elasticsearch.gradle.internal; import org.gradle.api.Task; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalAvailableTcpPortProviderPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalAvailableTcpPortProviderPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalAvailableTcpPortProviderPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalAvailableTcpPortProviderPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalBwcGitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalBwcGitPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalBwcGitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalBwcGitPlugin.java index d5e410129453..5a84538a6bd9 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalBwcGitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalBwcGitPlugin.java @@ -10,7 +10,7 @@ package org.elasticsearch.gradle.internal; import org.apache.commons.io.FileUtils; import org.elasticsearch.gradle.LoggedExec; -import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin; +import org.elasticsearch.gradle.internal.conventions.info.GitInfo; import org.gradle.api.Action; import org.gradle.api.GradleException; import org.gradle.api.Plugin; @@ -123,7 +123,7 @@ public class InternalBwcGitPlugin implements Plugin { spec.commandLine("git", "checkout", effectiveRefSpec); }); - String checkoutHash = GlobalBuildInfoPlugin.gitInfo(checkoutDir).getRevision(); + String checkoutHash = GitInfo.gitInfo(checkoutDir).getRevision(); logger.lifecycle("Checkout hash for {} is {}", project.getPath(), checkoutHash); writeFile(new File(project.getBuildDir(), "refspec"), checkoutHash); }); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java similarity index 97% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java index 358fc62cfdd3..3c6bc089274b 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java @@ -9,6 +9,7 @@ package org.elasticsearch.gradle.internal; import org.elasticsearch.gradle.VersionProperties; +import org.elasticsearch.gradle.internal.conventions.LicensingPlugin; import org.gradle.api.Action; import org.gradle.api.GradleException; import org.gradle.api.Project; @@ -28,8 +29,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.Callable; import java.util.stream.Collectors; - -import static org.elasticsearch.gradle.internal.util.Util.capitalize; +import org.elasticsearch.gradle.internal.conventions.GUtils; public class InternalDistributionArchiveCheckPlugin implements InternalPlugin { @@ -43,6 +43,7 @@ public class InternalDistributionArchiveCheckPlugin implements InternalPlugin { @Override public void apply(Project project) { project.getPlugins().apply(BasePlugin.class); + project.getPlugins().apply(LicensingPlugin.class); String buildTaskName = calculateBuildTask(project.getName()); TaskProvider buildDistTask = project.getParent().getTasks().named(buildTaskName); DistributionArchiveCheckExtension distributionArchiveCheckExtension = project.getExtensions() @@ -238,7 +239,7 @@ public class InternalDistributionArchiveCheckPlugin implements InternalPlugin { } private String calculateBuildTask(String projectName) { - return "build" + Arrays.stream(projectName.split("-")).map(f -> capitalize(f)).collect(Collectors.joining()); + return "build" + Arrays.stream(projectName.split("-")).map(f -> GUtils.capitalize(f)).collect(Collectors.joining()); } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java index b4ce2ff41ae2..182c8145b0db 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java @@ -20,8 +20,8 @@ import org.gradle.api.tasks.bundling.Compression; import org.gradle.api.tasks.bundling.Zip; import java.io.File; +import static org.elasticsearch.gradle.internal.conventions.GUtils.capitalize; -import static org.elasticsearch.gradle.internal.util.Util.capitalize; import static org.gradle.api.internal.artifacts.ArtifactAttributes.ARTIFACT_FORMAT; /** diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPluginBuildPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalPluginBuildPlugin.java similarity index 86% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPluginBuildPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalPluginBuildPlugin.java index e6285626999e..a1a86b2a66b2 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPluginBuildPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalPluginBuildPlugin.java @@ -11,12 +11,16 @@ package org.elasticsearch.gradle.internal; import groovy.lang.Closure; import org.elasticsearch.gradle.internal.precommit.TestingConventionsTasks; import org.elasticsearch.gradle.internal.test.RestTestBasePlugin; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.elasticsearch.gradle.plugin.PluginBuildPlugin; import org.elasticsearch.gradle.plugin.PluginPropertiesExtension; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Project; import org.gradle.api.tasks.bundling.Zip; +import org.gradle.api.tasks.TaskProvider; +import org.gradle.api.tasks.TaskContainer; +import org.gradle.api.Task; +import java.io.File; import java.util.Optional; @@ -32,7 +36,7 @@ public class InternalPluginBuildPlugin implements InternalPlugin { project.getConfigurations().getByName("testImplementation").getDependencies().clear(); project.getPluginManager().apply(RestTestBasePlugin.class); - var extension = project.getExtensions().getByType(PluginPropertiesExtension.class); + PluginPropertiesExtension extension = project.getExtensions().getByType(PluginPropertiesExtension.class); // We've ported this from multiple build scripts where we see this pattern into // an extension method as a first step of consolidation. @@ -43,7 +47,7 @@ public class InternalPluginBuildPlugin implements InternalPlugin { public void doCall(Object it) { project.afterEvaluate(project1 -> { // let check depend on check tasks of qa sub-projects - final var checkTaskProvider = project1.getTasks().named("check"); + final TaskProvider checkTaskProvider = project1.getTasks().named("check"); Optional qaSubproject = project1.getSubprojects() .stream() .filter(p -> p.getPath().equals(project1.getPath() + ":qa")) @@ -84,8 +88,8 @@ public class InternalPluginBuildPlugin implements InternalPlugin { * Configure the pom for the main jar of this plugin */ protected static void addNoticeGeneration(final Project project, PluginPropertiesExtension extension) { - final var licenseFile = extension.getLicenseFile(); - var tasks = project.getTasks(); + final File licenseFile = extension.getLicenseFile(); + TaskContainer tasks = project.getTasks(); if (licenseFile != null) { tasks.withType(Zip.class).named("bundlePlugin").configure(zip -> zip.from(licenseFile.getParentFile(), copySpec -> { copySpec.include(licenseFile.getName()); @@ -93,9 +97,9 @@ public class InternalPluginBuildPlugin implements InternalPlugin { })); } - final var noticeFile = extension.getNoticeFile(); + final File noticeFile = extension.getNoticeFile(); if (noticeFile != null) { - final var generateNotice = tasks.register("generateNotice", NoticeTask.class, noticeTask -> { + final TaskProvider generateNotice = tasks.register("generateNotice", NoticeTask.class, noticeTask -> { noticeTask.setInputFile(noticeFile); noticeTask.source(Util.getJavaMainSourceSet(project).get().getAllJava()); }); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalReaperPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalReaperPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalReaperPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalReaperPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactBasePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactBasePlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactBasePlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactBasePlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactExtension.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactExtension.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestArtifactPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalTestClustersPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestClustersPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalTestClustersPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestClustersPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/JavaClassPublicifier.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/JavaClassPublicifier.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/JavaClassPublicifier.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/JavaClassPublicifier.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/LoggingOutputStream.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/LoggingOutputStream.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/LoggingOutputStream.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/LoggingOutputStream.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/MavenFilteringHack.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/MavenFilteringHack.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/MavenFilteringHack.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/MavenFilteringHack.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/NoticeTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/NoticeTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/NoticeTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/NoticeTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/RepositoriesSetupPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/RepositoriesSetupPlugin.java similarity index 75% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/RepositoriesSetupPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/RepositoriesSetupPlugin.java index 21332013a6ce..e0da9de8f525 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/RepositoriesSetupPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/RepositoriesSetupPlugin.java @@ -25,7 +25,6 @@ import java.util.regex.Pattern; public class RepositoriesSetupPlugin implements Plugin { - private static final List SECURE_URL_SCHEMES = Arrays.asList("file", "https", "s3"); private static final Pattern LUCENE_SNAPSHOT_REGEX = Pattern.compile("\\w+-snapshot-([a-z0-9]+)"); @Override @@ -66,24 +65,4 @@ public class RepositoriesSetupPlugin implements Plugin { }); } } - - private static void assertRepositoryURIIsSecure(final String repositoryName, final String projectPath, final URI uri) { - if (uri != null && SECURE_URL_SCHEMES.contains(uri.getScheme()) == false && uri.getHost().equals("localhost") == false) { - String url; - try { - url = uri.toURL().toString(); - } catch (MalformedURLException e) { - throw new IllegalStateException(e); - } - final String message = String.format( - Locale.ROOT, - "repository [%s] on project with path [%s] is not using a secure protocol for artifacts on [%s]", - repositoryName, - projectPath, - url - ); - throw new GradleException(message); - } - } - } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/ResolveAllDependencies.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ResolveAllDependencies.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/ResolveAllDependencies.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ResolveAllDependencies.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTar.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTar.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTar.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/SymbolicLinkPreservingTar.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/checkstyle/MissingJavadocTypeCheck.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/checkstyle/MissingJavadocTypeCheck.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/checkstyle/MissingJavadocTypeCheck.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/checkstyle/MissingJavadocTypeCheck.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/checkstyle/SnippetLengthCheck.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/checkstyle/SnippetLengthCheck.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/checkstyle/SnippetLengthCheck.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/checkstyle/SnippetLengthCheck.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/DebElasticsearchDistributionType.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DebElasticsearchDistributionType.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/DebElasticsearchDistributionType.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DebElasticsearchDistributionType.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerElasticsearchDistributionType.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerElasticsearchDistributionType.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerElasticsearchDistributionType.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerElasticsearchDistributionType.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerIronBankElasticsearchDistributionType.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerIronBankElasticsearchDistributionType.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerIronBankElasticsearchDistributionType.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerIronBankElasticsearchDistributionType.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerUbiElasticsearchDistributionType.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerUbiElasticsearchDistributionType.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerUbiElasticsearchDistributionType.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerUbiElasticsearchDistributionType.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/InternalElasticsearchDistributionTypes.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/InternalElasticsearchDistributionTypes.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/InternalElasticsearchDistributionTypes.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/InternalElasticsearchDistributionTypes.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/RpmElasticsearchDistributionType.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/RpmElasticsearchDistributionType.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/distribution/RpmElasticsearchDistributionType.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/RpmElasticsearchDistributionType.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/DockerBuildTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/DockerBuildTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/DockerBuildTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/DockerBuildTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportService.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportService.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportService.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/DockerSupportService.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/ShellRetry.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/ShellRetry.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/ShellRetry.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/ShellRetry.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/TransformLog4jConfigFilter.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/TransformLog4jConfigFilter.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/docker/TransformLog4jConfigFilter.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/docker/TransformLog4jConfigFilter.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/info/BuildParams.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/BuildParams.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/info/BuildParams.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/BuildParams.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java similarity index 72% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java index 9c38b5d29bd9..2bd7309f5d28 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/GlobalBuildInfoPlugin.java @@ -10,7 +10,9 @@ package org.elasticsearch.gradle.internal.info; import org.apache.commons.io.IOUtils; import org.elasticsearch.gradle.internal.BwcVersions; import org.elasticsearch.gradle.OS; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.info.GitInfo; +import org.elasticsearch.gradle.internal.conventions.info.ParallelDetector; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.gradle.api.GradleException; import org.gradle.api.JavaVersion; import org.gradle.api.Plugin; @@ -26,6 +28,7 @@ import org.gradle.internal.jvm.inspection.JvmVendor; import org.gradle.jvm.toolchain.internal.InstallationLocation; import org.gradle.jvm.toolchain.internal.JavaInstallationRegistry; import org.gradle.util.GradleVersion; +import org.jetbrains.annotations.NotNull; import javax.inject.Inject; import java.io.BufferedReader; @@ -34,22 +37,17 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; +import java.io.InputStreamReader; import java.io.UncheckedIOException; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.util.Arrays; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Random; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -79,22 +77,22 @@ public class GlobalBuildInfoPlugin implements Plugin { if (project != project.getRootProject()) { throw new IllegalStateException(this.getClass().getName() + " can only be applied to the root project."); } - GradleVersion minimumGradleVersion = GradleVersion.version(Util.getResourceContents("/minimumGradleVersion")); + GradleVersion minimumGradleVersion = GradleVersion.version(getResourceContents("/minimumGradleVersion")); if (GradleVersion.current().compareTo(minimumGradleVersion) < 0) { throw new GradleException("Gradle " + minimumGradleVersion.getVersion() + "+ is required"); } - JavaVersion minimumCompilerVersion = JavaVersion.toVersion(Util.getResourceContents("/minimumCompilerVersion")); - JavaVersion minimumRuntimeVersion = JavaVersion.toVersion(Util.getResourceContents("/minimumRuntimeVersion")); + JavaVersion minimumCompilerVersion = JavaVersion.toVersion(getResourceContents("/minimumCompilerVersion")); + JavaVersion minimumRuntimeVersion = JavaVersion.toVersion(getResourceContents("/minimumRuntimeVersion")); File runtimeJavaHome = findRuntimeJavaHome(); File rootDir = project.getRootDir(); - GitInfo gitInfo = gitInfo(rootDir); + GitInfo gitInfo = GitInfo.gitInfo(rootDir); BuildParams.init(params -> { // Initialize global build parameters - boolean isInternal = GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null; + boolean isInternal = GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null && explicitDisabledInternal(project) == false; params.reset(); params.setRuntimeJavaHome(runtimeJavaHome); @@ -112,7 +110,7 @@ public class GlobalBuildInfoPlugin implements Plugin { params.setTestSeed(getTestSeed()); params.setIsCi(System.getenv("JENKINS_URL") != null); params.setIsInternal(isInternal); - params.setDefaultParallel(findDefaultParallel(project)); + params.setDefaultParallel(ParallelDetector.findDefaultParallel(project)); params.setInFipsJvm(Util.getBooleanProperty("tests.fips.enabled", false)); params.setIsSnapshotBuild(Util.getBooleanProperty("build.snapshot", true)); if (isInternal) { @@ -127,6 +125,14 @@ public class GlobalBuildInfoPlugin implements Plugin { project.getGradle().getTaskGraph().whenReady(graph -> logGlobalBuildInfo()); } + @NotNull + private Boolean explicitDisabledInternal(Project project) { + return project.getProviders().systemProperty("test.external") + .forUseAtConfigurationTime() + .map(sysProp -> sysProp.equals("true")) + .getOrElse(false); + } + private String formatJavaVendorDetails(JvmInstallationMetadata runtimeJdkMetaData) { JvmVendor vendor = runtimeJdkMetaData.getVendor(); return runtimeJdkMetaData.getVendor().getKnownVendor().name() + "/" + vendor.getRawVendor(); @@ -354,134 +360,23 @@ public class GlobalBuildInfoPlugin implements Plugin { return _defaultParallel; } - public static GitInfo gitInfo(File rootDir) { - try { - /* - * We want to avoid forking another process to run git rev-parse HEAD. Instead, we will read the refs manually. The - * documentation for this follows from https://git-scm.com/docs/gitrepository-layout and https://git-scm.com/docs/git-worktree. - * - * There are two cases to consider: - * - a plain repository with .git directory at the root of the working tree - * - a worktree with a plain text .git file at the root of the working tree - * - * In each case, our goal is to parse the HEAD file to get either a ref or a bare revision (in the case of being in detached - * HEAD state). - * - * In the case of a plain repository, we can read the HEAD file directly, resolved directly from the .git directory. - * - * In the case of a worktree, we read the gitdir from the plain text .git file. This resolves to a directory from which we read - * the HEAD file and resolve commondir to the plain git repository. - */ - final Path dotGit = rootDir.toPath().resolve(".git"); - final String revision; - if (Files.exists(dotGit) == false) { - return new GitInfo("unknown", "unknown"); - } - final Path head; - final Path gitDir; - if (Files.isDirectory(dotGit)) { - // this is a git repository, we can read HEAD directly - head = dotGit.resolve("HEAD"); - gitDir = dotGit; - } else { - // this is a git worktree, follow the pointer to the repository - final Path workTree = Paths.get(readFirstLine(dotGit).substring("gitdir:".length()).trim()); - if (Files.exists(workTree) == false) { - return new GitInfo("unknown", "unknown"); - } - head = workTree.resolve("HEAD"); - final Path commonDir = Paths.get(readFirstLine(workTree.resolve("commondir"))); - if (commonDir.isAbsolute()) { - gitDir = commonDir; - } else { - // this is the common case - gitDir = workTree.resolve(commonDir); + public static String getResourceContents(String resourcePath) { + try ( + BufferedReader reader = new BufferedReader(new InputStreamReader(GlobalBuildInfoPlugin.class.getResourceAsStream(resourcePath))) + ) { + StringBuilder b = new StringBuilder(); + for (String line = reader.readLine(); line != null; line = reader.readLine()) { + if (b.length() != 0) { + b.append('\n'); } + b.append(line); } - final String ref = readFirstLine(head); - if (ref.startsWith("ref:")) { - String refName = ref.substring("ref:".length()).trim(); - Path refFile = gitDir.resolve(refName); - if (Files.exists(refFile)) { - revision = readFirstLine(refFile); - } else if (Files.exists(gitDir.resolve("packed-refs"))) { - // Check packed references for commit ID - Pattern p = Pattern.compile("^([a-f0-9]{40}) " + refName + "$"); - try (Stream lines = Files.lines(gitDir.resolve("packed-refs"))) { - revision = lines.map(p::matcher) - .filter(Matcher::matches) - .map(m -> m.group(1)) - .findFirst() - .orElseThrow(() -> new IOException("Packed reference not found for refName " + refName)); - } - } else { - throw new GradleException("Can't find revision for refName " + refName); - } - } else { - // we are in detached HEAD state - revision = ref; - } - return new GitInfo(revision, findOriginUrl(gitDir.resolve("config"))); - } catch (final IOException e) { - // for now, do not be lenient until we have better understanding of real-world scenarios where this happens - throw new GradleException("unable to read the git revision", e); + + return b.toString(); + } catch (IOException e) { + throw new UncheckedIOException("Error trying to read classpath resource: " + resourcePath, e); } } - private static String findOriginUrl(final Path configFile) throws IOException { - Map props = new HashMap<>(); - try (Stream stream = Files.lines(configFile, StandardCharsets.UTF_8)) { - Iterator lines = stream.iterator(); - boolean foundOrigin = false; - while (lines.hasNext()) { - String line = lines.next().trim(); - if (line.startsWith(";") || line.startsWith("#")) { - // ignore comments - continue; - } - if (foundOrigin) { - if (line.startsWith("[")) { - // we're on to the next config item so stop looking - break; - } - String[] pair = line.trim().split("="); - props.put(pair[0].trim(), pair[1].trim()); - } else { - if (line.equals("[remote \"origin\"]")) { - foundOrigin = true; - } - } - } - } - - String originUrl = props.get("url"); - return originUrl == null ? "unknown" : originUrl; - } - - private static String readFirstLine(final Path path) throws IOException { - String firstLine; - try (Stream lines = Files.lines(path, StandardCharsets.UTF_8)) { - firstLine = lines.findFirst().orElseThrow(() -> new IOException("file [" + path + "] is empty")); - } - return firstLine; - } - - public static class GitInfo { - private final String revision; - private final String origin; - - GitInfo(String revision, String origin) { - this.revision = revision; - this.origin = origin; - } - - public String getRevision() { - return revision; - } - - public String getOrigin() { - return origin; - } - } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/info/JavaHome.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/JavaHome.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/info/JavaHome.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/JavaHome.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java similarity index 88% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java index b03a0d2c5053..d2baacc11445 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java @@ -10,9 +10,10 @@ package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.VersionProperties; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.gradle.api.Action; +import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.dsl.DependencyHandler; @@ -25,6 +26,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; import java.net.JarURLConnection; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.StandardCopyOption; @@ -86,7 +89,7 @@ public class CheckstylePrecommitPlugin extends PrecommitPlugin implements Intern DependencyHandler dependencies = project.getDependencies(); String checkstyleVersion = VersionProperties.getVersions().get("checkstyle"); dependencies.add("checkstyle", "com.puppycrawl.tools:checkstyle:" + checkstyleVersion); - dependencies.add("checkstyle", project.files(Util.getBuildSrcCodeSource())); + dependencies.add("checkstyle", project.files(getBuildSrcCodeSource())); project.getTasks().withType(Checkstyle.class).configureEach(t -> { t.dependsOn(copyCheckstyleConf); @@ -95,4 +98,12 @@ public class CheckstylePrecommitPlugin extends PrecommitPlugin implements Intern return checkstyleTask; } + + private static URI getBuildSrcCodeSource() { + try { + return CheckstylePrecommitPlugin.class.getProtectionDomain().getCodeSource().getLocation().toURI(); + } catch (URISyntaxException e) { + throw new GradleException("Error determining build tools JAR location", e); + } + } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java similarity index 96% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java index 748553349dc9..669ecc0eb2de 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java @@ -10,7 +10,7 @@ package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java similarity index 95% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java index a371fc38cfcd..df39b9088c97 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java @@ -9,7 +9,7 @@ package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Project; import org.gradle.api.Task; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java index ce74a0450e34..24d5bb7177e0 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java @@ -14,7 +14,7 @@ import groovy.lang.Closure; import org.elasticsearch.gradle.internal.ExportElasticsearchBuildResourcesTask; import org.elasticsearch.gradle.internal.info.BuildParams; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.JavaVersion; import org.gradle.api.Project; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java similarity index 95% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java index b26a2b109abe..4a3a4f0c5745 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java @@ -9,7 +9,7 @@ package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Project; import org.gradle.api.Task; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java similarity index 78% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java index d74c03fc161c..5eaf30ef55dc 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java @@ -8,8 +8,7 @@ package org.elasticsearch.gradle.internal.precommit; -import org.elasticsearch.gradle.internal.info.BuildParams; -import org.elasticsearch.gradle.precommit.PrecommitTasks; +import org.elasticsearch.gradle.internal.conventions.precommit.LicenseHeadersPrecommitPlugin; import org.gradle.api.Project; /** @@ -21,13 +20,7 @@ public class InternalPrecommitTasks { * Adds a precommit task, which depends on non-test verification tasks. */ public static void create(Project project, boolean includeDependencyLicenses) { - PrecommitTasks.create(project); - if (BuildParams.isInternal() && project.getPath().equals(":libs:elasticsearch-core") == false) { - // ideally we would configure this as a default dependency. But Default dependencies do not work correctly - // with gradle project dependencies as they're resolved to late in the build and don't setup according task - // dependencies properly - project.getDependencies().add("jarHell", project.project(":libs:elasticsearch-core")); - } + project.getPluginManager().apply(JarHellPrecommitPlugin.class); project.getPluginManager().apply(ThirdPartyAuditPrecommitPlugin.class); project.getPluginManager().apply(CheckstylePrecommitPlugin.class); project.getPluginManager().apply(ForbiddenApisPrecommitPlugin.class); diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/JarHellPrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/JarHellPrecommitPlugin.java new file mode 100644 index 000000000000..3efd37b85bb0 --- /dev/null +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/JarHellPrecommitPlugin.java @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.precommit; + +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.info.BuildParams; +import org.elasticsearch.gradle.jarhell.JarHellPlugin; +import org.elasticsearch.gradle.jarhell.JarHellTask; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.tasks.TaskProvider; + +public class JarHellPrecommitPlugin extends PrecommitPlugin { + @Override + public TaskProvider createTask(Project project) { + project.getPluginManager().apply(JarHellPlugin.class); + + if (BuildParams.isInternal() && project.getPath().equals(":libs:elasticsearch-core") == false) { + // ideally we would configure this as a default dependency. But Default dependencies do not work correctly + // with gradle project dependencies as they're resolved to late in the build and don't setup according task + // dependencies properly + project.getDependencies().add("jarHell", project.project(":libs:elasticsearch-core")); + } + + return project.getTasks().withType(JarHellTask.class).named("jarHell"); + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseAnalyzer.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseAnalyzer.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseAnalyzer.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LicenseAnalyzer.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java similarity index 94% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java index 1f1e458f97cd..2e52346a10b1 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java @@ -9,7 +9,7 @@ package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java similarity index 97% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java index 89020f87e297..69487778ebce 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java @@ -9,7 +9,7 @@ package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.LoggedExec; -import org.elasticsearch.gradle.precommit.PrecommitTask; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTask; import org.gradle.api.file.FileCollection; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.CacheableTask; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionRule.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionRule.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionRule.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionRule.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java similarity index 94% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java index 8f4af8616b6e..48c40ba65f95 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java @@ -9,7 +9,7 @@ package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.tasks.TaskProvider; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java index 7e4e18b49ec2..0177564e6ebb 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java @@ -9,7 +9,7 @@ package org.elasticsearch.gradle.internal.precommit; import groovy.lang.Closure; import org.elasticsearch.gradle.util.GradleUtils; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.gradle.api.DefaultTask; import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.Task; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditPrecommitPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditPrecommitPlugin.java similarity index 97% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditPrecommitPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditPrecommitPlugin.java index 137953596d40..11a8b3b0a904 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditPrecommitPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditPrecommitPlugin.java @@ -12,7 +12,7 @@ import org.elasticsearch.gradle.internal.ExportElasticsearchBuildResourcesTask; import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin; import org.elasticsearch.gradle.internal.info.BuildParams; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.precommit.PrecommitPlugin; +import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ThirdPartyAuditTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonAgainstSchemaTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonAgainstSchemaTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonAgainstSchemaTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonAgainstSchemaTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonNoKeywordsTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonNoKeywordsTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonNoKeywordsTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonNoKeywordsTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java similarity index 97% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java index 138b3148dce8..76c105be7ab8 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java @@ -9,7 +9,7 @@ package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.gradle.api.Project; import org.gradle.api.provider.Provider; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/DistroTestPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/DistroTestPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/DistroTestPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/DistroTestPlugin.java index f19c02f81c03..e36ee9d4bb8d 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/DistroTestPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/DistroTestPlugin.java @@ -13,8 +13,8 @@ import org.elasticsearch.gradle.DistributionDownloadPlugin; import org.elasticsearch.gradle.ElasticsearchDistribution; import org.elasticsearch.gradle.ElasticsearchDistribution.Platform; import org.elasticsearch.gradle.ElasticsearchDistributionType; -import org.elasticsearch.gradle.internal.Jdk; -import org.elasticsearch.gradle.internal.JdkDownloadPlugin; +import org.elasticsearch.gradle.Jdk; +import org.elasticsearch.gradle.JdkDownloadPlugin; import org.elasticsearch.gradle.Version; import org.elasticsearch.gradle.VersionProperties; import org.elasticsearch.gradle.internal.docker.DockerSupportPlugin; @@ -22,9 +22,10 @@ import org.elasticsearch.gradle.internal.docker.DockerSupportService; import org.elasticsearch.gradle.internal.info.BuildParams; import org.elasticsearch.gradle.internal.InternalDistributionDownloadPlugin; import org.elasticsearch.gradle.util.GradleUtils; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.elasticsearch.gradle.internal.vagrant.VagrantBasePlugin; import org.elasticsearch.gradle.internal.vagrant.VagrantExtension; +import org.elasticsearch.gradle.internal.conventions.GUtils; import org.gradle.api.Action; import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.Plugin; @@ -265,7 +266,7 @@ public class DistroTestPlugin implements Plugin { jdk.setPlatform(platform); jdk.setArchitecture(architecture); - String taskname = "copy" + Util.capitalize(platform) + Util.capitalize(purpose) + "Jdk"; + String taskname = "copy" + GUtils.capitalize(platform) + GUtils.capitalize(purpose) + "Jdk"; TaskProvider copyTask = project.getTasks().register(taskname, Copy.class); copyTask.configure(t -> { t.from(jdk); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/ErrorReportingTestListener.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/ErrorReportingTestListener.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/ErrorReportingTestListener.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/ErrorReportingTestListener.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/Fixture.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/Fixture.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/Fixture.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/Fixture.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/GradleDistroTestTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/GradleDistroTestTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/GradleDistroTestTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/GradleDistroTestTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/InternalClusterTestPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/InternalClusterTestPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/InternalClusterTestPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/InternalClusterTestPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/RestIntegTestTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/RestIntegTestTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/RestIntegTestTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/RestIntegTestTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/RestTestBasePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/RestTestBasePlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/RestTestBasePlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/RestTestBasePlugin.java index 824153764da3..ae6b7e70343a 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/RestTestBasePlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/RestTestBasePlugin.java @@ -9,7 +9,7 @@ package org.elasticsearch.gradle.internal.test; import org.elasticsearch.gradle.internal.ElasticsearchTestBasePlugin; -import org.elasticsearch.gradle.FixtureStop; +import org.elasticsearch.gradle.internal.FixtureStop; import org.elasticsearch.gradle.testclusters.ElasticsearchCluster; import org.elasticsearch.gradle.testclusters.StandaloneRestIntegTestTask; import org.elasticsearch.gradle.testclusters.TestClustersPlugin; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/RestTestPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/RestTestPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/RestTestPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/RestTestPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/SimpleCommandLineArgumentProvider.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/SimpleCommandLineArgumentProvider.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/SimpleCommandLineArgumentProvider.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/SimpleCommandLineArgumentProvider.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneRestTestPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneRestTestPlugin.java similarity index 97% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneRestTestPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneRestTestPlugin.java index f4f5e26ace2f..86e0aa19b168 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneRestTestPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneRestTestPlugin.java @@ -14,7 +14,6 @@ import org.elasticsearch.gradle.internal.RepositoriesSetupPlugin; import org.elasticsearch.gradle.internal.info.BuildParams; import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin; import org.elasticsearch.gradle.internal.precommit.InternalPrecommitTasks; -import org.elasticsearch.gradle.precommit.PrecommitTasks; import org.elasticsearch.gradle.testclusters.TestClustersPlugin; import org.gradle.api.InvalidUserDataException; import org.gradle.api.Plugin; @@ -87,6 +86,6 @@ public class StandaloneRestTestPlugin implements Plugin { "TEST", Map.of("plus", Arrays.asList(project.getConfigurations().getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME))) ); - BuildParams.withInternalBuild(() -> InternalPrecommitTasks.create(project, false)).orElse(() -> PrecommitTasks.create(project)); + BuildParams.withInternalBuild(() -> InternalPrecommitTasks.create(project, false)); } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneTestPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneTestPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneTestPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/StandaloneTestPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/SystemPropertyCommandLineArgumentProvider.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/SystemPropertyCommandLineArgumentProvider.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/SystemPropertyCommandLineArgumentProvider.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/SystemPropertyCommandLineArgumentProvider.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/TestWithDependenciesPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/TestWithDependenciesPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/TestWithDependenciesPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/TestWithDependenciesPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/TestWithSslPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/TestWithSslPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/TestWithSslPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/TestWithSslPlugin.java index c748532f828d..80b7144e45e3 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/TestWithSslPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/TestWithSslPlugin.java @@ -16,7 +16,7 @@ import org.elasticsearch.gradle.internal.precommit.ForbiddenPatternsTask; import org.elasticsearch.gradle.testclusters.ElasticsearchCluster; import org.elasticsearch.gradle.testclusters.TestClustersAware; import org.elasticsearch.gradle.testclusters.TestClustersPlugin; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.gradle.api.NamedDomainObjectContainer; import org.gradle.api.Plugin; import org.gradle.api.Project; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestRerunPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestRerunPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestRerunPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestRerunPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestRerunTaskExtension.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestRerunTaskExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestRerunTaskExtension.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestRerunTaskExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestTaskConfigurer.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestTaskConfigurer.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestTaskConfigurer.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/TestTaskConfigurer.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestExecuter.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestExecuter.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestExecuter.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestExecuter.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestResultProcessor.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestResultProcessor.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestResultProcessor.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestResultProcessor.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/CopyRestApiTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/CopyRestApiTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/CopyRestApiTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/CopyRestApiTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/CopyRestTestsTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/CopyRestTestsTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/CopyRestTestsTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/CopyRestTestsTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/JavaRestTestPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/JavaRestTestPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/JavaRestTestPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/JavaRestTestPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestResourcesExtension.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestResourcesExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestResourcesExtension.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestResourcesExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestResourcesPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestResourcesPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestResourcesPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestResourcesPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestTestUtil.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestTestUtil.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestTestUtil.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/RestTestUtil.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/YamlRestTestPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/YamlRestTestPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/YamlRestTestPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/YamlRestTestPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaders.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaders.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaders.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaders.java index 4ee6cf90ac1f..18b8d7076415 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaders.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaders.java @@ -147,4 +147,4 @@ public class InjectHeaders implements RestTestTransformByObjectKey, RestTestTran skipNode.set("skip", featuresNode); } } -} +} \ No newline at end of file diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransform.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransform.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransform.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransform.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformByObjectKey.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformByObjectKey.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformByObjectKey.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformByObjectKey.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformGlobalSetup.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformGlobalSetup.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformGlobalSetup.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformGlobalSetup.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformGlobalTeardown.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformGlobalTeardown.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformGlobalTeardown.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformGlobalTeardown.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformer.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformer.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformer.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/transform/RestTestTransformer.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/testfixtures/DockerComposeThrottle.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/testfixtures/DockerComposeThrottle.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/testfixtures/DockerComposeThrottle.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/testfixtures/DockerComposeThrottle.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/testfixtures/TestFixtureExtension.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/testfixtures/TestFixtureExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/testfixtures/TestFixtureExtension.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/testfixtures/TestFixtureExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/testfixtures/TestFixturesPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/testfixtures/TestFixturesPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/testfixtures/TestFixturesPlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/testfixtures/TestFixturesPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/JavaUtil.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/JavaUtil.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/JavaUtil.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/JavaUtil.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/AvailablePortAllocator.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/AvailablePortAllocator.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/AvailablePortAllocator.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/AvailablePortAllocator.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/DefaultPortDetector.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/DefaultPortDetector.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/DefaultPortDetector.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/DefaultPortDetector.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/DefaultReservedPortRangeFactory.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/DefaultReservedPortRangeFactory.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/DefaultReservedPortRangeFactory.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/DefaultReservedPortRangeFactory.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/PortDetector.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/PortDetector.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/PortDetector.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/PortDetector.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/ReservedPortRange.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/ReservedPortRange.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/ReservedPortRange.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/ReservedPortRange.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/ReservedPortRangeFactory.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/ReservedPortRangeFactory.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/util/ports/ReservedPortRangeFactory.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/util/ports/ReservedPortRangeFactory.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantBasePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantBasePlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantBasePlugin.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantBasePlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantExtension.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantExtension.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantMachine.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantMachine.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantMachine.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantMachine.java index 757db5719f23..df2bcc3e2a96 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantMachine.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantMachine.java @@ -12,7 +12,7 @@ import org.apache.commons.io.output.TeeOutputStream; import org.elasticsearch.gradle.LoggedExec; import org.elasticsearch.gradle.internal.LoggingOutputStream; import org.elasticsearch.gradle.ReaperService; -import org.elasticsearch.gradle.internal.util.Util; +import org.elasticsearch.gradle.internal.conventions.util.Util; import org.gradle.api.Action; import org.gradle.api.Project; import org.gradle.api.provider.Provider; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantProgressLogger.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantProgressLogger.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantProgressLogger.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantProgressLogger.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantShellTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantShellTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantShellTask.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/vagrant/VagrantShellTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/test/JNAKernel32Library.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/test/JNAKernel32Library.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/test/JNAKernel32Library.java rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/test/JNAKernel32Library.java diff --git a/buildSrc/src/main/resources/buildSrc.marker b/build-tools-internal/src/main/resources/buildSrc.marker similarity index 100% rename from buildSrc/src/main/resources/buildSrc.marker rename to build-tools-internal/src/main/resources/buildSrc.marker diff --git a/buildSrc/src/main/resources/cacerts.bcfks b/build-tools-internal/src/main/resources/cacerts.bcfks similarity index 100% rename from buildSrc/src/main/resources/cacerts.bcfks rename to build-tools-internal/src/main/resources/cacerts.bcfks diff --git a/buildSrc/src/main/resources/checkstyle.xml b/build-tools-internal/src/main/resources/checkstyle.xml similarity index 100% rename from buildSrc/src/main/resources/checkstyle.xml rename to build-tools-internal/src/main/resources/checkstyle.xml diff --git a/buildSrc/src/main/resources/checkstyle_ide_fragment.xml b/build-tools-internal/src/main/resources/checkstyle_ide_fragment.xml similarity index 100% rename from buildSrc/src/main/resources/checkstyle_ide_fragment.xml rename to build-tools-internal/src/main/resources/checkstyle_ide_fragment.xml diff --git a/buildSrc/src/main/resources/checkstyle_suppressions.xml b/build-tools-internal/src/main/resources/checkstyle_suppressions.xml similarity index 96% rename from buildSrc/src/main/resources/checkstyle_suppressions.xml rename to build-tools-internal/src/main/resources/checkstyle_suppressions.xml index b51ae0e2fb82..0d60afafd467 100644 --- a/buildSrc/src/main/resources/checkstyle_suppressions.xml +++ b/build-tools-internal/src/main/resources/checkstyle_suppressions.xml @@ -48,5 +48,5 @@ - + diff --git a/buildSrc/src/main/resources/deb/README b/build-tools-internal/src/main/resources/deb/README similarity index 100% rename from buildSrc/src/main/resources/deb/README rename to build-tools-internal/src/main/resources/deb/README diff --git a/buildSrc/src/main/resources/deb/conffiles.ftl b/build-tools-internal/src/main/resources/deb/conffiles.ftl similarity index 100% rename from buildSrc/src/main/resources/deb/conffiles.ftl rename to build-tools-internal/src/main/resources/deb/conffiles.ftl diff --git a/buildSrc/src/main/resources/deb/postinst.ftl b/build-tools-internal/src/main/resources/deb/postinst.ftl similarity index 100% rename from buildSrc/src/main/resources/deb/postinst.ftl rename to build-tools-internal/src/main/resources/deb/postinst.ftl diff --git a/buildSrc/src/main/resources/deb/preinst.ftl b/build-tools-internal/src/main/resources/deb/preinst.ftl similarity index 100% rename from buildSrc/src/main/resources/deb/preinst.ftl rename to build-tools-internal/src/main/resources/deb/preinst.ftl diff --git a/buildSrc/src/main/resources/eclipse.settings/org.eclipse.core.resources.prefs b/build-tools-internal/src/main/resources/eclipse.settings/org.eclipse.core.resources.prefs similarity index 100% rename from buildSrc/src/main/resources/eclipse.settings/org.eclipse.core.resources.prefs rename to build-tools-internal/src/main/resources/eclipse.settings/org.eclipse.core.resources.prefs diff --git a/buildSrc/src/main/resources/eclipse.settings/org.eclipse.jdt.core.prefs b/build-tools-internal/src/main/resources/eclipse.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from buildSrc/src/main/resources/eclipse.settings/org.eclipse.jdt.core.prefs rename to build-tools-internal/src/main/resources/eclipse.settings/org.eclipse.jdt.core.prefs diff --git a/buildSrc/src/main/resources/eclipse.settings/org.eclipse.jdt.ui.prefs b/build-tools-internal/src/main/resources/eclipse.settings/org.eclipse.jdt.ui.prefs similarity index 100% rename from buildSrc/src/main/resources/eclipse.settings/org.eclipse.jdt.ui.prefs rename to build-tools-internal/src/main/resources/eclipse.settings/org.eclipse.jdt.ui.prefs diff --git a/buildSrc/src/main/resources/elasticsearch.properties b/build-tools-internal/src/main/resources/elasticsearch.properties similarity index 100% rename from buildSrc/src/main/resources/elasticsearch.properties rename to build-tools-internal/src/main/resources/elasticsearch.properties diff --git a/buildSrc/src/main/resources/fips_java_bcjsse_11.policy b/build-tools-internal/src/main/resources/fips_java.policy similarity index 100% rename from buildSrc/src/main/resources/fips_java_bcjsse_11.policy rename to build-tools-internal/src/main/resources/fips_java.policy diff --git a/buildSrc/src/main/resources/fips_java_bcjsse_11.security b/build-tools-internal/src/main/resources/fips_java.security similarity index 100% rename from buildSrc/src/main/resources/fips_java_bcjsse_11.security rename to build-tools-internal/src/main/resources/fips_java.security diff --git a/build-tools-internal/src/main/resources/fips_java_bcjsse_11.policy b/build-tools-internal/src/main/resources/fips_java_bcjsse_11.policy new file mode 100644 index 000000000000..af4f62eaf009 --- /dev/null +++ b/build-tools-internal/src/main/resources/fips_java_bcjsse_11.policy @@ -0,0 +1,18 @@ +// Security Policy for JDK 11 and higher, with BouncyCastle FIPS provider and BouncyCastleJsseProvider in FIPS mode + +grant { + permission java.security.SecurityPermission "putProviderProperty.BCFIPS"; + permission java.security.SecurityPermission "putProviderProperty.BCJSSE"; + permission java.lang.RuntimePermission "getProtectionDomain"; + permission java.util.PropertyPermission "java.runtime.name", "read"; + permission org.bouncycastle.crypto.CryptoServicesPermission "tlsAlgorithmsEnabled"; + //io.netty.handler.codec.DecoderException + permission java.lang.RuntimePermission "accessClassInPackage.sun.security.internal.spec"; + //java.security.InvalidAlgorithmParameterException: Cannot process GCMParameterSpec + permission java.lang.RuntimePermission "accessDeclaredMembers"; + permission java.util.PropertyPermission "intellij.debug.agent", "read"; + permission java.util.PropertyPermission "intellij.debug.agent", "write"; + permission org.bouncycastle.crypto.CryptoServicesPermission "exportSecretKey"; + permission org.bouncycastle.crypto.CryptoServicesPermission "exportPrivateKey"; + permission java.io.FilePermission "${javax.net.ssl.trustStore}", "read"; +}; diff --git a/build-tools-internal/src/main/resources/fips_java_bcjsse_11.security b/build-tools-internal/src/main/resources/fips_java_bcjsse_11.security new file mode 100644 index 000000000000..e6a025e7eb10 --- /dev/null +++ b/build-tools-internal/src/main/resources/fips_java_bcjsse_11.security @@ -0,0 +1,53 @@ +# Security Properties for JDK 11 and higher, with BouncyCastle FIPS provider and BouncyCastleJsseProvider in FIPS mode + +security.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider C:HYBRID;ENABLE{All}; +security.provider.2=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider fips:BCFIPS +security.provider.3=SUN +security.provider.4=SunJGSS +securerandom.source=file:/dev/urandom +securerandom.strongAlgorithms=NativePRNGBlocking:SUN,DRBG:SUN +securerandom.drbg.config= +login.configuration.provider=sun.security.provider.ConfigFile +policy.provider=sun.security.provider.PolicyFile +policy.expandProperties=true +policy.allowSystemProperty=true +policy.ignoreIdentityScope=false +keystore.type=BCFKS +keystore.type.compat=true +package.access=sun.misc.,\ + sun.reflect. +package.definition=sun.misc.,\ + sun.reflect. +security.overridePropertiesFile=true +ssl.KeyManagerFactory.algorithm=PKIX +ssl.TrustManagerFactory.algorithm=PKIX +networkaddress.cache.negative.ttl=10 +krb5.kdc.bad.policy = tryLast +jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer, \ + RSA keySize < 1024, DSA keySize < 1024, EC keySize < 224 +jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \ + DSA keySize < 1024 +jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \ + EC keySize < 224, DES40_CBC, RC4_40, 3DES_EDE_CBC +jdk.tls.legacyAlgorithms= \ + K_NULL, C_NULL, M_NULL, \ + DH_anon, ECDH_anon, \ + RC4_128, RC4_40, DES_CBC, DES40_CBC, \ + 3DES_EDE_CBC +jdk.tls.keyLimits=AES/GCM/NoPadding KeyUpdate 2^37 +crypto.policy=unlimited +jdk.xml.dsig.secureValidationPolicy=\ + disallowAlg http://www.w3.org/TR/1999/REC-xslt-19991116,\ + disallowAlg http://www.w3.org/2001/04/xmldsig-more#rsa-md5,\ + disallowAlg http://www.w3.org/2001/04/xmldsig-more#hmac-md5,\ + disallowAlg http://www.w3.org/2001/04/xmldsig-more#md5,\ + maxTransforms 5,\ + maxReferences 30,\ + disallowReferenceUriSchemes file http https,\ + minKeySize RSA 1024,\ + minKeySize DSA 1024,\ + minKeySize EC 224,\ + noDuplicateIds,\ + noRetrievalMethodLoops +jceks.key.serialFilter = java.base/java.lang.Enum;java.base/java.security.KeyRep;\ + java.base/java.security.KeyRep$Type;java.base/javax.crypto.spec.SecretKeySpec;!* diff --git a/buildSrc/src/main/resources/fips_java_bcjsse_8.policy b/build-tools-internal/src/main/resources/fips_java_bcjsse_8.policy similarity index 100% rename from buildSrc/src/main/resources/fips_java_bcjsse_8.policy rename to build-tools-internal/src/main/resources/fips_java_bcjsse_8.policy diff --git a/buildSrc/src/main/resources/fips_java_bcjsse_8.security b/build-tools-internal/src/main/resources/fips_java_bcjsse_8.security similarity index 100% rename from buildSrc/src/main/resources/fips_java_bcjsse_8.security rename to build-tools-internal/src/main/resources/fips_java_bcjsse_8.security diff --git a/buildSrc/src/main/resources/fips_java_oracle.security b/build-tools-internal/src/main/resources/fips_java_oracle.security similarity index 100% rename from buildSrc/src/main/resources/fips_java_oracle.security rename to build-tools-internal/src/main/resources/fips_java_oracle.security diff --git a/buildSrc/src/main/resources/fips_java_sunjsse.policy b/build-tools-internal/src/main/resources/fips_java_sunjsse.policy similarity index 100% rename from buildSrc/src/main/resources/fips_java_sunjsse.policy rename to build-tools-internal/src/main/resources/fips_java_sunjsse.policy diff --git a/buildSrc/src/main/resources/fips_java_sunjsse.security b/build-tools-internal/src/main/resources/fips_java_sunjsse.security similarity index 100% rename from buildSrc/src/main/resources/fips_java_sunjsse.security rename to build-tools-internal/src/main/resources/fips_java_sunjsse.security diff --git a/buildSrc/src/main/resources/forbidden/es-all-signatures.txt b/build-tools-internal/src/main/resources/forbidden/es-all-signatures.txt similarity index 100% rename from buildSrc/src/main/resources/forbidden/es-all-signatures.txt rename to build-tools-internal/src/main/resources/forbidden/es-all-signatures.txt diff --git a/buildSrc/src/main/resources/forbidden/es-server-signatures.txt b/build-tools-internal/src/main/resources/forbidden/es-server-signatures.txt similarity index 100% rename from buildSrc/src/main/resources/forbidden/es-server-signatures.txt rename to build-tools-internal/src/main/resources/forbidden/es-server-signatures.txt diff --git a/buildSrc/src/main/resources/forbidden/es-test-signatures.txt b/build-tools-internal/src/main/resources/forbidden/es-test-signatures.txt similarity index 100% rename from buildSrc/src/main/resources/forbidden/es-test-signatures.txt rename to build-tools-internal/src/main/resources/forbidden/es-test-signatures.txt diff --git a/buildSrc/src/main/resources/forbidden/http-signatures.txt b/build-tools-internal/src/main/resources/forbidden/http-signatures.txt similarity index 100% rename from buildSrc/src/main/resources/forbidden/http-signatures.txt rename to build-tools-internal/src/main/resources/forbidden/http-signatures.txt diff --git a/buildSrc/src/main/resources/forbidden/jdk-signatures.txt b/build-tools-internal/src/main/resources/forbidden/jdk-signatures.txt similarity index 100% rename from buildSrc/src/main/resources/forbidden/jdk-signatures.txt rename to build-tools-internal/src/main/resources/forbidden/jdk-signatures.txt diff --git a/buildSrc/src/main/resources/forbidden/snakeyaml-signatures.txt b/build-tools-internal/src/main/resources/forbidden/snakeyaml-signatures.txt similarity index 100% rename from buildSrc/src/main/resources/forbidden/snakeyaml-signatures.txt rename to build-tools-internal/src/main/resources/forbidden/snakeyaml-signatures.txt diff --git a/buildSrc/src/main/resources/forbidden/third-party-audit.txt b/build-tools-internal/src/main/resources/forbidden/third-party-audit.txt similarity index 100% rename from buildSrc/src/main/resources/forbidden/third-party-audit.txt rename to build-tools-internal/src/main/resources/forbidden/third-party-audit.txt diff --git a/buildSrc/src/main/resources/license-headers/elastic-license-2.0-header.txt b/build-tools-internal/src/main/resources/license-headers/elastic-license-2.0-header.txt similarity index 100% rename from buildSrc/src/main/resources/license-headers/elastic-license-2.0-header.txt rename to build-tools-internal/src/main/resources/license-headers/elastic-license-2.0-header.txt diff --git a/buildSrc/src/main/resources/license-headers/sspl+elastic-license-header.txt b/build-tools-internal/src/main/resources/license-headers/sspl+elastic-license-header.txt similarity index 100% rename from buildSrc/src/main/resources/license-headers/sspl+elastic-license-header.txt rename to build-tools-internal/src/main/resources/license-headers/sspl+elastic-license-header.txt diff --git a/buildSrc/src/main/resources/minimumCompilerVersion b/build-tools-internal/src/main/resources/minimumCompilerVersion similarity index 100% rename from buildSrc/src/main/resources/minimumCompilerVersion rename to build-tools-internal/src/main/resources/minimumCompilerVersion diff --git a/buildSrc/src/main/resources/minimumGradleVersion b/build-tools-internal/src/main/resources/minimumGradleVersion similarity index 100% rename from buildSrc/src/main/resources/minimumGradleVersion rename to build-tools-internal/src/main/resources/minimumGradleVersion diff --git a/buildSrc/src/main/resources/minimumRuntimeVersion b/build-tools-internal/src/main/resources/minimumRuntimeVersion similarity index 100% rename from buildSrc/src/main/resources/minimumRuntimeVersion rename to build-tools-internal/src/main/resources/minimumRuntimeVersion diff --git a/buildSrc/src/main/resources/test/ssl/README.md b/build-tools-internal/src/main/resources/test/ssl/README.md similarity index 100% rename from buildSrc/src/main/resources/test/ssl/README.md rename to build-tools-internal/src/main/resources/test/ssl/README.md diff --git a/buildSrc/src/main/resources/test/ssl/test-client.crt b/build-tools-internal/src/main/resources/test/ssl/test-client.crt similarity index 100% rename from buildSrc/src/main/resources/test/ssl/test-client.crt rename to build-tools-internal/src/main/resources/test/ssl/test-client.crt diff --git a/buildSrc/src/main/resources/test/ssl/test-client.jks b/build-tools-internal/src/main/resources/test/ssl/test-client.jks similarity index 100% rename from buildSrc/src/main/resources/test/ssl/test-client.jks rename to build-tools-internal/src/main/resources/test/ssl/test-client.jks diff --git a/buildSrc/src/main/resources/test/ssl/test-client.key b/build-tools-internal/src/main/resources/test/ssl/test-client.key similarity index 100% rename from buildSrc/src/main/resources/test/ssl/test-client.key rename to build-tools-internal/src/main/resources/test/ssl/test-client.key diff --git a/buildSrc/src/main/resources/test/ssl/test-node.crt b/build-tools-internal/src/main/resources/test/ssl/test-node.crt similarity index 100% rename from buildSrc/src/main/resources/test/ssl/test-node.crt rename to build-tools-internal/src/main/resources/test/ssl/test-node.crt diff --git a/buildSrc/src/main/resources/test/ssl/test-node.jks b/build-tools-internal/src/main/resources/test/ssl/test-node.jks similarity index 100% rename from buildSrc/src/main/resources/test/ssl/test-node.jks rename to build-tools-internal/src/main/resources/test/ssl/test-node.jks diff --git a/buildSrc/src/main/resources/test/ssl/test-node.key b/build-tools-internal/src/main/resources/test/ssl/test-node.key similarity index 100% rename from buildSrc/src/main/resources/test/ssl/test-node.key rename to build-tools-internal/src/main/resources/test/ssl/test-node.key diff --git a/buildSrc/src/test/groovy/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestResultProcessorTestSpec.groovy b/build-tools-internal/src/test/groovy/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestResultProcessorTestSpec.groovy similarity index 100% rename from buildSrc/src/test/groovy/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestResultProcessorTestSpec.groovy rename to build-tools-internal/src/test/groovy/org/elasticsearch/gradle/internal/test/rerun/executer/RerunTestResultProcessorTestSpec.groovy diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/AbstractDistributionDownloadPluginTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/AbstractDistributionDownloadPluginTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/AbstractDistributionDownloadPluginTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/AbstractDistributionDownloadPluginTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/VersionTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/VersionTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/VersionTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/VersionTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/BwcVersionsTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/BwcVersionsTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/BwcVersionsTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/BwcVersionsTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/ConcatFilesTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/ConcatFilesTaskTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/ConcatFilesTaskTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/ConcatFilesTaskTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/EmptyDirTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/EmptyDirTaskTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/EmptyDirTaskTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/EmptyDirTaskTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPluginTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/checkstyle/SnipptLengthCheckTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/checkstyle/SnipptLengthCheckTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/checkstyle/SnipptLengthCheckTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/checkstyle/SnipptLengthCheckTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/doc/RestTestFromSnippetsTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/doc/RestTestFromSnippetsTaskTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/doc/RestTestFromSnippetsTaskTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/doc/RestTestFromSnippetsTaskTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/doc/SnippetsTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/doc/SnippetsTaskTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/doc/SnippetsTaskTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/doc/SnippetsTaskTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/docker/DockerSupportServiceTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/docker/DockerSupportServiceTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/docker/DockerSupportServiceTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/docker/DockerSupportServiceTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/docker/TransformLog4jConfigFilterTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/docker/TransformLog4jConfigFilterTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/docker/TransformLog4jConfigFilterTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/docker/TransformLog4jConfigFilterTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTaskTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTaskTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTaskTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTaskTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTaskTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTaskTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTaskTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTaskTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTaskTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTaskTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTaskTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTaskTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTaskTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaderTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaderTests.java similarity index 90% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaderTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaderTests.java index 76a276819cf3..7123ba4d8290 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaderTests.java +++ b/build-tools-internal/src/test/java/org/elasticsearch/gradle/internal/test/rest/transform/InjectHeaderTests.java @@ -37,10 +37,10 @@ public class InjectHeaderTests extends GradleUnitTestCase { private static final YAMLFactory yaml = new YAMLFactory(); private static final ObjectMapper mapper = new ObjectMapper(yaml); private static final Map headers = Map.of( - "Content-Type", - "application/vnd.elasticsearch+json;compatible-with=7", - "Accept", - "application/vnd.elasticsearch+json;compatible-with=7" + "Content-Type", + "application/vnd.elasticsearch+json;compatible-with=7", + "Accept", + "application/vnd.elasticsearch+json;compatible-with=7" ); private static final boolean humanDebug = false; // useful for humans trying to debug these tests @@ -58,8 +58,8 @@ public class InjectHeaderTests extends GradleUnitTestCase { assertThat(tests.stream().filter(node -> node.get("setup") != null).count(), CoreMatchers.equalTo(0L)); List transformedTests = transformer.transformRestTests( - new LinkedList<>(tests), - Collections.singletonList(new InjectHeaders(headers)) + new LinkedList<>(tests), + Collections.singletonList(new InjectHeaders(headers)) ); printTest(testName, transformedTests); // ensure setup is correct @@ -93,8 +93,8 @@ public class InjectHeaderTests extends GradleUnitTestCase { assertThat(tests.stream().filter(node -> node.get("setup") != null).count(), CoreMatchers.equalTo(1L)); List transformedTests = transformer.transformRestTests( - new LinkedList<>(tests), - Collections.singletonList(new InjectHeaders(headers)) + new LinkedList<>(tests), + Collections.singletonList(new InjectHeaders(headers)) ); printTest(testName, transformedTests); // ensure setup is correct @@ -128,10 +128,10 @@ public class InjectHeaderTests extends GradleUnitTestCase { assertThat(tests.stream().filter(node -> node.get("setup") != null).count(), CoreMatchers.equalTo(1L)); List skipNodes = tests.stream() - .filter(node -> node.get("setup") != null) - .filter(node -> getSkipNode((ArrayNode) node.get("setup")) != null) - .map(node -> getSkipNode((ArrayNode) node.get("setup"))) - .collect(Collectors.toList()); + .filter(node -> node.get("setup") != null) + .filter(node -> getSkipNode((ArrayNode) node.get("setup")) != null) + .map(node -> getSkipNode((ArrayNode) node.get("setup"))) + .collect(Collectors.toList()); // validate skip node exists assertThat(skipNodes.size(), CoreMatchers.equalTo(1)); @@ -139,8 +139,8 @@ public class InjectHeaderTests extends GradleUnitTestCase { assertNull(skipNodes.get(0).get("features")); List transformedTests = transformer.transformRestTests( - new LinkedList<>(tests), - Collections.singletonList(new InjectHeaders(headers)) + new LinkedList<>(tests), + Collections.singletonList(new InjectHeaders(headers)) ); printTest(testName, transformedTests); // ensure setup is correct @@ -175,10 +175,10 @@ public class InjectHeaderTests extends GradleUnitTestCase { assertThat(tests.stream().filter(node -> node.get("setup") != null).count(), CoreMatchers.equalTo(1L)); List skipNodes = tests.stream() - .filter(node -> node.get("setup") != null) - .filter(node -> getSkipNode((ArrayNode) node.get("setup")) != null) - .map(node -> getSkipNode((ArrayNode) node.get("setup"))) - .collect(Collectors.toList()); + .filter(node -> node.get("setup") != null) + .filter(node -> getSkipNode((ArrayNode) node.get("setup")) != null) + .map(node -> getSkipNode((ArrayNode) node.get("setup"))) + .collect(Collectors.toList()); // validate skip node exists assertThat(skipNodes.size(), CoreMatchers.equalTo(1)); @@ -186,8 +186,8 @@ public class InjectHeaderTests extends GradleUnitTestCase { assertThat(skipNodes.get(0).get("features"), CoreMatchers.notNullValue()); List transformedTests = transformer.transformRestTests( - new LinkedList<>(tests), - Collections.singletonList(new InjectHeaders(headers)) + new LinkedList<>(tests), + Collections.singletonList(new InjectHeaders(headers)) ); printTest(testName, transformedTests); // ensure setup is correct @@ -221,10 +221,10 @@ public class InjectHeaderTests extends GradleUnitTestCase { assertThat(tests.stream().filter(node -> node.get("setup") != null).count(), CoreMatchers.equalTo(1L)); List skipNodes = tests.stream() - .filter(node -> node.get("setup") != null) - .filter(node -> getSkipNode((ArrayNode) node.get("setup")) != null) - .map(node -> getSkipNode((ArrayNode) node.get("setup"))) - .collect(Collectors.toList()); + .filter(node -> node.get("setup") != null) + .filter(node -> getSkipNode((ArrayNode) node.get("setup")) != null) + .map(node -> getSkipNode((ArrayNode) node.get("setup"))) + .collect(Collectors.toList()); // validate skip node exists assertThat(skipNodes.size(), CoreMatchers.equalTo(1)); @@ -246,8 +246,8 @@ public class InjectHeaderTests extends GradleUnitTestCase { assertThat(features, IsCollectionContaining.hasItem("headers")); List transformedTests = transformer.transformRestTests( - new LinkedList<>(tests), - Collections.singletonList(new InjectHeaders(headers)) + new LinkedList<>(tests), + Collections.singletonList(new InjectHeaders(headers)) ); printTest(testName, transformedTests); // ensure setup is correct @@ -344,4 +344,4 @@ public class InjectHeaderTests extends GradleUnitTestCase { } } } -} +} \ No newline at end of file diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtensionTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtensionTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtensionTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtensionTests.java diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/testclusters/WaitForHttpResourceTests.java b/build-tools-internal/src/test/java/org/elasticsearch/gradle/testclusters/WaitForHttpResourceTests.java similarity index 100% rename from buildSrc/src/test/java/org/elasticsearch/gradle/testclusters/WaitForHttpResourceTests.java rename to build-tools-internal/src/test/java/org/elasticsearch/gradle/testclusters/WaitForHttpResourceTests.java diff --git a/buildSrc/src/test/resources/ca.p12 b/build-tools-internal/src/test/resources/ca.p12 similarity index 100% rename from buildSrc/src/test/resources/ca.p12 rename to build-tools-internal/src/test/resources/ca.p12 diff --git a/buildSrc/src/test/resources/ca.pem b/build-tools-internal/src/test/resources/ca.pem similarity index 100% rename from buildSrc/src/test/resources/ca.pem rename to build-tools-internal/src/test/resources/ca.pem diff --git a/buildSrc/src/test/resources/rest/header_inject/no_setup.yml b/build-tools-internal/src/test/resources/rest/header_inject/no_setup.yml similarity index 100% rename from buildSrc/src/test/resources/rest/header_inject/no_setup.yml rename to build-tools-internal/src/test/resources/rest/header_inject/no_setup.yml diff --git a/buildSrc/src/test/resources/rest/header_inject/with_features.yml b/build-tools-internal/src/test/resources/rest/header_inject/with_features.yml similarity index 100% rename from buildSrc/src/test/resources/rest/header_inject/with_features.yml rename to build-tools-internal/src/test/resources/rest/header_inject/with_features.yml diff --git a/buildSrc/src/test/resources/rest/header_inject/with_headers.yml b/build-tools-internal/src/test/resources/rest/header_inject/with_headers.yml similarity index 100% rename from buildSrc/src/test/resources/rest/header_inject/with_headers.yml rename to build-tools-internal/src/test/resources/rest/header_inject/with_headers.yml diff --git a/buildSrc/src/test/resources/rest/header_inject/with_setup.yml b/build-tools-internal/src/test/resources/rest/header_inject/with_setup.yml similarity index 100% rename from buildSrc/src/test/resources/rest/header_inject/with_setup.yml rename to build-tools-internal/src/test/resources/rest/header_inject/with_setup.yml diff --git a/buildSrc/src/test/resources/rest/header_inject/with_skip.yml b/build-tools-internal/src/test/resources/rest/header_inject/with_skip.yml similarity index 100% rename from buildSrc/src/test/resources/rest/header_inject/with_skip.yml rename to build-tools-internal/src/test/resources/rest/header_inject/with_skip.yml diff --git a/buildSrc/src/testKit/elasticsearch-build-resources/build.gradle b/build-tools-internal/src/testKit/elasticsearch-build-resources/build.gradle similarity index 100% rename from buildSrc/src/testKit/elasticsearch-build-resources/build.gradle rename to build-tools-internal/src/testKit/elasticsearch-build-resources/build.gradle diff --git a/buildSrc/src/testKit/elasticsearch-build-resources/gradle.properties b/build-tools-internal/src/testKit/elasticsearch-build-resources/gradle.properties similarity index 100% rename from buildSrc/src/testKit/elasticsearch-build-resources/gradle.properties rename to build-tools-internal/src/testKit/elasticsearch-build-resources/gradle.properties diff --git a/buildSrc/src/testKit/elasticsearch-build-resources/settings.gradle b/build-tools-internal/src/testKit/elasticsearch-build-resources/settings.gradle similarity index 100% rename from buildSrc/src/testKit/elasticsearch-build-resources/settings.gradle rename to build-tools-internal/src/testKit/elasticsearch-build-resources/settings.gradle diff --git a/buildSrc/src/testKit/elasticsearch.build/LICENSE b/build-tools-internal/src/testKit/elasticsearch.build/LICENSE similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/LICENSE rename to build-tools-internal/src/testKit/elasticsearch.build/LICENSE diff --git a/buildSrc/src/testKit/elasticsearch.build/NOTICE b/build-tools-internal/src/testKit/elasticsearch.build/NOTICE similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/NOTICE rename to build-tools-internal/src/testKit/elasticsearch.build/NOTICE diff --git a/buildSrc/src/testKit/elasticsearch.build/build.gradle b/build-tools-internal/src/testKit/elasticsearch.build/build.gradle similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/build.gradle rename to build-tools-internal/src/testKit/elasticsearch.build/build.gradle diff --git a/buildSrc/src/testKit/elasticsearch.build/gradle.properties b/build-tools-internal/src/testKit/elasticsearch.build/gradle.properties similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/gradle.properties rename to build-tools-internal/src/testKit/elasticsearch.build/gradle.properties diff --git a/buildSrc/src/testKit/elasticsearch.build/libs/elasticsearch-core/build.gradle b/build-tools-internal/src/testKit/elasticsearch.build/libs/elasticsearch-core/build.gradle similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/libs/elasticsearch-core/build.gradle rename to build-tools-internal/src/testKit/elasticsearch.build/libs/elasticsearch-core/build.gradle diff --git a/buildSrc/src/testKit/elasticsearch.build/licenses/hamcrest-core-1.3.jar.sha1 b/build-tools-internal/src/testKit/elasticsearch.build/licenses/hamcrest-core-1.3.jar.sha1 similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/licenses/hamcrest-core-1.3.jar.sha1 rename to build-tools-internal/src/testKit/elasticsearch.build/licenses/hamcrest-core-1.3.jar.sha1 diff --git a/buildSrc/src/testKit/elasticsearch.build/licenses/hamcrest-core-LICENSE.txt b/build-tools-internal/src/testKit/elasticsearch.build/licenses/hamcrest-core-LICENSE.txt similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/licenses/hamcrest-core-LICENSE.txt rename to build-tools-internal/src/testKit/elasticsearch.build/licenses/hamcrest-core-LICENSE.txt diff --git a/buildSrc/src/testKit/elasticsearch.build/licenses/hamcrest-core-NOTICE.txt b/build-tools-internal/src/testKit/elasticsearch.build/licenses/hamcrest-core-NOTICE.txt similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/licenses/hamcrest-core-NOTICE.txt rename to build-tools-internal/src/testKit/elasticsearch.build/licenses/hamcrest-core-NOTICE.txt diff --git a/buildSrc/src/testKit/elasticsearch.build/licenses/junit-4.12.jar.sha1 b/build-tools-internal/src/testKit/elasticsearch.build/licenses/junit-4.12.jar.sha1 similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/licenses/junit-4.12.jar.sha1 rename to build-tools-internal/src/testKit/elasticsearch.build/licenses/junit-4.12.jar.sha1 diff --git a/buildSrc/src/testKit/elasticsearch.build/licenses/junit-LICENSE.txt b/build-tools-internal/src/testKit/elasticsearch.build/licenses/junit-LICENSE.txt similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/licenses/junit-LICENSE.txt rename to build-tools-internal/src/testKit/elasticsearch.build/licenses/junit-LICENSE.txt diff --git a/buildSrc/src/testKit/elasticsearch.build/licenses/junit-NOTICE.txt b/build-tools-internal/src/testKit/elasticsearch.build/licenses/junit-NOTICE.txt similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/licenses/junit-NOTICE.txt rename to build-tools-internal/src/testKit/elasticsearch.build/licenses/junit-NOTICE.txt diff --git a/buildSrc/src/testKit/elasticsearch.build/settings.gradle b/build-tools-internal/src/testKit/elasticsearch.build/settings.gradle similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/settings.gradle rename to build-tools-internal/src/testKit/elasticsearch.build/settings.gradle diff --git a/buildSrc/src/testKit/elasticsearch.build/src/main/java/org/elasticsearch/SampleClass.java b/build-tools-internal/src/testKit/elasticsearch.build/src/main/java/org/elasticsearch/SampleClass.java similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/src/main/java/org/elasticsearch/SampleClass.java rename to build-tools-internal/src/testKit/elasticsearch.build/src/main/java/org/elasticsearch/SampleClass.java diff --git a/buildSrc/src/testKit/elasticsearch.build/test/logger-usage/build.gradle b/build-tools-internal/src/testKit/elasticsearch.build/test/logger-usage/build.gradle similarity index 100% rename from buildSrc/src/testKit/elasticsearch.build/test/logger-usage/build.gradle rename to build-tools-internal/src/testKit/elasticsearch.build/test/logger-usage/build.gradle diff --git a/buildSrc/src/testKit/reaper/build.gradle b/build-tools-internal/src/testKit/reaper/build.gradle similarity index 100% rename from buildSrc/src/testKit/reaper/build.gradle rename to build-tools-internal/src/testKit/reaper/build.gradle diff --git a/buildSrc/src/testKit/reaper/gradle.properties b/build-tools-internal/src/testKit/reaper/gradle.properties similarity index 100% rename from buildSrc/src/testKit/reaper/gradle.properties rename to build-tools-internal/src/testKit/reaper/gradle.properties diff --git a/buildSrc/src/testKit/reaper/settings.gradle b/build-tools-internal/src/testKit/reaper/settings.gradle similarity index 100% rename from buildSrc/src/testKit/reaper/settings.gradle rename to build-tools-internal/src/testKit/reaper/settings.gradle diff --git a/buildSrc/src/testKit/symbolic-link-preserving-tar/build.gradle b/build-tools-internal/src/testKit/symbolic-link-preserving-tar/build.gradle similarity index 100% rename from buildSrc/src/testKit/symbolic-link-preserving-tar/build.gradle rename to build-tools-internal/src/testKit/symbolic-link-preserving-tar/build.gradle diff --git a/buildSrc/src/testKit/symbolic-link-preserving-tar/settings.gradle b/build-tools-internal/src/testKit/symbolic-link-preserving-tar/settings.gradle similarity index 100% rename from buildSrc/src/testKit/symbolic-link-preserving-tar/settings.gradle rename to build-tools-internal/src/testKit/symbolic-link-preserving-tar/settings.gradle diff --git a/buildSrc/src/testKit/testingConventions/all_classes_in_tasks/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java b/build-tools-internal/src/testKit/testingConventions/all_classes_in_tasks/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/all_classes_in_tasks/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java rename to build-tools-internal/src/testKit/testingConventions/all_classes_in_tasks/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java diff --git a/buildSrc/src/testKit/testingConventions/all_classes_in_tasks/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java b/build-tools-internal/src/testKit/testingConventions/all_classes_in_tasks/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/all_classes_in_tasks/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java rename to build-tools-internal/src/testKit/testingConventions/all_classes_in_tasks/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java diff --git a/buildSrc/src/testKit/testingConventions/build.gradle b/build-tools-internal/src/testKit/testingConventions/build.gradle similarity index 100% rename from buildSrc/src/testKit/testingConventions/build.gradle rename to build-tools-internal/src/testKit/testingConventions/build.gradle diff --git a/buildSrc/src/testKit/testingConventions/empty_test_task/.gitignore b/build-tools-internal/src/testKit/testingConventions/empty_test_task/.gitignore similarity index 100% rename from buildSrc/src/testKit/testingConventions/empty_test_task/.gitignore rename to build-tools-internal/src/testKit/testingConventions/empty_test_task/.gitignore diff --git a/buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention1.java b/build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention1.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention1.java rename to build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention1.java diff --git a/buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention2.java b/build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention2.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention2.java rename to build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention2.java diff --git a/buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention3.java b/build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention3.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention3.java rename to build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeATestWithoutNamingConvention3.java diff --git a/buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeTestsButAbstract.java b/build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeTestsButAbstract.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeTestsButAbstract.java rename to build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/LooksLikeTestsButAbstract.java diff --git a/buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java b/build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java rename to build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java diff --git a/buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java b/build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java rename to build-tools-internal/src/testKit/testingConventions/incorrect_naming_conventions/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java diff --git a/buildSrc/src/testKit/testingConventions/no_tests_in_inner_classes/src/test/java/org/elasticsearch/gradle/testkit/NastyInnerClasses.java b/build-tools-internal/src/testKit/testingConventions/no_tests_in_inner_classes/src/test/java/org/elasticsearch/gradle/testkit/NastyInnerClasses.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/no_tests_in_inner_classes/src/test/java/org/elasticsearch/gradle/testkit/NastyInnerClasses.java rename to build-tools-internal/src/testKit/testingConventions/no_tests_in_inner_classes/src/test/java/org/elasticsearch/gradle/testkit/NastyInnerClasses.java diff --git a/buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/AbstractIT.java b/build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/AbstractIT.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/AbstractIT.java rename to build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/AbstractIT.java diff --git a/buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/Integration.java b/build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/Integration.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/Integration.java rename to build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/Integration.java diff --git a/buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java b/build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java rename to build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java diff --git a/buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionMissmatchIT.java b/build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionMissmatchIT.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionMissmatchIT.java rename to build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionMissmatchIT.java diff --git a/buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionMissmatchTests.java b/build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionMissmatchTests.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionMissmatchTests.java rename to build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionMissmatchTests.java diff --git a/buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java b/build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java rename to build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java diff --git a/buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/Unit.java b/build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/Unit.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/Unit.java rename to build-tools-internal/src/testKit/testingConventions/not_implementing_base/src/test/java/org/elasticsearch/gradle/testkit/Unit.java diff --git a/buildSrc/src/testKit/testingConventions/settings.gradle b/build-tools-internal/src/testKit/testingConventions/settings.gradle similarity index 100% rename from buildSrc/src/testKit/testingConventions/settings.gradle rename to build-tools-internal/src/testKit/testingConventions/settings.gradle diff --git a/buildSrc/src/testKit/testingConventions/tests_in_main/src/main/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java b/build-tools-internal/src/testKit/testingConventions/tests_in_main/src/main/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/tests_in_main/src/main/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java rename to build-tools-internal/src/testKit/testingConventions/tests_in_main/src/main/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java diff --git a/buildSrc/src/testKit/testingConventions/tests_in_main/src/main/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java b/build-tools-internal/src/testKit/testingConventions/tests_in_main/src/main/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/tests_in_main/src/main/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java rename to build-tools-internal/src/testKit/testingConventions/tests_in_main/src/main/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java diff --git a/buildSrc/src/testKit/testingConventions/valid_setup_no_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java b/build-tools-internal/src/testKit/testingConventions/valid_setup_no_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/valid_setup_no_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java rename to build-tools-internal/src/testKit/testingConventions/valid_setup_no_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java diff --git a/buildSrc/src/testKit/testingConventions/valid_setup_no_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java b/build-tools-internal/src/testKit/testingConventions/valid_setup_no_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/valid_setup_no_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java rename to build-tools-internal/src/testKit/testingConventions/valid_setup_no_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java diff --git a/buildSrc/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/Integration.java b/build-tools-internal/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/Integration.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/Integration.java rename to build-tools-internal/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/Integration.java diff --git a/buildSrc/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java b/build-tools-internal/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java rename to build-tools-internal/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionIT.java diff --git a/buildSrc/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java b/build-tools-internal/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java rename to build-tools-internal/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/NamingConventionTests.java diff --git a/buildSrc/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/Unit.java b/build-tools-internal/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/Unit.java similarity index 100% rename from buildSrc/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/Unit.java rename to build-tools-internal/src/testKit/testingConventions/valid_setup_with_base/src/test/java/org/elasticsearch/gradle/testkit/Unit.java diff --git a/buildSrc/src/testKit/thirdPartyAudit/build.gradle b/build-tools-internal/src/testKit/thirdPartyAudit/build.gradle similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/build.gradle rename to build-tools-internal/src/testKit/thirdPartyAudit/build.gradle diff --git a/buildSrc/src/testKit/thirdPartyAudit/gradle.properties b/build-tools-internal/src/testKit/thirdPartyAudit/gradle.properties similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/gradle.properties rename to build-tools-internal/src/testKit/thirdPartyAudit/gradle.properties diff --git a/buildSrc/src/testKit/thirdPartyAudit/sample_jars/build.gradle b/build-tools-internal/src/testKit/thirdPartyAudit/sample_jars/build.gradle similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/sample_jars/build.gradle rename to build-tools-internal/src/testKit/thirdPartyAudit/sample_jars/build.gradle diff --git a/buildSrc/src/testKit/thirdPartyAudit/sample_jars/src/main/java/String.java b/build-tools-internal/src/testKit/thirdPartyAudit/sample_jars/src/main/java/String.java similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/sample_jars/src/main/java/String.java rename to build-tools-internal/src/testKit/thirdPartyAudit/sample_jars/src/main/java/String.java diff --git a/buildSrc/src/testKit/thirdPartyAudit/sample_jars/src/main/java/TestingIO.java b/build-tools-internal/src/testKit/thirdPartyAudit/sample_jars/src/main/java/TestingIO.java similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/sample_jars/src/main/java/TestingIO.java rename to build-tools-internal/src/testKit/thirdPartyAudit/sample_jars/src/main/java/TestingIO.java diff --git a/buildSrc/src/testKit/thirdPartyAudit/sample_jars/src/main/java/TestingLog4j.java b/build-tools-internal/src/testKit/thirdPartyAudit/sample_jars/src/main/java/TestingLog4j.java similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/sample_jars/src/main/java/TestingLog4j.java rename to build-tools-internal/src/testKit/thirdPartyAudit/sample_jars/src/main/java/TestingLog4j.java diff --git a/buildSrc/src/testKit/thirdPartyAudit/settings.gradle b/build-tools-internal/src/testKit/thirdPartyAudit/settings.gradle similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/settings.gradle rename to build-tools-internal/src/testKit/thirdPartyAudit/settings.gradle diff --git a/buildSrc/src/testKit/thirdPartyAudit/third-party-audit-absurd.txt b/build-tools-internal/src/testKit/thirdPartyAudit/third-party-audit-absurd.txt similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/third-party-audit-absurd.txt rename to build-tools-internal/src/testKit/thirdPartyAudit/third-party-audit-absurd.txt diff --git a/buildSrc/src/testKit/thirdPartyAudit/third-party-audit-empty.txt b/build-tools-internal/src/testKit/thirdPartyAudit/third-party-audit-empty.txt similarity index 100% rename from buildSrc/src/testKit/thirdPartyAudit/third-party-audit-empty.txt rename to build-tools-internal/src/testKit/thirdPartyAudit/third-party-audit-empty.txt diff --git a/build-tools-internal/version.properties b/build-tools-internal/version.properties new file mode 100644 index 000000000000..fb96a8a26a96 --- /dev/null +++ b/build-tools-internal/version.properties @@ -0,0 +1,55 @@ +elasticsearch = 7.14.0 +lucene = 8.9.0-snapshot-ddc238e5df8 + +bundled_jdk_vendor = adoptopenjdk +bundled_jdk = 16.0.1+9 + +checkstyle = 8.42 + +# optional dependencies +spatial4j = 0.7 +jts = 1.15.0 +jackson = 2.12.2 +snakeyaml = 1.27 +icu4j = 62.1 +supercsv = 2.4.0 +# when updating log4j, please update also docs/java-api/index.asciidoc +log4j = 2.11.1 +slf4j = 1.6.2 + +# when updating the JNA version, also update the version in buildSrc/build.gradle +jna = 5.7.0-1 + +netty = 4.1.63.Final +joda = 2.10.10 + +commons_lang3 = 3.9 + +# when updating this version, you need to ensure compatibility with: +# - plugins/ingest-attachment (transitive dependency, check the upstream POM) +# - distribution/tools/plugin-cli +# - x-pack/plugin/security +bouncycastle=1.64 +# test dependencies +randomizedrunner = 2.7.1 +junit = 4.12 +junit5 = 5.7.1 +httpclient = 4.5.10 +httpcore = 4.4.12 +httpasyncclient = 4.1.4 +commonslogging = 1.1.3 +commonscodec = 1.11 +hamcrest = 2.1 +securemock = 1.2 +mocksocket = 1.2 + +# benchmark dependencies +jmh = 1.26 + +# test dependencies +# when updating this version, also update :qa:evil-tests +jimfs = 1.2 +jimfs_guava = 30.1-jre + +# test framework +networknt_json_schema_validator = 1.0.48 diff --git a/build-tools/build.gradle b/build-tools/build.gradle new file mode 100644 index 000000000000..a0525a773e23 --- /dev/null +++ b/build-tools/build.gradle @@ -0,0 +1,220 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import org.elasticsearch.gradle.internal.conventions.VersionPropertiesLoader + +plugins { + id 'java-gradle-plugin' + id 'groovy' + id 'java-test-fixtures' + id 'elasticsearch.publish' + id 'elasticsearch.internal-licenseheaders' + id 'elasticsearch.basic-build-tool-conventions' +} + +description = "The elasticsearch build tools" + +// we update the version property to reflect if we are building a snapshot or a release build +// we write this back out below to load it in the Build.java which will be shown in rest main action +// to indicate this being a snapshot build or a release build. +Properties props = VersionPropertiesLoader.loadBuildSrcVersion(project.file('../build-tools-internal/version.properties')) +allprojects { + group = "org.elasticsearch" + version = props.getProperty("elasticsearch") + + apply plugin: 'java' + targetCompatibility = 11 + sourceCompatibility = 11 +} + +gradlePlugin { + // We already configure publication and we don't need or want the one that comes + // with the java-gradle-plugin + automatedPublishing = false + plugins { + distributionDownload { + id = 'elasticsearch.distribution-download' + implementationClass = 'org.elasticsearch.gradle.DistributionDownloadPlugin' + } + jdkDownload { + id = 'elasticsearch.jdk-download' + implementationClass = 'org.elasticsearch.gradle.JdkDownloadPlugin' + } + esPlugin { + id = 'elasticsearch.esplugin' + implementationClass = 'org.elasticsearch.gradle.plugin.PluginBuildPlugin' + } + testclusters { + id = 'elasticsearch.testclusters' + implementationClass = 'org.elasticsearch.gradle.testclusters.TestClustersPlugin' + } + reaper { + id = 'elasticsearch.reaper' + implementationClass = 'org.elasticsearch.gradle.ReaperPlugin' + } + } +} + +def generateVersionProperties = tasks.register("generateVersionProperties", WriteProperties) { + outputFile = "${buildDir}/version.properties" + comment = 'Generated version properties' + properties(props) +} + +tasks.named("processResources").configure { + from(generateVersionProperties) + exclude 'buildSrc.marker' + into('META-INF') { + from configurations.reaper + } +} + +sourceSets { + integTest { + compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"] + runtimeClasspath += output + compileClasspath + } +} + +// we do not publish the test fixtures of build-tools +components.java.withVariantsFromConfiguration(configurations.testFixturesApiElements) { skip() } +components.java.withVariantsFromConfiguration(configurations.testFixturesRuntimeElements) { skip() } + +publishing.publications.named("elastic").configure { + suppressPomMetadataWarningsFor("testFixturesApiElements") + suppressPomMetadataWarningsFor("testFixturesRuntimeElements") +} + +configurations { + integTestImplementation.extendsFrom(testFixturesApi) + integTestRuntimeOnly.extendsFrom(testRuntimeOnly) + register("reaper") +} + +repositories { + mavenCentral() + gradlePluginPortal() +} + +dependencies { + reaper project('reaper') + + api localGroovy() + api gradleApi() + api 'org.apache.commons:commons-compress:1.19' + api 'org.apache.ant:ant:1.10.8' + api 'commons-io:commons-io:2.2' + api 'gradle.plugin.com.github.jengelman.gradle.plugins:shadow:7.0.0' + + runtimeOnly project(":reaper") + + testFixturesApi "junit:junit:${props.getProperty('junit')}" + testFixturesApi "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${props.getProperty('randomizedrunner')}" + testFixturesApi gradleApi() + testFixturesApi gradleTestKit() + testFixturesApi 'com.github.tomakehurst:wiremock-jre8-standalone:2.23.2' + testFixturesApi platform("org.spockframework:spock-bom:2.0-M5-groovy-3.0") + testFixturesApi("org.spockframework:spock-core") { + exclude module: "groovy" + } + + integTestImplementation("org.spockframework:spock-junit4") { + because 'required as we rely on junit4 rules' + } + + integTestImplementation(platform("org.junit:junit-bom:${props.getProperty('junit5')}")) + integTestImplementation("org.junit.jupiter:junit-jupiter") { + because 'allows to write and run Jupiter tests' + } + integTestRuntimeOnly("org.junit.vintage:junit-vintage-engine") { + because 'allows JUnit 3 and JUnit 4 tests to run' + } + + integTestRuntimeOnly("org.junit.platform:junit-platform-launcher") { + because 'allows tests to run from IDEs that bundle older version of launcher' + } +} + +tasks.register("integTest", Test) { + inputs.dir(file("src/testKit")).withPropertyName("testkit dir").withPathSensitivity(PathSensitivity.RELATIVE) + systemProperty 'test.version_under_test', version + testClassesDirs = sourceSets.integTest.output.classesDirs + classpath = sourceSets.integTest.runtimeClasspath + useJUnitPlatform() +} + +normalization { + runtimeClasspath { + // We already include the reaper jar as part of our runtime classpath. Ignore the copy in META-INF. + ignore('META-INF/reaper.jar') + } +} + +tasks.named("check").configure { dependsOn("integTest") } + +// TODO These additional conventions will be applied once those plugins have been ported to build-conventions and +// +// apply plugin: 'elasticsearch.build' +// +// // groovydoc succeeds, but has some weird internal exception... +// tasks.named("groovydoc").configure { +// enabled = false +// } +// +// // build-tools is not ready for primetime with these... +// tasks.named("dependencyLicenses").configure { enabled = false } +// tasks.named("dependenciesInfo").configure {enabled = false } +// tasks.named("dependenciesGraph").configure {enabled = false } +// disableTasks('forbiddenApisMain', 'forbiddenApisTest', 'forbiddenApisIntegTest', 'forbiddenApisTestFixtures') +// tasks.named("jarHell").configure { +// enabled = false +// } +// tasks.named("thirdPartyAudit").configure { +// enabled = false +// } +// configurations.register("distribution") +// +// +// tasks.withType(Test).configureEach { +// // Track reaper jar as a test input using runtime classpath normalization strategy +// inputs.files(configurations.reaper).withNormalizer(ClasspathNormalizer) +// useJUnitPlatform() +// } +// +// tasks.named("test").configure { +// include("**/*TestSpec.class") +// } +// + +// +// tasks.named("forbiddenPatterns").configure { +// exclude '**/*.wav' +// exclude '**/*.p12' +// exclude '**/*.jks' +// exclude '**/*.crt' +// // the file that actually defines nocommit +// exclude '**/ForbiddenPatternsTask.java' +// exclude '**/*.bcfks' +// } +// +// eclipse { +// classpath { +// plusConfigurations += [configurations.integTestRuntimeClasspath] +// } +// } +// +// tasks.named("testingConventions") { +// naming.clear() +// naming { +// Tests { +// baseClass 'org.elasticsearch.gradle.internal.test.GradleUnitTestCase' +// } +// TestSpec { +// baseClass 'spock.lang.Specification' +// } +// } +// } \ No newline at end of file diff --git a/buildSrc/reaper/build.gradle b/build-tools/reaper/build.gradle similarity index 87% rename from buildSrc/reaper/build.gradle rename to build-tools/reaper/build.gradle index 5a1da72c4208..47f6d36cce2a 100644 --- a/buildSrc/reaper/build.gradle +++ b/build-tools/reaper/build.gradle @@ -1,4 +1,6 @@ -apply plugin: 'java' +plugins { + id 'java' +} tasks.named("jar").configure { archiveFileName = "${project.name}.jar" diff --git a/buildSrc/reaper/src/main/java/org/elasticsearch/gradle/reaper/Reaper.java b/build-tools/reaper/src/main/java/org/elasticsearch/gradle/reaper/Reaper.java similarity index 100% rename from buildSrc/reaper/src/main/java/org/elasticsearch/gradle/reaper/Reaper.java rename to build-tools/reaper/src/main/java/org/elasticsearch/gradle/reaper/Reaper.java diff --git a/build-tools/settings.gradle b/build-tools/settings.gradle new file mode 100644 index 000000000000..57da38826417 --- /dev/null +++ b/build-tools/settings.gradle @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +include 'reaper' \ No newline at end of file diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/DistributionDownloadPluginFuncTest.groovy b/build-tools/src/integTest/groovy/org/elasticsearch/gradle/DistributionDownloadPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/DistributionDownloadPluginFuncTest.groovy rename to build-tools/src/integTest/groovy/org/elasticsearch/gradle/DistributionDownloadPluginFuncTest.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/TestClustersPluginFuncTest.groovy b/build-tools/src/integTest/groovy/org/elasticsearch/gradle/TestClustersPluginFuncTest.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/TestClustersPluginFuncTest.groovy rename to build-tools/src/integTest/groovy/org/elasticsearch/gradle/TestClustersPluginFuncTest.groovy diff --git a/build-tools/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java b/build-tools/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java new file mode 100644 index 000000000000..1ca241bc01aa --- /dev/null +++ b/build-tools/src/integTest/java/org/elasticsearch/gradle/ReaperPluginIT.java @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +package org.elasticsearch.gradle; + +import org.elasticsearch.gradle.internal.test.GradleIntegrationTestCase; +import org.gradle.testkit.runner.BuildResult; + +public class ReaperPluginIT extends GradleIntegrationTestCase { + @Override + public String projectName() { + return "reaper"; + } + + public void testCanLaunchReaper() { + BuildResult result = getGradleRunner().withArguments(":launchReaper", "-S", "--info").build(); + assertTaskSuccessful(result, ":launchReaper"); + assertOutputContains(result.getOutput(), "Copying reaper.jar..."); + } + +} diff --git a/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-config.tar.gz b/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-config.tar.gz new file mode 100644 index 000000000000..6b1f5d4fc37a Binary files /dev/null and b/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-config.tar.gz differ diff --git a/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-jar.tar.gz b/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-jar.tar.gz new file mode 100644 index 000000000000..c449d39cb118 Binary files /dev/null and b/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch-with-added-jar.tar.gz differ diff --git a/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.tar.gz b/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.tar.gz new file mode 100644 index 000000000000..c86378d8f9b0 Binary files /dev/null and b/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.tar.gz differ diff --git a/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.zip b/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.zip new file mode 100644 index 000000000000..42b572e37f3f Binary files /dev/null and b/build-tools/src/integTest/resources/org/elasticsearch/gradle/fake_elasticsearch.zip differ diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/AbstractLazyPropertyCollection.java b/build-tools/src/main/java/org/elasticsearch/gradle/AbstractLazyPropertyCollection.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/AbstractLazyPropertyCollection.java rename to build-tools/src/main/java/org/elasticsearch/gradle/AbstractLazyPropertyCollection.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/Architecture.java b/build-tools/src/main/java/org/elasticsearch/gradle/Architecture.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/Architecture.java rename to build-tools/src/main/java/org/elasticsearch/gradle/Architecture.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDependency.java b/build-tools/src/main/java/org/elasticsearch/gradle/DistributionDependency.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDependency.java rename to build-tools/src/main/java/org/elasticsearch/gradle/DistributionDependency.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java b/build-tools/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java rename to build-tools/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/DistributionResolution.java b/build-tools/src/main/java/org/elasticsearch/gradle/DistributionResolution.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/DistributionResolution.java rename to build-tools/src/main/java/org/elasticsearch/gradle/DistributionResolution.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchDistribution.java b/build-tools/src/main/java/org/elasticsearch/gradle/ElasticsearchDistribution.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchDistribution.java rename to build-tools/src/main/java/org/elasticsearch/gradle/ElasticsearchDistribution.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchDistributionType.java b/build-tools/src/main/java/org/elasticsearch/gradle/ElasticsearchDistributionType.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/ElasticsearchDistributionType.java rename to build-tools/src/main/java/org/elasticsearch/gradle/ElasticsearchDistributionType.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/FileSupplier.java b/build-tools/src/main/java/org/elasticsearch/gradle/FileSupplier.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/FileSupplier.java rename to build-tools/src/main/java/org/elasticsearch/gradle/FileSupplier.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/FileSystemOperationsAware.java b/build-tools/src/main/java/org/elasticsearch/gradle/FileSystemOperationsAware.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/FileSystemOperationsAware.java rename to build-tools/src/main/java/org/elasticsearch/gradle/FileSystemOperationsAware.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/Jdk.java b/build-tools/src/main/java/org/elasticsearch/gradle/Jdk.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/Jdk.java rename to build-tools/src/main/java/org/elasticsearch/gradle/Jdk.java index 5688d61a1a91..a07301c79a03 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/Jdk.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/Jdk.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal; +package org.elasticsearch.gradle; import org.gradle.api.Buildable; import org.gradle.api.artifacts.Configuration; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/JdkDownloadPlugin.java b/build-tools/src/main/java/org/elasticsearch/gradle/JdkDownloadPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/internal/JdkDownloadPlugin.java rename to build-tools/src/main/java/org/elasticsearch/gradle/JdkDownloadPlugin.java index 391139dd1df1..2a36dcb214ee 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/JdkDownloadPlugin.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/JdkDownloadPlugin.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal; +package org.elasticsearch.gradle; import org.elasticsearch.gradle.transform.SymbolicLinkPreservingUntarTransform; import org.elasticsearch.gradle.transform.UnzipTransform; @@ -20,7 +20,6 @@ import org.gradle.api.artifacts.repositories.IvyArtifactRepository; import org.gradle.api.artifacts.type.ArtifactTypeDefinition; import org.gradle.api.attributes.Attribute; import org.gradle.api.internal.artifacts.ArtifactAttributes; -import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -170,7 +169,6 @@ public class JdkDownloadPlugin implements Plugin { } } - @NotNull private String azulPlatform(Jdk jdk) { switch (jdk.getPlatform()) { case "linux": diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/LazyFileOutputStream.java b/build-tools/src/main/java/org/elasticsearch/gradle/LazyFileOutputStream.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/LazyFileOutputStream.java rename to build-tools/src/main/java/org/elasticsearch/gradle/LazyFileOutputStream.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/LazyPropertyList.java b/build-tools/src/main/java/org/elasticsearch/gradle/LazyPropertyList.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/LazyPropertyList.java rename to build-tools/src/main/java/org/elasticsearch/gradle/LazyPropertyList.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/LazyPropertyMap.java b/build-tools/src/main/java/org/elasticsearch/gradle/LazyPropertyMap.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/LazyPropertyMap.java rename to build-tools/src/main/java/org/elasticsearch/gradle/LazyPropertyMap.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/LoggedExec.java b/build-tools/src/main/java/org/elasticsearch/gradle/LoggedExec.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/LoggedExec.java rename to build-tools/src/main/java/org/elasticsearch/gradle/LoggedExec.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/OS.java b/build-tools/src/main/java/org/elasticsearch/gradle/OS.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/OS.java rename to build-tools/src/main/java/org/elasticsearch/gradle/OS.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/PropertyNormalization.java b/build-tools/src/main/java/org/elasticsearch/gradle/PropertyNormalization.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/PropertyNormalization.java rename to build-tools/src/main/java/org/elasticsearch/gradle/PropertyNormalization.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/ReaperPlugin.java b/build-tools/src/main/java/org/elasticsearch/gradle/ReaperPlugin.java similarity index 92% rename from buildSrc/src/main/java/org/elasticsearch/gradle/ReaperPlugin.java rename to build-tools/src/main/java/org/elasticsearch/gradle/ReaperPlugin.java index 7a81284a2654..a76a79feba0c 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/ReaperPlugin.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/ReaperPlugin.java @@ -20,11 +20,14 @@ import java.io.File; */ public class ReaperPlugin implements Plugin { + /** + * The unique identifier to register the reaper shared service within a gradle build + * */ public static final String REAPER_SERVICE_NAME = "reaper"; private final ProjectLayout projectLayout; @Inject - public ReaperPlugin(ProjectLayout projectLayout) { + ReaperPlugin(ProjectLayout projectLayout) { this.projectLayout = projectLayout; } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/ReaperService.java b/build-tools/src/main/java/org/elasticsearch/gradle/ReaperService.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/ReaperService.java rename to build-tools/src/main/java/org/elasticsearch/gradle/ReaperService.java index 78d7f23c7daa..1b67f9ff6af2 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/ReaperService.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/ReaperService.java @@ -151,6 +151,7 @@ public abstract class ReaperService implements BuildService { + + @Override + public void apply(Project project) { + TaskProvider jarHellTask = createTask(project); + project.getPluginManager().withPlugin( + "lifecycle-base", + p -> project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(jarHellTask)) + ); + } + + private TaskProvider createTask(Project project) { + Configuration jarHellConfig = project.getConfigurations().create("jarHell"); + TaskProvider jarHell = project.getTasks().register("jarHell", JarHellTask.class); + jarHell.configure(t -> { + SourceSet testSourceSet = getJavaTestSourceSet(project); + t.setClasspath(testSourceSet.getRuntimeClasspath()); + t.setJarHellRuntimeClasspath(jarHellConfig); + }); + + return jarHell; + } + + /** + * @param project The project to look for test Java resources. + */ + private static SourceSet getJavaTestSourceSet(Project project) { + return GradleUtils.getJavaSourceSets(project).findByName(SourceSet.TEST_SOURCE_SET_NAME); + } + +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellTask.java b/build-tools/src/main/java/org/elasticsearch/gradle/jarhell/JarHellTask.java similarity index 69% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellTask.java rename to build-tools/src/main/java/org/elasticsearch/gradle/jarhell/JarHellTask.java index c68bda1822f4..cfafab8cd03b 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellTask.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/jarhell/JarHellTask.java @@ -6,42 +6,61 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.jarhell; import org.elasticsearch.gradle.LoggedExec; +import org.gradle.api.DefaultTask; import org.gradle.api.file.FileCollection; +import org.gradle.api.file.ProjectLayout; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.CompileClasspath; +import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; import org.gradle.process.ExecOperations; import javax.inject.Inject; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.StandardOpenOption; /** * Runs CheckJarHell on a classpath. */ @CacheableTask -public class JarHellTask extends PrecommitTask { +public class JarHellTask extends DefaultTask { private FileCollection jarHellRuntimeClasspath; private FileCollection classpath; private ExecOperations execOperations; + private ProjectLayout projectLayout; + @Inject - public JarHellTask(ExecOperations execOperations) { + public JarHellTask(ExecOperations execOperations, ProjectLayout projectLayout) { this.execOperations = execOperations; + this.projectLayout = projectLayout; setDescription("Runs CheckJarHell on the configured classpath"); } + @OutputFile + public File getSuccessMarker() { + return new File(projectLayout.getBuildDirectory().getAsFile().get(), "markers/" + this.getName()); + } + @TaskAction - public void runJarHellCheck() { + public void runJarHellCheck() throws IOException{ LoggedExec.javaexec(execOperations, spec -> { spec.environment("CLASSPATH", getJarHellRuntimeClasspath().plus(getClasspath()).getAsPath()); spec.setMain("org.elasticsearch.bootstrap.JarHell"); }); + writeMarker(); + } + + private void writeMarker() throws IOException { + Files.write(getSuccessMarker().toPath(), new byte[] {}, StandardOpenOption.CREATE); } // We use compile classpath normalization here because class implementation changes are irrelevant for the purposes of jar hell. diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/plugin/PluginBuildPlugin.java b/build-tools/src/main/java/org/elasticsearch/gradle/plugin/PluginBuildPlugin.java similarity index 88% rename from buildSrc/src/main/java/org/elasticsearch/gradle/plugin/PluginBuildPlugin.java rename to build-tools/src/main/java/org/elasticsearch/gradle/plugin/PluginBuildPlugin.java index 2efef63197c3..19a443f8545c 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/plugin/PluginBuildPlugin.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/plugin/PluginBuildPlugin.java @@ -15,7 +15,7 @@ import org.apache.commons.io.IOUtils; import org.elasticsearch.gradle.Version; import org.elasticsearch.gradle.VersionProperties; import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin; -import org.elasticsearch.gradle.precommit.PrecommitTasks; +import org.elasticsearch.gradle.jarhell.JarHellPlugin; import org.elasticsearch.gradle.testclusters.ElasticsearchCluster; import org.elasticsearch.gradle.testclusters.RunTask; import org.elasticsearch.gradle.testclusters.TestClustersPlugin; @@ -43,6 +43,8 @@ import org.gradle.api.tasks.SourceSetContainer; import org.gradle.api.tasks.TaskProvider; import org.gradle.api.tasks.bundling.Zip; import org.gradle.jvm.tasks.Jar; +import org.gradle.api.artifacts.dsl.DependencyHandler; +import org.gradle.api.tasks.SourceSet; import java.io.File; import java.io.IOException; @@ -58,15 +60,15 @@ import java.util.stream.Collectors; public class PluginBuildPlugin implements Plugin { @Override public void apply(final Project project) { - PrecommitTasks.create(project); project.getPluginManager().apply(JavaPlugin.class); project.getPluginManager().apply(TestClustersPlugin.class); project.getPluginManager().apply(CompileOnlyResolvePlugin.class); + project.getPluginManager().apply(JarHellPlugin.class); - var extension = project.getExtensions().create(PLUGIN_EXTENSION_NAME, PluginPropertiesExtension.class, project); + PluginPropertiesExtension extension = project.getExtensions().create(PLUGIN_EXTENSION_NAME, PluginPropertiesExtension.class, project); configureDependencies(project); - final var bundleTask = createBundleTasks(project, extension); + final TaskProvider bundleTask = createBundleTasks(project, extension); project.afterEvaluate(project1 -> { project1.getExtensions().getByType(PluginPropertiesExtension.class).getExtendedPlugins().forEach(pluginName -> { // Auto add dependent modules to the test cluster @@ -75,9 +77,9 @@ public class PluginBuildPlugin implements Plugin { testClusters.all(elasticsearchCluster -> elasticsearchCluster.module(":modules:" + pluginName)); } }); - final var extension1 = project1.getExtensions().getByType(PluginPropertiesExtension.class); + final PluginPropertiesExtension extension1 = project1.getExtensions().getByType(PluginPropertiesExtension.class); configurePublishing(project1, extension1); - var name = extension1.getName(); + String name = extension1.getName(); project1.setProperty("archivesBaseName", name); project1.setDescription(extension1.getDescription()); @@ -114,8 +116,8 @@ public class PluginBuildPlugin implements Plugin { project.getConfigurations().getByName("default").extendsFrom(project.getConfigurations().getByName("runtimeClasspath")); // allow running ES with this plugin in the foreground of a build - var testClusters = testClusters(project, TestClustersPlugin.EXTENSION_NAME); - final var runCluster = testClusters.create("runTask", cluster -> { + NamedDomainObjectContainer testClusters = testClusters(project, TestClustersPlugin.EXTENSION_NAME); + final ElasticsearchCluster runCluster = testClusters.create("runTask", cluster -> { if (GradleUtils.isModuleProject(project.getPath())) { cluster.module(bundleTask.flatMap((Transformer, Zip>) zip -> zip.getArchiveFile())); } else { @@ -156,7 +158,7 @@ public class PluginBuildPlugin implements Plugin { } private static void configureDependencies(final Project project) { - var dependencies = project.getDependencies(); + DependencyHandler dependencies = project.getDependencies(); dependencies.add("compileOnly", "org.elasticsearch:elasticsearch:" + VersionProperties.getElasticsearch()); dependencies.add("testImplementation", "org.elasticsearch.test:framework:" + VersionProperties.getElasticsearch()); @@ -174,11 +176,11 @@ public class PluginBuildPlugin implements Plugin { * metadata, properties, and packaging files */ private static TaskProvider createBundleTasks(final Project project, PluginPropertiesExtension extension) { - final var pluginMetadata = project.file("src/main/plugin-metadata"); - final var templateFile = new File(project.getBuildDir(), "templates/plugin-descriptor.properties"); + final File pluginMetadata = project.file("src/main/plugin-metadata"); + final File templateFile = new File(project.getBuildDir(), "templates/plugin-descriptor.properties"); // create tasks to build the properties file for this plugin - final var copyPluginPropertiesTemplate = project.getTasks().register("copyPluginPropertiesTemplate", new Action() { + final TaskProvider copyPluginPropertiesTemplate = project.getTasks().register("copyPluginPropertiesTemplate", new Action() { @Override public void execute(Task task) { task.getOutputs().file(templateFile); @@ -197,20 +199,20 @@ public class PluginBuildPlugin implements Plugin { }); } }); - final var buildProperties = project.getTasks().register("pluginProperties", Copy.class, copy -> { + final TaskProvider buildProperties = project.getTasks().register("pluginProperties", Copy.class, copy -> { copy.dependsOn(copyPluginPropertiesTemplate); copy.from(templateFile); copy.into(new File(project.getBuildDir(), "generated-resources")); }); // add the plugin properties and metadata to test resources, so unit tests can // know about the plugin (used by test security code to statically initialize the plugin in unit tests) - var testSourceSet = project.getExtensions().getByType(SourceSetContainer.class).getByName("test"); + SourceSet testSourceSet = project.getExtensions().getByType(SourceSetContainer.class).getByName("test"); Map map = Map.of("builtBy", buildProperties); testSourceSet.getOutput().dir(map, new File(project.getBuildDir(), "generated-resources")); testSourceSet.getResources().srcDir(pluginMetadata); // create the actual bundle task, which zips up all the files for the plugin - final var bundle = project.getTasks().register("bundlePlugin", Zip.class, zip -> { + final TaskProvider bundle = project.getTasks().register("bundlePlugin", Zip.class, zip -> { zip.from(buildProperties); zip.from(pluginMetadata, copySpec -> { // metadata (eg custom security policy) diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtension.java b/build-tools/src/main/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtension.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtension.java rename to build-tools/src/main/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtension.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/plugin/PluginType.java b/build-tools/src/main/java/org/elasticsearch/gradle/plugin/PluginType.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/plugin/PluginType.java rename to build-tools/src/main/java/org/elasticsearch/gradle/plugin/PluginType.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/DefaultTestClustersTask.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/DefaultTestClustersTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/DefaultTestClustersTask.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/DefaultTestClustersTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchCluster.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchCluster.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchCluster.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchCluster.java index 8cc1adb5d4b1..51658eea326b 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchCluster.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchCluster.java @@ -8,7 +8,7 @@ package org.elasticsearch.gradle.testclusters; import org.elasticsearch.gradle.FileSupplier; -import org.elasticsearch.gradle.internal.Jdk; +import org.elasticsearch.gradle.Jdk; import org.elasticsearch.gradle.PropertyNormalization; import org.elasticsearch.gradle.ReaperService; import org.gradle.api.Named; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java index f8d12b6eaee4..9f83f43aa7cc 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java @@ -12,7 +12,7 @@ import org.elasticsearch.gradle.Architecture; import org.elasticsearch.gradle.DistributionDownloadPlugin; import org.elasticsearch.gradle.ElasticsearchDistribution; import org.elasticsearch.gradle.FileSupplier; -import org.elasticsearch.gradle.internal.Jdk; +import org.elasticsearch.gradle.Jdk; import org.elasticsearch.gradle.LazyPropertyList; import org.elasticsearch.gradle.LazyPropertyMap; import org.elasticsearch.gradle.distribution.ElasticsearchDistributionTypes; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/RunTask.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/RunTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/RunTask.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/RunTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/StandaloneRestIntegTestTask.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/StandaloneRestIntegTestTask.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/StandaloneRestIntegTestTask.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/StandaloneRestIntegTestTask.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClusterConfiguration.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClusterConfiguration.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClusterConfiguration.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClusterConfiguration.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersAware.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersAware.java similarity index 97% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersAware.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersAware.java index 84385e886823..591c3cac15a1 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersAware.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersAware.java @@ -7,7 +7,7 @@ */ package org.elasticsearch.gradle.testclusters; -import org.elasticsearch.gradle.internal.Jdk; +import org.elasticsearch.gradle.Jdk; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; import org.gradle.api.tasks.Nested; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersException.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersException.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersException.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersException.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java index 84c1320c4bd8..c145b626247f 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java @@ -9,8 +9,8 @@ package org.elasticsearch.gradle.testclusters; import org.elasticsearch.gradle.Architecture; import org.elasticsearch.gradle.DistributionDownloadPlugin; -import org.elasticsearch.gradle.internal.Jdk; -import org.elasticsearch.gradle.internal.JdkDownloadPlugin; +import org.elasticsearch.gradle.Jdk; +import org.elasticsearch.gradle.JdkDownloadPlugin; import org.elasticsearch.gradle.OS; import org.elasticsearch.gradle.ReaperPlugin; import org.elasticsearch.gradle.ReaperService; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersRegistry.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersRegistry.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersRegistry.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersRegistry.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersThrottle.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersThrottle.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersThrottle.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersThrottle.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestDistribution.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestDistribution.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestDistribution.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/TestDistribution.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/WaitForHttpResource.java b/build-tools/src/main/java/org/elasticsearch/gradle/testclusters/WaitForHttpResource.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/WaitForHttpResource.java rename to build-tools/src/main/java/org/elasticsearch/gradle/testclusters/WaitForHttpResource.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/transform/SymbolicLinkPreservingUntarTransform.java b/build-tools/src/main/java/org/elasticsearch/gradle/transform/SymbolicLinkPreservingUntarTransform.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/transform/SymbolicLinkPreservingUntarTransform.java rename to build-tools/src/main/java/org/elasticsearch/gradle/transform/SymbolicLinkPreservingUntarTransform.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/transform/UnpackTransform.java b/build-tools/src/main/java/org/elasticsearch/gradle/transform/UnpackTransform.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/transform/UnpackTransform.java rename to build-tools/src/main/java/org/elasticsearch/gradle/transform/UnpackTransform.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/transform/UnzipTransform.java b/build-tools/src/main/java/org/elasticsearch/gradle/transform/UnzipTransform.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/transform/UnzipTransform.java rename to build-tools/src/main/java/org/elasticsearch/gradle/transform/UnzipTransform.java diff --git a/build-tools/src/main/java/org/elasticsearch/gradle/util/FileUtils.java b/build-tools/src/main/java/org/elasticsearch/gradle/util/FileUtils.java new file mode 100644 index 000000000000..534d28c02c08 --- /dev/null +++ b/build-tools/src/main/java/org/elasticsearch/gradle/util/FileUtils.java @@ -0,0 +1,92 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.util; + +import org.gradle.api.UncheckedIOException; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +public final class FileUtils { + + /** + * Like {@link java.io.File#mkdirs()}, except throws an informative error if a dir cannot be created. + * + * @param dir The dir to create, including any non existent parent dirs. + */ + public static void mkdirs(File dir) { + dir = dir.getAbsoluteFile(); + if (dir.isDirectory()) { + return; + } + + if (dir.exists() && dir.isDirectory() == false) { + throw new UncheckedIOException(String.format("Cannot create directory '%s' as it already exists, but is not a directory", dir)); + } + + List toCreate = new LinkedList(); + File parent = dir.getParentFile(); + while (parent.exists() == false) { + toCreate.add(parent); + parent = parent.getParentFile(); + } + Collections.reverse(toCreate); + for (File parentDirToCreate : toCreate) { + if (parentDirToCreate.isDirectory()) { + continue; + } + File parentDirToCreateParent = parentDirToCreate.getParentFile(); + if (parentDirToCreateParent.isDirectory() == false) { + throw new UncheckedIOException( + String.format( + "Cannot create parent directory '%s' when creating directory '%s' as '%s' is not a directory", + parentDirToCreate, + dir, + parentDirToCreateParent + ) + ); + } + if (parentDirToCreate.mkdir() == false && parentDirToCreate.isDirectory() == false) { + throw new UncheckedIOException( + String.format("Failed to create parent directory '%s' when creating directory '%s'", parentDirToCreate, dir) + ); + } + } + if (dir.mkdir() == false && dir.isDirectory() == false) { + throw new UncheckedIOException(String.format("Failed to create directory '%s'", dir)); + } + } + + public static String read(File file, String encoding) { + try { + return org.apache.commons.io.FileUtils.readFileToString(file, encoding); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public static List readLines(File file, String encoding) { + try { + return org.apache.commons.io.FileUtils.readLines(file, encoding); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public static void write(File outputFile, CharSequence content, String encoding) { + try { + org.apache.commons.io.FileUtils.write(outputFile, content, encoding); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/util/GradleUtils.java b/build-tools/src/main/java/org/elasticsearch/gradle/util/GradleUtils.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/util/GradleUtils.java rename to build-tools/src/main/java/org/elasticsearch/gradle/util/GradleUtils.java index e9b24136e78f..e9d462dfff10 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/util/GradleUtils.java +++ b/build-tools/src/main/java/org/elasticsearch/gradle/util/GradleUtils.java @@ -7,11 +7,11 @@ */ package org.elasticsearch.gradle.util; -import org.elasticsearch.gradle.internal.ElasticsearchJavaPlugin; import org.gradle.api.Action; import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.Task; +import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.UnknownTaskException; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.Dependency; @@ -107,7 +107,7 @@ public abstract class GradleUtils { * @return A task provider for the newly created test task */ public static TaskProvider addTestSourceSet(Project project, String sourceSetName) { - project.getPluginManager().apply(ElasticsearchJavaPlugin.class); + project.getPluginManager().apply(JavaPlugin.class); // create our test source set and task SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/util/Pair.java b/build-tools/src/main/java/org/elasticsearch/gradle/util/Pair.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/util/Pair.java rename to build-tools/src/main/java/org/elasticsearch/gradle/util/Pair.java diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/util/PermissionUtils.java b/build-tools/src/main/java/org/elasticsearch/gradle/util/PermissionUtils.java similarity index 100% rename from buildSrc/src/main/java/org/elasticsearch/gradle/util/PermissionUtils.java rename to build-tools/src/main/java/org/elasticsearch/gradle/util/PermissionUtils.java diff --git a/build-tools/src/main/resources/plugin-descriptor.properties b/build-tools/src/main/resources/plugin-descriptor.properties new file mode 100644 index 000000000000..e313c0f4692d --- /dev/null +++ b/build-tools/src/main/resources/plugin-descriptor.properties @@ -0,0 +1,63 @@ +# Elasticsearch plugin descriptor file +# This file must exist as 'plugin-descriptor.properties' inside a plugin. +# +### example plugin for "foo" +# +# foo.zip <-- zip file for the plugin, with this structure: +# |____ .jar <-- classes, resources, dependencies +# |____ .jar <-- any number of jars +# |____ plugin-descriptor.properties <-- example contents below: +# +# classname=foo.bar.BazPlugin +# description=My cool plugin +# version=6.0 +# elasticsearch.version=6.0 +# java.version=1.8 +# +### mandatory elements for all plugins: +# +# 'type': the type of this plugin. 'isolated' indicated a typical sandboxed plugin, +# whereas 'bootstrap' indicates a plugin whose jars are added to the JVM's boot +# classpath. +type=${type} +# +# 'description': simple summary of the plugin +description=${description} +# +# 'version': plugin's version +version=${version} +# +# 'name': the plugin name +name=${name} +<% if (type != "bootstrap") { %> +# +# 'classname': the name of the class to load, fully-qualified. Only applies to +# "isolated" plugins +classname=${classname} +<% } %> +# +# 'java.version': version of java the code is built against +# use the system property java.specification.version +# version string must be a sequence of nonnegative decimal integers +# separated by "."'s and may have leading zeros +java.version=${javaVersion} +# +# 'elasticsearch.version': version of elasticsearch compiled against +elasticsearch.version=${elasticsearchVersion} +### optional elements for plugins: +# +# 'extended.plugins': other plugins this plugin extends through SPI +extended.plugins=${extendedPlugins} +# +# 'has.native.controller': whether or not the plugin has a native controller +has.native.controller=${hasNativeController} +<% if (type == "bootstrap") { %> +# +# 'java.opts': any additional command line parameters to pass to the JVM when +# Elasticsearch starts. Only applies to "bootstrap" plugins. +java.opts=${javaOpts} +<% } %> +<% if (licensed) { %> +# This plugin requires that a license agreement be accepted before installation +licensed=${licensed} +<% } %> diff --git a/build-tools/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginTests.java b/build-tools/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginTests.java new file mode 100644 index 000000000000..389d18ed6f29 --- /dev/null +++ b/build-tools/src/test/java/org/elasticsearch/gradle/DistributionDownloadPluginTests.java @@ -0,0 +1,170 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle; + +import org.elasticsearch.gradle.internal.test.GradleUnitTestCase; +import org.elasticsearch.gradle.ElasticsearchDistribution.Platform; +import org.elasticsearch.gradle.distribution.ElasticsearchDistributionTypes; +import org.gradle.api.Project; +import org.gradle.testfixtures.ProjectBuilder; +import org.gradle.api.NamedDomainObjectContainer; + +import java.io.File; + +import static org.hamcrest.core.StringContains.containsString; + +public class DistributionDownloadPluginTests extends GradleUnitTestCase { + + protected static Project rootProject; + + public void testVersionDefault() { + ElasticsearchDistribution distro = checkDistro( + createProject(), + "testdistro", + null, + ElasticsearchDistributionTypes.ARCHIVE, + Platform.LINUX, + true + ); + assertEquals(distro.getVersion(), VersionProperties.getElasticsearch()); + } + + public void testBadVersionFormat() { + assertDistroError( + createProject(), + "testdistro", + "badversion", + ElasticsearchDistributionTypes.ARCHIVE, + Platform.LINUX, + true, + "Invalid version format: 'badversion'" + ); + } + + public void testTypeDefault() { + ElasticsearchDistribution distro = checkDistro(createProject(), "testdistro", "5.0.0", null, Platform.LINUX, true); + assertEquals(distro.getType(), ElasticsearchDistributionTypes.ARCHIVE); + } + + public void testPlatformDefault() { + ElasticsearchDistribution distro = checkDistro( + createProject(), + "testdistro", + "5.0.0", + ElasticsearchDistributionTypes.ARCHIVE, + null, + true + ); + assertEquals(distro.getPlatform(), ElasticsearchDistribution.CURRENT_PLATFORM); + } + + public void testPlatformForIntegTest() { + assertDistroError( + createProject(), + "testdistro", + "5.0.0", + ElasticsearchDistributionTypes.INTEG_TEST_ZIP, + Platform.LINUX, + null, + "platform cannot be set on elasticsearch distribution [testdistro]" + ); + } + + public void testBundledJdkDefault() { + ElasticsearchDistribution distro = checkDistro( + createProject(), + "testdistro", + "5.0.0", + ElasticsearchDistributionTypes.ARCHIVE, + Platform.LINUX, + true + ); + assertTrue(distro.getBundledJdk()); + } + + public void testBundledJdkForIntegTest() { + assertDistroError( + createProject(), + "testdistro", + "5.0.0", + ElasticsearchDistributionTypes.INTEG_TEST_ZIP, + null, + true, + "bundledJdk cannot be set on elasticsearch distribution [testdistro]" + ); + } + + private void assertDistroError( + Project project, + String name, + String version, + ElasticsearchDistributionType type, + Platform platform, + Boolean bundledJdk, + String message + ) { + IllegalArgumentException e = expectThrows( + IllegalArgumentException.class, + () -> checkDistro(project, name, version, type, platform, bundledJdk) + ); + assertThat(e.getMessage(), containsString(message)); + } + + // create a distro and finalize its configuration + private ElasticsearchDistribution checkDistro( + Project project, + String name, + String version, + ElasticsearchDistributionType type, + Platform platform, + Boolean bundledJdk + ) { + ElasticsearchDistribution distribution = createDistro(project, name, version, type, platform, bundledJdk); + distribution.finalizeValues(); + return distribution; + } + + + protected ElasticsearchDistribution createDistro( + Project project, + String name, + String version, + ElasticsearchDistributionType type, + ElasticsearchDistribution.Platform platform, + Boolean bundledJdk + ) { + NamedDomainObjectContainer distros = DistributionDownloadPlugin.getContainer(project); + return distros.create(name, distro -> { + if (version != null) { + distro.setVersion(version); + } + if (type != null) { + distro.setType(type); + } + if (platform != null) { + distro.setPlatform(platform); + } + if (bundledJdk != null) { + distro.setBundledJdk(bundledJdk); + } + }).maybeFreeze(); + } + + protected Project createProject() { + rootProject = ProjectBuilder.builder().build(); +// Project distributionProject = ProjectBuilder.builder().withParent(rootProject).withName("distribution").build(); +// archivesProject = ProjectBuilder.builder().withParent(distributionProject).withName("archives").build(); +// packagesProject = ProjectBuilder.builder().withParent(distributionProject).withName("packages").build(); +// bwcProject = ProjectBuilder.builder().withParent(distributionProject).withName("bwc").build(); + Project project = ProjectBuilder.builder().withParent(rootProject).build(); + project.getPlugins().apply("elasticsearch.distribution-download"); + return project; + } + +} diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/JdkDownloadPluginTests.java b/build-tools/src/test/java/org/elasticsearch/gradle/JdkDownloadPluginTests.java similarity index 99% rename from buildSrc/src/test/java/org/elasticsearch/gradle/internal/JdkDownloadPluginTests.java rename to build-tools/src/test/java/org/elasticsearch/gradle/JdkDownloadPluginTests.java index 35e2b42b4bba..97ac0a044b3a 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/internal/JdkDownloadPluginTests.java +++ b/build-tools/src/test/java/org/elasticsearch/gradle/JdkDownloadPluginTests.java @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -package org.elasticsearch.gradle.internal; +package org.elasticsearch.gradle; import org.elasticsearch.gradle.internal.test.GradleUnitTestCase; import org.gradle.api.NamedDomainObjectContainer; diff --git a/build-tools/src/test/java/org/elasticsearch/gradle/VersionTests.java b/build-tools/src/test/java/org/elasticsearch/gradle/VersionTests.java new file mode 100644 index 000000000000..37aa5cf9d21d --- /dev/null +++ b/build-tools/src/test/java/org/elasticsearch/gradle/VersionTests.java @@ -0,0 +1,115 @@ +package org.elasticsearch.gradle; + +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import org.elasticsearch.gradle.internal.test.GradleUnitTestCase; +import org.junit.Rule; +import org.junit.rules.ExpectedException; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +public class VersionTests extends GradleUnitTestCase { + + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + + public void testVersionParsing() { + assertVersionEquals("7.0.1", 7, 0, 1); + assertVersionEquals("7.0.1-alpha2", 7, 0, 1); + assertVersionEquals("5.1.2-rc3", 5, 1, 2); + assertVersionEquals("6.1.2-SNAPSHOT", 6, 1, 2); + assertVersionEquals("6.1.2-beta1-SNAPSHOT", 6, 1, 2); + assertVersionEquals("17.03.11", 17, 3, 11); + } + + public void testRelaxedVersionParsing() { + assertVersionEquals("6.1.2", 6, 1, 2, Version.Mode.RELAXED); + assertVersionEquals("6.1.2-SNAPSHOT", 6, 1, 2, Version.Mode.RELAXED); + assertVersionEquals("6.1.2-beta1-SNAPSHOT", 6, 1, 2, Version.Mode.RELAXED); + assertVersionEquals("6.1.2-foo", 6, 1, 2, Version.Mode.RELAXED); + assertVersionEquals("6.1.2-foo-bar", 6, 1, 2, Version.Mode.RELAXED); + assertVersionEquals("16.01.22", 16, 1, 22, Version.Mode.RELAXED); + } + + public void testCompareWithStringVersions() { + assertTrue("1.10.20 is not interpreted as before 2.0.0", Version.fromString("1.10.20").before("2.0.0")); + assertTrue( + "7.0.0-alpha1 should be equal to 7.0.0-alpha1", + Version.fromString("7.0.0-alpha1").equals(Version.fromString("7.0.0-alpha1")) + ); + assertTrue( + "7.0.0-SNAPSHOT should be equal to 7.0.0-SNAPSHOT", + Version.fromString("7.0.0-SNAPSHOT").equals(Version.fromString("7.0.0-SNAPSHOT")) + ); + } + + public void testCollections() { + assertTrue( + Arrays.asList( + Version.fromString("5.2.0"), + Version.fromString("5.2.1-SNAPSHOT"), + Version.fromString("6.0.0"), + Version.fromString("6.0.1"), + Version.fromString("6.1.0") + ).containsAll(Arrays.asList(Version.fromString("6.0.1"), Version.fromString("5.2.1-SNAPSHOT"))) + ); + Set versions = new HashSet<>(); + versions.addAll( + Arrays.asList( + Version.fromString("5.2.0"), + Version.fromString("5.2.1-SNAPSHOT"), + Version.fromString("6.0.0"), + Version.fromString("6.0.1"), + Version.fromString("6.1.0") + ) + ); + Set subset = new HashSet<>(); + subset.addAll(Arrays.asList(Version.fromString("6.0.1"), Version.fromString("5.2.1-SNAPSHOT"))); + assertTrue(versions.containsAll(subset)); + } + + public void testToString() { + assertEquals("7.0.1", new Version(7, 0, 1).toString()); + } + + public void testCompareVersions() { + assertEquals(0, new Version(7, 0, 0).compareTo(new Version(7, 0, 0))); + assertOrder(Version.fromString("19.0.1"), Version.fromString("20.0.3")); + } + + public void testExceptionEmpty() { + expectedEx.expect(IllegalArgumentException.class); + expectedEx.expectMessage("Invalid version format"); + Version.fromString(""); + } + + public void testExceptionSyntax() { + expectedEx.expect(IllegalArgumentException.class); + expectedEx.expectMessage("Invalid version format"); + Version.fromString("foo.bar.baz"); + } + + private void assertOrder(Version smaller, Version bigger) { + assertEquals(smaller + " should be smaller than " + bigger, -1, smaller.compareTo(bigger)); + } + + private void assertVersionEquals(String stringVersion, int major, int minor, int revision) { + assertVersionEquals(stringVersion, major, minor, revision, Version.Mode.STRICT); + } + + private void assertVersionEquals(String stringVersion, int major, int minor, int revision, Version.Mode mode) { + Version version = Version.fromString(stringVersion, mode); + assertEquals(major, version.getMajor()); + assertEquals(minor, version.getMinor()); + assertEquals(revision, version.getRevision()); + } + +} diff --git a/build-tools/src/test/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtensionTests.java b/build-tools/src/test/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtensionTests.java new file mode 100644 index 000000000000..cbb3d4eb1183 --- /dev/null +++ b/build-tools/src/test/java/org/elasticsearch/gradle/plugin/PluginPropertiesExtensionTests.java @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.plugin; + +import org.elasticsearch.gradle.internal.test.GradleUnitTestCase; +import org.gradle.api.Project; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.testfixtures.ProjectBuilder; + +public class PluginPropertiesExtensionTests extends GradleUnitTestCase { + + public void testCreatingPluginPropertiesExtensionWithNameAndVersion() { + String projectName = "Test"; + String projectVersion = "5.0"; + + PluginPropertiesExtension pluginPropertiesExtension = new PluginPropertiesExtension( + this.createProject(projectName, projectVersion) + ); + + assertEquals(projectName, pluginPropertiesExtension.getName()); + assertEquals(projectVersion, pluginPropertiesExtension.getVersion()); + } + + public void testCreatingPluginPropertiesExtensionWithNameWithoutVersion() { + String projectName = "Test"; + + PluginPropertiesExtension pluginPropertiesExtension = new PluginPropertiesExtension(this.createProject(projectName, null)); + + assertEquals(projectName, pluginPropertiesExtension.getName()); + assertEquals("unspecified", pluginPropertiesExtension.getVersion()); + } + + private Project createProject(String projectName, String version) { + Project project = ProjectBuilder.builder().withName(projectName).build(); + project.setVersion(version); + + project.getPlugins().apply(JavaPlugin.class); + + return project; + } +} diff --git a/build-tools/src/test/java/org/elasticsearch/gradle/testclusters/WaitForHttpResourceTests.java b/build-tools/src/test/java/org/elasticsearch/gradle/testclusters/WaitForHttpResourceTests.java new file mode 100644 index 000000000000..a94eca15d1c8 --- /dev/null +++ b/build-tools/src/test/java/org/elasticsearch/gradle/testclusters/WaitForHttpResourceTests.java @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.testclusters; + +import org.elasticsearch.gradle.internal.test.GradleUnitTestCase; + +import java.net.URL; +import java.nio.file.Paths; +import java.security.KeyStore; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.notNullValue; + +public class WaitForHttpResourceTests extends GradleUnitTestCase { + + public void testBuildTrustStoreFromFile() throws Exception { + final WaitForHttpResource http = new WaitForHttpResource(new URL("https://localhost/")); + final URL ca = getClass().getResource("/ca.p12"); + assertThat(ca, notNullValue()); + http.setTrustStoreFile(Paths.get(ca.toURI()).toFile()); + http.setTrustStorePassword("password"); + final KeyStore store = http.buildTrustStore(); + final Certificate certificate = store.getCertificate("ca"); + assertThat(certificate, notNullValue()); + assertThat(certificate, instanceOf(X509Certificate.class)); + assertThat(((X509Certificate) certificate).getSubjectDN().toString(), equalTo("CN=Elastic Certificate Tool Autogenerated CA")); + } + + public void testBuildTrustStoreFromCA() throws Exception { + final WaitForHttpResource http = new WaitForHttpResource(new URL("https://localhost/")); + final URL ca = getClass().getResource("/ca.pem"); + assertThat(ca, notNullValue()); + http.setCertificateAuthorities(Paths.get(ca.toURI()).toFile()); + final KeyStore store = http.buildTrustStore(); + final Certificate certificate = store.getCertificate("cert-0"); + assertThat(certificate, notNullValue()); + assertThat(certificate, instanceOf(X509Certificate.class)); + assertThat(((X509Certificate) certificate).getSubjectDN().toString(), equalTo("CN=Elastic Certificate Tool Autogenerated CA")); + } +} diff --git a/build-tools/src/test/resources/ca.p12 b/build-tools/src/test/resources/ca.p12 new file mode 100644 index 000000000000..cc44494515b9 Binary files /dev/null and b/build-tools/src/test/resources/ca.p12 differ diff --git a/build-tools/src/test/resources/ca.pem b/build-tools/src/test/resources/ca.pem new file mode 100644 index 000000000000..8dda1767e483 --- /dev/null +++ b/build-tools/src/test/resources/ca.pem @@ -0,0 +1,25 @@ +Bag Attributes + friendlyName: ca + localKeyID: 54 69 6D 65 20 31 35 35 33 37 34 33 38 39 30 38 33 35 +subject=/CN=Elastic Certificate Tool Autogenerated CA +issuer=/CN=Elastic Certificate Tool Autogenerated CA +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIVAMQMmDRcXfXLaTp6ep1H8rC3tOrwMA0GCSqGSIb3DQEB +CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu +ZXJhdGVkIENBMB4XDTE5MDMyODAzMzEyNloXDTIyMDMyNzAzMzEyNlowNDEyMDAG +A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDT73N6JZeBPyzahc0aNcra +BpUROVGB9wXQqf8JeU4GtH+1qfqUKYKUJTe/DZWc+5Qz1WAKGZEvBySAlgbuncuq +VpLzWxpEui1vRW8JB3gjZgeY3vfErrEWWr95YM0e8rWu4AoAchzqsrG0/+po2eui +cN+8hI6jRKiBv/ZeQqja6KZ8y4Wt4VaNVL53+I7+eWA/aposu6/piUg2wZ/FNhVK +hypcJwDdp3fQaugtPj3y76303jTRgutgd3rtWFuy3MCDLfs3mSQUjO10s93zwLdC +XokyIywijS5CpO8mEuDRu9rb5J1DzwUpUfk+GMObb6rHjFKzSqnM3s+nasypQQ9L +AgMBAAGjUzBRMB0GA1UdDgQWBBQZEW88R95zSzO2tLseEWgI7ugvLzAfBgNVHSME +GDAWgBQZEW88R95zSzO2tLseEWgI7ugvLzAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBCwUAA4IBAQBEJN0UbL77usVnzIvxKa3GpLBgJQAZtD1ifZppC4w46Bul +1G7Fdc+XMbzZlI4K6cWEdd5dfEssKA8btEtRzdNOqgggBpqrUU0mNlQ+vC22XORU +ykHAu2TsRwoHmuxkd9Et/QyuTFXR4fTiU8rsJuLFOgn+RdEblA0J0gJeIqdWI5Z1 +z13OyZEl6BCQFyrntu2eERxaHEfsJOSBZE4RcecnLNGhIJBXE0Pk4iTiViJF/h7d ++kUUegKx0qewZif2eEZgrz12Vuen9a6bh2i2pNS95vABVVMr8uB+J1BGkNA5YT7J +qtZA2tN//Evng7YDiR+KkB1kvXVZVIi2WPDLD/zu +-----END CERTIFICATE----- diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy b/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy similarity index 96% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy rename to build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy index 27677f6894ec..69ba96c49a82 100644 --- a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy +++ b/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/AbstractGradleFuncTest.groovy @@ -8,6 +8,7 @@ package org.elasticsearch.gradle.fixtures +import org.elasticsearch.gradle.internal.test.InternalAwareGradleRunner import org.gradle.testkit.runner.GradleRunner import org.junit.Rule import org.junit.rules.TemporaryFolder @@ -45,12 +46,12 @@ abstract class AbstractGradleFuncTest extends Specification { } GradleRunner gradleRunner(File projectDir, String... arguments) { - GradleRunner.create() + new InternalAwareGradleRunner(GradleRunner.create() .withDebug(ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-agentlib:jdwp") > 0) .withProjectDir(projectDir) - .withArguments(arguments) .withPluginClasspath() .forwardOutput() + ).withArguments(arguments) } def assertOutputContains(String givenOutput, String expected) { @@ -132,4 +133,4 @@ abstract class AbstractGradleFuncTest extends Specification { System.err.println("Syserr: " + proc.errorStream.text) } } -} +} \ No newline at end of file diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/DistributionDownloadFixture.groovy b/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/DistributionDownloadFixture.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/DistributionDownloadFixture.groovy rename to build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/DistributionDownloadFixture.groovy diff --git a/buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/WiremockFixture.groovy b/build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/WiremockFixture.groovy similarity index 100% rename from buildSrc/src/integTest/groovy/org/elasticsearch/gradle/fixtures/WiremockFixture.groovy rename to build-tools/src/testFixtures/groovy/org/elasticsearch/gradle/fixtures/WiremockFixture.groovy diff --git a/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/BaseTestCase.java b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/BaseTestCase.java similarity index 100% rename from buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/BaseTestCase.java rename to build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/BaseTestCase.java diff --git a/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleIntegrationTestCase.java b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleIntegrationTestCase.java similarity index 98% rename from buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleIntegrationTestCase.java rename to build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleIntegrationTestCase.java index b98468073f7a..58760d72c1c8 100644 --- a/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleIntegrationTestCase.java +++ b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleIntegrationTestCase.java @@ -63,15 +63,14 @@ public abstract class GradleIntegrationTestCase extends GradleUnitTestCase { File testkit; try { testkit = testkitTmpDir.newFolder(); - } catch (IOException e) { throw new UncheckedIOException(e); } - return GradleRunner.create() + return new InternalAwareGradleRunner(GradleRunner.create() .withProjectDir(getProjectDir()) .withPluginClasspath() .withTestKitDir(testkit) - .withDebug(ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-agentlib:jdwp") > 0); + .withDebug(ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-agentlib:jdwp") > 0)); } protected File getBuildDir(String name) { @@ -219,4 +218,5 @@ public abstract class GradleIntegrationTestCase extends GradleUnitTestCase { } } } + } diff --git a/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleThreadsFilter.java b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleThreadsFilter.java similarity index 100% rename from buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleThreadsFilter.java rename to build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleThreadsFilter.java diff --git a/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleUnitTestCase.java b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleUnitTestCase.java similarity index 100% rename from buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleUnitTestCase.java rename to build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/GradleUnitTestCase.java diff --git a/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/InternalAwareGradleRunner.java b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/InternalAwareGradleRunner.java new file mode 100644 index 000000000000..789780511c73 --- /dev/null +++ b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/InternalAwareGradleRunner.java @@ -0,0 +1,141 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +package org.elasticsearch.gradle.internal.test; + +import org.gradle.testkit.runner.BuildResult; +import org.gradle.testkit.runner.GradleRunner; +import org.gradle.testkit.runner.InvalidPluginMetadataException; +import org.gradle.testkit.runner.InvalidRunnerConfigurationException; +import org.gradle.testkit.runner.UnexpectedBuildFailure; +import org.gradle.testkit.runner.UnexpectedBuildSuccess; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.io.Writer; +import java.net.URI; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class InternalAwareGradleRunner extends GradleRunner { + private GradleRunner delegate; + + public InternalAwareGradleRunner(GradleRunner delegate) { + this.delegate = delegate; + } + + @Override + public GradleRunner withGradleVersion(String gradleVersion) { + return delegate.withGradleVersion(gradleVersion); + } + + @Override + public GradleRunner withGradleInstallation(File file) { + return delegate.withGradleInstallation(file); + } + + @Override + public GradleRunner withGradleDistribution(URI uri) { + return delegate.withGradleDistribution(uri); + } + + @Override + public GradleRunner withTestKitDir(File file) { + return delegate.withTestKitDir(file); + } + + @Override + public File getProjectDir() { + return delegate.getProjectDir(); + } + + @Override + public GradleRunner withProjectDir(File projectDir) { + return delegate.withProjectDir(projectDir); + } + + @Override + public List getArguments() { + return delegate.getArguments(); + } + + @Override + public GradleRunner withArguments(List arguments) { + List collect = Stream.concat(arguments.stream(), Stream.of("-Dtest.external=true")) + .collect(Collectors.toList()); + return delegate.withArguments(collect); + } + + @Override + public GradleRunner withArguments(String... arguments) { + return withArguments(List.of(arguments)); + } + + @Override + public List getPluginClasspath() { + return delegate.getPluginClasspath(); + } + + @Override + public GradleRunner withPluginClasspath() throws InvalidPluginMetadataException { + return delegate.withPluginClasspath(); + } + + @Override + public GradleRunner withPluginClasspath(Iterable iterable) { + return delegate.withPluginClasspath(iterable); + } + + @Override + public boolean isDebug() { + return delegate.isDebug(); + } + + @Override + public GradleRunner withDebug(boolean b) { + return delegate.withDebug(b); + } + + @Nullable + @Override + public Map getEnvironment() { + return delegate.getEnvironment(); + } + + @Override + public GradleRunner withEnvironment(@Nullable Map map) { + return delegate.withEnvironment(map); + } + + @Override + public GradleRunner forwardStdOutput(Writer writer) { + return delegate.forwardStdOutput(writer); + } + + @Override + public GradleRunner forwardStdError(Writer writer) { + return delegate.forwardStdOutput(writer); + } + + @Override + public GradleRunner forwardOutput() { + return delegate.forwardOutput(); + } + + @Override + public BuildResult build() throws InvalidRunnerConfigurationException, UnexpectedBuildFailure { + return delegate.build(); + } + + @Override + public BuildResult buildAndFail() throws InvalidRunnerConfigurationException, UnexpectedBuildSuccess { + return delegate.buildAndFail(); + } +} diff --git a/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/JUnit3MethodProvider.java b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/JUnit3MethodProvider.java similarity index 100% rename from buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/JUnit3MethodProvider.java rename to build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/JUnit3MethodProvider.java diff --git a/buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/TestClasspathUtils.java b/build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/TestClasspathUtils.java similarity index 100% rename from buildSrc/src/testFixtures/java/org/elasticsearch/gradle/internal/test/TestClasspathUtils.java rename to build-tools/src/testFixtures/java/org/elasticsearch/gradle/internal/test/TestClasspathUtils.java diff --git a/build-tools/src/testKit/reaper/build.gradle b/build-tools/src/testKit/reaper/build.gradle new file mode 100644 index 000000000000..26e47aa9862e --- /dev/null +++ b/build-tools/src/testKit/reaper/build.gradle @@ -0,0 +1,15 @@ +plugins { + id 'elasticsearch.reaper' +} + +import org.elasticsearch.gradle.ReaperPlugin; +import org.elasticsearch.gradle.util.GradleUtils; + +tasks.register("launchReaper") { + doLast { + def serviceProvider = GradleUtils.getBuildService(project.getGradle().getSharedServices(), ReaperPlugin.REAPER_SERVICE_NAME); + def reaper = serviceProvider.get() + reaper.registerCommand('test', 'true') + reaper.unregister('test') + } +} diff --git a/build-tools/src/testKit/reaper/gradle.properties b/build-tools/src/testKit/reaper/gradle.properties new file mode 100644 index 000000000000..a9aca06ec7a7 --- /dev/null +++ b/build-tools/src/testKit/reaper/gradle.properties @@ -0,0 +1,11 @@ +# +# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +# or more contributor license agreements. Licensed under the Elastic License +# 2.0 and the Server Side Public License, v 1; you may not use this file except +# in compliance with, at your election, the Elastic License 2.0 or the Server +# Side Public License, v 1. +# + +# java homes resolved by environment variables +org.gradle.java.installations.auto-detect=false +org.gradle.java.installations.fromEnv=JAVA_HOME,RUNTIME_JAVA_HOME,JAVA15_HOME,JAVA14_HOME,JAVA13_HOME,JAVA12_HOME,JAVA11_HOME,JAVA8_HOME diff --git a/build-tools/src/testKit/reaper/settings.gradle b/build-tools/src/testKit/reaper/settings.gradle new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/build.gradle b/build.gradle index d369f6042726..59c4209c18b0 100644 --- a/build.gradle +++ b/build.gradle @@ -59,55 +59,12 @@ if (VersionProperties.elasticsearch.toString().endsWith('-SNAPSHOT')) { } else { licenseCommit = "v${version}" } -String elasticLicenseUrl = "https://raw.githubusercontent.com/elastic/elasticsearch/${licenseCommit}/licenses/ELASTIC-LICENSE-2.0.txt" subprojects { // We disable this plugin for now till we shaked out the issues we see // e.g. see https://github.com/elastic/elasticsearch/issues/72169 // apply plugin:'elasticsearch.internal-test-rerun' - // Default to the SSPL+Elastic dual license - project.ext.projectLicenses = [ - 'Server Side Public License, v 1': 'https://www.mongodb.com/licensing/server-side-public-license', - 'Elastic License 2.0': elasticLicenseUrl - ] - - // But stick the Elastic license url in project.ext so we can get it if we need to switch to it - project.ext.elasticLicenseUrl = elasticLicenseUrl - - // we only use maven publish to add tasks for pom generation - plugins.withType(MavenPublishPlugin).whenPluginAdded { - publishing { - publications { - // add license information to generated poms - all { - pom.withXml { XmlProvider xml -> - Node node = xml.asNode() - node.appendNode('inceptionYear', '2009') - - Node licensesNode = node.appendNode('licenses') - project.ext.projectLicenses.forEach { licenseName, licenseUrl -> - Node license = licensesNode.appendNode('license') - license.appendNode('name', licenseName) - license.appendNode('url', licenseUrl) - license.appendNode('distribution', 'repo') - } - - Node developer = node.appendNode('developers').appendNode('developer') - developer.appendNode('name', 'Elastic') - developer.appendNode('url', 'https://www.elastic.co') - } - } - } - repositories { - maven { - name = 'test' - url = "${rootProject.buildDir}/local-test-repo" - } - } - } - } - plugins.withType(BuildPlugin).whenPluginAdded { project.licenseFile = project.rootProject.file('licenses/SSPL-1.0+ELASTIC-LICENSE-2.0.txt') project.noticeFile = project.rootProject.file('NOTICE.txt') @@ -415,9 +372,9 @@ allprojects { prefix = prefix.replace(':', '_') } if (eclipse.project.name.startsWith(prefix)) { - licenseHeaderFile = new File(project.rootDir, 'buildSrc/src/main/resources/license-headers/elastic-license-2.0-header.txt') + licenseHeaderFile = new File(project.rootDir, 'build-tools-internal/src/main/resources/license-headers/elastic-license-2.0-header.txt') } else { - licenseHeaderFile = new File(project.rootDir, 'buildSrc/src/main/resources/license-headers/sspl+elastic-license-header.txt') + licenseHeaderFile = new File(project.rootDir, 'build-tools-internal/src/main/resources/license-headers/sspl+elastic-license-header.txt') } String lineSeparator = Os.isFamily(Os.FAMILY_WINDOWS) ? '\\\\r\\\\n' : '\\\\n' @@ -425,7 +382,7 @@ allprojects { tasks.register('copyEclipseSettings', Copy) { mustRunAfter 'wipeEclipseSettings' // TODO: "package this up" for external builds - from new File(project.rootDir, 'buildSrc/src/main/resources/eclipse.settings') + from new File(project.rootDir, 'build-tools-internal/src/main/resources/eclipse.settings') into '.settings' filter { it.replaceAll('@@LICENSE_HEADER_TEXT@@', licenseHeader) } } @@ -529,6 +486,21 @@ allprojects { } } + +tasks.register("precommit") { + dependsOn gradle.includedBuild('build-tools').task(':precommit') + dependsOn gradle.includedBuild('build-tools-internal').task(':precommit') +} + +tasks.named("checkPart1").configure { + dependsOn gradle.includedBuild('build-tools').task(':check') + dependsOn gradle.includedBuild('build-tools-internal').task(':check') +} + +tasks.named("assemble").configure { + dependsOn gradle.includedBuild('build-tools').task(':assemble') +} + subprojects { project.ext.disableTasks = { String... tasknames -> for (String taskname : tasknames) { diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle deleted file mode 100644 index bb1046b67dc5..000000000000 --- a/buildSrc/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include 'reaper' diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellPrecommitPlugin.java deleted file mode 100644 index 1236c8b1c5f1..000000000000 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellPrecommitPlugin.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -package org.elasticsearch.gradle.precommit; - -import org.elasticsearch.gradle.internal.util.Util; -import org.gradle.api.Project; -import org.gradle.api.Task; -import org.gradle.api.artifacts.Configuration; -import org.gradle.api.tasks.SourceSet; -import org.gradle.api.tasks.TaskProvider; - -public class JarHellPrecommitPlugin extends PrecommitPlugin { - @Override - public TaskProvider createTask(Project project) { - Configuration jarHellConfig = project.getConfigurations().create("jarHell"); - TaskProvider jarHell = project.getTasks().register("jarHell", JarHellTask.class); - jarHell.configure(t -> { - SourceSet testSourceSet = Util.getJavaTestSourceSet(project).get(); - t.setClasspath(testSourceSet.getRuntimeClasspath()); - t.setJarHellRuntimeClasspath(jarHellConfig); - }); - - return jarHell; - } -} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTasks.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTasks.java deleted file mode 100644 index 3d41896ad5a7..000000000000 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTasks.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -package org.elasticsearch.gradle.precommit; - -import org.gradle.api.Project; - -/** - * Validation tasks which should be run before committing. These run before tests. - */ -public class PrecommitTasks { - /** - * Adds a precommit task, which depends on non-test verification tasks. - */ - public static void create(Project project) { - project.getPluginManager().apply(JarHellPrecommitPlugin.class); - } -} diff --git a/buildSrc/version.properties b/buildSrc/version.properties index fb96a8a26a96..ca97b0d3a36d 100644 --- a/buildSrc/version.properties +++ b/buildSrc/version.properties @@ -4,13 +4,13 @@ lucene = 8.9.0-snapshot-ddc238e5df8 bundled_jdk_vendor = adoptopenjdk bundled_jdk = 16.0.1+9 -checkstyle = 8.42 +checkstyle = 8.39 # optional dependencies spatial4j = 0.7 jts = 1.15.0 -jackson = 2.12.2 -snakeyaml = 1.27 +jackson = 2.10.4 +snakeyaml = 1.26 icu4j = 62.1 supercsv = 2.4.0 # when updating log4j, please update also docs/java-api/index.asciidoc @@ -20,7 +20,7 @@ slf4j = 1.6.2 # when updating the JNA version, also update the version in buildSrc/build.gradle jna = 5.7.0-1 -netty = 4.1.63.Final +netty = 4.1.49.Final joda = 2.10.10 commons_lang3 = 3.9 diff --git a/client/rest-high-level/build.gradle b/client/rest-high-level/build.gradle index 68ccae571d60..48e772f08ea5 100644 --- a/client/rest-high-level/build.gradle +++ b/client/rest-high-level/build.gradle @@ -18,7 +18,7 @@ group = 'org.elasticsearch.client' archivesBaseName = 'elasticsearch-rest-high-level-client' // HLRC is published under the Elastic License -ext.projectLicenses = ['Elastic License 2.0': ext.elasticLicenseUrl] +ext.projectLicenses.set(['Elastic License 2.0': ext.elasticLicenseUrl.get()]) restResources { //we need to copy the yaml spec so we can check naming (see RestHighlevelClientTests#testApiNamingConventions) diff --git a/client/rest/build.gradle b/client/rest/build.gradle index 66592d5ed022..fc0069440f13 100644 --- a/client/rest/build.gradle +++ b/client/rest/build.gradle @@ -17,7 +17,7 @@ * under the License. */ import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis -import org.elasticsearch.gradle.internal.precommit.LicenseHeadersTask +import org.elasticsearch.gradle.internal.conventions.precommit.LicenseHeadersTask apply plugin: 'elasticsearch.build' apply plugin: 'elasticsearch.publish' @@ -29,7 +29,7 @@ group = 'org.elasticsearch.client' archivesBaseName = 'elasticsearch-rest-client' // LLRC is licenses under Apache 2.0 -ext.projectLicenses = ['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0'] +ext.projectLicenses.set(['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0']) ext.licenseFile = rootProject.file('licenses/APACHE-LICENSE-2.0.txt') dependencies { diff --git a/client/sniffer/build.gradle b/client/sniffer/build.gradle index d89ec76000ee..bd34d1a70b20 100644 --- a/client/sniffer/build.gradle +++ b/client/sniffer/build.gradle @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import org.elasticsearch.gradle.internal.precommit.LicenseHeadersTask +import org.elasticsearch.gradle.internal.conventions.precommit.LicenseHeadersTask apply plugin: 'elasticsearch.build' apply plugin: 'elasticsearch.publish' @@ -28,7 +28,7 @@ group = 'org.elasticsearch.client' archivesBaseName = 'elasticsearch-rest-client-sniffer' // rest client sniffer is licenses under Apache 2.0 -ext.projectLicenses = ['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0'] +ext.projectLicenses.set(['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0']) ext.licenseFile = rootProject.file('licenses/APACHE-LICENSE-2.0.txt') dependencies { diff --git a/client/test/build.gradle b/client/test/build.gradle index 2d5db7e59e6d..da5e45f6d699 100644 --- a/client/test/build.gradle +++ b/client/test/build.gradle @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import org.elasticsearch.gradle.internal.precommit.LicenseHeadersTask +import org.elasticsearch.gradle.internal.conventions.precommit.LicenseHeadersTask apply plugin: 'elasticsearch.build' @@ -15,7 +15,7 @@ sourceCompatibility = JavaVersion.VERSION_1_8 group = "${group}.client.test" // rest client sniffer is licenses under Apache 2.0 -ext.projectLicenses = ['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0'] +ext.projectLicenses.set(['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0']) ext.licenseFile = rootProject.file('licenses/APACHE-LICENSE-2.0.txt') dependencies { diff --git a/rest-api-spec/build.gradle b/rest-api-spec/build.gradle index 15c012849529..6ad57396f2ad 100644 --- a/rest-api-spec/build.gradle +++ b/rest-api-spec/build.gradle @@ -11,7 +11,7 @@ restResources { } // REST API specifications are published under the Apache 2.0 License -ext.projectLicenses = ['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0'] +ext.projectLicenses.set(['The Apache Software License, Version 2.0': 'http://www.apache.org/licenses/LICENSE-2.0']) ext.licenseFile = rootProject.file('licenses/APACHE-LICENSE-2.0.txt') artifacts { diff --git a/settings.gradle b/settings.gradle index b08e06d7a8cc..63c699b30e88 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,11 +2,13 @@ plugins { id "com.gradle.enterprise" version "3.5.1" } +includeBuild "build-conventions" +includeBuild "build-tools" +includeBuild "build-tools-internal" + rootProject.name = "elasticsearch" List projects = [ - 'build-tools', - 'build-tools:reaper', 'rest-api-spec', 'docs', 'client:rest', @@ -108,8 +110,8 @@ List startTasks = gradle.startParameter.taskNames include projects.toArray(new String[0]) -project(':build-tools').projectDir = new File(rootProject.projectDir, 'buildSrc') -project(':build-tools:reaper').projectDir = new File(rootProject.projectDir, 'buildSrc/reaper') +//project(':build-tools').projectDir = new File(rootProject.projectDir, 'buildSrc') +//project(':build-tools:reaper').projectDir = new File(rootProject.projectDir, 'buildSrc/reaper') project(":libs").children.each { libsProject -> libsProject.name = "elasticsearch-${libsProject.name}" diff --git a/x-pack/build.gradle b/x-pack/build.gradle index ae2f0027f0cf..e5b258ee8a53 100644 --- a/x-pack/build.gradle +++ b/x-pack/build.gradle @@ -1,5 +1,5 @@ import org.elasticsearch.gradle.plugin.PluginBuildPlugin -import org.elasticsearch.gradle.internal.precommit.LicenseHeadersTask +import org.elasticsearch.gradle.internal.conventions.precommit.LicenseHeadersTask Project xpackRootProject = project @@ -36,7 +36,9 @@ subprojects { additionalLicense 'ELAST', 'Elastic License 2.0', '2.0; you may not use this file except in compliance with the Elastic License' } - ext.projectLicenses = ['Elastic License 2.0': ext.elasticLicenseUrl] + project.getPluginManager().withPlugin("elasticsearch.licensing") { + ext.projectLicenses.set(['Elastic License 2.0': ext.elasticLicenseUrl.get()]) + } project.ext.licenseFile = rootProject.file('licenses/ELASTIC-LICENSE-2.0.txt') project.ext.noticeFile = xpackRootProject.file('NOTICE.txt') diff --git a/x-pack/plugin/autoscaling/build.gradle b/x-pack/plugin/autoscaling/build.gradle index 4e1aa8e1d677..4baa8efe8fcc 100644 --- a/x-pack/plugin/autoscaling/build.gradle +++ b/x-pack/plugin/autoscaling/build.gradle @@ -1,4 +1,3 @@ -import org.elasticsearch.gradle.internal.info.BuildParams apply plugin: 'elasticsearch.internal-es-plugin' apply plugin: 'elasticsearch.internal-cluster-test'