From a0741f8d7737584a3ccbf715aa1870ea629a6381 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 2 Jun 2022 00:18:27 +0200 Subject: [PATCH 1/2] setup maven publish convention, fix project group kxtsgen -> kxstsgen, rename kotlin-mpp convention plugin to avoid clash with the actual KotlinMultiplatformPlugin --- build.gradle.kts | 2 +- ...tform.gradle.kts => kotlin-mpp.gradle.kts} | 0 .../convention/maven-publish.gradle.kts | 136 ++++++++++++------ modules/kxs-ts-gen-core/build.gradle.kts | 5 +- 4 files changed, 96 insertions(+), 47 deletions(-) rename buildSrc/src/main/kotlin/buildsrc/convention/{kotlin-multiplatform.gradle.kts => kotlin-mpp.gradle.kts} (100%) diff --git a/build.gradle.kts b/build.gradle.kts index 8f3ce8ab..23a84af9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } -project.group = "dev.adamko.kxtsgen" +project.group = "dev.adamko.kxstsgen" project.version = "0.0.0-SNAPSHOT" gitVersioning.apply { refs { diff --git a/buildSrc/src/main/kotlin/buildsrc/convention/kotlin-multiplatform.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/convention/kotlin-mpp.gradle.kts similarity index 100% rename from buildSrc/src/main/kotlin/buildsrc/convention/kotlin-multiplatform.gradle.kts rename to buildSrc/src/main/kotlin/buildsrc/convention/kotlin-mpp.gradle.kts diff --git a/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts index b2286ad0..f4c5eee0 100644 --- a/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts +++ b/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts @@ -2,41 +2,36 @@ package buildsrc.convention import buildsrc.config.publishing import buildsrc.config.signing -import org.gradle.api.credentials.PasswordCredentials -import org.gradle.internal.credentials.DefaultPasswordCredentials +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin plugins { - id("buildsrc.convention.subproject") `maven-publish` signing } -//val sonatypeRepositoryCredentials: Provider = -// providers.credentials(PasswordCredentials::class, "sonatypeRepositoryCredentials") - -val sonatypeRepositoryUsername: String? by project.extra -val sonatypeRepositoryPassword: String? by project.extra -val sonatypeRepositoryCredentials: Provider = providers.provider { - if (sonatypeRepositoryUsername.isNullOrBlank() || sonatypeRepositoryPassword.isNullOrBlank()) { - null - } else { - DefaultPasswordCredentials(sonatypeRepositoryUsername, sonatypeRepositoryPassword) - } -} - - -val sonatypeRepositoryId: String by project.extra +val sonatypeRepositoryUsername: Provider = + providers.gradleProperty("sonatypeRepositoryUsername") +val sonatypeRepositoryPassword: Provider = + providers.gradleProperty("sonatypeRepositoryPassword") val sonatypeRepositoryReleaseUrl: Provider = provider { if (version.toString().endsWith("SNAPSHOT")) { - "https://oss.sonatype.org/content/repositories/snapshots/" + "https://s01.oss.sonatype.org/content/repositories/snapshots/" } else { - "https://oss.sonatype.org/service/local/staging/deployByRepositoryId/$sonatypeRepositoryId/" + "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" } } +val signingKeyId: Provider = + providers.gradleProperty("signing.keyId") +val signingPassword: Provider = + providers.gradleProperty("signing.password") +val signingSecretKeyRingFile: Provider = + providers.gradleProperty("signing.secretKeyRingFile") + + tasks.matching { it.name.startsWith(PublishingPlugin.PUBLISH_LIFECYCLE_TASK_NAME) && it.group == PublishingPlugin.PUBLISH_TASK_GROUP @@ -47,42 +42,99 @@ tasks.matching { } - publishing { repositories { - if (sonatypeRepositoryCredentials.isPresent) { - maven(sonatypeRepositoryReleaseUrl) { - name = "oss" - credentials { - username = sonatypeRepositoryCredentials.get().username - password = sonatypeRepositoryCredentials.get().password - } + maven(sonatypeRepositoryReleaseUrl) { + name = "sonatype" + credentials { + username = sonatypeRepositoryUsername.get() + password = sonatypeRepositoryPassword.get() } } } + publications.withType().configureEach { + createKxTsGenPom() + } } + signing { - val signingKeyId: String? by project - val signingKey: String? by project - val signingPassword: String? by project - useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword) - setRequired(false) + +// if ( +// signingKeyId.isPresent() && +// signingPassword.isPresent() && +// signingSecretKeyRingFile.isPresent() +// ) { +// useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword) +// } else { +// useGpgCmd() +// } + + useGpgCmd() + + // sign all publications + sign(publishing.publications) } -plugins.withType { - if (!plugins.hasPlugin(KotlinMultiplatformPlugin::class)) { - val publication = publishing.publications.create("mavenJava") { - from(components["java"]) +plugins.configureEach { + when (this) { + is KotlinMultiplatformPlugin -> { + + // Stub javadoc.jar artifact (required by Maven Central?) + val javadocJar by tasks.registering(Jar::class) { + archiveClassifier.set("javadoc") + } + + publishing.publications.create("mavenKotlinMpp") { + from(components["kotlin"]) + artifact(javadocJar) + artifact(tasks["sourcesJar"]) + } + } + + // clashes with KtMPP plugin? + // causes error + // Artifact kxs-ts-gen-core-jvm-maven-publish-SNAPSHOT.jar wasn't produced by this build +// is JavaPlugin -> afterEvaluate { +// if (!plugins.hasPlugin(KotlinMultiplatformPlugin::class)) { +// publishing.publications.create("mavenJava") { +// from(components["java"]) +// artifact(tasks["sourcesJar"]) +// } +// } +// } + + is JavaPlatformPlugin -> { + publishing.publications.create("mavenJavaPlatform") { + from(components["javaPlatform"]) + } } - signing { sign(publication) } } } -plugins.withType { - val publication = publishing.publications.create("mavenJavaPlatform") { - from(components["javaPlatform"]) + +fun MavenPublication.createKxTsGenPom(): Unit = pom { + name.set("Kotlinx Serialization Typescript Generator") + description.set("KxTsGen creates TypeScript interfaces from Kotlinx Serialization @Serializable classes") + url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator") + + licenses { + license { + name.set("The Apache License, Version 2.0") + url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") + } + } + + developers { + developer { + email.set("adam@adamko.dev") + } + } + + scm { + connection.set("scm:git:git://github.com/adamko-dev/kotlinx-serialization-typescript-generator.git") + developerConnection.set("scm:git:ssh://github.com:adamko-dev/kotlinx-serialization-typescript-generator.git") + url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator") } - signing { sign(publication) } } diff --git a/modules/kxs-ts-gen-core/build.gradle.kts b/modules/kxs-ts-gen-core/build.gradle.kts index 2f67133e..3ed2898d 100644 --- a/modules/kxs-ts-gen-core/build.gradle.kts +++ b/modules/kxs-ts-gen-core/build.gradle.kts @@ -1,13 +1,10 @@ plugins { - buildsrc.convention.`kotlin-multiplatform` + buildsrc.convention.`kotlin-mpp` buildsrc.convention.`maven-publish` kotlin("plugin.serialization") id("io.kotest.multiplatform") } -val kotlinxSerializationVersion = "1.3.2" -val kotestVersion = "5.2.3" - kotlin { js(IR) { From 17be9f88f856421fc7f387177f7bb39c95406ad7 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 2 Jun 2022 12:47:25 +0200 Subject: [PATCH 2/2] tidy-up Maven publishing config --- .../src/main/kotlin/buildsrc/config/gradle.kt | 6 --- .../convention/maven-publish.gradle.kts | 50 +++++++++---------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/buildSrc/src/main/kotlin/buildsrc/config/gradle.kt b/buildSrc/src/main/kotlin/buildsrc/config/gradle.kt index d897a509..e13da441 100644 --- a/buildSrc/src/main/kotlin/buildsrc/config/gradle.kt +++ b/buildSrc/src/main/kotlin/buildsrc/config/gradle.kt @@ -1,13 +1,7 @@ package buildsrc.config -import org.gradle.api.GradleException -import org.gradle.api.Project import org.gradle.api.file.ProjectLayout -import org.gradle.kotlin.dsl.findByType import org.gradle.plugins.ide.idea.model.IdeaModule -import org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests -import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension /** exclude generated Gradle code, so it doesn't clog up search results */ diff --git a/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts index f4c5eee0..a1e51884 100644 --- a/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts +++ b/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts @@ -2,18 +2,20 @@ package buildsrc.convention import buildsrc.config.publishing import buildsrc.config.signing -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin plugins { `maven-publish` signing } - -val sonatypeRepositoryUsername: Provider = - providers.gradleProperty("sonatypeRepositoryUsername") -val sonatypeRepositoryPassword: Provider = - providers.gradleProperty("sonatypeRepositoryPassword") +val sonatypeRepositoryCredentials: Provider> = providers + .credentials(PasswordCredentials::class, "sonatypeRepository") + .map { credentials -> + Action { + username = credentials.username + password = credentials.password + } + } val sonatypeRepositoryReleaseUrl: Provider = provider { if (version.toString().endsWith("SNAPSHOT")) { @@ -46,10 +48,7 @@ publishing { repositories { maven(sonatypeRepositoryReleaseUrl) { name = "sonatype" - credentials { - username = sonatypeRepositoryUsername.get() - password = sonatypeRepositoryPassword.get() - } + credentials(sonatypeRepositoryCredentials.get()) } } publications.withType().configureEach { @@ -79,21 +78,22 @@ signing { plugins.configureEach { when (this) { - is KotlinMultiplatformPlugin -> { - - // Stub javadoc.jar artifact (required by Maven Central?) - val javadocJar by tasks.registering(Jar::class) { - archiveClassifier.set("javadoc") - } - - publishing.publications.create("mavenKotlinMpp") { - from(components["kotlin"]) - artifact(javadocJar) - artifact(tasks["sourcesJar"]) - } - } + // not necessary? It looks like the plugin creates publications correctly? +// is KotlinMultiplatformPlugin -> { +// +// // Stub javadoc.jar artifact (required by Maven Central?) +// val javadocJar by tasks.registering(Jar::class) { +// archiveClassifier.set("javadoc") +// } +// +// publishing.publications.create("mavenKotlinMpp") { +// from(components["kotlin"]) +// artifact(javadocJar) +// artifact(tasks["sourcesJar"]) +// } +// } - // clashes with KtMPP plugin? + // JavaPlugin clashes with KotlinMultiplatformPlugin? // causes error // Artifact kxs-ts-gen-core-jvm-maven-publish-SNAPSHOT.jar wasn't produced by this build // is JavaPlugin -> afterEvaluate { @@ -105,7 +105,7 @@ plugins.configureEach { // } // } - is JavaPlatformPlugin -> { + is JavaPlatformPlugin -> { publishing.publications.create("mavenJavaPlatform") { from(components["javaPlatform"]) }