Skip to content

Commit 502e772

Browse files
authored
Merge pull request #196 from yandex/users/bacecek/refactor_publishing
Migrate publishing to com.vanniktech.maven.publish
2 parents 2c0e57d + 9433181 commit 502e772

File tree

4 files changed

+40
-129
lines changed

4 files changed

+40
-129
lines changed

build.gradle.kts

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import io.github.gradlenexus.publishplugin.NexusPublishExtension
21
import kotlinx.kover.gradle.plugin.dsl.KoverProjectExtension
32
import kotlinx.kover.gradle.plugin.dsl.tasks.KoverXmlReport
43

@@ -12,26 +11,6 @@ val enableCoverage: Boolean by extra
1211

1312
val isUnderTeamcity = providers.environmentVariable("TEAMCITY_VERSION").isPresent
1413

15-
val nexusUsername: Provider<String> = providers.environmentVariable("NEXUS_USERNAME")
16-
val nexusPassword: Provider<String> = providers.environmentVariable("NEXUS_PASSWORD")
17-
18-
if (nexusUsername.isPresent && nexusPassword.isPresent) {
19-
apply(plugin = "io.github.gradle-nexus.publish-plugin")
20-
extensions.configure<NexusPublishExtension> {
21-
this.repositories {
22-
sonatype {
23-
nexusUrl.set(uri("https://oss.sonatype.org/service/local/"))
24-
snapshotRepositoryUrl.set(uri("https://oss.sonatype.org/content/repositories/snapshots/"))
25-
26-
username.set(nexusUsername)
27-
password.set(nexusPassword)
28-
29-
packageGroup.set("com.yandex.yatagan")
30-
}
31-
}
32-
}
33-
}
34-
3514
tasks {
3615
if (isUnderTeamcity) {
3716
register("publish") {

buildSrc/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ dependencies {
1616
implementation(libs.kotlin.binaryCompatibilityGradle)
1717
implementation(libs.kotlin.koverGradle)
1818
implementation(libs.dokka.gradle)
19-
implementation(libs.nexusPublish.gradle)
19+
implementation(libs.publish.gradle)
2020
implementation(libs.ksp.gradle)
2121

2222
implementation(kotlin("stdlib"))

buildSrc/src/main/kotlin/yatagan.artifact.gradle.kts

Lines changed: 38 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
import com.vanniktech.maven.publish.JavadocJar
2+
import com.vanniktech.maven.publish.KotlinJvm
3+
import com.vanniktech.maven.publish.SonatypeHost
14
import com.yandex.yatagan.gradle.isValidSemVerString
2-
import org.gradle.kotlin.dsl.registering
35

46
plugins {
57
id("yatagan.base-module")
68
id("org.jetbrains.dokka")
79
id("org.jetbrains.dokka-javadoc")
8-
`maven-publish`
9-
signing
10+
id("com.vanniktech.maven.publish")
1011
}
1112

1213
val yataganVersion: String by extra
@@ -15,124 +16,55 @@ check(isValidSemVerString(yataganVersion)) {
1516
"`$yataganVersion` is not a valid version"
1617
}
1718

18-
// For release publications
19-
val mavenUrl: Provider<String> = providers.environmentVariable("MAVEN_REPOSITORY_URL")
20-
21-
// For snapshot version publications
22-
val mavenSnapshotUrl: Provider<String> = providers.environmentVariable("MAVEN_REPOSITORY_SNAPSHOT_URL")
23-
24-
// maven username - must be valid both for snapshot and release repos.
25-
// WARNING: For nexus (sonatype) publications, use NEXUS_USERNAME variable.
26-
val mavenUsername: Provider<String> = providers.environmentVariable("MAVEN_USERNAME")
27-
28-
// maven password - must be valid both for snapshot and release repos.
29-
// WARNING: For nexus (sonatype) publications, use NEXUS_PASSWORD variable.
30-
val mavenPassword: Provider<String> = providers.environmentVariable("MAVEN_PASSWORD")
31-
32-
val signingKeyId: Provider<String> = providers.environmentVariable("MAVEN_SIGNING_KEY_ID")
33-
val signingPassword: Provider<String> = providers.environmentVariable("MAVEN_SIGNING_PASSWORD")
34-
val signingSecretKey: Provider<String> = providers.environmentVariable("MAVEN_SIGNING_SECRET_KEYRING_FILE")
35-
36-
val isPublishToMavenEnabled = (mavenUrl.isPresent || mavenSnapshotUrl.isPresent)
37-
&& mavenUsername.isPresent && mavenPassword.isPresent
38-
39-
java {
40-
withSourcesJar()
41-
}
42-
4319
val artifactName = path.trim(':').replace(':', '-')
4420

4521
dokka {
4622
moduleName.set(artifactName)
4723
}
4824

49-
val javadocJar by tasks.registering(Jar::class) {
50-
archiveClassifier.set("javadoc")
51-
from(tasks.dokkaGeneratePublicationJavadoc.map { it.outputDirectory })
52-
}
53-
54-
artifacts {
55-
add(configurations.archives.name, javadocJar)
56-
}
57-
58-
publishing {
59-
publications {
60-
create<MavenPublication>("main") {
61-
from(components["java"])
62-
artifact(javadocJar)
63-
64-
this.version = yataganVersion
65-
this.groupId = "com.yandex.yatagan"
66-
this.artifactId = artifactName
67-
68-
pom {
69-
name.set("Yatagan")
70-
description.set("Yatagan is a Dependency Injection framework, " +
71-
"specializing on runtime performance and build speed. " +
72-
"Supports code generation (apt/kapt/ksp) or reflection.")
73-
url.set("http://github.com/yandex/yatagan/")
74-
75-
licenses {
76-
license {
77-
name.set("Apache License, version 2.0")
78-
url.set("http://www.apache.org/licenses/LICENSE-2.0")
79-
distribution.set("repo")
80-
}
81-
}
82-
83-
scm {
84-
connection.set("scm:git://github.com/yandex/yatagan.git")
85-
developerConnection.set("scm:git://github.com/yandex/yatagan.git")
86-
url.set("https://github.com/yandex/yatagan.git")
87-
}
88-
89-
developers {
90-
developer {
91-
name.set("Yandex LLC")
92-
url.set("https://yandex.com")
93-
}
94-
}
25+
mavenPublishing {
26+
publishToMavenCentral(host = SonatypeHost.DEFAULT)
27+
configure(KotlinJvm(
28+
javadocJar = JavadocJar.Dokka(tasks.dokkaGeneratePublicationJavadoc.name),
29+
sourcesJar = true,
30+
))
31+
32+
coordinates(
33+
groupId = "com.yandex.yatagan",
34+
artifactId = artifactName,
35+
version = yataganVersion,
36+
)
37+
38+
pom {
39+
name.set("Yatagan")
40+
description.set("Yatagan is a Dependency Injection framework, " +
41+
"specializing on runtime performance and build speed. " +
42+
"Supports code generation (apt/kapt/ksp) or reflection.")
43+
url.set("http://github.com/yandex/yatagan/")
44+
45+
licenses {
46+
license {
47+
name.set("Apache License, version 2.0")
48+
url.set("http://www.apache.org/licenses/LICENSE-2.0")
49+
distribution.set("repo")
9550
}
9651
}
97-
}
9852

99-
if (isPublishToMavenEnabled) {
100-
repositories {
101-
fun MavenArtifactRepository.setupCredentials() {
102-
credentials {
103-
username = mavenUsername.get()
104-
password = mavenPassword.get()
105-
}
106-
}
53+
scm {
54+
connection.set("scm:git://github.com/yandex/yatagan.git")
55+
developerConnection.set("scm:git://github.com/yandex/yatagan.git")
56+
url.set("https://github.com/yandex/yatagan.git")
57+
}
10758

108-
val isSnapshotVersion = yataganVersion.endsWith("SNAPSHOT")
109-
when {
110-
!isSnapshotVersion && mavenUrl.isPresent -> maven {
111-
url = uri(mavenUrl.get())
112-
setupCredentials()
113-
}
114-
isSnapshotVersion && mavenSnapshotUrl.isPresent -> maven {
115-
url = uri(mavenSnapshotUrl.get())
116-
setupCredentials()
117-
}
59+
developers {
60+
developer {
61+
name.set("Yandex LLC")
62+
url.set("https://yandex.com")
11863
}
11964
}
12065
}
12166
}
12267

123-
if (signingKeyId.isPresent && signingPassword.isPresent && signingSecretKey.isPresent) {
124-
signing {
125-
sign(publishing.publications)
126-
sign(configurations.archives.get())
127-
128-
useInMemoryPgpKeys(
129-
signingKeyId.get(),
130-
signingSecretKey.get(),
131-
signingPassword.get(),
132-
)
133-
}
134-
}
135-
13668
rootProject.tasks {
13769
// Every actual publish task must run after the root publish task, if any.
13870
findByName("publish")?.let { rootPublish ->

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ yataganDogFood = "1.5.0"
1515
[libraries]
1616
kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
1717
dokka-gradle = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
18-
nexusPublish-gradle = "io.github.gradle-nexus:publish-plugin:1.3.0"
18+
publish-gradle = "com.vanniktech:gradle-maven-publish-plugin:0.31.0"
1919

2020
kotlin-binaryCompatibilityGradle.group = "org.jetbrains.kotlinx.binary-compatibility-validator"
2121
kotlin-binaryCompatibilityGradle.name = "org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin"

0 commit comments

Comments
 (0)