Skip to content

Commit d38f503

Browse files
authored
Maven publishing fixes (#39)
* rm unused maven pom config * * fix Javadoc jar + Javadoc jar signing * fix JavaPlugin + KMPP plugin clash * only publish to Sonatype when credentials are present * old code clean up, and use Gradle lazy task config for KotlinCompile config
1 parent 10378e0 commit d38f503

File tree

4 files changed

+75
-93
lines changed

4 files changed

+75
-93
lines changed

buildSrc/src/main/kotlin/buildsrc/config/publishing.kt

+4-20
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,27 @@ package buildsrc.config
22

33
import org.gradle.api.Project
44
import org.gradle.api.publish.PublishingExtension
5-
import org.gradle.api.publish.maven.MavenPublication
65
import org.gradle.kotlin.dsl.configure
76
import org.gradle.kotlin.dsl.getByType
87
import org.gradle.plugins.signing.SigningExtension
98

109

11-
fun MavenPublication.kxsTsGenPom() = pom {
12-
url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator")
13-
packaging = "jar"
14-
licenses {
15-
license {
16-
name.set("The Apache License, Version 2.0")
17-
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
18-
}
19-
}
20-
scm {
21-
connection.set("scm:git:git://github.com/adamko-dev/kotlinx-serialization-typescript-generator.git")
22-
url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator")
23-
}
24-
}
25-
26-
27-
28-
29-
3010
// hacks because IntelliJ still doesn't properly load DSL accessors for buildSrc
3111

12+
3213
/** Configure [PublishingExtension] */
3314
fun Project.publishing(action: PublishingExtension.() -> Unit): Unit =
3415
extensions.configure(action)
3516

17+
3618
val Project.publishing: PublishingExtension
3719
get() = extensions.getByType<PublishingExtension>()
3820

21+
3922
/** Configure [SigningExtension] */
4023
fun Project.signing(action: SigningExtension.() -> Unit): Unit =
4124
extensions.configure(action)
4225

26+
4327
val Project.signing: SigningExtension
4428
get() = extensions.getByType<SigningExtension>()

buildSrc/src/main/kotlin/buildsrc/convention/maven-publish.gradle.kts

+66-52
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ package buildsrc.convention
22

33
import buildsrc.config.publishing
44
import buildsrc.config.signing
5+
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
6+
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
7+
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
8+
59

610
plugins {
711
`maven-publish`
@@ -28,92 +32,91 @@ val sonatypeRepositoryReleaseUrl: Provider<String> = provider {
2832

2933
val signingKeyId: Provider<String> =
3034
providers.gradleProperty("signing.keyId")
35+
val signingKey: Provider<String> =
36+
providers.gradleProperty("signing.key")
3137
val signingPassword: Provider<String> =
3238
providers.gradleProperty("signing.password")
3339
val signingSecretKeyRingFile: Provider<String> =
3440
providers.gradleProperty("signing.secretKeyRingFile")
3541

3642

43+
val javadocJarStub by tasks.registering(Jar::class) {
44+
group = JavaBasePlugin.DOCUMENTATION_GROUP
45+
description = "Stub javadoc.jar artifact (required by Maven Central)"
46+
archiveClassifier.set("javadoc")
47+
}
48+
49+
3750
tasks.matching {
3851
it.name.startsWith(PublishingPlugin.PUBLISH_LIFECYCLE_TASK_NAME)
3952
&& it.group == PublishingPlugin.PUBLISH_TASK_GROUP
4053
}.configureEach {
54+
if (sonatypeRepositoryCredentials.isPresent()) {
55+
dependsOn(javadocJarStub)
56+
}
4157
doLast {
4258
logger.lifecycle("[${this.name}] ${project.group}:${project.name}:${project.version}")
4359
}
4460
}
4561

4662

4763
publishing {
48-
repositories {
49-
maven(sonatypeRepositoryReleaseUrl) {
50-
name = "sonatype"
51-
credentials(sonatypeRepositoryCredentials.get())
64+
if (sonatypeRepositoryCredentials.isPresent()) {
65+
repositories {
66+
maven(sonatypeRepositoryReleaseUrl) {
67+
name = "sonatype"
68+
credentials(sonatypeRepositoryCredentials.get())
69+
}
70+
}
71+
publications.withType<MavenPublication>().configureEach {
72+
createKxTsGenPom()
73+
artifact(javadocJarStub)
5274
}
53-
}
54-
publications.withType<MavenPublication>().configureEach {
55-
createKxTsGenPom()
5675
}
5776
}
5877

5978

6079
signing {
80+
if (sonatypeRepositoryCredentials.isPresent()) {
81+
if (signingKeyId.isPresent() && signingKey.isPresent() && signingPassword.isPresent()) {
82+
useInMemoryPgpKeys(signingKeyId.get(), signingKey.get(), signingPassword.get())
83+
} else {
84+
useGpgCmd()
85+
}
6186

62-
// if (
63-
// signingKeyId.isPresent() &&
64-
// signingPassword.isPresent() &&
65-
// signingSecretKeyRingFile.isPresent()
66-
// ) {
67-
// useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
68-
// } else {
69-
// useGpgCmd()
70-
// }
87+
// sign all publications
88+
sign(publishing.publications)
89+
sign(javadocJarStub.get())
90+
}
91+
}
7192

72-
useGpgCmd()
7393

74-
// sign all publications
75-
sign(publishing.publications)
94+
plugins.withType(KotlinMultiplatformPlugin::class).configureEach {
95+
publishing.publications.withType<MavenPublication>().configureEach {
96+
artifact(javadocJarStub)
97+
}
7698
}
7799

78100

79-
plugins.configureEach {
80-
when (this) {
81-
// not necessary? It looks like the plugin creates publications correctly?
82-
// is KotlinMultiplatformPlugin -> {
83-
//
84-
// // Stub javadoc.jar artifact (required by Maven Central?)
85-
// val javadocJar by tasks.registering(Jar::class) {
86-
// archiveClassifier.set("javadoc")
87-
// }
88-
//
89-
// publishing.publications.create<MavenPublication>("mavenKotlinMpp") {
90-
// from(components["kotlin"])
91-
// artifact(javadocJar)
92-
// artifact(tasks["sourcesJar"])
93-
// }
94-
// }
95-
96-
// JavaPlugin clashes with KotlinMultiplatformPlugin?
97-
// causes error
98-
// Artifact kxs-ts-gen-core-jvm-maven-publish-SNAPSHOT.jar wasn't produced by this build
99-
// is JavaPlugin -> afterEvaluate {
100-
// if (!plugins.hasPlugin(KotlinMultiplatformPlugin::class)) {
101-
// publishing.publications.create<MavenPublication>("mavenJava") {
102-
// from(components["java"])
103-
// artifact(tasks["sourcesJar"])
104-
// }
105-
// }
106-
// }
107-
108-
is JavaPlatformPlugin -> {
109-
publishing.publications.create<MavenPublication>("mavenJavaPlatform") {
110-
from(components["javaPlatform"])
101+
plugins.withType(JavaPlugin::class).configureEach {
102+
afterEvaluate {
103+
if (!isKotlinMultiplatformJavaEnabled()) {
104+
publishing.publications.create<MavenPublication>("mavenJava") {
105+
from(components["java"])
106+
artifact(tasks["sourcesJar"])
111107
}
112108
}
113109
}
114110
}
115111

116112

113+
plugins.withType(JavaPlatformPlugin::class).configureEach {
114+
publishing.publications.create<MavenPublication>("mavenJavaPlatform") {
115+
from(components["javaPlatform"])
116+
}
117+
}
118+
119+
117120
fun MavenPublication.createKxTsGenPom(): Unit = pom {
118121
name.set("Kotlinx Serialization Typescript Generator")
119122
description.set("KxTsGen creates TypeScript interfaces from Kotlinx Serialization @Serializable classes")
@@ -122,7 +125,7 @@ fun MavenPublication.createKxTsGenPom(): Unit = pom {
122125
licenses {
123126
license {
124127
name.set("The Apache License, Version 2.0")
125-
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
128+
url.set("https://www.apache.org/licenses/LICENSE-2.0.txt")
126129
}
127130
}
128131

@@ -138,3 +141,14 @@ fun MavenPublication.createKxTsGenPom(): Unit = pom {
138141
url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator")
139142
}
140143
}
144+
145+
146+
/** Logic from [KotlinJvmTarget.withJava] */
147+
fun Project.isKotlinMultiplatformJavaEnabled(): Boolean {
148+
val multiplatformExtension: KotlinMultiplatformExtension? =
149+
extensions.findByType(KotlinMultiplatformExtension::class)
150+
151+
return multiplatformExtension?.targets
152+
?.any { it is KotlinJvmTarget && it.withJavaEnabled }
153+
?: false
154+
}

modules/kxs-ts-gen-core/build.gradle.kts

+3-20
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,6 @@ kotlin {
99

1010
js(IR) {
1111
binaries.executable()
12-
// browser {
13-
// commonWebpackConfig {
14-
// cssSupport.enabled = true
15-
// }
16-
// }
1712
nodejs()
1813
}
1914

@@ -72,10 +67,13 @@ kotlin {
7267
implementation(libs.okio.core)
7368
}
7469
}
70+
7571
// val nativeMain by getting
7672
// val nativeTest by getting
73+
7774
val jsMain by getting
7875
val jsTest by getting
76+
7977
val jvmMain by getting {
8078
dependencies {
8179
implementation(project.dependencies.platform(projects.modules.versionsPlatform))
@@ -91,18 +89,3 @@ kotlin {
9189
}
9290
}
9391
}
94-
95-
//
96-
//val javadocJar by tasks.creating(Jar::class) {
97-
// group = JavaBasePlugin.DOCUMENTATION_GROUP
98-
// description = "Assembles java doc to jar"
99-
// archiveClassifier.set("javadoc")
100-
// from(tasks.javadoc)
101-
//}
102-
//
103-
104-
//publishing {
105-
// publications.withType<MavenPublication>().configureEach {
106-
//// artifact(javadocJar)
107-
// }
108-
//}

modules/kxs-ts-gen-processor/build.gradle.kts

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ dependencies {
2323
testImplementation(kotlin("test"))
2424
}
2525

26-
tasks.withType<KotlinCompile> {
26+
27+
tasks.withType<KotlinCompile>().configureEach {
2728
kotlinOptions.freeCompilerArgs += listOf(
2829
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
2930
)

0 commit comments

Comments
 (0)