From 072a7ece38e50af1328b4192a091fbf433b0ad5e Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Mon, 16 Nov 2020 19:02:43 +0100 Subject: [PATCH 1/8] Split precommit plugins into internal and external --- .../elasticsearch/gradle/BuildPlugin.groovy | 84 -------------- .../org/elasticsearch/gradle/BuildPlugin.java | 89 ++++++++++++++ .../gradle/DependenciesInfoPlugin.groovy | 2 +- .../gradle/DependenciesInfoTask.groovy | 2 +- .../precommit/InternalPrecommitTasks.java} | 46 ++++---- .../gradle/plugin/PluginBuildPlugin.groovy | 47 ++++---- .../LicenseHeadersPrecommitPlugin.groovy | 51 -------- .../LicenseHeadersPrecommitPlugin.java | 50 ++++++++ .../gradle/precommit/PrecommitTasks.java | 35 ++++++ .../test/StandaloneRestTestPlugin.groovy | 97 ---------------- .../gradle/test/StandaloneRestTestPlugin.java | 109 ++++++++++++++++++ .../gradle/test/StandaloneTestPlugin.groovy | 2 - .../gradle/test/TestWithSslPlugin.java | 2 +- .../gradle/info/BuildParams.java | 30 +++++ .../precommit/CheckstylePrecommitPlugin.java | 3 +- .../DependencyLicensesPrecommitPlugin.java | 3 +- .../precommit/DependencyLicensesTask.java | 5 +- .../FilePermissionsPrecommitPlugin.java | 3 +- .../precommit/FilePermissionsTask.java | 4 +- .../ForbiddenApisPrecommitPlugin.java | 3 +- .../ForbiddenPatternsPrecommitPlugin.java | 3 +- .../precommit/ForbiddenPatternsTask.java | 4 +- .../precommit/LoggerUsagePrecommitPlugin.java | 3 +- .../precommit/LoggerUsageTask.java | 5 +- .../precommit/TestingConventionRule.java | 4 +- .../TestingConventionsPrecommitPlugin.java | 3 +- .../precommit/TestingConventionsTasks.java | 4 +- .../precommit/UpdateShasTask.java | 4 +- .../ValidateJsonAgainstSchemaTask.java | 2 +- .../precommit/ValidateJsonNoKeywordsTask.java | 2 +- .../precommit/ValidateRestSpecPlugin.java | 2 +- .../testfixtures/TestFixturesPlugin.java | 2 +- ...lasticsearch.validate-rest-spec.properties | 2 +- .../resources/checkstyle_suppressions.xml | 2 +- .../DependencyLicensesTaskTests.java | 4 +- .../precommit/FilePermissionsTaskTests.java | 4 +- .../precommit/ForbiddenPatternsTaskTests.java | 4 +- .../precommit/UpdateShasTaskTests.java | 4 +- .../testKit/elasticsearch.build/build.gradle | 5 +- .../testKit/testingConventions/build.gradle | 2 +- 40 files changed, 412 insertions(+), 320 deletions(-) delete mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy create mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java rename buildSrc/src/main/groovy/org/elasticsearch/gradle/{precommit/PrecommitTasks.groovy => internal/precommit/InternalPrecommitTasks.java} (53%) delete mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.groovy create mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java create mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.java delete mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy create mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.java rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/CheckstylePrecommitPlugin.java (97%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/DependencyLicensesPrecommitPlugin.java (95%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/DependencyLicensesTask.java (98%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/FilePermissionsPrecommitPlugin.java (94%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/FilePermissionsTask.java (97%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/ForbiddenApisPrecommitPlugin.java (98%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/ForbiddenPatternsPrecommitPlugin.java (94%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/ForbiddenPatternsTask.java (98%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/LoggerUsagePrecommitPlugin.java (94%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/LoggerUsageTask.java (94%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/TestingConventionRule.java (96%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/TestingConventionsPrecommitPlugin.java (93%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/TestingConventionsTasks.java (99%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/UpdateShasTask.java (96%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/ValidateJsonAgainstSchemaTask.java (99%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/ValidateJsonNoKeywordsTask.java (99%) rename buildSrc/src/main/java/org/elasticsearch/gradle/{ => internal}/precommit/ValidateRestSpecPlugin.java (98%) rename buildSrc/src/test/java/org/elasticsearch/gradle/{ => internal}/precommit/DependencyLicensesTaskTests.java (99%) rename buildSrc/src/test/java/org/elasticsearch/gradle/{ => internal}/precommit/FilePermissionsTaskTests.java (97%) rename buildSrc/src/test/java/org/elasticsearch/gradle/{ => internal}/precommit/ForbiddenPatternsTaskTests.java (98%) rename buildSrc/src/test/java/org/elasticsearch/gradle/{ => internal}/precommit/UpdateShasTaskTests.java (98%) diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy deleted file mode 100644 index 115f77ef64723..0000000000000 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.gradle - -import groovy.transform.CompileStatic -import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin -import org.elasticsearch.gradle.precommit.PrecommitTasks -import org.gradle.api.GradleException -import org.gradle.api.InvalidUserDataException -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.file.CopySpec -import org.gradle.api.plugins.ExtraPropertiesExtension -import org.gradle.api.tasks.bundling.Jar - -/** - * Encapsulates build configuration for elasticsearch projects. - */ -@CompileStatic -class BuildPlugin implements Plugin { - - @Override - void apply(Project project) { - // make sure the global build info plugin is applied to the root project - project.rootProject.pluginManager.apply(GlobalBuildInfoPlugin) - - if (project.pluginManager.hasPlugin('elasticsearch.standalone-rest-test')) { - throw new InvalidUserDataException('elasticsearch.standalone-test, ' - + 'elasticsearch.standalone-rest-test, and elasticsearch.build ' - + 'are mutually exclusive') - } - project.pluginManager.apply('elasticsearch.java') - configureLicenseAndNotice(project) - project.pluginManager.apply('elasticsearch.publish') - project.pluginManager.apply(DependenciesInfoPlugin) - project.pluginManager.apply(DependenciesGraphPlugin) - - PrecommitTasks.create(project, true) - } - - static void configureLicenseAndNotice(Project project) { - ExtraPropertiesExtension ext = project.extensions.getByType(ExtraPropertiesExtension) - ext.set('licenseFile', null) - ext.set('noticeFile', null) - // add license/notice files - project.afterEvaluate { - project.tasks.withType(Jar).configureEach { Jar jarTask -> - if (ext.has('licenseFile') == false || ext.get('licenseFile') == null || ext.has('noticeFile') == false || ext.get('noticeFile') == null) { - throw new GradleException("Must specify license and notice file for project ${project.path}") - } - - File licenseFile = ext.get('licenseFile') as File - File noticeFile = ext.get('noticeFile') as File - - jarTask.metaInf { CopySpec spec -> - spec.from(licenseFile.parent) { CopySpec from -> - from.include licenseFile.name - from.rename { 'LICENSE.txt' } - } - spec.from(noticeFile.parent) { CopySpec from -> - from.include noticeFile.name - from.rename { 'NOTICE.txt' } - } - } - } - } - } -} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java new file mode 100644 index 0000000000000..1f8adb356832b --- /dev/null +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java @@ -0,0 +1,89 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.gradle; + +import org.elasticsearch.gradle.info.BuildParams; +import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin; +import org.elasticsearch.gradle.internal.precommit.InternalPrecommitTasks; +import org.elasticsearch.gradle.precommit.PrecommitTasks; +import org.gradle.api.GradleException; +import org.gradle.api.InvalidUserDataException; +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.plugins.ExtraPropertiesExtension; +import org.gradle.api.tasks.bundling.Jar; + +import java.io.File; + +/** + * Encapsulates build configuration for elasticsearch projects. + */ +public class BuildPlugin implements Plugin { + @Override + public void apply(Project project) { + // make sure the global build info plugin is applied to the root project + project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); + + project.getPluginManager().withPlugin("elasticsearch.standalone-rest-test", appliedPlugin -> { + throw new InvalidUserDataException( + "elasticsearch.standalone-test, " + + "elasticsearch.standalone-rest-test, and elasticsearch.build " + + "are mutually exclusive" + ); + }); + + project.getPluginManager().apply("elasticsearch.java"); + configureLicenseAndNotice(project); + project.getPluginManager().apply("elasticsearch.publish"); + project.getPluginManager().apply(DependenciesInfoPlugin.class); + project.getPluginManager().apply(DependenciesGraphPlugin.class); + + BuildParams.withInternalBuild(() -> InternalPrecommitTasks.create(project, true)).orElse(() -> PrecommitTasks.create(project)); + } + + public static void configureLicenseAndNotice(final Project project) { + final ExtraPropertiesExtension ext = project.getExtensions().getByType(ExtraPropertiesExtension.class); + ext.set("licenseFile", null); + ext.set("noticeFile", null); + // add license/notice files + project.afterEvaluate(project1 -> project1.getTasks().withType(Jar.class).configureEach(jarTask -> { + if (ext.has("licenseFile") == false + || ext.get("licenseFile") == null + || ext.has("noticeFile") == false + || ext.get("noticeFile") == null) { + throw new GradleException("Must specify license and notice file for project " + project1.getPath()); + } + + File licenseFile = (File) ext.get("licenseFile"); + File noticeFile = (File) ext.get("noticeFile"); + + jarTask.metaInf(spec -> { + spec.from(licenseFile.getParent(), from -> { + from.include(licenseFile.getName()); + from.rename(s -> "LICENSE.txt"); + }); + spec.from(noticeFile.getParent(), copySpec -> { + copySpec.include(noticeFile.getName()); + copySpec.rename(s -> "NOTICE.txt"); + }); + }); + })); + } +} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoPlugin.groovy index f9c261a17036c..b19b62acb2e1c 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoPlugin.groovy @@ -20,7 +20,7 @@ package org.elasticsearch.gradle import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin -import org.elasticsearch.gradle.precommit.DependencyLicensesTask +import org.elasticsearch.gradle.internal.precommit.DependencyLicensesTask import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaPlugin diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoTask.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoTask.groovy index 64f82ddf1b708..0ad316750da26 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoTask.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/DependenciesInfoTask.groovy @@ -19,7 +19,7 @@ package org.elasticsearch.gradle -import org.elasticsearch.gradle.precommit.DependencyLicensesTask +import org.elasticsearch.gradle.internal.precommit.DependencyLicensesTask import org.elasticsearch.gradle.precommit.LicenseAnalyzer import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Dependency diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java similarity index 53% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.groovy rename to buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java index 2747b23837712..ab266801f8c5e 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,35 +16,38 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit +package org.elasticsearch.gradle.internal.precommit; -import org.gradle.api.Project +import org.elasticsearch.gradle.precommit.LicenseHeadersPrecommitPlugin; +import org.elasticsearch.gradle.precommit.PrecommitTasks; +import org.gradle.api.Project; /** - * Validation tasks which should be run before committing. These run before tests. - */ -class PrecommitTasks { - - /** Adds a precommit task, which depends on non-test verification tasks. */ - - static void create(Project project, boolean includeDependencyLicenses) { + * Internal precommit plugins that adds elasticsearch project specific + * checks to the common precommit plugin. + * */ +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); - project.pluginManager.apply(CheckstylePrecommitPlugin) - project.pluginManager.apply(ForbiddenApisPrecommitPlugin) - project.pluginManager.apply(JarHellPrecommitPlugin) - project.pluginManager.apply(ForbiddenPatternsPrecommitPlugin) - project.pluginManager.apply(LicenseHeadersPrecommitPlugin) - project.pluginManager.apply(FilePermissionsPrecommitPlugin) - project.pluginManager.apply(ThirdPartyAuditPrecommitPlugin) - project.pluginManager.apply(TestingConventionsPrecommitPlugin) + project.getPluginManager().apply(CheckstylePrecommitPlugin.class); + project.getPluginManager().apply(ForbiddenApisPrecommitPlugin.class); + project.getPluginManager().apply(ForbiddenPatternsPrecommitPlugin.class); + project.getPluginManager().apply(LicenseHeadersPrecommitPlugin.class); + project.getPluginManager().apply(FilePermissionsPrecommitPlugin.class); + project.getPluginManager().apply(TestingConventionsPrecommitPlugin.class); // tasks with just tests don't need dependency licenses, so this flag makes adding // the task optional if (includeDependencyLicenses) { - project.pluginManager.apply(DependencyLicensesPrecommitPlugin) + project.getPluginManager().apply(DependencyLicensesPrecommitPlugin.class); } - if (project.path != ':build-tools') { + + if (project.getPath().equals(":build-tools") == false) { /* * Sadly, build-tools can't have logger-usage-check because that * would create a circular project dependency between build-tools @@ -55,7 +58,8 @@ static void create(Project project, boolean includeDependencyLicenses) { * use the NamingConventionsCheck we break the circular dependency * here. */ - project.pluginManager.apply(LoggerUsagePrecommitPlugin) + project.getPluginManager().apply(LoggerUsagePrecommitPlugin.class); } } + } diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy index 1328a51adc4c3..20c088be23a53 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy @@ -109,35 +109,38 @@ class PluginBuildPlugin implements Plugin { } } - // We've ported this from multiple build scripts where we see this pattern into - // an extension method as a first step of consolidation. - // We might want to port this into a general pattern later on. - project.ext.addQaCheckDependencies = { - project.afterEvaluate { - // let check depend on check tasks of qa sub-projects - def checkTaskProvider = project.tasks.named("check") - def qaSubproject = project.subprojects.find { it.path == project.path + ":qa" } - if(qaSubproject) { - qaSubproject.subprojects.each {p -> - checkTaskProvider.configure {it.dependsOn(p.path + ":check") } + BuildParams.withInternalBuild { + // We've ported this from multiple build scripts where we see this pattern into + // an extension method as a first step of consolidation. + // We might want to port this into a general pattern later on. + project.ext.addQaCheckDependencies = { + project.afterEvaluate { + // let check depend on check tasks of qa sub-projects + def checkTaskProvider = project.tasks.named("check") + def qaSubproject = project.subprojects.find { it.path == project.path + ":qa" } + if(qaSubproject) { + qaSubproject.subprojects.each {p -> + checkTaskProvider.configure {it.dependsOn(p.path + ":check") } + } } } } - } - project.tasks.named('testingConventions').configure { - naming.clear() - naming { - Tests { - baseClass 'org.apache.lucene.util.LuceneTestCase' - } - IT { - baseClass 'org.elasticsearch.test.ESIntegTestCase' - baseClass 'org.elasticsearch.test.rest.ESRestTestCase' - baseClass 'org.elasticsearch.test.ESSingleNodeTestCase' + project.tasks.named('testingConventions').configure { + naming.clear() + naming { + Tests { + baseClass 'org.apache.lucene.util.LuceneTestCase' + } + IT { + baseClass 'org.elasticsearch.test.ESIntegTestCase' + baseClass 'org.elasticsearch.test.rest.ESRestTestCase' + baseClass 'org.elasticsearch.test.ESSingleNodeTestCase' + } } } } + project.configurations.getByName('default') .extendsFrom(project.configurations.getByName('runtimeClasspath')) // allow running ES with this plugin in the foreground of a build diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.groovy deleted file mode 100644 index d942faf80e3ab..0000000000000 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.groovy +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.gradle.precommit - -import org.elasticsearch.gradle.util.GradleUtils -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.provider.ProviderFactory -import org.gradle.api.tasks.SourceSetContainer -import org.gradle.api.tasks.TaskProvider - -import javax.inject.Inject - -class LicenseHeadersPrecommitPlugin extends PrecommitPlugin { - - private ProviderFactory providerFactory - - @Inject - LicenseHeadersPrecommitPlugin(ProviderFactory providerFactory) { - this.providerFactory = providerFactory - } - - @Override - TaskProvider createTask(Project project) { - return project.getTasks().register("licenseHeaders", LicenseHeadersTask.class) { - SourceSetContainer sourceSets = GradleUtils.getJavaSourceSets(getProject()); - it.getSourceFolders().addAll( - providerFactory.provider() { - return sourceSets.collect { it.allJava }.flatten() - } - ) - } - } -} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java new file mode 100644 index 0000000000000..b7ad6cb12fe4f --- /dev/null +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java @@ -0,0 +1,50 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.gradle.precommit; + +import org.elasticsearch.gradle.util.GradleUtils; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.provider.ProviderFactory; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.TaskProvider; +import org.gradle.util.CollectionUtils; + +import javax.inject.Inject; + +public class LicenseHeadersPrecommitPlugin extends PrecommitPlugin { + + private final ProviderFactory providerFactory; + + @Inject + public LicenseHeadersPrecommitPlugin(ProviderFactory providerFactory) { + this.providerFactory = providerFactory; + } + + @Override + public TaskProvider createTask(Project project) { + return project.getTasks().register("licenseHeaders", LicenseHeadersTask.class, licenseHeadersTask -> { + licenseHeadersTask.getSourceFolders().addAll(providerFactory.provider(() -> { + final SourceSetContainer sourceSets = GradleUtils.getJavaSourceSets(project); + return CollectionUtils.collect(sourceSets, sourceSet -> sourceSet.getAllJava()); + })); + }); + } +} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.java new file mode 100644 index 0000000000000..4c7fdaefbdcd4 --- /dev/null +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.java @@ -0,0 +1,35 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +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); + project.getPluginManager().apply(ThirdPartyAuditPrecommitPlugin.class); + } +} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy deleted file mode 100644 index 501d8c80b2032..0000000000000 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -package org.elasticsearch.gradle.test - -import groovy.transform.CompileStatic -import org.elasticsearch.gradle.BuildPlugin -import org.elasticsearch.gradle.ElasticsearchJavaPlugin -import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask -import org.elasticsearch.gradle.RepositoriesSetupPlugin -import org.elasticsearch.gradle.info.BuildParams -import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin -import org.elasticsearch.gradle.precommit.PrecommitTasks -import org.elasticsearch.gradle.testclusters.TestClustersPlugin -import org.gradle.api.InvalidUserDataException -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.artifacts.Configuration -import org.gradle.api.plugins.JavaBasePlugin -import org.gradle.api.plugins.JavaPlugin -import org.gradle.api.plugins.JavaPluginExtension -import org.gradle.api.tasks.SourceSet -import org.gradle.api.tasks.SourceSetContainer -import org.gradle.api.tasks.testing.Test -import org.gradle.plugins.ide.eclipse.model.EclipseModel -import org.gradle.plugins.ide.idea.model.IdeaModel - -/** - * Configures the build to compile tests against Elasticsearch's test framework - * and run REST tests. Use BuildPlugin if you want to build main code as well - * as tests. - */ -@CompileStatic -class StandaloneRestTestPlugin implements Plugin { - - @Override - void apply(Project project) { - if (project.pluginManager.hasPlugin('elasticsearch.build')) { - throw new InvalidUserDataException('elasticsearch.standalone-test ' - + 'elasticsearch.standalone-rest-test, and elasticsearch.build ' - + 'are mutually exclusive') - } - project.rootProject.pluginManager.apply(GlobalBuildInfoPlugin) - project.pluginManager.apply(JavaBasePlugin) - project.pluginManager.apply(TestClustersPlugin) - project.pluginManager.apply(RepositoriesSetupPlugin) - project.pluginManager.apply(RestTestBasePlugin) - - project.getTasks().register("buildResources", ExportElasticsearchBuildResourcesTask) - ElasticsearchJavaPlugin.configureInputNormalization(project) - ElasticsearchJavaPlugin.configureCompile(project) - - - project.extensions.getByType(JavaPluginExtension).sourceCompatibility = BuildParams.minimumRuntimeVersion - project.extensions.getByType(JavaPluginExtension).targetCompatibility = BuildParams.minimumRuntimeVersion - - // only setup tests to build - SourceSetContainer sourceSets = project.extensions.getByType(SourceSetContainer) - SourceSet testSourceSet = sourceSets.create('test') - - project.tasks.withType(Test).configureEach { Test test -> - test.testClassesDirs = testSourceSet.output.classesDirs - test.classpath = testSourceSet.runtimeClasspath - } - - // create a compileOnly configuration as others might expect it - project.configurations.create("compileOnly") - project.dependencies.add('testImplementation', project.project(':test:framework')) - - EclipseModel eclipse = project.extensions.getByType(EclipseModel) - eclipse.classpath.sourceSets = [testSourceSet] - eclipse.classpath.plusConfigurations = [project.configurations.getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME)] - - IdeaModel idea = project.extensions.getByType(IdeaModel) - idea.module.testSourceDirs += testSourceSet.java.srcDirs - idea.module.scopes.put('TEST', [plus: [project.configurations.getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME)]] as Map>) - - PrecommitTasks.create(project, false) - } -} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.java new file mode 100644 index 0000000000000..c99743ad86b85 --- /dev/null +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.java @@ -0,0 +1,109 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.gradle.test; + +import org.elasticsearch.gradle.ElasticsearchJavaPlugin; +import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask; +import org.elasticsearch.gradle.RepositoriesSetupPlugin; +import org.elasticsearch.gradle.info.BuildParams; +import org.elasticsearch.gradle.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; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.plugins.JavaBasePlugin; +import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginExtension; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.SourceSetContainer; +import org.gradle.api.tasks.testing.Test; +import org.gradle.plugins.ide.eclipse.model.EclipseModel; +import org.gradle.plugins.ide.idea.model.IdeaModel; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Configures the build to compile tests against Elasticsearch's test framework + * and run REST tests. Use BuildPlugin if you want to build main code as well + * as tests. + */ +public class StandaloneRestTestPlugin implements Plugin { + @Override + public void apply(Project project) { + project.getPluginManager().withPlugin("elasticsearch.build", appliedPlugin -> { + throw new InvalidUserDataException( + "elasticsearch.standalone-test " + + "elasticsearch.standalone-rest-test, " + + "and elasticsearch.build " + + "are mutually exclusive" + ); + }); + + project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); + project.getPluginManager().apply(JavaBasePlugin.class); + project.getPluginManager().apply(TestClustersPlugin.class); + project.getPluginManager().apply(RepositoriesSetupPlugin.class); + project.getPluginManager().apply(RestTestBasePlugin.class); + + project.getTasks().register("buildResources", ExportElasticsearchBuildResourcesTask.class); + ElasticsearchJavaPlugin.configureInputNormalization(project); + ElasticsearchJavaPlugin.configureCompile(project); + + project.getExtensions().getByType(JavaPluginExtension.class).setSourceCompatibility(BuildParams.getMinimumRuntimeVersion()); + project.getExtensions().getByType(JavaPluginExtension.class).setTargetCompatibility(BuildParams.getMinimumRuntimeVersion()); + + // only setup tests to build + SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); + final SourceSet testSourceSet = sourceSets.create("test"); + + project.getTasks().withType(Test.class).configureEach(test -> { + test.setTestClassesDirs(testSourceSet.getOutput().getClassesDirs()); + test.setClasspath(testSourceSet.getRuntimeClasspath()); + }); + + // create a compileOnly configuration as others might expect it + project.getConfigurations().create("compileOnly"); + project.getDependencies().add("testImplementation", project.project(":test:framework")); + EclipseModel eclipse = project.getExtensions().getByType(EclipseModel.class); + eclipse.getClasspath().setSourceSets(Arrays.asList(testSourceSet)); + List plusConfigurations = Arrays.asList( + project.getConfigurations().getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME) + ); + eclipse.getClasspath().setPlusConfigurations(plusConfigurations); + IdeaModel idea = project.getExtensions().getByType(IdeaModel.class); + idea.getModule() + .setTestSourceDirs( + Stream.of(idea.getModule().getTestSourceDirs(), testSourceSet.getJava().getSrcDirs()) + .flatMap(x -> x.stream()) + .collect(Collectors.toSet()) + ); + idea.getModule().getScopes().put("TEST", Map.of("plus", plusConfigurations)); + + BuildParams.withInternalBuild(() -> InternalPrecommitTasks.create(project, false)).orElse(() -> PrecommitTasks.create(project)); + + } +} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneTestPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneTestPlugin.groovy index d8daabd9ffb69..5ce9be10a1fc1 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneTestPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneTestPlugin.groovy @@ -20,12 +20,10 @@ package org.elasticsearch.gradle.test import groovy.transform.CompileStatic -import org.elasticsearch.gradle.BuildPlugin import org.elasticsearch.gradle.ElasticsearchJavaPlugin import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaBasePlugin -import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.testing.Test /** diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/TestWithSslPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/TestWithSslPlugin.java index 00c233707770d..470958b2aadfe 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/TestWithSslPlugin.java +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/TestWithSslPlugin.java @@ -20,7 +20,7 @@ package org.elasticsearch.gradle.test; import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask; -import org.elasticsearch.gradle.precommit.ForbiddenPatternsTask; +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; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/info/BuildParams.java b/buildSrc/src/main/java/org/elasticsearch/gradle/info/BuildParams.java index 71f7fd29189ac..17e0612b117a8 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/info/BuildParams.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/info/BuildParams.java @@ -154,6 +154,36 @@ private static String propertyName(String methodName) { return propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1); } + public static InternalMarker withInternalBuild(Runnable configBlock) { + if (isInternal()) { + configBlock.run(); + return InternalMarker.INTERNAL; + } else { + return InternalMarker.EXTERNAL; + } + } + + public enum InternalMarker { + INTERNAL(false), + EXTERNAL(false); + + private final boolean internal; + + InternalMarker(boolean internal) { + this.internal = internal; + } + + public void orElse(Runnable configBlock) { + if (internal == false) { + configBlock.run(); + } + } + + public boolean isInternal() { + return internal; + } + } + public static class MutableBuildParams { private static MutableBuildParams INSTANCE = new MutableBuildParams(); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/CheckstylePrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java similarity index 97% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/CheckstylePrecommitPlugin.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java index ba937c0245c99..cc3103a2888d0 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/CheckstylePrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java @@ -17,9 +17,10 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.VersionProperties; +import org.elasticsearch.gradle.precommit.PrecommitPlugin; import org.elasticsearch.gradle.util.Util; import org.gradle.api.Action; import org.gradle.api.Project; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java similarity index 95% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesPrecommitPlugin.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java index 972d52e4da029..cef6f07cd7726 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java @@ -17,9 +17,10 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin; +import org.elasticsearch.gradle.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/precommit/DependencyLicensesTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTask.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesTask.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTask.java index ff1d6186a42ce..d5aaf803e2fea 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/DependencyLicensesTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTask.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,9 +16,10 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.apache.commons.codec.binary.Hex; +import org.elasticsearch.gradle.precommit.LicenseAnalyzer; import org.elasticsearch.gradle.precommit.LicenseAnalyzer.LicenseInfo; import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/FilePermissionsPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java similarity index 94% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/FilePermissionsPrecommitPlugin.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java index f40aa3b661746..0c119a178afd1 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/FilePermissionsPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java @@ -17,8 +17,9 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; +import org.elasticsearch.gradle.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/precommit/FilePermissionsTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTask.java similarity index 97% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/FilePermissionsTask.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTask.java index c90d886a4168d..929920d703f1c 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/FilePermissionsTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTask.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import java.io.File; import java.io.IOException; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ForbiddenApisPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ForbiddenApisPrecommitPlugin.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java index a15e24103eb13..f1c8a616a5bc9 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ForbiddenApisPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java @@ -17,13 +17,14 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis; import de.thetaphi.forbiddenapis.gradle.ForbiddenApisPlugin; import groovy.lang.Closure; import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask; import org.elasticsearch.gradle.info.BuildParams; +import org.elasticsearch.gradle.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/precommit/ForbiddenPatternsPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java similarity index 94% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ForbiddenPatternsPrecommitPlugin.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java index 324a17fa99aae..235251c1987be 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ForbiddenPatternsPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java @@ -17,8 +17,9 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; +import org.elasticsearch.gradle.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/precommit/ForbiddenPatternsTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTask.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ForbiddenPatternsTask.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTask.java index 60489f5452f69..47734b563b414 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ForbiddenPatternsTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTask.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/LoggerUsagePrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java similarity index 94% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/LoggerUsagePrecommitPlugin.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java index f2f3d62b170b2..86f3088ef5f35 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/LoggerUsagePrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java @@ -17,10 +17,11 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.VersionProperties; import org.elasticsearch.gradle.info.BuildParams; +import org.elasticsearch.gradle.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/precommit/LoggerUsageTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java similarity index 94% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/LoggerUsageTask.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java index 1a133c66326ac..9ef12eb9ede20 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/LoggerUsageTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsageTask.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -17,9 +17,10 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.LoggedExec; +import org.elasticsearch.gradle.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/precommit/TestingConventionRule.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionRule.java similarity index 96% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionRule.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionRule.java index c85e74b5218e2..35fa4bdefeec9 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionRule.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionRule.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import java.io.Serializable; import java.util.Collection; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java similarity index 93% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsPrecommitPlugin.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java index c73284effb4d5..6e1e619c74f1a 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java @@ -17,8 +17,9 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; +import org.elasticsearch.gradle.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/precommit/TestingConventionsTasks.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java index 672bc634a505f..84d6b811185b9 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsTasks.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import groovy.lang.Closure; import org.elasticsearch.gradle.util.GradleUtils; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/UpdateShasTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTask.java similarity index 96% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/UpdateShasTask.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTask.java index 65428f1788021..ff2fac3880fab 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/UpdateShasTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTask.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.gradle.api.DefaultTask; import org.gradle.api.logging.Logger; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateJsonAgainstSchemaTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonAgainstSchemaTask.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateJsonAgainstSchemaTask.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonAgainstSchemaTask.java index 3b7dabe0a04f5..84d582781e5fb 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateJsonAgainstSchemaTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonAgainstSchemaTask.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import com.fasterxml.jackson.databind.ObjectMapper; import com.networknt.schema.JsonSchema; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateJsonNoKeywordsTask.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonNoKeywordsTask.java similarity index 99% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateJsonNoKeywordsTask.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonNoKeywordsTask.java index cccd50e6c8c36..e4680e4038805 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateJsonNoKeywordsTask.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateJsonNoKeywordsTask.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.JsonNode; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateRestSpecPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java similarity index 98% rename from buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateRestSpecPlugin.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java index 4b8768dae7954..7efcaadedf46b 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ValidateRestSpecPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.util.Util; import org.gradle.api.Plugin; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java index 25a145098dab5..4ce277c3dfe33 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java @@ -28,7 +28,7 @@ import org.elasticsearch.gradle.docker.DockerSupportPlugin; import org.elasticsearch.gradle.docker.DockerSupportService; import org.elasticsearch.gradle.info.BuildParams; -import org.elasticsearch.gradle.precommit.TestingConventionsTasks; +import org.elasticsearch.gradle.internal.precommit.TestingConventionsTasks; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Action; import org.gradle.api.DefaultTask; diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/elasticsearch.validate-rest-spec.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/elasticsearch.validate-rest-spec.properties index dc4099c46edf4..d11c864c3228e 100644 --- a/buildSrc/src/main/resources/META-INF/gradle-plugins/elasticsearch.validate-rest-spec.properties +++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/elasticsearch.validate-rest-spec.properties @@ -1 +1 @@ -implementation-class=org.elasticsearch.gradle.precommit.ValidateRestSpecPlugin +implementation-class=org.elasticsearch.gradle.internal.precommit.ValidateRestSpecPlugin diff --git a/buildSrc/src/main/resources/checkstyle_suppressions.xml b/buildSrc/src/main/resources/checkstyle_suppressions.xml index d79d6a95e184e..25ff373d2ba46 100644 --- a/buildSrc/src/main/resources/checkstyle_suppressions.xml +++ b/buildSrc/src/main/resources/checkstyle_suppressions.xml @@ -49,5 +49,5 @@ - + diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/DependencyLicensesTaskTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTaskTests.java similarity index 99% rename from buildSrc/src/test/java/org/elasticsearch/gradle/precommit/DependencyLicensesTaskTests.java rename to buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTaskTests.java index d26540707a158..3b5609823f289 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/DependencyLicensesTaskTests.java +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesTaskTests.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.test.GradleUnitTestCase; import org.gradle.api.Action; diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/FilePermissionsTaskTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTaskTests.java similarity index 97% rename from buildSrc/src/test/java/org/elasticsearch/gradle/precommit/FilePermissionsTaskTests.java rename to buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTaskTests.java index 5eba355076b87..316f76c0b94e4 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/FilePermissionsTaskTests.java +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsTaskTests.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import java.io.File; import java.nio.charset.Charset; diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/ForbiddenPatternsTaskTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTaskTests.java similarity index 98% rename from buildSrc/src/test/java/org/elasticsearch/gradle/precommit/ForbiddenPatternsTaskTests.java rename to buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTaskTests.java index b934c60163d56..ade6a7d3af0a3 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/ForbiddenPatternsTaskTests.java +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsTaskTests.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.elasticsearch.gradle.test.GradleUnitTestCase; import org.elasticsearch.gradle.util.GradleUtils; diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/UpdateShasTaskTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTaskTests.java similarity index 98% rename from buildSrc/src/test/java/org/elasticsearch/gradle/precommit/UpdateShasTaskTests.java rename to buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTaskTests.java index 90eb1a000a75e..b10c4033f7a92 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/precommit/UpdateShasTaskTests.java +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/internal/precommit/UpdateShasTaskTests.java @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit; +package org.elasticsearch.gradle.internal.precommit; import org.apache.commons.io.FileUtils; import org.elasticsearch.gradle.test.GradleUnitTestCase; diff --git a/buildSrc/src/testKit/elasticsearch.build/build.gradle b/buildSrc/src/testKit/elasticsearch.build/build.gradle index 5c993e7d63dad..7ee42b58f046a 100644 --- a/buildSrc/src/testKit/elasticsearch.build/build.gradle +++ b/buildSrc/src/testKit/elasticsearch.build/build.gradle @@ -46,14 +46,11 @@ repositories { } // todo remove offending rules -tasks.named('forbiddenApisMain').configure { onlyIf { false } } -tasks.named('forbiddenApisTest').configure { onlyIf { false } } + // requires dependency on testing fw jarHell.enabled = false // we don't have tests for now test.enabled = false -// This requires an additional Jar not part of build-tools -loggerUsageCheck.enabled = false // TODO: shouldn't be part of BuildPlugin, should be tested separately validateNebulaPom.enabled = false diff --git a/buildSrc/src/testKit/testingConventions/build.gradle b/buildSrc/src/testKit/testingConventions/build.gradle index 2bb50da5a4ef5..fe2bc6cc093c9 100644 --- a/buildSrc/src/testKit/testingConventions/build.gradle +++ b/buildSrc/src/testKit/testingConventions/build.gradle @@ -4,7 +4,7 @@ plugins { allprojects { apply plugin: 'java' - apply plugin: 'elasticsearch.build' + apply plugin: org.elasticsearch.gradle.internal.precommit.TestingConventionsPrecommitPlugin repositories { jcenter() From f33da4cc78e085450c060d72cd180e0af6828161 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Tue, 17 Nov 2020 12:31:29 +0100 Subject: [PATCH 2/8] Introduce interface for InternalPlugins --- .../org/elasticsearch/gradle/BuildPlugin.java | 12 ++++++++ ...nternalDistributionArchiveCheckPlugin.java | 3 +- ...nternalDistributionArchiveSetupPlugin.java | 3 +- .../InternalDistributionBwcSetupPlugin.java | 3 +- .../InternalDistributionDownloadPlugin.java | 11 +++++-- .../gradle/internal/InternalPlugin.java | 29 +++++++++++++++++++ .../precommit/CheckstylePrecommitPlugin.java | 3 +- .../DependencyLicensesPrecommitPlugin.java | 3 +- .../FilePermissionsPrecommitPlugin.java | 3 +- .../ForbiddenApisPrecommitPlugin.java | 3 +- .../ForbiddenPatternsPrecommitPlugin.java | 3 +- .../precommit/LoggerUsagePrecommitPlugin.java | 12 ++------ .../TestingConventionsPrecommitPlugin.java | 3 +- .../precommit/ValidateRestSpecPlugin.java | 4 +-- .../ThirdPartyAuditPrecommitPlugin.java | 2 +- .../gradle/test/rest/RestTestUtil.java | 9 +++--- .../testclusters/TestClustersPlugin.java | 7 ++--- 17 files changed, 76 insertions(+), 37 deletions(-) create mode 100644 buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPlugin.java diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java index 1f8adb356832b..77447f4f0d556 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java @@ -21,6 +21,7 @@ import org.elasticsearch.gradle.info.BuildParams; import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.elasticsearch.gradle.internal.precommit.InternalPrecommitTasks; import org.elasticsearch.gradle.precommit.PrecommitTasks; import org.gradle.api.GradleException; @@ -38,6 +39,7 @@ public class BuildPlugin implements Plugin { @Override public void apply(Project project) { + checkInternalPluginUsages(project); // make sure the global build info plugin is applied to the root project project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); @@ -58,6 +60,16 @@ public void apply(Project project) { BuildParams.withInternalBuild(() -> InternalPrecommitTasks.create(project, true)).orElse(() -> PrecommitTasks.create(project)); } + private static void checkInternalPluginUsages(Project project) { + if (BuildParams.isInternal() == false) { + project.getPlugins() + .withType( + InternalPlugin.class, + internalPlugin -> { throw new GradleException(internalPlugin.getExternalUseErrorMessage()); } + ); + } + } + public static void configureLicenseAndNotice(final Project project) { final ExtraPropertiesExtension ext = project.getExtensions().getByType(ExtraPropertiesExtension.class); ext.set("licenseFile", null); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java index e8016e162ad90..b37a5e4ba434c 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java @@ -22,7 +22,6 @@ import org.elasticsearch.gradle.VersionProperties; import org.gradle.api.Action; import org.gradle.api.GradleException; -import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.file.ArchiveOperations; @@ -42,7 +41,7 @@ import static org.elasticsearch.gradle.util.Util.capitalize; -public class InternalDistributionArchiveCheckPlugin implements Plugin { +public class InternalDistributionArchiveCheckPlugin implements InternalPlugin { private ArchiveOperations archiveOperations; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java index 8a4d61c2653f4..f8cb5e89492d4 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveSetupPlugin.java @@ -22,7 +22,6 @@ import org.elasticsearch.gradle.EmptyDirTask; import org.elasticsearch.gradle.tar.SymbolicLinkPreservingTar; import org.gradle.api.NamedDomainObjectContainer; -import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.type.ArtifactTypeDefinition; import org.gradle.api.plugins.BasePlugin; @@ -52,7 +51,7 @@ * - the unpacked variant is used by consumers like test cluster definitions * 4. Having per-distribution sub-projects means we can build them in parallel. */ -public class InternalDistributionArchiveSetupPlugin implements Plugin { +public class InternalDistributionArchiveSetupPlugin implements InternalPlugin { public static final String DEFAULT_CONFIGURATION_NAME = "default"; public static final String EXTRACTED_CONFIGURATION_NAME = "extracted"; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java index ba93bc2b5dcc0..74e6636a4be7d 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java @@ -24,7 +24,6 @@ import org.elasticsearch.gradle.info.BuildParams; import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin; import org.gradle.api.InvalidUserDataException; -import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.provider.Provider; @@ -49,7 +48,7 @@ * unreleased versions are when Gradle projects are set up, so we use "build-unreleased-version-*" as placeholders * and configure them to build various versions here. */ -public class InternalDistributionBwcSetupPlugin implements Plugin { +public class InternalDistributionBwcSetupPlugin implements InternalPlugin { private ProviderFactory providerFactory; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java index 5969afa4307e8..25b21cabeefe9 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java @@ -31,7 +31,6 @@ import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin; import org.gradle.api.GradleException; import org.gradle.api.NamedDomainObjectContainer; -import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.Dependency; @@ -44,7 +43,7 @@ * distribution resolution strategies to the 'elasticsearch.download-distribution' plugin * to resolve distributions from a local snapshot or a locally built bwc snapshot. */ -public class InternalDistributionDownloadPlugin implements Plugin { +public class InternalDistributionDownloadPlugin implements InternalPlugin { private BwcVersions bwcVersions = null; @@ -52,7 +51,7 @@ public class InternalDistributionDownloadPlugin implements Plugin { public void apply(Project project) { // this is needed for isInternal project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); - if (!BuildParams.isInternal()) { + if (BuildParams.isInternal() == false) { throw new GradleException( "Plugin 'elasticsearch.internal-distribution-download' is not supported. " + "Use 'elasticsearch.distribution-download' plugin instead." @@ -140,6 +139,12 @@ private static String distributionProjectPath(ElasticsearchDistribution distribu return projectPath; } + @Override + public String getExternalUseErrorMessage() { + return "Plugin 'elasticsearch.internal-distribution-download' is not supported. " + + "Use 'elasticsearch.distribution-download' plugin instead."; + } + /** * Works out the gradle project name that provides a distribution artifact. * diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPlugin.java new file mode 100644 index 0000000000000..862d4cb6aa180 --- /dev/null +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalPlugin.java @@ -0,0 +1,29 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.gradle.internal; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; + +public interface InternalPlugin extends Plugin { + default String getExternalUseErrorMessage() { + return "Usage of gradle plugin " + getClass().getName() + " is not supported."; + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java index cc3103a2888d0..9ac6a7a235a65 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/CheckstylePrecommitPlugin.java @@ -20,6 +20,7 @@ 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.util.Util; import org.gradle.api.Action; @@ -39,7 +40,7 @@ import java.nio.file.Files; import java.nio.file.StandardCopyOption; -public class CheckstylePrecommitPlugin extends PrecommitPlugin { +public class CheckstylePrecommitPlugin extends PrecommitPlugin implements InternalPlugin { @Override public TaskProvider createTask(Project project) { // Always copy the checkstyle configuration files to 'buildDir/checkstyle' since the resources could be located in a jar diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java index cef6f07cd7726..072d7498369df 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/DependencyLicensesPrecommitPlugin.java @@ -20,6 +20,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.gradle.api.Project; import org.gradle.api.Task; @@ -28,7 +29,7 @@ import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.tasks.TaskProvider; -public class DependencyLicensesPrecommitPlugin extends PrecommitPlugin { +public class DependencyLicensesPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { @Override public TaskProvider createTask(Project project) { diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java index 0c119a178afd1..d81c6cb1184d1 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/FilePermissionsPrecommitPlugin.java @@ -19,6 +19,7 @@ package org.elasticsearch.gradle.internal.precommit; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.elasticsearch.gradle.precommit.PrecommitPlugin; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Project; @@ -29,7 +30,7 @@ import javax.inject.Inject; import java.util.stream.Collectors; -public class FilePermissionsPrecommitPlugin extends PrecommitPlugin { +public class FilePermissionsPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { private ProviderFactory providerFactory; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java index f1c8a616a5bc9..c5da176ebd086 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenApisPrecommitPlugin.java @@ -24,6 +24,7 @@ import groovy.lang.Closure; import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask; import org.elasticsearch.gradle.info.BuildParams; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.elasticsearch.gradle.precommit.PrecommitPlugin; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.JavaVersion; @@ -39,7 +40,7 @@ import java.util.List; import java.util.Set; -public class ForbiddenApisPrecommitPlugin extends PrecommitPlugin { +public class ForbiddenApisPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { @Override public TaskProvider createTask(Project project) { project.getPluginManager().apply(ForbiddenApisPlugin.class); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java index 235251c1987be..d6d95d394e131 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ForbiddenPatternsPrecommitPlugin.java @@ -19,6 +19,7 @@ package org.elasticsearch.gradle.internal.precommit; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.elasticsearch.gradle.precommit.PrecommitPlugin; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Project; @@ -29,7 +30,7 @@ import javax.inject.Inject; import java.util.stream.Collectors; -public class ForbiddenPatternsPrecommitPlugin extends PrecommitPlugin { +public class ForbiddenPatternsPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { private final ProviderFactory providerFactory; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java index 86f3088ef5f35..ea6523c092723 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/LoggerUsagePrecommitPlugin.java @@ -19,26 +19,20 @@ package org.elasticsearch.gradle.internal.precommit; -import org.elasticsearch.gradle.VersionProperties; -import org.elasticsearch.gradle.info.BuildParams; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.elasticsearch.gradle.precommit.PrecommitPlugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; import org.gradle.api.tasks.TaskProvider; -public class LoggerUsagePrecommitPlugin extends PrecommitPlugin { +public class LoggerUsagePrecommitPlugin extends PrecommitPlugin implements InternalPlugin { @Override public TaskProvider createTask(Project project) { - Object dependency = BuildParams.isInternal() - ? project.project(":test:logger-usage") - : ("org.elasticsearch.test:logger-usage:" + VersionProperties.getElasticsearch()); - Configuration loggerUsageConfig = project.getConfigurations().create("loggerUsagePlugin"); - project.getDependencies().add("loggerUsagePlugin", dependency); + project.getDependencies().add("loggerUsagePlugin", project.project(":test:logger-usage")); TaskProvider loggerUsage = project.getTasks().register("loggerUsageCheck", LoggerUsageTask.class); loggerUsage.configure(t -> t.setClasspath(loggerUsageConfig)); - return loggerUsage; } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java index 6e1e619c74f1a..2b9c4356482af 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/TestingConventionsPrecommitPlugin.java @@ -19,12 +19,13 @@ package org.elasticsearch.gradle.internal.precommit; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.elasticsearch.gradle.precommit.PrecommitPlugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.tasks.TaskProvider; -public class TestingConventionsPrecommitPlugin extends PrecommitPlugin { +public class TestingConventionsPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { @Override public TaskProvider createTask(Project project) { TaskProvider testingConventions = project.getTasks() diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java index 7efcaadedf46b..746b3ab3095ff 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/precommit/ValidateRestSpecPlugin.java @@ -19,14 +19,14 @@ package org.elasticsearch.gradle.internal.precommit; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.elasticsearch.gradle.util.Util; -import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.provider.Provider; import java.io.File; -public class ValidateRestSpecPlugin implements Plugin { +public class ValidateRestSpecPlugin implements InternalPlugin { private static final String DOUBLE_STAR = "**"; // checkstyle thinks these are javadocs :( @Override diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java index 03ea3bef3ad2f..0eeaed2b300f6 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java @@ -41,7 +41,7 @@ public TaskProvider createTask(Project project) { project.getDependencies().add("forbiddenApisCliJar", "de.thetaphi:forbiddenapis:2.7"); Configuration jdkJarHellConfig = project.getConfigurations().create(JDK_JAR_HELL_CONFIG_NAME); - if (BuildParams.isInternal() && project.getPath().equals(":libs:elasticsearch-core") == false) { + if (BuildParams.isInternal() && project.getPath().equals(LIBS_ELASTICSEARCH_CORE_PROJECT_PATH) == false) { // External plugins will depend on this already via transitive dependencies. // Internal projects are not all plugins, so make sure the check is available // we are not doing this for this project itself to avoid jar hell with itself diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/RestTestUtil.java b/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/RestTestUtil.java index 60ae306495800..e6d1964663b8c 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/RestTestUtil.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/RestTestUtil.java @@ -77,16 +77,15 @@ static Provider registerTask(Project project, SourceSet sourc * Setup the dependencies needed for the REST tests. */ static void setupDependencies(Project project, SourceSet sourceSet) { - if (BuildParams.isInternal()) { - project.getDependencies().add(sourceSet.getImplementationConfigurationName(), project.project(":test:framework")); - } else { + BuildParams.withInternalBuild( + () -> { project.getDependencies().add(sourceSet.getImplementationConfigurationName(), project.project(":test:framework")); } + ).orElse(() -> { project.getDependencies() .add( sourceSet.getImplementationConfigurationName(), "org.elasticsearch.test:framework:" + VersionProperties.getElasticsearch() ); - } - + }); } } diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java index 3ac2356a5831a..ad7a6890c707f 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/TestClustersPlugin.java @@ -72,11 +72,8 @@ protected ExecOperations getExecOperations() { @Override public void apply(Project project) { project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); - if (BuildParams.isInternal()) { - project.getPlugins().apply(InternalDistributionDownloadPlugin.class); - } else { - project.getPlugins().apply(DistributionDownloadPlugin.class); - } + BuildParams.withInternalBuild(() -> project.getPlugins().apply(InternalDistributionDownloadPlugin.class)) + .orElse(() -> project.getPlugins().apply(DistributionDownloadPlugin.class)); project.getRootProject().getPluginManager().apply(ReaperPlugin.class); From 7fbf0e25d5c0d9a64880a68ff4526fed398d13f1 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Tue, 17 Nov 2020 12:58:27 +0100 Subject: [PATCH 3/8] Some polishing --- .../main/groovy/org/elasticsearch/gradle/BuildPlugin.java | 4 ++-- .../gradle/internal/InternalDistributionDownloadPlugin.java | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java index 77447f4f0d556..52aebdc5d82ca 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java @@ -39,9 +39,9 @@ public class BuildPlugin implements Plugin { @Override public void apply(Project project) { - checkInternalPluginUsages(project); // make sure the global build info plugin is applied to the root project project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); + checkExternalInternalPluginUsages(project); project.getPluginManager().withPlugin("elasticsearch.standalone-rest-test", appliedPlugin -> { throw new InvalidUserDataException( @@ -60,7 +60,7 @@ public void apply(Project project) { BuildParams.withInternalBuild(() -> InternalPrecommitTasks.create(project, true)).orElse(() -> PrecommitTasks.create(project)); } - private static void checkInternalPluginUsages(Project project) { + private static void checkExternalInternalPluginUsages(Project project) { if (BuildParams.isInternal() == false) { project.getPlugins() .withType( diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java index 25b21cabeefe9..5c1f909341160 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java @@ -51,11 +51,9 @@ public class InternalDistributionDownloadPlugin implements InternalPlugin { public void apply(Project project) { // this is needed for isInternal project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); + // might be used without the general build plugin so we keep this check for now. if (BuildParams.isInternal() == false) { - throw new GradleException( - "Plugin 'elasticsearch.internal-distribution-download' is not supported. " - + "Use 'elasticsearch.distribution-download' plugin instead." - ); + throw new GradleException(getExternalUseErrorMessage()); } project.getPluginManager().apply(DistributionDownloadPlugin.class); this.bwcVersions = BuildParams.getBwcVersions(); From 4d9c004bafcea3490520b6b19beceb7f1debbe1f Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Tue, 17 Nov 2020 14:54:50 +0100 Subject: [PATCH 4/8] Minor polishing --- .../main/groovy/org/elasticsearch/gradle/BuildPlugin.java | 6 ++++-- .../gradle/precommit/LicenseHeadersPrecommitPlugin.java | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java index 52aebdc5d82ca..b2634d6b19a55 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java @@ -64,8 +64,10 @@ private static void checkExternalInternalPluginUsages(Project project) { if (BuildParams.isInternal() == false) { project.getPlugins() .withType( - InternalPlugin.class, - internalPlugin -> { throw new GradleException(internalPlugin.getExternalUseErrorMessage()); } + InternalPlugin.class, + internalPlugin -> { + throw new GradleException(internalPlugin.getExternalUseErrorMessage()); + } ); } } diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java index b7ad6cb12fe4f..82c8bbc72a95e 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java @@ -19,6 +19,7 @@ package org.elasticsearch.gradle.precommit; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.elasticsearch.gradle.util.GradleUtils; import org.gradle.api.Project; import org.gradle.api.Task; @@ -29,7 +30,7 @@ import javax.inject.Inject; -public class LicenseHeadersPrecommitPlugin extends PrecommitPlugin { +public class LicenseHeadersPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { private final ProviderFactory providerFactory; From 71942652142f3d2b1a1d9f7de71a1b80dc031d21 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Wed, 18 Nov 2020 11:09:31 +0100 Subject: [PATCH 5/8] Apply review feedback - avoid joint java groovy compilation --- .../elasticsearch/gradle/BuildPlugin.groovy | 100 +++++++++++++++++ .../org/elasticsearch/gradle/BuildPlugin.java | 103 ------------------ ...sks.java => InternalPrecommitTasks.groovy} | 15 ++- .../LicenseHeadersPrecommitPlugin.groovy | 53 +++++++++ .../precommit/LicenseHeadersTask.groovy | 4 +- .../LicenseHeadersPrecommitPlugin.java | 51 --------- .../gradle/precommit/PrecommitTasks.java | 1 - x-pack/build.gradle | 2 +- 8 files changed, 166 insertions(+), 163 deletions(-) create mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy delete mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java rename buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/{InternalPrecommitTasks.java => InternalPrecommitTasks.groovy} (85%) create mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPlugin.groovy rename buildSrc/src/main/groovy/org/elasticsearch/gradle/{ => internal}/precommit/LicenseHeadersTask.groovy (98%) delete mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java rename buildSrc/src/main/{groovy => java}/org/elasticsearch/gradle/precommit/PrecommitTasks.java (93%) diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy new file mode 100644 index 0000000000000..c084ffed06dba --- /dev/null +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy @@ -0,0 +1,100 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.elasticsearch.gradle + +import groovy.transform.CompileStatic +import org.elasticsearch.gradle.info.BuildParams +import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin +import org.elasticsearch.gradle.internal.InternalPlugin +import org.elasticsearch.gradle.internal.precommit.InternalPrecommitTasks +import org.elasticsearch.gradle.precommit.PrecommitTasks +import org.gradle.api.GradleException +import org.gradle.api.InvalidUserDataException +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.file.CopySpec +import org.gradle.api.plugins.ExtraPropertiesExtension +import org.gradle.api.tasks.bundling.Jar + +/** + * Encapsulates build configuration for elasticsearch projects. + */ +@CompileStatic +class BuildPlugin implements Plugin { + + @Override + void apply(Project project) { + // make sure the global build info plugin is applied to the root project + project.rootProject.pluginManager.apply(GlobalBuildInfoPlugin) + checkExternalInternalPluginUsages(project); + + if (project.pluginManager.hasPlugin('elasticsearch.standalone-rest-test')) { + throw new InvalidUserDataException('elasticsearch.standalone-test, ' + + 'elasticsearch.standalone-rest-test, and elasticsearch.build ' + + 'are mutually exclusive') + } + project.pluginManager.apply('elasticsearch.java') + configureLicenseAndNotice(project) + project.pluginManager.apply('elasticsearch.publish') + project.pluginManager.apply(DependenciesInfoPlugin) + project.pluginManager.apply(DependenciesGraphPlugin) + + BuildParams.withInternalBuild { + InternalPrecommitTasks.create(project, true) + }.orElse { + PrecommitTasks.create(project) + } + } + + private static void checkExternalInternalPluginUsages(Project project) { + if (BuildParams.isInternal() == false) { + project.getPlugins().withType(InternalPlugin.class) { InternalPlugin internalPlugin -> + throw new GradleException(internalPlugin.getExternalUseErrorMessage()) + } + } + } + + static void configureLicenseAndNotice(Project project) { + ExtraPropertiesExtension ext = project.extensions.getByType(ExtraPropertiesExtension) + ext.set('licenseFile', null) + ext.set('noticeFile', null) + // add license/notice files + project.afterEvaluate { + project.tasks.withType(Jar).configureEach { Jar jarTask -> + if (ext.has('licenseFile') == false || ext.get('licenseFile') == null || ext.has('noticeFile') == false || ext.get('noticeFile') == null) { + throw new GradleException("Must specify license and notice file for project ${project.path}") + } + + File licenseFile = ext.get('licenseFile') as File + File noticeFile = ext.get('noticeFile') as File + + jarTask.metaInf { CopySpec spec -> + spec.from(licenseFile.parent) { CopySpec from -> + from.include licenseFile.name + from.rename { 'LICENSE.txt' } + } + spec.from(noticeFile.parent) { CopySpec from -> + from.include noticeFile.name + from.rename { 'NOTICE.txt' } + } + } + } + } + } +} \ No newline at end of file diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java deleted file mode 100644 index b2634d6b19a55..0000000000000 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.gradle; - -import org.elasticsearch.gradle.info.BuildParams; -import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin; -import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.internal.precommit.InternalPrecommitTasks; -import org.elasticsearch.gradle.precommit.PrecommitTasks; -import org.gradle.api.GradleException; -import org.gradle.api.InvalidUserDataException; -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.gradle.api.plugins.ExtraPropertiesExtension; -import org.gradle.api.tasks.bundling.Jar; - -import java.io.File; - -/** - * Encapsulates build configuration for elasticsearch projects. - */ -public class BuildPlugin implements Plugin { - @Override - public void apply(Project project) { - // make sure the global build info plugin is applied to the root project - project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); - checkExternalInternalPluginUsages(project); - - project.getPluginManager().withPlugin("elasticsearch.standalone-rest-test", appliedPlugin -> { - throw new InvalidUserDataException( - "elasticsearch.standalone-test, " - + "elasticsearch.standalone-rest-test, and elasticsearch.build " - + "are mutually exclusive" - ); - }); - - project.getPluginManager().apply("elasticsearch.java"); - configureLicenseAndNotice(project); - project.getPluginManager().apply("elasticsearch.publish"); - project.getPluginManager().apply(DependenciesInfoPlugin.class); - project.getPluginManager().apply(DependenciesGraphPlugin.class); - - BuildParams.withInternalBuild(() -> InternalPrecommitTasks.create(project, true)).orElse(() -> PrecommitTasks.create(project)); - } - - private static void checkExternalInternalPluginUsages(Project project) { - if (BuildParams.isInternal() == false) { - project.getPlugins() - .withType( - InternalPlugin.class, - internalPlugin -> { - throw new GradleException(internalPlugin.getExternalUseErrorMessage()); - } - ); - } - } - - public static void configureLicenseAndNotice(final Project project) { - final ExtraPropertiesExtension ext = project.getExtensions().getByType(ExtraPropertiesExtension.class); - ext.set("licenseFile", null); - ext.set("noticeFile", null); - // add license/notice files - project.afterEvaluate(project1 -> project1.getTasks().withType(Jar.class).configureEach(jarTask -> { - if (ext.has("licenseFile") == false - || ext.get("licenseFile") == null - || ext.has("noticeFile") == false - || ext.get("noticeFile") == null) { - throw new GradleException("Must specify license and notice file for project " + project1.getPath()); - } - - File licenseFile = (File) ext.get("licenseFile"); - File noticeFile = (File) ext.get("noticeFile"); - - jarTask.metaInf(spec -> { - spec.from(licenseFile.getParent(), from -> { - from.include(licenseFile.getName()); - from.rename(s -> "LICENSE.txt"); - }); - spec.from(noticeFile.getParent(), copySpec -> { - copySpec.include(noticeFile.getName()); - copySpec.rename(s -> "NOTICE.txt"); - }); - }); - })); - } -} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.groovy similarity index 85% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java rename to buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.groovy index ab266801f8c5e..bf5291cb0818b 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.java +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/InternalPrecommitTasks.groovy @@ -17,23 +17,28 @@ * under the License. */ -package org.elasticsearch.gradle.internal.precommit; +package org.elasticsearch.gradle.internal.precommit -import org.elasticsearch.gradle.precommit.LicenseHeadersPrecommitPlugin; -import org.elasticsearch.gradle.precommit.PrecommitTasks; +import groovy.transform.CompileStatic +import org.elasticsearch.gradle.precommit.PrecommitTasks +import org.elasticsearch.gradle.precommit.ThirdPartyAuditPrecommitPlugin; import org.gradle.api.Project; /** * Internal precommit plugins that adds elasticsearch project specific * checks to the common precommit plugin. * */ -public class InternalPrecommitTasks { + +@CompileStatic +class InternalPrecommitTasks { + /** * Adds a precommit task, which depends on non-test verification tasks. */ - public static void create(Project project, boolean includeDependencyLicenses) { + static void create(Project project, boolean includeDependencyLicenses) { PrecommitTasks.create(project); + project.getPluginManager().apply(ThirdPartyAuditPrecommitPlugin.class); project.getPluginManager().apply(CheckstylePrecommitPlugin.class); project.getPluginManager().apply(ForbiddenApisPrecommitPlugin.class); project.getPluginManager().apply(ForbiddenPatternsPrecommitPlugin.class); diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPlugin.groovy new file mode 100644 index 0000000000000..36cd58be2bc7c --- /dev/null +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersPrecommitPlugin.groovy @@ -0,0 +1,53 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.gradle.internal.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.provider.ProviderFactory +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.TaskProvider + +import javax.inject.Inject + +class LicenseHeadersPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { + + private ProviderFactory providerFactory + + @Inject + LicenseHeadersPrecommitPlugin(ProviderFactory providerFactory) { + this.providerFactory = providerFactory + } + + @Override + TaskProvider createTask(Project project) { + return project.getTasks().register("licenseHeaders", LicenseHeadersTask.class) { + SourceSetContainer sourceSets = GradleUtils.getJavaSourceSets(getProject()); + it.getSourceFolders().addAll( + providerFactory.provider() { + return sourceSets.collect { it.allJava }.flatten() + } + ) + } + } +} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersTask.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersTask.groovy similarity index 98% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersTask.groovy rename to buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersTask.groovy index ba8faef0314b2..2e2e2c441c3d4 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersTask.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/internal/precommit/LicenseHeadersTask.groovy @@ -7,7 +7,7 @@ * not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.gradle.precommit +package org.elasticsearch.gradle.internal.precommit import org.apache.rat.anttasks.Report import org.apache.rat.anttasks.SubstringLicenseMatcher diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java deleted file mode 100644 index 82c8bbc72a95e..0000000000000 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LicenseHeadersPrecommitPlugin.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.gradle.precommit; - -import org.elasticsearch.gradle.internal.InternalPlugin; -import org.elasticsearch.gradle.util.GradleUtils; -import org.gradle.api.Project; -import org.gradle.api.Task; -import org.gradle.api.provider.ProviderFactory; -import org.gradle.api.tasks.SourceSetContainer; -import org.gradle.api.tasks.TaskProvider; -import org.gradle.util.CollectionUtils; - -import javax.inject.Inject; - -public class LicenseHeadersPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { - - private final ProviderFactory providerFactory; - - @Inject - public LicenseHeadersPrecommitPlugin(ProviderFactory providerFactory) { - this.providerFactory = providerFactory; - } - - @Override - public TaskProvider createTask(Project project) { - return project.getTasks().register("licenseHeaders", LicenseHeadersTask.class, licenseHeadersTask -> { - licenseHeadersTask.getSourceFolders().addAll(providerFactory.provider(() -> { - final SourceSetContainer sourceSets = GradleUtils.getJavaSourceSets(project); - return CollectionUtils.collect(sourceSets, sourceSet -> sourceSet.getAllJava()); - })); - }); - } -} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTasks.java similarity index 93% rename from buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.java rename to buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTasks.java index 4c7fdaefbdcd4..952444f6801a1 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/PrecommitTasks.java @@ -30,6 +30,5 @@ public class PrecommitTasks { */ public static void create(Project project) { project.getPluginManager().apply(JarHellPrecommitPlugin.class); - project.getPluginManager().apply(ThirdPartyAuditPrecommitPlugin.class); } } diff --git a/x-pack/build.gradle b/x-pack/build.gradle index 337a928f6edc3..2ed7df35f3756 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.precommit.LicenseHeadersTask +import org.elasticsearch.gradle.internal.precommit.LicenseHeadersTask Project xpackRootProject = project From ece5df594f67b9eebb58d7c12a4b5df86bea01c6 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Wed, 18 Nov 2020 12:51:22 +0100 Subject: [PATCH 6/8] Fix integ tests --- .../test/StandaloneRestTestPlugin.groovy | 102 ++++++++++++++++ .../gradle/test/StandaloneRestTestPlugin.java | 109 ------------------ .../gradle/info/BuildParams.java | 2 +- .../precommit/JarHellPrecommitPlugin.java | 4 - .../ThirdPartyAuditPrecommitPlugin.java | 4 +- .../testKit/elasticsearch.build/build.gradle | 18 ++- .../libs/elasticsearch-core/build.gradle | 21 ++++ .../elasticsearch.build/settings.gradle | 2 + .../test/logger-usage/build.gradle | 22 ++++ 9 files changed, 162 insertions(+), 122 deletions(-) create mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy delete mode 100644 buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.java create mode 100644 buildSrc/src/testKit/elasticsearch.build/libs/elasticsearch-core/build.gradle create mode 100644 buildSrc/src/testKit/elasticsearch.build/test/logger-usage/build.gradle diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy new file mode 100644 index 0000000000000..22ce03c24bcee --- /dev/null +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy @@ -0,0 +1,102 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +package org.elasticsearch.gradle.test + +import groovy.transform.CompileStatic +import org.elasticsearch.gradle.BuildPlugin +import org.elasticsearch.gradle.ElasticsearchJavaPlugin +import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask +import org.elasticsearch.gradle.RepositoriesSetupPlugin +import org.elasticsearch.gradle.info.BuildParams +import org.elasticsearch.gradle.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 +import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration +import org.gradle.api.plugins.JavaBasePlugin +import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.api.tasks.SourceSet +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.testing.Test +import org.gradle.plugins.ide.eclipse.model.EclipseModel +import org.gradle.plugins.ide.idea.model.IdeaModel + +/** + * Configures the build to compile tests against Elasticsearch's test framework + * and run REST tests. Use BuildPlugin if you want to build main code as well + * as tests. + */ +@CompileStatic +class StandaloneRestTestPlugin implements Plugin { + + @Override + void apply(Project project) { + if (project.pluginManager.hasPlugin('elasticsearch.build')) { + throw new InvalidUserDataException('elasticsearch.standalone-test ' + + 'elasticsearch.standalone-rest-test, and elasticsearch.build ' + + 'are mutually exclusive') + } + project.rootProject.pluginManager.apply(GlobalBuildInfoPlugin) + project.pluginManager.apply(JavaBasePlugin) + project.pluginManager.apply(TestClustersPlugin) + project.pluginManager.apply(RepositoriesSetupPlugin) + project.pluginManager.apply(RestTestBasePlugin) + + project.getTasks().register("buildResources", ExportElasticsearchBuildResourcesTask) + ElasticsearchJavaPlugin.configureInputNormalization(project) + ElasticsearchJavaPlugin.configureCompile(project) + + + project.extensions.getByType(JavaPluginExtension).sourceCompatibility = BuildParams.minimumRuntimeVersion + project.extensions.getByType(JavaPluginExtension).targetCompatibility = BuildParams.minimumRuntimeVersion + + // only setup tests to build + SourceSetContainer sourceSets = project.extensions.getByType(SourceSetContainer) + SourceSet testSourceSet = sourceSets.create('test') + + project.tasks.withType(Test).configureEach { Test test -> + test.testClassesDirs = testSourceSet.output.classesDirs + test.classpath = testSourceSet.runtimeClasspath + } + + // create a compileOnly configuration as others might expect it + project.configurations.create("compileOnly") + project.dependencies.add('testImplementation', project.project(':test:framework')) + + EclipseModel eclipse = project.extensions.getByType(EclipseModel) + eclipse.classpath.sourceSets = [testSourceSet] + eclipse.classpath.plusConfigurations = [project.configurations.getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME)] + + IdeaModel idea = project.extensions.getByType(IdeaModel) + idea.module.testSourceDirs += testSourceSet.java.srcDirs + idea.module.scopes.put('TEST', [plus: [project.configurations.getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME)]] as Map>) + + BuildParams.withInternalBuild { + InternalPrecommitTasks.create(project, false) + }.orElse { + PrecommitTasks.create(project) + } + } +} diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.java deleted file mode 100644 index c99743ad86b85..0000000000000 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.gradle.test; - -import org.elasticsearch.gradle.ElasticsearchJavaPlugin; -import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask; -import org.elasticsearch.gradle.RepositoriesSetupPlugin; -import org.elasticsearch.gradle.info.BuildParams; -import org.elasticsearch.gradle.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; -import org.gradle.api.Project; -import org.gradle.api.artifacts.Configuration; -import org.gradle.api.plugins.JavaBasePlugin; -import org.gradle.api.plugins.JavaPlugin; -import org.gradle.api.plugins.JavaPluginExtension; -import org.gradle.api.tasks.SourceSet; -import org.gradle.api.tasks.SourceSetContainer; -import org.gradle.api.tasks.testing.Test; -import org.gradle.plugins.ide.eclipse.model.EclipseModel; -import org.gradle.plugins.ide.idea.model.IdeaModel; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * Configures the build to compile tests against Elasticsearch's test framework - * and run REST tests. Use BuildPlugin if you want to build main code as well - * as tests. - */ -public class StandaloneRestTestPlugin implements Plugin { - @Override - public void apply(Project project) { - project.getPluginManager().withPlugin("elasticsearch.build", appliedPlugin -> { - throw new InvalidUserDataException( - "elasticsearch.standalone-test " - + "elasticsearch.standalone-rest-test, " - + "and elasticsearch.build " - + "are mutually exclusive" - ); - }); - - project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class); - project.getPluginManager().apply(JavaBasePlugin.class); - project.getPluginManager().apply(TestClustersPlugin.class); - project.getPluginManager().apply(RepositoriesSetupPlugin.class); - project.getPluginManager().apply(RestTestBasePlugin.class); - - project.getTasks().register("buildResources", ExportElasticsearchBuildResourcesTask.class); - ElasticsearchJavaPlugin.configureInputNormalization(project); - ElasticsearchJavaPlugin.configureCompile(project); - - project.getExtensions().getByType(JavaPluginExtension.class).setSourceCompatibility(BuildParams.getMinimumRuntimeVersion()); - project.getExtensions().getByType(JavaPluginExtension.class).setTargetCompatibility(BuildParams.getMinimumRuntimeVersion()); - - // only setup tests to build - SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); - final SourceSet testSourceSet = sourceSets.create("test"); - - project.getTasks().withType(Test.class).configureEach(test -> { - test.setTestClassesDirs(testSourceSet.getOutput().getClassesDirs()); - test.setClasspath(testSourceSet.getRuntimeClasspath()); - }); - - // create a compileOnly configuration as others might expect it - project.getConfigurations().create("compileOnly"); - project.getDependencies().add("testImplementation", project.project(":test:framework")); - EclipseModel eclipse = project.getExtensions().getByType(EclipseModel.class); - eclipse.getClasspath().setSourceSets(Arrays.asList(testSourceSet)); - List plusConfigurations = Arrays.asList( - project.getConfigurations().getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME) - ); - eclipse.getClasspath().setPlusConfigurations(plusConfigurations); - IdeaModel idea = project.getExtensions().getByType(IdeaModel.class); - idea.getModule() - .setTestSourceDirs( - Stream.of(idea.getModule().getTestSourceDirs(), testSourceSet.getJava().getSrcDirs()) - .flatMap(x -> x.stream()) - .collect(Collectors.toSet()) - ); - idea.getModule().getScopes().put("TEST", Map.of("plus", plusConfigurations)); - - BuildParams.withInternalBuild(() -> InternalPrecommitTasks.create(project, false)).orElse(() -> PrecommitTasks.create(project)); - - } -} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/info/BuildParams.java b/buildSrc/src/main/java/org/elasticsearch/gradle/info/BuildParams.java index 17e0612b117a8..e35417c6fb692 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/info/BuildParams.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/info/BuildParams.java @@ -164,7 +164,7 @@ public static InternalMarker withInternalBuild(Runnable configBlock) { } public enum InternalMarker { - INTERNAL(false), + INTERNAL(true), EXTERNAL(false); private final boolean internal; diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellPrecommitPlugin.java index 4f78f6eda233a..6cb5dd7f7a2a5 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/JarHellPrecommitPlugin.java @@ -32,12 +32,8 @@ public class JarHellPrecommitPlugin extends PrecommitPlugin { public TaskProvider createTask(Project project) { Configuration jarHellConfig = project.getConfigurations().create("jarHell"); if (BuildParams.isInternal() && project.getPath().equals(":libs:elasticsearch-core") == false) { - // External plugins will depend on this already via transitive dependencies. - // Internal projects are not all plugins, so make sure the check is available - // we are not doing this for this project itself to avoid jar hell with itself project.getDependencies().add("jarHell", project.project(":libs:elasticsearch-core")); } - TaskProvider jarHell = project.getTasks().register("jarHell", JarHellTask.class); jarHell.configure(t -> { SourceSet testSourceSet = Util.getJavaTestSourceSet(project).get(); diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java index 0eeaed2b300f6..10c50e723a0af 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ThirdPartyAuditPrecommitPlugin.java @@ -22,6 +22,7 @@ import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask; import org.elasticsearch.gradle.dependencies.CompileOnlyResolvePlugin; import org.elasticsearch.gradle.info.BuildParams; +import org.elasticsearch.gradle.internal.InternalPlugin; import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; @@ -29,7 +30,7 @@ import java.nio.file.Path; -public class ThirdPartyAuditPrecommitPlugin extends PrecommitPlugin { +public class ThirdPartyAuditPrecommitPlugin extends PrecommitPlugin implements InternalPlugin { public static final String JDK_JAR_HELL_CONFIG_NAME = "jdkJarHell"; public static final String LIBS_ELASTICSEARCH_CORE_PROJECT_PATH = ":libs:elasticsearch-core"; @@ -39,7 +40,6 @@ public TaskProvider createTask(Project project) { project.getPlugins().apply(CompileOnlyResolvePlugin.class); project.getConfigurations().create("forbiddenApisCliJar"); project.getDependencies().add("forbiddenApisCliJar", "de.thetaphi:forbiddenapis:2.7"); - Configuration jdkJarHellConfig = project.getConfigurations().create(JDK_JAR_HELL_CONFIG_NAME); if (BuildParams.isInternal() && project.getPath().equals(LIBS_ELASTICSEARCH_CORE_PROJECT_PATH) == false) { // External plugins will depend on this already via transitive dependencies. diff --git a/buildSrc/src/testKit/elasticsearch.build/build.gradle b/buildSrc/src/testKit/elasticsearch.build/build.gradle index 7ee42b58f046a..06f8062e283bf 100644 --- a/buildSrc/src/testKit/elasticsearch.build/build.gradle +++ b/buildSrc/src/testKit/elasticsearch.build/build.gradle @@ -1,7 +1,11 @@ plugins { id 'java' - id 'elasticsearch.build' + id 'elasticsearch.global-build-info' } +import org.elasticsearch.gradle.info.BuildParams +BuildParams.init { it.setIsInternal(true) } + +apply plugin:'elasticsearch.build' ext.licenseFile = file("LICENSE") ext.noticeFile = file("NOTICE") @@ -48,13 +52,15 @@ repositories { // todo remove offending rules // requires dependency on testing fw -jarHell.enabled = false +tasks.named("jarHell").configure {enabled = false } // we don't have tests for now -test.enabled = false - +tasks.named("test").configure {enabled = false } +// we don't have tests for now +tasks.named("forbiddenApisMain").configure {enabled = false } // TODO: shouldn't be part of BuildPlugin, should be tested separately -validateNebulaPom.enabled = false - +tasks.named("validateNebulaPom").configure {enabled = false } +// requires further classpath +tasks.named("loggerUsageCheck").configure {enabled = false } tasks.register("hello") { doFirst { println "build plugin can be applied" diff --git a/buildSrc/src/testKit/elasticsearch.build/libs/elasticsearch-core/build.gradle b/buildSrc/src/testKit/elasticsearch.build/libs/elasticsearch-core/build.gradle new file mode 100644 index 0000000000000..63ac43eb3162b --- /dev/null +++ b/buildSrc/src/testKit/elasticsearch.build/libs/elasticsearch-core/build.gradle @@ -0,0 +1,21 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// dummy project for testing purposes +apply plugin:'java' \ No newline at end of file diff --git a/buildSrc/src/testKit/elasticsearch.build/settings.gradle b/buildSrc/src/testKit/elasticsearch.build/settings.gradle index e69de29bb2d1d..562760f613432 100644 --- a/buildSrc/src/testKit/elasticsearch.build/settings.gradle +++ b/buildSrc/src/testKit/elasticsearch.build/settings.gradle @@ -0,0 +1,2 @@ +include ":libs:elasticsearch-core" +include ":test:logger-usage" \ No newline at end of file diff --git a/buildSrc/src/testKit/elasticsearch.build/test/logger-usage/build.gradle b/buildSrc/src/testKit/elasticsearch.build/test/logger-usage/build.gradle new file mode 100644 index 0000000000000..c5bbda4b78dfc --- /dev/null +++ b/buildSrc/src/testKit/elasticsearch.build/test/logger-usage/build.gradle @@ -0,0 +1,22 @@ + +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// dummy project for testing purposes +apply plugin:'java' \ No newline at end of file From 27f69cf7cf7c1657fc69b62ccae23c4d420c294b Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Wed, 18 Nov 2020 19:34:24 +0100 Subject: [PATCH 7/8] Move isModule handling into internal only --- .../elasticsearch/gradle/plugin/PluginBuildPlugin.groovy | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy index 20c088be23a53..47c2f94097ee5 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy @@ -104,8 +104,10 @@ class PluginBuildPlugin implements Plugin { expand(properties) inputs.properties(properties) } - if (isModule == false || isXPackModule) { - addNoticeGeneration(project, extension1) + BuildParams.withInternalBuild { + if (isModule == false || isXPackModule) { + addNoticeGeneration(project, extension1) + } } } From 15cd33b08f97c05a332f6109d7128f9ea6c39b07 Mon Sep 17 00:00:00 2001 From: Rene Groeschke Date: Wed, 18 Nov 2020 20:30:12 +0100 Subject: [PATCH 8/8] More polishin --- .../org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy index 47c2f94097ee5..166a9314b2949 100644 --- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy @@ -56,9 +56,6 @@ class PluginBuildPlugin implements Plugin { PluginPropertiesExtension extension = project.extensions.create(PLUGIN_EXTENSION_NAME, PluginPropertiesExtension, project) configureDependencies(project) - boolean isXPackModule = project.path.startsWith(':x-pack:plugin') || project.path.startsWith(':x-pack:quota-aware-fs') - boolean isModule = project.path.startsWith(':modules:') || isXPackModule - createBundleTasks(project, extension) project.afterEvaluate { @@ -105,6 +102,8 @@ class PluginBuildPlugin implements Plugin { inputs.properties(properties) } BuildParams.withInternalBuild { + boolean isXPackModule = project.path.startsWith(':x-pack:plugin') || project.path.startsWith(':x-pack:quota-aware-fs') + boolean isModule = project.path.startsWith(':modules:') || isXPackModule if (isModule == false || isXPackModule) { addNoticeGeneration(project, extension1) }