11package publish.mavencentral
22
3+ import com.vanniktech.maven.publish.MavenPublishBaseExtension
4+ import com.vanniktech.maven.publish.MavenPublishPlugin
35import org.gradle.api.Plugin
46import org.gradle.api.Project
57import org.gradle.api.publish.PublishingExtension
68import org.gradle.api.publish.maven.MavenPublication
7- import org.gradle.plugins.signing.SigningExtension
9+ import org.gradle.plugins.signing.Sign
810
9- class PublishToMavenCentralPlugin : Plugin <Project > {
11+ @Suppress(" unused" ) // false positive
12+ class PublishToMavenCentralPlugin : Plugin <Project > {
1013 override fun apply (target : Project ) {
11- target.plugins.apply (" maven-publish" )
12- target.plugins.apply (" signing" )
13- target.plugins.apply (" org.ajoberstar.grgit" )
14+ target.plugins.apply (org.gradle.api.publish.maven.plugins.MavenPublishPlugin ::class .java)
1415
1516 target.afterEvaluate {
16- val ossrhUser = target.propOrEnv(" GODOT_KOTLIN_MAVEN_CENTRAL_TOKEN_USERNAME " )
17- val ossrhPassword = target.propOrEnv(" GODOT_KOTLIN_MAVEN_CENTRAL_TOKEN_PASSWORD " )
18- val signingKey = target.propOrEnv(" GODOT_KOTLIN_GPG_PRIVATE_KEY_ASCII " )
19- val signingPassword = target.propOrEnv(" GODOT_KOTLIN_GPG_KEY_PASSPHRASE " )
17+ val mavenCentralUser = target.propOrEnv(" ORG_GRADLE_PROJECT_mavenCentralUsername " ) ? : target.propOrEnv( " mavenCentralUsername " )
18+ val mavenCentralPassword = target.propOrEnv(" ORG_GRADLE_PROJECT_mavenCentralPassword " ) ? : target.propOrEnv( " mavenCentralPassword " )
19+ val gpgInMemoryKey = target.propOrEnv(" ORG_GRADLE_PROJECT_signingInMemoryKey " ) ? : target.propOrEnv( " signingInMemoryKey " )
20+ val gpgPassword = target.propOrEnv(" ORG_GRADLE_PROJECT_signingInMemoryKeyPassword " ) ? : target.propOrEnv( " signingInMemoryKeyPassword " )
2021
21- val releaseMode = ! (target.version as String ).endsWith( " -SNAPSHOT " )
22+ val canSign = mavenCentralUser != null && mavenCentralPassword != null && gpgInMemoryKey != null && gpgPassword != null
2223
23- target.extensions.configure(SigningExtension ::class .java) {
24- @Suppress(" UnstableApiUsage" )
25- useInMemoryPgpKeys(signingKey, signingPassword)
26- target.extensions.findByType(PublishingExtension ::class .java)?.publications?.all {
27- sign(this )
28- }
29- }
30-
31- target.extensions.configure(PublishingExtension ::class .java) {
32- repositories {
33- maven {
34- val targetRepo = if (releaseMode) {
35- " https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
36- } else {
37- " https://s01.oss.sonatype.org/content/repositories/snapshots/"
38- }
39- setUrl(targetRepo)
40-
41- credentials {
42- username = ossrhUser
43- password = ossrhPassword
44- }
45- }
46- }
24+ target.extensions.getByType(PublishingExtension ::class .java).apply {
4725 publications {
4826 all {
4927 if (this is MavenPublication ) {
50- pom {
51- name.set( " kotlin-preprocessors " )
52- description.set( " Gradle plugin to define preprocessors for kotlin language " )
28+ groupId = " com.utopia-rise "
29+ artifactId = if (artifactId.isNullOrEmpty()) target.name else artifactId
30+ version = target.version as String
5331
32+ pom {
5433 url.set(" https://github.com/utopia-rise/kotlin-preprocessors.git" )
5534
35+ if (name.getOrElse(" " ).isNullOrEmpty()) {
36+ name.set(target.name)
37+ }
38+ if (description.getOrElse(" " ).isNullOrEmpty()) {
39+ description.set(target.description ? : " Godot kotlin jvm module" )
40+ }
41+
5642 scm {
5743 connection.set(" scm:git:https://github.com/utopia-rise/kotlin-preprocessors" )
5844 developerConnection.set(" scm:git:github.com:utopia-rise/kotlin-preprocessors.git" )
@@ -69,26 +55,64 @@ class PublishToMavenCentralPlugin: Plugin<Project> {
6955 }
7056
7157 developers {
58+ developer {
59+ id.set(" core" )
60+ name.set(" Ranie Jade Ramiso" )
61+ url.set(" https://github.com/raniejade" )
62+ email.set(" raniejaderamiso@gmail.com" )
63+ }
7264 developer {
7365 id.set(" core" )
7466 name.set(" Pierre-Thomas Meisels" )
7567 url.set(" https://github.com/piiertho" )
7668 email.set(" meisels27@yahoo.fr" )
7769 }
70+ developer {
71+ id.set(" core" )
72+ name.set(" Cedric Hippmann" )
73+ url.set(" https://github.com/chippmann" )
74+ email.set(" cedric.hippmann@hotmail.com" )
75+ }
76+ developer {
77+ id.set(" core" )
78+ name.set(" Tristan Grespinet" )
79+ url.set(" https://github.com/CedNaru" )
80+ email.set(" ced.naru@gmail.com" )
81+ }
7882 }
7983 }
8084 }
8185 }
8286 }
8387 }
88+
89+
90+ if (canSign) {
91+ logger.info(" Will sign artifact for project \" ${name} \" and setup publishing" )
92+
93+ pluginManager.apply (MavenPublishPlugin ::class .java)
94+ extensions.getByType(MavenPublishBaseExtension ::class .java).apply {
95+ publishToMavenCentral()
96+ signAllPublications()
97+ }
98+
99+ target.afterEvaluate {
100+ target
101+ .tasks
102+ .filter { task -> task.name.startsWith(" publish" ) }
103+ .forEach { task ->
104+ task.dependsOn(target.tasks.withType(Sign ::class .java))
105+ }
106+ }
107+ } else {
108+ logger.warn(" Cannot sign project \" ${name} \" as credentials are missing. Will not setup signing and remote publishing credentials. Publishing will only work to maven local!" )
109+ }
84110 }
85111 }
86112}
87113
88114fun Project.propOrEnv (name : String ): String? {
89- var property: String? = findProperty(name) as String?
90- if (property == null ) {
91- property = System .getenv(name)
92- }
93- return property
115+ return findProperty(name) as ? String?
116+ ? : System .getenv(name)?.ifEmpty { null }
117+ ? : providers.systemProperty(name).orNull
94118}
0 commit comments