Skip to content

Commit ebcf4ef

Browse files
authored
Remove nebula publish plugin usage (#69027) (#69176)
- instead setup publication on our own. - replaces nebula with a elastic publication
1 parent 775edea commit ebcf4ef

File tree

7 files changed

+65
-36
lines changed

7 files changed

+65
-36
lines changed

buildSrc/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ dependencies {
9595
api 'org.apache.commons:commons-compress:1.19'
9696
api 'org.apache.ant:ant:1.10.8'
9797
api 'com.netflix.nebula:gradle-extra-configurations-plugin:5.0.1'
98-
api 'com.netflix.nebula:nebula-publishing-plugin:17.3.2'
9998
api 'com.netflix.nebula:gradle-info-plugin:9.2.0'
10099
api 'org.apache.rat:apache-rat:0.11'
101100
api "org.elasticsearch:jna:5.7.0-1"
@@ -243,7 +242,7 @@ if (project != rootProject) {
243242
maxParallelForks = providers.systemProperty('tests.jvms').forUseAtConfigurationTime().getOrElse(org.elasticsearch.gradle.info.BuildParams.defaultParallel.toString()) as Integer
244243
}
245244

246-
publishing.publications.named("nebula").configure {
245+
publishing.publications.named("elastic").configure {
247246
suppressPomMetadataWarningsFor("testFixturesApiElements")
248247
suppressPomMetadataWarningsFor("testFixturesRuntimeElements")
249248
}

buildSrc/src/integTest/groovy/org/elasticsearch/gradle/PublishPluginFuncTest.groovy

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import org.xmlunit.builder.Input
1515

1616
class PublishPluginFuncTest extends AbstractGradleFuncTest {
1717

18-
def "published pom takes es project description into account"() {
18+
def "artifacts and tweaked pom is published"() {
1919
given:
2020
buildFile << """
2121
plugins {
@@ -33,6 +33,9 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
3333

3434
then:
3535
result.task(":generatePom").outcome == TaskOutcome.SUCCESS
36+
file("build/distributions/hello-world-1.0.jar").exists()
37+
file("build/distributions/hello-world-1.0-javadoc.jar").exists()
38+
file("build/distributions/hello-world-1.0-sources.jar").exists()
3639
file("build/distributions/hello-world-1.0.pom").exists()
3740
assertXmlEquals(file("build/distributions/hello-world-1.0.pom").text, """
3841
<project xmlns="http://maven.apache.org/POM/4.0.0"
@@ -48,7 +51,7 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
4851
)
4952
}
5053

51-
def "generates pom for shadowed elasticsearch plugin"() {
54+
def "generates artifacts for shadowed elasticsearch plugin"() {
5255
given:
5356
file('license.txt') << "License file"
5457
file('notice.txt') << "Notice file"
@@ -64,6 +67,14 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
6467
classname 'org.acme.HelloWorldPlugin'
6568
description = "custom project description"
6669
}
70+
71+
publishing {
72+
repositories {
73+
maven {
74+
url = "\$buildDir/repo"
75+
}
76+
}
77+
}
6778
6879
// requires elasticsearch artifact available
6980
tasks.named('bundlePlugin').configure { enabled = false }
@@ -74,10 +85,14 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
7485
"""
7586

7687
when:
77-
def result = gradleRunner('generatePom').build()
88+
def result = gradleRunner('assemble', '--stacktrace').build()
7889

7990
then:
8091
result.task(":generatePom").outcome == TaskOutcome.SUCCESS
92+
file("build/distributions/hello-world-plugin-1.0-original.jar").exists()
93+
file("build/distributions/hello-world-plugin-1.0.jar").exists()
94+
file("build/distributions/hello-world-plugin-1.0-javadoc.jar").exists()
95+
file("build/distributions/hello-world-plugin-1.0-sources.jar").exists()
8196
file("build/distributions/hello-world-plugin-1.0.pom").exists()
8297
assertXmlEquals(file("build/distributions/hello-world-plugin-1.0.pom").text, """
8398
<project xmlns="http://maven.apache.org/POM/4.0.0"
@@ -180,7 +195,7 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
180195
"""
181196

182197
when:
183-
def result = gradleRunner('generatePom', 'validateNebulaPom').build()
198+
def result = gradleRunner('generatePom', 'validatElasticPom').build()
184199

185200
then:
186201
result.task(":generatePom").outcome == TaskOutcome.SUCCESS
@@ -226,6 +241,16 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
226241
.build()
227242
diff.differences.each { difference ->
228243
println difference
244+
}
245+
if(diff.differences.size() > 0) {
246+
println """ given:
247+
$toTest
248+
"""
249+
println """ expected:
250+
$expected
251+
"""
252+
253+
229254
}
230255
assert diff.hasDifferences() == false
231256
true

buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,13 @@ class PluginBuildPlugin implements Plugin<Project> {
164164
archiveBaseName = archiveBaseName.get() + "-client"
165165
}
166166
// always configure publishing for client jars
167-
project.publishing.publications.nebula(MavenPublication).artifactId(extension.name + "-client")
167+
project.publishing.publications.elastic(MavenPublication).artifactId(extension.name + "-client")
168168
project.tasks.withType(GenerateMavenPom.class).configureEach { GenerateMavenPom generatePOMTask ->
169169
generatePOMTask.destination = "${project.buildDir}/distributions/${project.archivesBaseName}-client-${project.versions.elasticsearch}.pom"
170170
}
171171
} else {
172172
if (project.plugins.hasPlugin(MavenPublishPlugin)) {
173-
project.publishing.publications.nebula(MavenPublication).artifactId(extension.name)
173+
project.publishing.publications.elastic(MavenPublication).artifactId(extension.name)
174174
}
175175
}
176176
}

buildSrc/src/main/java/org/elasticsearch/gradle/PublishPlugin.java

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
package org.elasticsearch.gradle;
1010

1111
import com.github.jengelman.gradle.plugins.shadow.ShadowBasePlugin;
12-
import com.github.jengelman.gradle.plugins.shadow.ShadowExtension;
12+
import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin;
1313
import groovy.util.Node;
1414
import groovy.util.NodeList;
1515
import org.elasticsearch.gradle.info.BuildParams;
@@ -26,12 +26,12 @@
2626
import org.gradle.api.plugins.JavaPlugin;
2727
import org.gradle.api.publish.PublishingExtension;
2828
import org.gradle.api.publish.maven.MavenPublication;
29+
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
2930
import org.gradle.api.publish.maven.tasks.GenerateMavenPom;
3031
import org.gradle.api.tasks.SourceSet;
3132
import org.gradle.api.tasks.TaskProvider;
3233
import org.gradle.api.tasks.bundling.Jar;
3334
import org.gradle.language.base.plugins.LifecycleBasePlugin;
34-
3535
import java.util.concurrent.Callable;
3636

3737
import static org.elasticsearch.gradle.util.GradleUtils.maybeConfigure;
@@ -41,13 +41,21 @@ public class PublishPlugin implements Plugin<Project> {
4141
@Override
4242
public void apply(Project project) {
4343
project.getPluginManager().apply(BasePlugin.class);
44-
project.getPluginManager().apply("nebula.maven-nebula-publish");
44+
project.getPluginManager().apply(MavenPublishPlugin.class);
4545
project.getPluginManager().apply(PomValidationPrecommitPlugin.class);
46+
configurePublications(project);
4647
configureJavadocJar(project);
4748
configureSourcesJar(project);
4849
configurePomGeneration(project);
4950
}
5051

52+
private void configurePublications(Project project) {
53+
PublishingExtension publishingExtension = project.getExtensions().getByType(PublishingExtension.class);
54+
MavenPublication publication = publishingExtension.getPublications().create("elastic", MavenPublication.class);
55+
project.getPlugins().withType(JavaPlugin.class, plugin -> publication.from(project.getComponents().getByName("java")));
56+
project.getPlugins().withType(ShadowPlugin.class, plugin -> configureWithShadowPlugin(project, publication));
57+
}
58+
5159
private static String getArchivesBaseName(Project project) {
5260
return project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName();
5361
}
@@ -73,7 +81,6 @@ private static void configurePomGeneration(Project project) {
7381
PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class);
7482
final var mavenPublications = publishing.getPublications().withType(MavenPublication.class);
7583
addNameAndDescriptiontoPom(project, mavenPublications);
76-
configurePomWithShadowPlugin(project, publishing);
7784

7885
mavenPublications.all(publication -> {
7986
// Add git origin info to generated POM files for internal builds
@@ -93,27 +100,25 @@ private static void addNameAndDescriptiontoPom(Project project, NamedDomainObjec
93100
}));
94101
}
95102

96-
private static void configurePomWithShadowPlugin(Project project, PublishingExtension publishing) {
97-
project.getPluginManager().withPlugin("com.github.johnrengelman.shadow", plugin -> {
98-
MavenPublication publication = publishing.getPublications().maybeCreate("shadow", MavenPublication.class);
99-
ShadowExtension shadow = project.getExtensions().getByType(ShadowExtension.class);
100-
shadow.component(publication);
101-
// Workaround for https://github.com/johnrengelman/shadow/issues/334
102-
// Here we manually add any project dependencies in the "shadow" configuration to our generated POM
103-
publication.getPom().withXml(xml -> {
104-
Node root = xml.asNode();
105-
Node dependenciesNode = (Node) ((NodeList) root.get("dependencies")).get(0);
106-
project.getConfigurations().getByName(ShadowBasePlugin.getCONFIGURATION_NAME()).getAllDependencies().all(dependency -> {
107-
if (dependency instanceof ProjectDependency) {
108-
Node dependencyNode = dependenciesNode.appendNode("dependency");
109-
dependencyNode.appendNode("groupId", dependency.getGroup());
110-
ProjectDependency projectDependency = (ProjectDependency) dependency;
111-
String artifactId = getArchivesBaseName(projectDependency.getDependencyProject());
112-
dependencyNode.appendNode("artifactId", artifactId);
113-
dependencyNode.appendNode("version", dependency.getVersion());
114-
dependencyNode.appendNode("scope", "compile");
115-
}
116-
});
103+
private static void configureWithShadowPlugin(Project project, MavenPublication publication) {
104+
// Workaround for https://github.com/johnrengelman/shadow/issues/334
105+
// Here we manually add any project dependencies in the "shadow" configuration to our generated POM
106+
publication.getPom().withXml(xml -> {
107+
Node root = xml.asNode();
108+
NodeList dependencies = (NodeList) root.get("dependencies");
109+
Node dependenciesNode = (dependencies.size() == 0)
110+
? root.appendNode("dependencies")
111+
: (Node) ((NodeList) root.get("dependencies")).get(0);
112+
project.getConfigurations().getByName(ShadowBasePlugin.getCONFIGURATION_NAME()).getAllDependencies().all(dependency -> {
113+
if (dependency instanceof ProjectDependency) {
114+
Node dependencyNode = dependenciesNode.appendNode("dependency");
115+
dependencyNode.appendNode("groupId", dependency.getGroup());
116+
ProjectDependency projectDependency = (ProjectDependency) dependency;
117+
String artifactId = getArchivesBaseName(projectDependency.getDependencyProject());
118+
dependencyNode.appendNode("artifactId", artifactId);
119+
dependencyNode.appendNode("version", dependency.getVersion());
120+
dependencyNode.appendNode("scope", "compile");
121+
}
117122
});
118123
});
119124
}

buildSrc/src/testKit/elasticsearch.build/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ tasks.named("forbiddenApisMain").configure { enabled = false }
6060
tasks.named("thirdPartyAudit").configure { enabled = false }
6161

6262
// TODO: shouldn't be part of BuildPlugin, should be tested separately
63-
tasks.named("validateNebulaPom").configure {enabled = false }
63+
tasks.named("validateElasticPom").configure {enabled = false }
6464
// This requires an additional Jar not part of build-tools
6565
tasks.named("loggerUsageCheck").configure {enabled = false }
6666
tasks.register("hello") {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ ext.buildDist = parent.tasks.named("buildIntegTestZip")
2626

2727
publishing {
2828
publications {
29-
nebula {
29+
elastic {
3030
pom.packaging = 'zip'
3131
artifact(buildDist.flatMap { it.archiveFile })
3232
}

server/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ apply plugin: 'elasticsearch.internal-cluster-test'
1515

1616
publishing {
1717
publications {
18-
nebula {
18+
elastic {
1919
artifactId 'elasticsearch'
2020
}
2121
}

0 commit comments

Comments
 (0)