From 3a2af21839210c7266d42df6894e391981b08f48 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Thu, 2 Jun 2022 20:15:12 +0200 Subject: [PATCH 1/3] rm unused maven pom config --- .../main/kotlin/buildsrc/config/publishing.kt | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/buildSrc/src/main/kotlin/buildsrc/config/publishing.kt b/buildSrc/src/main/kotlin/buildsrc/config/publishing.kt index bcdba2ec..6aa632a1 100644 --- a/buildSrc/src/main/kotlin/buildsrc/config/publishing.kt +++ b/buildSrc/src/main/kotlin/buildsrc/config/publishing.kt @@ -2,31 +2,11 @@ package buildsrc.config import org.gradle.api.Project import org.gradle.api.publish.PublishingExtension -import org.gradle.api.publish.maven.MavenPublication import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.getByType import org.gradle.plugins.signing.SigningExtension -fun MavenPublication.kxsTsGenPom() = pom { - url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator") - packaging = "jar" - licenses { - license { - name.set("The Apache License, Version 2.0") - url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") - } - } - scm { - connection.set("scm:git:git://github.com/adamko-dev/kotlinx-serialization-typescript-generator.git") - url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator") - } -} - - - - - // hacks because IntelliJ still doesn't properly load DSL accessors for buildSrc /** Configure [PublishingExtension] */ From 20a747beb1e6b76a83b48e68c40a779a6d5294a6 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Fri, 3 Jun 2022 16:06:16 +0200 Subject: [PATCH 2/3] * fix Javadoc jar + Javadoc jar signing * fix JavaPlugin + KMPP plugin clash * only publish to Sonatype when credentials are present --- .../convention/maven-publish.gradle.kts | 118 ++++++++++-------- 1 file changed, 66 insertions(+), 52 deletions(-) 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 a1e51884..50ab18d3 100644 --- a/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts +++ b/buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts @@ -2,6 +2,10 @@ package buildsrc.convention import buildsrc.config.publishing import buildsrc.config.signing +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin +import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget + plugins { `maven-publish` @@ -28,16 +32,28 @@ val sonatypeRepositoryReleaseUrl: Provider = provider { val signingKeyId: Provider = providers.gradleProperty("signing.keyId") +val signingKey: Provider = + providers.gradleProperty("signing.key") val signingPassword: Provider = providers.gradleProperty("signing.password") val signingSecretKeyRingFile: Provider = providers.gradleProperty("signing.secretKeyRingFile") +val javadocJarStub by tasks.registering(Jar::class) { + group = JavaBasePlugin.DOCUMENTATION_GROUP + description = "Stub javadoc.jar artifact (required by Maven Central)" + archiveClassifier.set("javadoc") +} + + tasks.matching { it.name.startsWith(PublishingPlugin.PUBLISH_LIFECYCLE_TASK_NAME) && it.group == PublishingPlugin.PUBLISH_TASK_GROUP }.configureEach { + if (sonatypeRepositoryCredentials.isPresent()) { + dependsOn(javadocJarStub) + } doLast { logger.lifecycle("[${this.name}] ${project.group}:${project.name}:${project.version}") } @@ -45,75 +61,62 @@ tasks.matching { publishing { - repositories { - maven(sonatypeRepositoryReleaseUrl) { - name = "sonatype" - credentials(sonatypeRepositoryCredentials.get()) + if (sonatypeRepositoryCredentials.isPresent()) { + repositories { + maven(sonatypeRepositoryReleaseUrl) { + name = "sonatype" + credentials(sonatypeRepositoryCredentials.get()) + } + } + publications.withType().configureEach { + createKxTsGenPom() + artifact(javadocJarStub) } - } - publications.withType().configureEach { - createKxTsGenPom() } } signing { + if (sonatypeRepositoryCredentials.isPresent()) { + if (signingKeyId.isPresent() && signingKey.isPresent() && signingPassword.isPresent()) { + useInMemoryPgpKeys(signingKeyId.get(), signingKey.get(), signingPassword.get()) + } else { + useGpgCmd() + } -// if ( -// signingKeyId.isPresent() && -// signingPassword.isPresent() && -// signingSecretKeyRingFile.isPresent() -// ) { -// useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword) -// } else { -// useGpgCmd() -// } + // sign all publications + sign(publishing.publications) + sign(javadocJarStub.get()) + } +} - useGpgCmd() - // sign all publications - sign(publishing.publications) +plugins.withType(KotlinMultiplatformPlugin::class).configureEach { + publishing.publications.withType().configureEach { + artifact(javadocJarStub) + } } -plugins.configureEach { - when (this) { - // 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"]) -// } -// } - - // 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 { -// if (!plugins.hasPlugin(KotlinMultiplatformPlugin::class)) { -// publishing.publications.create("mavenJava") { -// from(components["java"]) -// artifact(tasks["sourcesJar"]) -// } -// } -// } - - is JavaPlatformPlugin -> { - publishing.publications.create("mavenJavaPlatform") { - from(components["javaPlatform"]) +plugins.withType(JavaPlugin::class).configureEach { + afterEvaluate { + if (!isKotlinMultiplatformJavaEnabled()) { + publishing.publications.create("mavenJava") { + from(components["java"]) + artifact(tasks["sourcesJar"]) } } } } +plugins.withType(JavaPlatformPlugin::class).configureEach { + 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") @@ -122,7 +125,7 @@ fun MavenPublication.createKxTsGenPom(): Unit = pom { licenses { license { name.set("The Apache License, Version 2.0") - url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") + url.set("https://www.apache.org/licenses/LICENSE-2.0.txt") } } @@ -138,3 +141,14 @@ fun MavenPublication.createKxTsGenPom(): Unit = pom { url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator") } } + + +/** Logic from [KotlinJvmTarget.withJava] */ +fun Project.isKotlinMultiplatformJavaEnabled(): Boolean { + val multiplatformExtension: KotlinMultiplatformExtension? = + extensions.findByType(KotlinMultiplatformExtension::class) + + return multiplatformExtension?.targets + ?.any { it is KotlinJvmTarget && it.withJavaEnabled } + ?: false +} From f9b48484b7d7a08c354fe49c5fd591885c1477f6 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Fri, 3 Jun 2022 16:06:55 +0200 Subject: [PATCH 3/3] old code clean up, and use Gradle lazy task config for KotlinCompile config --- .../main/kotlin/buildsrc/config/publishing.kt | 4 ++++ modules/kxs-ts-gen-core/build.gradle.kts | 23 +++---------------- modules/kxs-ts-gen-processor/build.gradle.kts | 3 ++- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/buildSrc/src/main/kotlin/buildsrc/config/publishing.kt b/buildSrc/src/main/kotlin/buildsrc/config/publishing.kt index 6aa632a1..3295aee3 100644 --- a/buildSrc/src/main/kotlin/buildsrc/config/publishing.kt +++ b/buildSrc/src/main/kotlin/buildsrc/config/publishing.kt @@ -9,16 +9,20 @@ import org.gradle.plugins.signing.SigningExtension // hacks because IntelliJ still doesn't properly load DSL accessors for buildSrc + /** Configure [PublishingExtension] */ fun Project.publishing(action: PublishingExtension.() -> Unit): Unit = extensions.configure(action) + val Project.publishing: PublishingExtension get() = extensions.getByType() + /** Configure [SigningExtension] */ fun Project.signing(action: SigningExtension.() -> Unit): Unit = extensions.configure(action) + val Project.signing: SigningExtension get() = extensions.getByType() diff --git a/modules/kxs-ts-gen-core/build.gradle.kts b/modules/kxs-ts-gen-core/build.gradle.kts index 3ed2898d..797157cd 100644 --- a/modules/kxs-ts-gen-core/build.gradle.kts +++ b/modules/kxs-ts-gen-core/build.gradle.kts @@ -9,11 +9,6 @@ kotlin { js(IR) { binaries.executable() -// browser { -// commonWebpackConfig { -// cssSupport.enabled = true -// } -// } nodejs() } @@ -72,10 +67,13 @@ kotlin { implementation(libs.okio.core) } } + // val nativeMain by getting // val nativeTest by getting + val jsMain by getting val jsTest by getting + val jvmMain by getting { dependencies { implementation(project.dependencies.platform(projects.modules.versionsPlatform)) @@ -91,18 +89,3 @@ kotlin { } } } - -// -//val javadocJar by tasks.creating(Jar::class) { -// group = JavaBasePlugin.DOCUMENTATION_GROUP -// description = "Assembles java doc to jar" -// archiveClassifier.set("javadoc") -// from(tasks.javadoc) -//} -// - -//publishing { -// publications.withType().configureEach { -//// artifact(javadocJar) -// } -//} diff --git a/modules/kxs-ts-gen-processor/build.gradle.kts b/modules/kxs-ts-gen-processor/build.gradle.kts index 22e76ae4..548af8cc 100644 --- a/modules/kxs-ts-gen-processor/build.gradle.kts +++ b/modules/kxs-ts-gen-processor/build.gradle.kts @@ -23,7 +23,8 @@ dependencies { testImplementation(kotlin("test")) } -tasks.withType { + +tasks.withType().configureEach { kotlinOptions.freeCompilerArgs += listOf( "-opt-in=kotlinx.serialization.ExperimentalSerializationApi", )