diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/kotlin-jvm.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/kotlin-jvm.gradle.kts index da3f29f35b..ed973440f7 100644 --- a/buildSrc/src/main/kotlin/buildsrc/conventions/kotlin-jvm.gradle.kts +++ b/buildSrc/src/main/kotlin/buildsrc/conventions/kotlin-jvm.gradle.kts @@ -1,6 +1,5 @@ package buildsrc.conventions -import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -14,6 +13,10 @@ kotlin { jvmToolchain(projectJvmVersion) } +java { + withSourcesJar() +} + tasks.withType().configureEach { kotlinOptions { jvmTarget = "$projectJvmVersion" diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publish.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publish.gradle.kts index 92aca42bf6..b430f882f2 100644 --- a/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publish.gradle.kts +++ b/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publish.gradle.kts @@ -3,11 +3,36 @@ package buildsrc.conventions plugins { id("buildsrc.conventions.base") `maven-publish` + signing } -publishing { +val signingKeyId = providers.gradleProperty("signingKeyId") +val signingPassword = providers.gradleProperty("signingPassword") +val signingSecretKeyRingFile = providers.gradleProperty("signingSecretKeyRingFile") + +val signingPropertiesPresent = provider { + signingKeyId.isPresent && signingPassword.isPresent && signingSecretKeyRingFile.isPresent +} + +val ossrhUsername = providers.gradleProperty("ossrhUsername") +val ossrhPassword = providers.gradleProperty("ossrhPassword") + +val isSnapshotVersion = provider { version.toString().endsWith("SNAPSHOT") } + + +val javadocJarStub by tasks.creating(Jar::class) { + group = JavaBasePlugin.DOCUMENTATION_GROUP + description = "Stub empty javadoc.jar artifact (a Javadoc jar is required by Maven Central)" + archiveClassifier.set("javadoc") +} + + +publishing { publications.withType().configureEach { + + artifact(javadocJarStub) + // apply default configs for all Maven publications pom { scm { @@ -25,9 +50,30 @@ publishing { maven(rootProject.layout.buildDirectory.dir("maven-project-local")) { name = "MavenProjectLocal" } + + if (ossrhUsername.isPresent && ossrhPassword.isPresent) { + maven("https://oss.sonatype.org/content/repositories/snapshots/") { + name = "SonartypeStaging" + credentials { + username = ossrhUsername.get() + password = ossrhPassword.get() + } + } + + if (!isSnapshotVersion.get()) { + maven("https://oss.sonatype.org/service/local/staging/deploy/maven2/") { + name = "SonatypeProduction" + credentials { + username = ossrhUsername.get() + password = ossrhPassword.get() + } + } + } + } } } + plugins.withType().configureEach { // only create a Java publication when the Java plugin is applied publishing { @@ -38,3 +84,23 @@ plugins.withType().configureEach { } } } + +tasks.withType().configureEach { + // Gradle warns about some signing tasks using publishing task outputs without explicit dependencies. + // Here's a quick fix. + dependsOn(tasks.withType()) + mustRunAfter(tasks.withType()) + + doLast { + logger.lifecycle("[task: ${this@configureEach.path}] ${publication.groupId}:${publication.artifactId}:${publication.version}") + } +} + +signing { + if (signingPropertiesPresent.get()) { + logger.debug("[${project.displayName}] Signing is enabled") + useGpgCmd() + useInMemoryPgpKeys(signingKeyId.get(), signingPassword.get()) + sign(publishing.publications) + } +}