@@ -18,13 +18,16 @@ package nebula.plugin.publishing
1818import org.gradle.api.Plugin
1919import org.gradle.api.Project
2020import org.gradle.api.provider.ProviderFactory
21+ import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
2122import org.gradle.kotlin.dsl.apply
23+ import org.gradle.kotlin.dsl.withType
2224import javax.inject.Inject
2325
2426/* *
2527 * Configures artifact signing and publication to NetflixOSS and Maven Central
2628 */
27- open class NebulaOssPublishingPlugin @Inject constructor(private val providerFactory : ProviderFactory ): Plugin<Project> {
29+ open class NebulaOssPublishingPlugin @Inject constructor(private val providerFactory : ProviderFactory ) :
30+ Plugin <Project > {
2831 companion object {
2932 const val netflixOssDefaultRepositoryBaseUrl = " https://artifacts-oss.netflix.net/artifactory"
3033 const val netflixOssGradlePluginsRepository = " gradle-plugins"
@@ -43,6 +46,16 @@ open class NebulaOssPublishingPlugin @Inject constructor(private val providerFac
4346 project.pluginManager.apply (MavenCentralPublishingPlugin ::class )
4447 project.pluginManager.apply (NebulaOssRepositoriesPlugin ::class )
4548
49+ project.plugins.withId(" com.netflix.nebula.release" ) {
50+ project.afterEvaluate {
51+ project.tasks.withType<PublishToMavenRepository > {
52+ mustRunAfter(project.rootProject.tasks.named(" release" ))
53+ }
54+ project.rootProject.tasks.named(" postRelease" ) {
55+ dependsOn(project.tasks.withType<PublishToMavenRepository >())
56+ }
57+ }
58+ }
4659 }
4760
4861 private fun setExtensionDefaults (nebulaOssPublishingExtension : NebulaOssPublishingExtension , project : Project ) {
@@ -64,7 +77,7 @@ open class NebulaOssPublishingPlugin @Inject constructor(private val providerFac
6477 " sonatypeStagingProfileId"
6578 ) ? : netflixDefaultStagingProfile
6679
67- if (! stagingProfileId.isNotBlank()) {
80+ if (! stagingProfileId.isNotBlank()) {
6881 extension.stagingProfileId.convention(stagingProfileId)
6982 }
7083 }
@@ -77,14 +90,14 @@ open class NebulaOssPublishingPlugin @Inject constructor(private val providerFac
7790 " sonatypePackageGroup"
7891 ) ? : project.group.toString().split(" ." ).take(2 ).joinToString(" ." )
7992
80- if (packageGroup.isNotBlank()) {
93+ if (packageGroup.isNotBlank()) {
8194 extension.packageGroup.convention(packageGroup)
8295 }
8396 }
8497
8598 private fun setSigningKey (extension : NebulaOssPublishingExtension , project : Project ) {
8699 val signingKeyFile = project.rootProject.file(signingKeyFileLocation)
87- if (signingKeyFile.exists()) {
100+ if (signingKeyFile.exists()) {
88101 extension.signingKey.convention(signingKeyFile.readText())
89102 } else {
90103 val signingKey = findPropertyValue(
@@ -93,54 +106,64 @@ open class NebulaOssPublishingPlugin @Inject constructor(private val providerFac
93106 " sonatype.signingKey" ,
94107 " netflixOssSigningKey"
95108 )
96- if (! signingKey.isNullOrBlank()) {
109+ if (! signingKey.isNullOrBlank()) {
97110 extension.signingKey.convention(signingKey)
98111 }
99112 }
100113 }
101114
102115 private fun setSigningPassword (extension : NebulaOssPublishingExtension , project : Project ) {
103- val signingPassword = findPropertyValue(project,
116+ val signingPassword = findPropertyValue(
117+ project,
104118 " NETFLIX_OSS_SIGNING_PASSWORD" ,
105119 " sonatype.signingPassword" ,
106- " netflixOssSigningPassword" )
107- if (! signingPassword.isNullOrBlank()) {
120+ " netflixOssSigningPassword"
121+ )
122+ if (! signingPassword.isNullOrBlank()) {
108123 extension.signingPassword.convention(signingPassword)
109124 }
110125 }
111126
112127 private fun setNetflixOssCredentials (extension : NebulaOssPublishingExtension , project : Project ) {
113- val netflixOssUsername = findPropertyValue(project,
128+ val netflixOssUsername = findPropertyValue(
129+ project,
114130 " NETFLIX_OSS_REPO_USERNAME" ,
115131 " netflixOss.username" ,
116- " netflixOssUsername" )
117- if (! netflixOssUsername.isNullOrBlank()) {
132+ " netflixOssUsername"
133+ )
134+ if (! netflixOssUsername.isNullOrBlank()) {
118135 extension.netflixOssUsername.convention(netflixOssUsername)
119136 }
120137
121- val netflixOssPassword = findPropertyValue(project,
138+ val netflixOssPassword = findPropertyValue(
139+ project,
122140 " NETFLIX_OSS_REPO_PASSWORD" ,
123141 " netflixOss.password" ,
124- " netflixOssPassword" )
125- if (! netflixOssPassword.isNullOrBlank()) {
142+ " netflixOssPassword"
143+ )
144+ if (! netflixOssPassword.isNullOrBlank()) {
126145 extension.netflixOssPassword.convention(netflixOssPassword)
127146 }
128147 }
129148
130149 private fun setMavenCentralCredentials (extension : NebulaOssPublishingExtension , project : Project ) {
131- val sonatypeUsername = findPropertyValue(project,
150+ val sonatypeUsername = findPropertyValue(
151+ project,
132152 " NETFLIX_OSS_SONATYPE_USERNAME" ,
133153 " sonatype.username" ,
134- " sonatypeUsername" )
135- if (! sonatypeUsername.isNullOrBlank()) {
154+ " sonatypeUsername"
155+ )
156+ if (! sonatypeUsername.isNullOrBlank()) {
136157 extension.sonatypeUsername.convention(sonatypeUsername)
137158 }
138159
139- val sonatypePassword = findPropertyValue(project,
160+ val sonatypePassword = findPropertyValue(
161+ project,
140162 " NETFLIX_OSS_SONATYPE_PASSWORD" ,
141163 " sonatype.password" ,
142- " sonatypePassword" )
143- if (! sonatypePassword.isNullOrBlank()) {
164+ " sonatypePassword"
165+ )
166+ if (! sonatypePassword.isNullOrBlank()) {
144167 extension.sonatypePassword.convention(sonatypePassword)
145168 }
146169 }
@@ -152,7 +175,7 @@ open class NebulaOssPublishingPlugin @Inject constructor(private val providerFac
152175 " netflixOss.repositoryBaseUrl" ,
153176 " netflixOssRepositoryBaseUrl"
154177 )
155- if (! repositoryBaseUrl.isNullOrBlank()) {
178+ if (! repositoryBaseUrl.isNullOrBlank()) {
156179 extension.netflixOssRepositoryBaseUrl.convention(repositoryBaseUrl)
157180 } else {
158181 extension.netflixOssRepositoryBaseUrl.convention(netflixOssDefaultRepositoryBaseUrl)
@@ -195,32 +218,38 @@ open class NebulaOssPublishingPlugin @Inject constructor(private val providerFac
195218 }
196219
197220 private fun projectExecutionHasTask (project : Project , task : String ): Boolean {
198- return project.gradle.startParameter.taskNames.contains(task) || project.gradle.startParameter.taskNames.contains(" :${task} " )
221+ return project.gradle.startParameter.taskNames.contains(task) || project.gradle.startParameter.taskNames.contains(
222+ " :${task} "
223+ )
199224 }
200225
201- private fun findPropertyValue (project : Project ,
202- envVariableName : String ,
203- namespacedPropertyName : String ,
204- propertyName : String
205- ) : String? {
226+ private fun findPropertyValue (
227+ project : Project ,
228+ envVariableName : String ,
229+ namespacedPropertyName : String ,
230+ propertyName : String
231+ ): String? {
206232 val propertyValueFromEnv = readEnvVariable(envVariableName)
207233 return when {
208234 propertyValueFromEnv != null -> {
209235 propertyValueFromEnv
210236 }
237+
211238 project.hasProperty(propertyName) -> {
212239 project.prop(propertyName)
213240 }
241+
214242 project.hasProperty(namespacedPropertyName) -> {
215243 project.prop(namespacedPropertyName)
216244 }
245+
217246 else -> null
218247 }
219248 }
220249
221- private fun readEnvVariable (envVariableName : String ) : String? {
250+ private fun readEnvVariable (envVariableName : String ): String? {
222251 val envVariable = providerFactory.environmentVariable(envVariableName)
223- return if (envVariable.isPresent) envVariable.get() else null
252+ return if (envVariable.isPresent) envVariable.get() else null
224253 }
225254
226255 private fun Project.prop (s : String ): String? = project.findProperty(s) as String?
0 commit comments