Pārlūkot izejas kodu

Remove nebula publish plugin usage (#69027)

- instead setup publication on our own.
- replaces nebula with a elastic publication
Rene Groeschke 4 gadi atpakaļ
vecāks
revīzija
146f7be242

+ 1 - 2
buildSrc/build.gradle

@@ -88,7 +88,6 @@ dependencies {
   api 'org.apache.commons:commons-compress:1.19'
   api 'org.apache.ant:ant:1.10.8'
   api 'com.netflix.nebula:gradle-extra-configurations-plugin:5.0.1'
-  api 'com.netflix.nebula:nebula-publishing-plugin:17.3.2'
   api 'com.netflix.nebula:gradle-info-plugin:9.2.0'
   api 'org.apache.rat:apache-rat:0.11'
   api "org.elasticsearch:jna:5.5.0"
@@ -245,7 +244,7 @@ if (project != rootProject) {
     maxParallelForks = providers.systemProperty('tests.jvms').forUseAtConfigurationTime().getOrElse(org.elasticsearch.gradle.info.BuildParams.defaultParallel.toString()) as Integer
   }
 
-  publishing.publications.named("nebula").configure {
+  publishing.publications.named("elastic").configure {
     suppressPomMetadataWarningsFor("testFixturesApiElements")
     suppressPomMetadataWarningsFor("testFixturesRuntimeElements")
   }

+ 29 - 4
buildSrc/src/integTest/groovy/org/elasticsearch/gradle/PublishPluginFuncTest.groovy

@@ -15,7 +15,7 @@ import org.xmlunit.builder.Input
 
 class PublishPluginFuncTest extends AbstractGradleFuncTest {
 
-    def "published pom takes es project description into account"() {
+    def "artifacts and tweaked pom is published"() {
         given:
         buildFile << """
             plugins {
@@ -33,6 +33,9 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
 
         then:
         result.task(":generatePom").outcome == TaskOutcome.SUCCESS
+        file("build/distributions/hello-world-1.0.jar").exists()
+        file("build/distributions/hello-world-1.0-javadoc.jar").exists()
+        file("build/distributions/hello-world-1.0-sources.jar").exists()
         file("build/distributions/hello-world-1.0.pom").exists()
         assertXmlEquals(file("build/distributions/hello-world-1.0.pom").text, """
             <project xmlns="http://maven.apache.org/POM/4.0.0" 
@@ -48,7 +51,7 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
         )
     }
 
-    def "generates pom for shadowed elasticsearch plugin"() {
+    def "generates artifacts for shadowed elasticsearch plugin"() {
         given:
         file('license.txt') << "License file"
         file('notice.txt') << "Notice file"
@@ -64,6 +67,14 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
                 classname 'org.acme.HelloWorldPlugin'
                 description = "custom project description"
             }
+            
+            publishing {
+                 repositories {
+                    maven {
+                        url = "\$buildDir/repo"
+                    }
+                 }
+            }
                     
             // requires elasticsearch artifact available
             tasks.named('bundlePlugin').configure { enabled = false }
@@ -74,10 +85,14 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
         """
 
         when:
-        def result = gradleRunner('generatePom').build()
+        def result = gradleRunner('assemble', '--stacktrace').build()
 
         then:
         result.task(":generatePom").outcome == TaskOutcome.SUCCESS
+        file("build/distributions/hello-world-plugin-1.0-original.jar").exists()
+        file("build/distributions/hello-world-plugin-1.0.jar").exists()
+        file("build/distributions/hello-world-plugin-1.0-javadoc.jar").exists()
+        file("build/distributions/hello-world-plugin-1.0-sources.jar").exists()
         file("build/distributions/hello-world-plugin-1.0.pom").exists()
         assertXmlEquals(file("build/distributions/hello-world-plugin-1.0.pom").text, """
             <project xmlns="http://maven.apache.org/POM/4.0.0" 
@@ -180,7 +195,7 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
         """
 
         when:
-        def result = gradleRunner('generatePom', 'validateNebulaPom').build()
+        def result = gradleRunner('generatePom', 'validatElasticPom').build()
 
         then:
         result.task(":generatePom").outcome == TaskOutcome.SUCCESS
@@ -226,6 +241,16 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
                 .build()
         diff.differences.each { difference ->
             println difference
+        }
+        if(diff.differences.size() > 0) {
+            println """ given:
+$toTest
+"""
+            println """ expected:
+$expected
+"""
+
+
         }
         assert diff.hasDifferences() == false
         true

+ 1 - 2
buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy

@@ -154,10 +154,9 @@ class PluginBuildPlugin implements Plugin<Project> {
         }
     }
 
-
     private static void configurePublishing(Project project, PluginPropertiesExtension extension) {
         if (project.plugins.hasPlugin(MavenPublishPlugin)) {
-            project.publishing.publications.nebula(MavenPublication).artifactId(extension.name)
+            project.publishing.publications.elastic(MavenPublication).artifactId(extension.name)
         }
     }
 

+ 30 - 25
buildSrc/src/main/java/org/elasticsearch/gradle/PublishPlugin.java

@@ -9,7 +9,7 @@
 package org.elasticsearch.gradle;
 
 import com.github.jengelman.gradle.plugins.shadow.ShadowBasePlugin;
-import com.github.jengelman.gradle.plugins.shadow.ShadowExtension;
+import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin;
 import groovy.util.Node;
 import groovy.util.NodeList;
 import org.elasticsearch.gradle.info.BuildParams;
@@ -26,12 +26,12 @@ import org.gradle.api.plugins.BasePluginConvention;
 import org.gradle.api.plugins.JavaPlugin;
 import org.gradle.api.publish.PublishingExtension;
 import org.gradle.api.publish.maven.MavenPublication;
+import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
 import org.gradle.api.publish.maven.tasks.GenerateMavenPom;
 import org.gradle.api.tasks.SourceSet;
 import org.gradle.api.tasks.TaskProvider;
 import org.gradle.api.tasks.bundling.Jar;
 import org.gradle.language.base.plugins.LifecycleBasePlugin;
-
 import java.util.concurrent.Callable;
 
 import static org.elasticsearch.gradle.util.GradleUtils.maybeConfigure;
@@ -41,13 +41,21 @@ public class PublishPlugin implements Plugin<Project> {
     @Override
     public void apply(Project project) {
         project.getPluginManager().apply(BasePlugin.class);
-        project.getPluginManager().apply("nebula.maven-nebula-publish");
+        project.getPluginManager().apply(MavenPublishPlugin.class);
         project.getPluginManager().apply(PomValidationPrecommitPlugin.class);
+        configurePublications(project);
         configureJavadocJar(project);
         configureSourcesJar(project);
         configurePomGeneration(project);
     }
 
+    private void configurePublications(Project project) {
+        PublishingExtension publishingExtension = project.getExtensions().getByType(PublishingExtension.class);
+        MavenPublication publication = publishingExtension.getPublications().create("elastic", MavenPublication.class);
+        project.getPlugins().withType(JavaPlugin.class, plugin -> publication.from(project.getComponents().getByName("java")));
+        project.getPlugins().withType(ShadowPlugin.class, plugin -> configureWithShadowPlugin(project, publication));
+    }
+
     private static String getArchivesBaseName(Project project) {
         return project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName();
     }
@@ -73,7 +81,6 @@ public class PublishPlugin implements Plugin<Project> {
         PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class);
         final var mavenPublications = publishing.getPublications().withType(MavenPublication.class);
         addNameAndDescriptiontoPom(project, mavenPublications);
-        configurePomWithShadowPlugin(project, publishing);
 
         mavenPublications.all(publication -> {
             // Add git origin info to generated POM files for internal builds
@@ -93,27 +100,25 @@ public class PublishPlugin implements Plugin<Project> {
         }));
     }
 
-    private static void configurePomWithShadowPlugin(Project project, PublishingExtension publishing) {
-        project.getPluginManager().withPlugin("com.github.johnrengelman.shadow", plugin -> {
-            MavenPublication publication = publishing.getPublications().maybeCreate("shadow", MavenPublication.class);
-            ShadowExtension shadow = project.getExtensions().getByType(ShadowExtension.class);
-            shadow.component(publication);
-            // Workaround for https://github.com/johnrengelman/shadow/issues/334
-            // Here we manually add any project dependencies in the "shadow" configuration to our generated POM
-            publication.getPom().withXml(xml -> {
-                Node root = xml.asNode();
-                Node dependenciesNode = (Node) ((NodeList) root.get("dependencies")).get(0);
-                project.getConfigurations().getByName(ShadowBasePlugin.getCONFIGURATION_NAME()).getAllDependencies().all(dependency -> {
-                    if (dependency instanceof ProjectDependency) {
-                        Node dependencyNode = dependenciesNode.appendNode("dependency");
-                        dependencyNode.appendNode("groupId", dependency.getGroup());
-                        ProjectDependency projectDependency = (ProjectDependency) dependency;
-                        String artifactId = getArchivesBaseName(projectDependency.getDependencyProject());
-                        dependencyNode.appendNode("artifactId", artifactId);
-                        dependencyNode.appendNode("version", dependency.getVersion());
-                        dependencyNode.appendNode("scope", "compile");
-                    }
-                });
+    private static void configureWithShadowPlugin(Project project, MavenPublication publication) {
+        // Workaround for https://github.com/johnrengelman/shadow/issues/334
+        // Here we manually add any project dependencies in the "shadow" configuration to our generated POM
+        publication.getPom().withXml(xml -> {
+            Node root = xml.asNode();
+            NodeList dependencies = (NodeList) root.get("dependencies");
+            Node dependenciesNode = (dependencies.size() == 0)
+                ? root.appendNode("dependencies")
+                : (Node) ((NodeList) root.get("dependencies")).get(0);
+            project.getConfigurations().getByName(ShadowBasePlugin.getCONFIGURATION_NAME()).getAllDependencies().all(dependency -> {
+                if (dependency instanceof ProjectDependency) {
+                    Node dependencyNode = dependenciesNode.appendNode("dependency");
+                    dependencyNode.appendNode("groupId", dependency.getGroup());
+                    ProjectDependency projectDependency = (ProjectDependency) dependency;
+                    String artifactId = getArchivesBaseName(projectDependency.getDependencyProject());
+                    dependencyNode.appendNode("artifactId", artifactId);
+                    dependencyNode.appendNode("version", dependency.getVersion());
+                    dependencyNode.appendNode("scope", "compile");
+                }
             });
         });
     }

+ 1 - 1
buildSrc/src/testKit/elasticsearch.build/build.gradle

@@ -58,7 +58,7 @@ 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
-tasks.named("validateNebulaPom").configure {enabled = false }
+tasks.named("validateElasticPom").configure {enabled = false }
 // requires further classpath
 tasks.named("loggerUsageCheck").configure {enabled = false }
 tasks.register("hello") {

+ 1 - 1
distribution/archives/integ-test-zip/build.gradle

@@ -26,7 +26,7 @@ ext.buildDist = parent.tasks.named("buildIntegTestZip")
 
 publishing {
   publications {
-    nebula {
+    elastic {
       pom.packaging = 'zip'
       artifact(buildDist.flatMap { it.archiveFile })
     }

+ 1 - 2
server/build.gradle

@@ -13,7 +13,7 @@ apply plugin: 'elasticsearch.internal-cluster-test'
 
 publishing {
   publications {
-    nebula {
+    elastic {
       artifactId 'elasticsearch'
     }
   }
@@ -69,7 +69,6 @@ dependencies {
   // repackaged jna with native bits linked against all elastic supported platforms
   api "org.elasticsearch:jna:${versions.jna}"
 
-
   api "co.elastic.logging:log4j2-ecs-layout:${versions.ecsLogging}"
   api "co.elastic.logging:ecs-logging-core:${versions.ecsLogging}"