11package publish.mavencentral
22
3+ import com.vanniktech.maven.publish.MavenPublishBaseExtension
4+ import com.vanniktech.maven.publish.MavenPublishPlugin
5+ import com.vanniktech.maven.publish.SonatypeHost
36import org.gradle.api.Plugin
47import org.gradle.api.Project
58import org.gradle.api.publish.PublishingExtension
69import org.gradle.api.publish.maven.MavenPublication
7- import org.gradle.plugins.signing.SigningExtension
10+ import org.gradle.plugins.signing.Sign
811
9- class PublishToMavenCentralPlugin : Plugin <Project > {
12+ @Suppress(" unused" ) // false positive
13+ class PublishToMavenCentralPlugin : Plugin <Project > {
1014 override fun apply (target : Project ) {
11- target.plugins.apply (" maven-publish" )
12- target.plugins.apply (" signing" )
13- target.plugins.apply (" org.ajoberstar.grgit" )
15+ target.plugins.apply (org.gradle.api.publish.maven.plugins.MavenPublishPlugin ::class .java)
1416
1517 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 " )
18+ val mavenCentralUser = target.propOrEnv(" ORG_GRADLE_PROJECT_mavenCentralUsername " ) ? : target.propOrEnv( " mavenCentralUsername " )
19+ val mavenCentralPassword = target.propOrEnv(" ORG_GRADLE_PROJECT_mavenCentralPassword " ) ? : target.propOrEnv( " mavenCentralPassword " )
20+ val gpgInMemoryKey = target.propOrEnv(" ORG_GRADLE_PROJECT_signingInMemoryKey " ) ? : target.propOrEnv( " signingInMemoryKey " )
21+ val gpgPassword = target.propOrEnv(" ORG_GRADLE_PROJECT_signingInMemoryKeyPassword " ) ? : target.propOrEnv( " signingInMemoryKeyPassword " )
2022
21- val releaseMode = ! (target.version as String ).endsWith( " -SNAPSHOT " )
23+ val canSign = mavenCentralUser != null && mavenCentralPassword != null && gpgInMemoryKey != null && gpgPassword != null
2224
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- }
25+ target.extensions.getByType(PublishingExtension ::class .java).apply {
4726 publications {
4827 all {
4928 if (this is MavenPublication ) {
29+ groupId = " com.utopia-rise"
30+ artifactId = if (artifactId.isNullOrEmpty()) target.name else artifactId
31+ version = target.version as String
32+
5033 pom {
51- name.set(" kotlin-preprocessors" )
52- description.set(" Gradle plugin to define preprocessors for kotlin language" )
34+ url.set(" https://github.com/utopia-rise/godot-kotlin-jvm.git" )
5335
54- url.set(" https://github.com/utopia-rise/kotlin-preprocessors.git" )
36+ if (name.getOrElse(" " ).isNullOrEmpty()) {
37+ name.set(target.name)
38+ }
39+ if (description.getOrElse(" " ).isNullOrEmpty()) {
40+ description.set(target.description ? : " Godot kotlin jvm module" )
41+ }
5542
5643 scm {
57- connection.set(" scm:git:https://github.com/utopia-rise/kotlin-preprocessors " )
58- developerConnection.set(" scm:git:github.com:utopia-rise/kotlin-preprocessors .git" )
44+ connection.set(" scm:git:https://github.com/utopia-rise/godot- kotlin-jvm " )
45+ developerConnection.set(" scm:git:github.com:utopia-rise/godot- kotlin-jvm .git" )
5946 tag.set(" master" ) // FIXME
60- url.set(" https://github.com/utopia-rise/kotlin-preprocessors " )
47+ url.set(" https://github.com/utopia-rise/godot- kotlin-jvm " )
6148 }
6249
6350 licenses {
6451 license {
6552 name.set(" MIT License" )
66- url.set(" https://github.com/utopia-rise/kotlin-preprocessors /blob/master/LICENSE" )
53+ url.set(" https://github.com/utopia-rise/godot- kotlin-jvm /blob/master/LICENSE" )
6754 distribution.set(" repo" )
6855 }
6956 }
7057
7158 developers {
59+ developer {
60+ id.set(" core" )
61+ name.set(" Ranie Jade Ramiso" )
62+ url.set(" https://github.com/raniejade" )
63+ email.set(" raniejaderamiso@gmail.com" )
64+ }
7265 developer {
7366 id.set(" core" )
7467 name.set(" Pierre-Thomas Meisels" )
7568 url.set(" https://github.com/piiertho" )
7669 email.set(" meisels27@yahoo.fr" )
7770 }
71+ developer {
72+ id.set(" core" )
73+ name.set(" Cedric Hippmann" )
74+ url.set(" https://github.com/chippmann" )
75+ email.set(" cedric.hippmann@hotmail.com" )
76+ }
77+ developer {
78+ id.set(" core" )
79+ name.set(" Tristan Grespinet" )
80+ url.set(" https://github.com/CedNaru" )
81+ email.set(" ced.naru@gmail.com" )
82+ }
7883 }
7984 }
8085 }
8186 }
8287 }
8388 }
89+
90+
91+ if (canSign) {
92+ logger.info(" Will sign artifact for project \" ${name} \" and setup publishing" )
93+
94+ pluginManager.apply (MavenPublishPlugin ::class .java)
95+ extensions.getByType(MavenPublishBaseExtension ::class .java).apply {
96+ publishToMavenCentral(SonatypeHost .CENTRAL_PORTAL )
97+ signAllPublications()
98+ }
99+
100+ target.afterEvaluate {
101+ target
102+ .tasks
103+ .filter { task -> task.name.startsWith(" publish" ) }
104+ .forEach { task ->
105+ task.dependsOn(target.tasks.withType(Sign ::class .java))
106+ }
107+ }
108+ } else {
109+ 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!" )
110+ }
84111 }
85112 }
86113}
87114
88115fun 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
116+ return findProperty(name) as ? String?
117+ ? : System .getenv(name).ifEmpty { null }
118+ ? : providers.systemProperty(name).orNull
94119}
0 commit comments