From c82a9f72c214b3f50db3214ccba147db9eef27ec Mon Sep 17 00:00:00 2001 From: Martin Chalupa Date: Thu, 16 Aug 2018 12:45:19 -0700 Subject: [PATCH] Pom and ivy files have the right content when STABLE_PUBLISHING is enabled --- .../ivy/IvyBasePublishPlugin.groovy | 17 +++++-- .../maven/MavenBasePublishPlugin.groovy | 16 ++++-- .../maven/MavenDeveloperPlugin.groovy | 50 +++++++++++-------- ...IvyBasePublishPluginIntegrationSpec.groovy | 13 ++++- ...venBasePublishPluginIntegrationSpec.groovy | 13 ++++- ...MavenDeveloperPluginIntegrationSpec.groovy | 14 +++++- 6 files changed, 93 insertions(+), 30 deletions(-) diff --git a/src/main/groovy/nebula/plugin/publishing/ivy/IvyBasePublishPlugin.groovy b/src/main/groovy/nebula/plugin/publishing/ivy/IvyBasePublishPlugin.groovy index dd0cfaf1..ac62c47f 100644 --- a/src/main/groovy/nebula/plugin/publishing/ivy/IvyBasePublishPlugin.groovy +++ b/src/main/groovy/nebula/plugin/publishing/ivy/IvyBasePublishPlugin.groovy @@ -50,10 +50,14 @@ class IvyBasePublishPlugin implements Plugin { project.publishing { publications { withType(IvyPublication) { - descriptor.status = project.status - descriptor.description { - text = project.description ?: '' + if (! project.state.executed) { + project.afterEvaluate { p -> + configureDescription(it, p) + } + } else { + configureDescription(it, project) } + descriptor.withXml { XmlProvider xml -> def root = xml.asNode() def configurationsNode = root?.configurations @@ -85,4 +89,11 @@ class IvyBasePublishPlugin implements Plugin { } } } + + private void configureDescription(IvyPublication publication, Project p) { + publication.descriptor.status = p.status + publication.descriptor.description { + text = p.description ?: '' + } + } } diff --git a/src/main/groovy/nebula/plugin/publishing/maven/MavenBasePublishPlugin.groovy b/src/main/groovy/nebula/plugin/publishing/maven/MavenBasePublishPlugin.groovy index fff02ac4..7f7e706f 100644 --- a/src/main/groovy/nebula/plugin/publishing/maven/MavenBasePublishPlugin.groovy +++ b/src/main/groovy/nebula/plugin/publishing/maven/MavenBasePublishPlugin.groovy @@ -27,12 +27,22 @@ class MavenBasePublishPlugin implements Plugin { project.publishing { publications { withType(MavenPublication) { - pom { - name = project.name - description = project.description + if (! project.state.executed) { + project.afterEvaluate { p -> + configureDescription(it, p) + } + } else { + configureDescription(it, project) } } } } } + + private void configureDescription(MavenPublication publication, Project p) { + publication.pom { + name = p.name + description = p.description + } + } } diff --git a/src/main/groovy/nebula/plugin/publishing/maven/MavenDeveloperPlugin.groovy b/src/main/groovy/nebula/plugin/publishing/maven/MavenDeveloperPlugin.groovy index 46096f45..fd859ca5 100644 --- a/src/main/groovy/nebula/plugin/publishing/maven/MavenDeveloperPlugin.groovy +++ b/src/main/groovy/nebula/plugin/publishing/maven/MavenDeveloperPlugin.groovy @@ -19,9 +19,7 @@ import nebula.plugin.contacts.BaseContactsPlugin import nebula.plugin.contacts.Contact import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.api.XmlProvider import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.publish.maven.plugins.MavenPublishPlugin class MavenDeveloperPlugin implements Plugin { @Override @@ -38,30 +36,40 @@ class MavenDeveloperPlugin implements Plugin { project.plugins.withType(BaseContactsPlugin) { BaseContactsPlugin contactsPlugin -> project.publishing { publications { - withType(MavenPublication) { - pom.developers { - def myContacts = contactsPlugin.getAllContacts() - myContacts.each { Contact contact -> - developer { - if (contact.github) { - id = contact.github - } else if (contact.twitter) { - id = contact.twitter - } - if (contact.moniker) { - name = contact.moniker - } - - email = contact.email - if (contact.roles) { - roles = contact.roles - } - } + withType(MavenPublication) { publication -> + if (! project.state.executed) { + project.afterEvaluate { + configureContacts(contactsPlugin, publication) } + } else { + configureContacts(contactsPlugin, publication) } } } } } } + + private void configureContacts(BaseContactsPlugin contactsPlugin, MavenPublication publication) { + publication.pom.developers { + def myContacts = contactsPlugin.getAllContacts() + myContacts.each { Contact contact -> + developer { + if (contact.github) { + id = contact.github + } else if (contact.twitter) { + id = contact.twitter + } + if (contact.moniker) { + name = contact.moniker + } + + email = contact.email + if (contact.roles) { + roles = contact.roles + } + } + } + } + } } diff --git a/src/test/groovy/nebula/plugin/publishing/ivy/IvyBasePublishPluginIntegrationSpec.groovy b/src/test/groovy/nebula/plugin/publishing/ivy/IvyBasePublishPluginIntegrationSpec.groovy index 9e5cc782..4f1a9cfd 100644 --- a/src/test/groovy/nebula/plugin/publishing/ivy/IvyBasePublishPluginIntegrationSpec.groovy +++ b/src/test/groovy/nebula/plugin/publishing/ivy/IvyBasePublishPluginIntegrationSpec.groovy @@ -18,6 +18,7 @@ package nebula.plugin.publishing.ivy import nebula.test.IntegrationTestKitSpec import nebula.test.dependencies.DependencyGraphBuilder import nebula.test.dependencies.GradleDependencyGenerator +import spock.lang.Unroll class IvyBasePublishPluginIntegrationSpec extends IntegrationTestKitSpec { File publishDir @@ -78,13 +79,18 @@ class IvyBasePublishPluginIntegrationSpec extends IntegrationTestKitSpec { confs.size() == expectedConfs.size() } - def 'verify ivy.xml is correct'() { + @Unroll + def 'verify ivy.xml is correct with #publishingType'() { buildFile << '''\ apply plugin: 'java' description = 'test description' '''.stripIndent() + settingsFile << """ + $settingsUpdate + """ + when: runTasks('publishNebulaIvyPublicationToTestLocalRepository') @@ -101,6 +107,11 @@ class IvyBasePublishPluginIntegrationSpec extends IntegrationTestKitSpec { artifact.@type == 'jar' artifact.@ext == 'jar' artifact.@conf == 'compile' + + where: + publishingType | settingsUpdate + "STABLE_PUBLISHING" | "enableFeaturePreview(\"STABLE_PUBLISHING\")" + "default publishing"| "" } def 'status changes when set'() { diff --git a/src/test/groovy/nebula/plugin/publishing/maven/MavenBasePublishPluginIntegrationSpec.groovy b/src/test/groovy/nebula/plugin/publishing/maven/MavenBasePublishPluginIntegrationSpec.groovy index b17a970a..fdaede9c 100644 --- a/src/test/groovy/nebula/plugin/publishing/maven/MavenBasePublishPluginIntegrationSpec.groovy +++ b/src/test/groovy/nebula/plugin/publishing/maven/MavenBasePublishPluginIntegrationSpec.groovy @@ -18,6 +18,7 @@ package nebula.plugin.publishing.maven import nebula.test.IntegrationTestKitSpec import nebula.test.dependencies.DependencyGraphBuilder import nebula.test.dependencies.GradleDependencyGenerator +import spock.lang.Unroll class MavenBasePublishPluginIntegrationSpec extends IntegrationTestKitSpec { File publishDir @@ -60,12 +61,17 @@ class MavenBasePublishPluginIntegrationSpec extends IntegrationTestKitSpec { pom.name == 'maventest' } - def 'description appears in pom'() { + @Unroll + def 'description appears in pom with #publishingType'() { given: buildFile << '''\ description = 'Test description' '''.stripIndent() + settingsFile << """ + $settingsUpdate + """ + when: runTasks('generatePomFileForNebulaPublication') @@ -74,6 +80,11 @@ class MavenBasePublishPluginIntegrationSpec extends IntegrationTestKitSpec { def pom = new XmlSlurper().parse(pomFile) pom.description == 'Test description' + + where: + publishingType | settingsUpdate + "STABLE_PUBLISHING" | "enableFeaturePreview(\"STABLE_PUBLISHING\")" + "default publishing"| "" } def 'creates a jar publication'() { diff --git a/src/test/groovy/nebula/plugin/publishing/maven/MavenDeveloperPluginIntegrationSpec.groovy b/src/test/groovy/nebula/plugin/publishing/maven/MavenDeveloperPluginIntegrationSpec.groovy index c0574af8..e96eeb20 100644 --- a/src/test/groovy/nebula/plugin/publishing/maven/MavenDeveloperPluginIntegrationSpec.groovy +++ b/src/test/groovy/nebula/plugin/publishing/maven/MavenDeveloperPluginIntegrationSpec.groovy @@ -16,6 +16,7 @@ package nebula.plugin.publishing.maven import nebula.test.IntegrationTestKitSpec +import spock.lang.Unroll class MavenDeveloperPluginIntegrationSpec extends IntegrationTestKitSpec { def setup() { @@ -34,7 +35,8 @@ class MavenDeveloperPluginIntegrationSpec extends IntegrationTestKitSpec { '''.stripIndent() } - def 'take info from contacts plugin and place in pom'() { + @Unroll + def 'take info from contacts plugin and place in pom with #publishingType'() { buildFile << '''\ apply plugin: 'nebula.contacts' @@ -46,6 +48,10 @@ class MavenDeveloperPluginIntegrationSpec extends IntegrationTestKitSpec { } '''.stripIndent() + settingsFile << """ + $settingsUpdate + """ + when: runTasks('generatePomFileForNebulaPublication') @@ -60,6 +66,12 @@ class MavenDeveloperPluginIntegrationSpec extends IntegrationTestKitSpec { devs[0].name.text() == 'Example Nebula' devs[0].email.text() == 'nebula@example.test' devs[0].id.text() == 'nebula-plugins' + + where: + publishingType | settingsUpdate + "STABLE_PUBLISHING" | "enableFeaturePreview(\"STABLE_PUBLISHING\")" + "default publishing"| "" + } def 'multiple contacts'() {