diff --git a/.buildkite/scripts/dra-workflow.sh b/.buildkite/scripts/dra-workflow.sh index b12c62c68fbc..68a1c427a705 100755 --- a/.buildkite/scripts/dra-workflow.sh +++ b/.buildkite/scripts/dra-workflow.sh @@ -52,6 +52,7 @@ echo --- Building release artifacts $BUILD_SNAPSHOT_ARG \ buildReleaseArtifacts \ exportCompressedDockerImages \ + zipAggregation \ :distribution:generateDependenciesReport PATH="$PATH:${JAVA_HOME}/bin" # Required by the following script diff --git a/build-conventions/build.gradle b/build-conventions/build.gradle index 1283ecd78360..06f05f8b378c 100644 --- a/build-conventions/build.gradle +++ b/build-conventions/build.gradle @@ -24,8 +24,8 @@ plugins { group = "org.elasticsearch" // This project contains Checkstyle rule implementations used by IDEs which use a Java 11 runtime java { - targetCompatibility = 11 - sourceCompatibility = 11 + targetCompatibility = 17 + sourceCompatibility = 17 } gradlePlugin { @@ -73,7 +73,9 @@ dependencies { api buildLibs.maven.model api buildLibs.shadow.plugin api buildLibs.apache.rat - compileOnly buildLibs.checkstyle + api buildLibs.nmcp + + compileOnly buildLibs.checkstyle api(buildLibs.spotless.plugin) { exclude module: "groovy-xml" } diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java index 66ee72da1963..438cb64378e6 100644 --- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java +++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java @@ -13,6 +13,8 @@ import groovy.util.Node; import com.github.jengelman.gradle.plugins.shadow.ShadowExtension; import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin; +import nmcp.NmcpPlugin; + import org.elasticsearch.gradle.internal.conventions.info.GitInfo; import org.elasticsearch.gradle.internal.conventions.precommit.PomValidationPrecommitPlugin; import org.elasticsearch.gradle.internal.conventions.util.Util; @@ -27,6 +29,7 @@ import org.gradle.api.plugins.BasePluginExtension; import org.gradle.api.plugins.ExtensionContainer; import org.gradle.api.plugins.JavaLibraryPlugin; import org.gradle.api.plugins.JavaPlugin; +import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.ProviderFactory; import org.gradle.api.publish.PublishingExtension; @@ -64,6 +67,7 @@ public class PublishPlugin implements Plugin { project.getPluginManager().apply(MavenPublishPlugin.class); project.getPluginManager().apply(PomValidationPrecommitPlugin.class); project.getPluginManager().apply(LicensingPlugin.class); + project.getPluginManager().apply(NmcpPlugin.class); configureJavadocJar(project); configureSourcesJar(project); configurePomGeneration(project); @@ -81,6 +85,11 @@ public class PublishPlugin implements Plugin { publication.from(project.getComponents().getByName("java")); } }); + project.getPlugins().withType(JavaPlugin.class, plugin -> { + var javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class); + javaPluginExtension.withJavadocJar(); + javaPluginExtension.withSourcesJar(); + }); @SuppressWarnings("unchecked") var projectLicenses = (MapProperty) project.getExtensions().getExtraProperties().get("projectLicenses"); publication.getPom().withXml(xml -> { diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/BuildPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/BuildPluginFuncTest.groovy index b5a30f6f4738..2e4ce00d5b39 100644 --- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/BuildPluginFuncTest.groovy +++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/BuildPluginFuncTest.groovy @@ -24,7 +24,7 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest { Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright @@ -32,7 +32,7 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest { documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. - + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. @@ -51,11 +51,11 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest { id 'java' id 'elasticsearch.global-build-info' } - + apply plugin:'elasticsearch.build' group = 'org.acme' description = "some example project" - + repositories { maven { name = "local-test" @@ -66,7 +66,7 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest { } mavenCentral() } - + dependencies { jarHell 'org.elasticsearch:elasticsearch-core:current' } @@ -82,7 +82,7 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest { * Side Public License, v 1. */ package org.elasticsearch; - + public class SampleClass { } """.stripIndent() @@ -114,8 +114,6 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest { then: result.task(":assemble").outcome == TaskOutcome.SUCCESS file("build/distributions/hello-world.jar").exists() - file("build/distributions/hello-world-javadoc.jar").exists() - file("build/distributions/hello-world-sources.jar").exists() assertValidJar(file("build/distributions/hello-world.jar")) } @@ -138,7 +136,7 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest { } licenseFile.set(file("LICENSE")) noticeFile.set(file("NOTICE")) - + tasks.named("forbiddenApisMain").configure {enabled = false } tasks.named('checkstyleMain').configure { enabled = false } tasks.named('loggerUsageCheck').configure { enabled = false } @@ -151,7 +149,6 @@ class BuildPluginFuncTest extends AbstractGradleFuncTest { result.task(":licenseHeaders").outcome == TaskOutcome.SUCCESS result.task(":forbiddenPatterns").outcome == TaskOutcome.SUCCESS result.task(":splitPackagesAudit").outcome == TaskOutcome.SUCCESS - result.task(":validateElasticPom").outcome == TaskOutcome.SUCCESS // disabled but check for being on the task graph result.task(":forbiddenApisMain").outcome == TaskOutcome.SKIPPED result.task(":checkstyleMain").outcome == TaskOutcome.SKIPPED diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java index 6849796579ad..d1d4d456d562 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java @@ -8,6 +8,7 @@ package org.elasticsearch.gradle.internal; +import org.elasticsearch.gradle.internal.conventions.LicensingPlugin; import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin; import org.elasticsearch.gradle.internal.precommit.InternalPrecommitTasks; import org.elasticsearch.gradle.internal.snyk.SnykDependencyMonitoringGradlePlugin; @@ -57,7 +58,7 @@ public class BuildPlugin implements Plugin { } project.getPluginManager().apply("elasticsearch.java"); - project.getPluginManager().apply("elasticsearch.publish"); + project.getPluginManager().apply(LicensingPlugin.class); project.getPluginManager().apply(ElasticsearchJavadocPlugin.class); project.getPluginManager().apply(DependenciesInfoPlugin.class); project.getPluginManager().apply(SnykDependencyMonitoringGradlePlugin.class); diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoPlugin.java index 2c20b6e97d5f..cb593825a95e 100644 --- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoPlugin.java +++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/DependenciesInfoPlugin.java @@ -14,9 +14,13 @@ import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.attributes.Category; +import org.gradle.api.attributes.Usage; import org.gradle.api.plugins.JavaPlugin; public class DependenciesInfoPlugin implements Plugin { + + public static String USAGE_ATTRIBUTE = "DependenciesInfo"; + @Override public void apply(final Project project) { project.getPlugins().apply(CompileOnlyResolvePlugin.class); @@ -42,6 +46,9 @@ public class DependenciesInfoPlugin implements Plugin { ) ); + dependenciesInfoFilesConfiguration.attributes( + attributes -> attributes.attribute(Usage.USAGE_ATTRIBUTE, project.getObjects().named(Usage.class, USAGE_ATTRIBUTE)) + ); project.getArtifacts().add("dependenciesInfoFiles", depsInfo); } diff --git a/build.gradle b/build.gradle index 3d2148480a4b..00fe97af85a2 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,7 @@ plugins { id 'elasticsearch.release-tools' id 'elasticsearch.auto-backporting' id 'elasticsearch.versions' + id 'com.gradleup.nmcp.aggregation' } /** @@ -94,6 +95,22 @@ def filterIntermediatePatches = { List versions -> versions.groupBy {"${it.major}.${it.minor}"}.values().collect {it.max()} } +nmcpAggregation { + // this breaks project isolation but this is broken in elasticsearch build atm anyhow. + publishAllProjectsProbablyBreakingProjectIsolation() +} + +tasks.named('zipAggregation').configure { + // put this in a place that works well with our DRA infrastructure + archiveFileName.unset(); + archiveBaseName.set("elasticsearch-maven-aggregation") + archiveVersion.set(VersionProperties.elasticsearch) + destinationDirectory.set(layout.buildDirectory.dir("distributions")); + + dependsOn gradle.includedBuild('build-tools').task(':zipElasticPublication') + from(zipTree(gradle.includedBuild('build-tools').task(':zipElasticPublication').resolveTask().archiveFile.get())) +} + tasks.register("updateCIBwcVersions") { def writeVersions = { File file, List versions -> file.text = "" diff --git a/distribution/build.gradle b/distribution/build.gradle index 7c755df92785..e672a2368236 100644 --- a/distribution/build.gradle +++ b/distribution/build.gradle @@ -28,6 +28,9 @@ configurations { attributes { attribute(Category.CATEGORY_ATTRIBUTE, project.getObjects().named(Category.class, Category.DOCUMENTATION)) } + attributes { + attribute(Usage.USAGE_ATTRIBUTE, project.getObjects().named(Usage.class, DependenciesInfoPlugin.USAGE_ATTRIBUTE)) + } } } diff --git a/gradle/build.versions.toml b/gradle/build.versions.toml index 185531d16367..e4bac52295e7 100644 --- a/gradle/build.versions.toml +++ b/gradle/build.versions.toml @@ -3,6 +3,7 @@ asm = "9.3" jackson = "2.10.4" junit5 = "5.8.1" spock = "2.1-groovy-3.0" +nmcp = "0.1.5" [libraries] ant = "org.apache.ant:ant:1.10.12" @@ -32,6 +33,7 @@ junit5-platform-launcher = "org.junit.platform:junit-platform-launcher:1.8.1" junit5-vintage = { group = "org.junit.vintage", name="junit-vintage-engine", version.ref="junit5" } maven-model = "org.apache.maven:maven-model:3.6.2" mockito-core = "org.mockito:mockito-core:1.9.5" +nmcp = { group = "com.gradleup.nmcp", name = "nmcp", version.ref="nmcp" } nebula-info = "com.netflix.nebula:gradle-info-plugin:11.3.3" reflections = "org.reflections:reflections:0.9.12" shadow-plugin = "com.gradleup.shadow:shadow-gradle-plugin:8.3.5" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 7fe2a46ab83d..fc775e388a72 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -984,6 +984,16 @@ + + + + + + + + + + @@ -1169,6 +1179,11 @@ + + + + + @@ -1189,6 +1204,11 @@ + + + + + @@ -4031,6 +4051,11 @@ + + + + + @@ -4056,6 +4081,16 @@ + + + + + + + + + + @@ -4066,11 +4101,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + +