Skip to content

Commit 5b97ab8

Browse files
authored
Merge pull request #203 from yandex/users/bacecek/refactor_publishing
2 parents 27274fa + c45e42f commit 5b97ab8

4 files changed

Lines changed: 40 additions & 132 deletions

File tree

build.gradle.kts

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import io.github.gradlenexus.publishplugin.NexusPublishExtension
2-
31
plugins {
42
id("yatagan.base-module")
53
}
@@ -8,26 +6,6 @@ val yataganVersion: String by extra
86

97
val isUnderTeamcity = providers.environmentVariable("TEAMCITY_VERSION").isPresent
108

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

buildSrc/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ repositories {
1010
dependencies {
1111
implementation(libs.kotlin.gradle)
1212
implementation(libs.dokka.gradle)
13-
implementation(libs.nexusPublish.gradle)
13+
implementation(libs.publish.gradle)
1414
implementation(libs.ksp.gradle)
1515

1616
implementation(kotlin("stdlib"))

buildSrc/settings.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ dependencyResolutionManagement {
1111

1212
library("kotlin-gradle", "org.jetbrains.kotlin", "kotlin-gradle-plugin").versionRef("kotlin")
1313
library("dokka-gradle", "org.jetbrains.dokka", "dokka-gradle-plugin").version("1.9.20")
14-
library("nexusPublish-gradle", "io.github.gradle-nexus:publish-plugin:1.3.0")
14+
library("publish-gradle", "com.vanniktech:gradle-maven-publish-plugin:0.30.0")
1515

1616
library("ksp-api", "com.google.devtools.ksp", "symbol-processing-api").versionRef("ksp")
1717
library("ksp-gradle", "com.google.devtools.ksp", "com.google.devtools.ksp.gradle.plugin").versionRef("ksp")

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

Lines changed: 38 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +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
25
import org.jetbrains.dokka.gradle.DokkaTask
36

47
plugins {
58
id("yatagan.base-module")
69
id("org.jetbrains.dokka")
7-
`maven-publish`
8-
signing
10+
id("com.vanniktech.maven.publish")
911
}
1012

1113
val yataganVersion: String by extra
@@ -14,127 +16,55 @@ check(isValidSemVerString(yataganVersion)) {
1416
"`$yataganVersion` is not a valid version"
1517
}
1618

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

4421
tasks.withType<DokkaTask>().configureEach {
4522
moduleName.set(artifactName)
4623
}
4724

48-
val javadocJar by tasks.creating(Jar::class) {
49-
archiveClassifier.set("javadoc")
50-
from(tasks.dokkaJavadoc.map { it.outputDirectory })
51-
dependsOn(tasks.dokkaJavadoc)
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-
tasks.findByName("javadocJar")?.let {
63-
artifact(it)
64-
}
65-
66-
this.version = yataganVersion
67-
this.groupId = "com.yandex.yatagan"
68-
this.artifactId = artifactName
69-
70-
pom {
71-
name.set("Yatagan")
72-
description.set("Yatagan is a Dependency Injection framework, " +
73-
"specializing on runtime performance and build speed. " +
74-
"Supports code generation (apt/kapt/ksp) or reflection.")
75-
url.set("http://github.com/yandex/yatagan/")
76-
77-
licenses {
78-
license {
79-
name.set("Apache License, version 2.0")
80-
url.set("http://www.apache.org/licenses/LICENSE-2.0")
81-
distribution.set("repo")
82-
}
83-
}
84-
85-
scm {
86-
connection.set("scm:git://github.com/yandex/yatagan.git")
87-
developerConnection.set("scm:git://github.com/yandex/yatagan.git")
88-
url.set("https://github.com/yandex/yatagan.git")
89-
}
90-
91-
developers {
92-
developer {
93-
name.set("Yandex LLC")
94-
url.set("https://yandex.com")
95-
}
96-
}
25+
mavenPublishing {
26+
publishToMavenCentral(host = SonatypeHost.CENTRAL_PORTAL)
27+
configure(KotlinJvm(
28+
javadocJar = JavadocJar.Dokka(tasks.dokkaJavadoc.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")
9750
}
9851
}
99-
}
10052

101-
if (isPublishToMavenEnabled) {
102-
repositories {
103-
fun MavenArtifactRepository.setupCredentials() {
104-
credentials {
105-
username = mavenUsername.get()
106-
password = mavenPassword.get()
107-
}
108-
}
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+
}
10958

110-
val isSnapshotVersion = yataganVersion.endsWith("SNAPSHOT")
111-
when {
112-
!isSnapshotVersion && mavenUrl.isPresent -> maven {
113-
url = uri(mavenUrl.get())
114-
setupCredentials()
115-
}
116-
isSnapshotVersion && mavenSnapshotUrl.isPresent -> maven {
117-
url = uri(mavenSnapshotUrl.get())
118-
setupCredentials()
119-
}
59+
developers {
60+
developer {
61+
name.set("Yandex LLC")
62+
url.set("https://yandex.com")
12063
}
12164
}
12265
}
12366
}
12467

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

0 commit comments

Comments
 (0)