Skip to content

Commit 05ecef3

Browse files
authored
Publish to Maven Central (#35)
* setup maven publish convention, fix project group kxtsgen -> kxstsgen, rename kotlin-mpp convention plugin to avoid clash with the actual KotlinMultiplatformPlugin * tidy-up Maven publishing config
1 parent 04c1cf0 commit 05ecef3

File tree

5 files changed

+97
-54
lines changed

5 files changed

+97
-54
lines changed

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ plugins {
88
}
99

1010

11-
project.group = "dev.adamko.kxtsgen"
11+
project.group = "dev.adamko.kxstsgen"
1212
project.version = "0.0.0-SNAPSHOT"
1313
gitVersioning.apply {
1414
refs {

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

-6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
package buildsrc.config
22

3-
import org.gradle.api.GradleException
4-
import org.gradle.api.Project
53
import org.gradle.api.file.ProjectLayout
6-
import org.gradle.kotlin.dsl.findByType
74
import org.gradle.plugins.ide.idea.model.IdeaModule
8-
import org.jetbrains.kotlin.gradle.dsl.KotlinTargetContainerWithPresetFunctions
9-
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests
10-
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension
115

126

137
/** exclude generated Gradle code, so it doesn't clog up search results */

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

+95-43
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,38 @@ package buildsrc.convention
22

33
import buildsrc.config.publishing
44
import buildsrc.config.signing
5-
import org.gradle.api.credentials.PasswordCredentials
6-
import org.gradle.internal.credentials.DefaultPasswordCredentials
75

86
plugins {
9-
id("buildsrc.convention.subproject")
107
`maven-publish`
118
signing
129
}
1310

14-
15-
//val sonatypeRepositoryCredentials: Provider<PasswordCredentials> =
16-
// providers.credentials(PasswordCredentials::class, "sonatypeRepositoryCredentials")
17-
18-
val sonatypeRepositoryUsername: String? by project.extra
19-
val sonatypeRepositoryPassword: String? by project.extra
20-
val sonatypeRepositoryCredentials: Provider<PasswordCredentials> = providers.provider {
21-
if (sonatypeRepositoryUsername.isNullOrBlank() || sonatypeRepositoryPassword.isNullOrBlank()) {
22-
null
23-
} else {
24-
DefaultPasswordCredentials(sonatypeRepositoryUsername, sonatypeRepositoryPassword)
11+
val sonatypeRepositoryCredentials: Provider<Action<PasswordCredentials>> = providers
12+
.credentials(PasswordCredentials::class, "sonatypeRepository")
13+
.map { credentials ->
14+
Action<PasswordCredentials> {
15+
username = credentials.username
16+
password = credentials.password
17+
}
2518
}
26-
}
27-
28-
29-
val sonatypeRepositoryId: String by project.extra
3019

3120
val sonatypeRepositoryReleaseUrl: Provider<String> = provider {
3221
if (version.toString().endsWith("SNAPSHOT")) {
33-
"https://oss.sonatype.org/content/repositories/snapshots/"
22+
"https://s01.oss.sonatype.org/content/repositories/snapshots/"
3423
} else {
35-
"https://oss.sonatype.org/service/local/staging/deployByRepositoryId/$sonatypeRepositoryId/"
24+
"https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
3625
}
3726
}
3827

3928

29+
val signingKeyId: Provider<String> =
30+
providers.gradleProperty("signing.keyId")
31+
val signingPassword: Provider<String> =
32+
providers.gradleProperty("signing.password")
33+
val signingSecretKeyRingFile: Provider<String> =
34+
providers.gradleProperty("signing.secretKeyRingFile")
35+
36+
4037
tasks.matching {
4138
it.name.startsWith(PublishingPlugin.PUBLISH_LIFECYCLE_TASK_NAME)
4239
&& it.group == PublishingPlugin.PUBLISH_TASK_GROUP
@@ -47,42 +44,97 @@ tasks.matching {
4744
}
4845

4946

50-
5147
publishing {
5248
repositories {
53-
if (sonatypeRepositoryCredentials.isPresent) {
54-
maven(sonatypeRepositoryReleaseUrl) {
55-
name = "oss"
56-
credentials {
57-
username = sonatypeRepositoryCredentials.get().username
58-
password = sonatypeRepositoryCredentials.get().password
59-
}
60-
}
49+
maven(sonatypeRepositoryReleaseUrl) {
50+
name = "sonatype"
51+
credentials(sonatypeRepositoryCredentials.get())
6152
}
6253
}
54+
publications.withType<MavenPublication>().configureEach {
55+
createKxTsGenPom()
56+
}
6357
}
6458

59+
6560
signing {
66-
val signingKeyId: String? by project
67-
val signingKey: String? by project
68-
val signingPassword: String? by project
69-
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
70-
setRequired(false)
61+
62+
// if (
63+
// signingKeyId.isPresent() &&
64+
// signingPassword.isPresent() &&
65+
// signingSecretKeyRingFile.isPresent()
66+
// ) {
67+
// useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
68+
// } else {
69+
// useGpgCmd()
70+
// }
71+
72+
useGpgCmd()
73+
74+
// sign all publications
75+
sign(publishing.publications)
7176
}
7277

7378

74-
plugins.withType<JavaPlugin> {
75-
if (!plugins.hasPlugin(KotlinMultiplatformPlugin::class)) {
76-
val publication = publishing.publications.create<MavenPublication>("mavenJava") {
77-
from(components["java"])
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"])
111+
}
78112
}
79-
signing { sign(publication) }
80113
}
81114
}
82115

83-
plugins.withType<JavaPlatformPlugin> {
84-
val publication = publishing.publications.create<MavenPublication>("mavenJavaPlatform") {
85-
from(components["javaPlatform"])
116+
117+
fun MavenPublication.createKxTsGenPom(): Unit = pom {
118+
name.set("Kotlinx Serialization Typescript Generator")
119+
description.set("KxTsGen creates TypeScript interfaces from Kotlinx Serialization @Serializable classes")
120+
url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator")
121+
122+
licenses {
123+
license {
124+
name.set("The Apache License, Version 2.0")
125+
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
126+
}
127+
}
128+
129+
developers {
130+
developer {
131+
email.set("[email protected]")
132+
}
133+
}
134+
135+
scm {
136+
connection.set("scm:git:git://github.com/adamko-dev/kotlinx-serialization-typescript-generator.git")
137+
developerConnection.set("scm:git:ssh://github.com:adamko-dev/kotlinx-serialization-typescript-generator.git")
138+
url.set("https://github.com/adamko-dev/kotlinx-serialization-typescript-generator")
86139
}
87-
signing { sign(publication) }
88140
}

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

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
plugins {
2-
buildsrc.convention.`kotlin-multiplatform`
2+
buildsrc.convention.`kotlin-mpp`
33
buildsrc.convention.`maven-publish`
44
kotlin("plugin.serialization")
55
id("io.kotest.multiplatform")
66
}
77

8-
val kotlinxSerializationVersion = "1.3.2"
9-
val kotestVersion = "5.2.3"
10-
118
kotlin {
129

1310
js(IR) {

0 commit comments

Comments
 (0)