Skip to content

Commit 637396c

Browse files
authored
Switch to maven central publishing (#318)
1 parent 585be08 commit 637396c

File tree

7 files changed

+92
-156
lines changed

7 files changed

+92
-156
lines changed

.github/workflows/gradle.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
- name: Deploy Snapshot
4747
uses: gradle/gradle-build-action@v2
4848
with:
49-
arguments: publishSnapshot --stacktrace
49+
arguments: publishSnapshot --no-configuration-cache --stacktrace
5050
env:
51-
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
52-
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
51+
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
52+
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}

RELEASING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
6. `git add .`
77
7. `git commit -am "Prepare for release X.Y.Z"`
88
8. `./publish.sh`.
9-
9. Close and release on [Sonatype](https://s01.oss.sonatype.org/#stagingRepositories).
9+
9. Close and release on [Maven Central](https://central.sonatype.com/publishing).
1010
10. `git push origin main`
1111
11. Release on GitHub:
1212
1. Create a new release [here](https://github.com/ansman/auto-dagger/releases/new).

build-logic/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ dependencies {
3434
api(libs.dokka.gradlePlugin)
3535
api(libs.testLogger)
3636
api(libs.kotlin.jvm.gradle)
37-
api(libs.sonatypePublishFix)
3837
api(libs.ksp.gradlePlugin)
38+
api(libs.gradleMavenPublish)
3939
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,60 @@
1+
12
import com.google.devtools.ksp.gradle.KspAATask
3+
import org.gradle.accessors.dm.LibrariesForLibs
4+
import org.jetbrains.dokka.gradle.tasks.DokkaGenerateTask
5+
import se.ansman.dagger.auto.gradle.execWithOutput
6+
import se.ansman.dagger.auto.gradle.mapNullable
27

38
plugins {
49
id("org.jetbrains.dokka")
510
id("org.jetbrains.dokka-javadoc")
611
}
712

13+
val libs = the<LibrariesForLibs>()
14+
15+
fun repo(path: String = "") = "https://github.com/ansman/auto-dagger$path"
16+
17+
val gitCommit = project
18+
.execWithOutput {
19+
commandLine("git", "rev-parse", "HEAD")
20+
workingDir = project.rootDir
21+
}
22+
.map { it.trim() }
23+
24+
val remoteSource: Provider<String> = providers.gradleProperty("version")
25+
.mapNullable { version -> version.takeUnless { it.endsWith("-SNAPSHOT") } }
26+
.orElse(gitCommit)
27+
.map { repo("/blob/$it") }
28+
829
dokka {
30+
val projectPath = project.path.removePrefix(":").replace(':', '/')
931
dokkaSourceSets.configureEach {
1032
suppressGeneratedFiles = true
33+
reportUndocumented = false
1134
tasks.withType<KspAATask>().configureEach {
1235
suppressedFiles.from(fileTree(kspConfig.outputBaseDir))
1336
}
1437
perPackageOption {
1538
matchingRegex = "hilt_aggregated_deps*"
1639
suppress = true
1740
}
41+
42+
sourceLink {
43+
localDirectory.set(project.file("src/main/kotlin"))
44+
remoteUrl.set(remoteSource.map { remoteSource ->
45+
uri("$remoteSource/$projectPath/src/main/kotlin")
46+
})
47+
remoteLineSuffix.set("#L")
48+
}
1849
}
50+
}
51+
52+
tasks.withType<DokkaGenerateTask>().configureEach {
53+
mustRunAfter(tasks.withType<KspAATask>())
54+
}
55+
56+
pluginManager.withPlugin("com.android.library") {
57+
dependencies {
58+
dokkaPlugin(libs.dokka.androidDocumentationPlugin)
59+
}
1960
}

build-logic/src/main/kotlin/library.publishing.gradle.kts

Lines changed: 42 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,17 @@
11

2-
import com.android.build.gradle.LibraryExtension
3-
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
4-
import org.gradle.accessors.dm.LibrariesForLibs
5-
import se.ansman.dagger.auto.gradle.execWithOutput
6-
import se.ansman.dagger.auto.gradle.mapNullable
2+
import com.vanniktech.maven.publish.AndroidSingleVariantLibrary
3+
import com.vanniktech.maven.publish.JavadocJar
4+
import com.vanniktech.maven.publish.KotlinJvm
5+
import com.vanniktech.maven.publish.SonatypeHost
76

87
plugins {
9-
id("maven-publish")
10-
id("signing")
118
id("dokka-common")
12-
id("se.ansman.sonatype-publish-fix")
9+
id("com.vanniktech.maven.publish")
10+
id("signing")
1311
}
1412

15-
val libs = the<LibrariesForLibs>()
16-
17-
val gitCommit = project
18-
.execWithOutput {
19-
commandLine("git", "rev-parse", "HEAD")
20-
workingDir = project.rootDir
21-
}
22-
.map { it.trim() }
23-
24-
2513
fun repo(path: String = "") = "https://github.com/ansman/auto-dagger$path"
2614

27-
val remoteSource: Provider<String> = providers.gradleProperty("version")
28-
.mapNullable { version -> version.takeUnless { it.endsWith("-SNAPSHOT") } }
29-
.orElse(gitCommit)
30-
.map { repo("/blob/$it") }
31-
32-
dokka {
33-
val projectPath = project.path.removePrefix(":").replace(':', '/')
34-
dokkaSourceSets.configureEach {
35-
reportUndocumented.set(false)
36-
sourceLink {
37-
localDirectory.set(project.file("src/main/kotlin"))
38-
remoteUrl.set(remoteSource.map { remoteSource ->
39-
uri("$remoteSource/$projectPath/src/main/kotlin")
40-
})
41-
remoteLineSuffix.set("#L")
42-
}
43-
}
44-
}
45-
4615
tasks.withType<AbstractPublishToMaven>().configureEach {
4716
doLast {
4817
with(publication) {
@@ -51,60 +20,23 @@ tasks.withType<AbstractPublishToMaven>().configureEach {
5120
}
5221
}
5322

54-
val publishing: PublishingExtension = extensions.getByType()
23+
val signArtifacts = providers.gradleProperty("signArtifacts").orNull?.toBooleanStrict() ?: false
24+
mavenPublishing {
25+
val version = providers.gradleProperty("version").get()
26+
publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL)
5527

56-
with(publishing) {
57-
repositories.maven {
58-
name = "mavenCentral"
59-
setUrl("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/")
60-
credentials {
61-
username = providers.gradleProperty("sonatype.s01.oss.sonatype.org.username")
62-
.orElse(providers.environmentVariable("SONATYPE_USERNAME"))
63-
.orNull
64-
password = providers.gradleProperty("sonatype.s01.oss.sonatype.org.password")
65-
.orElse(providers.environmentVariable("SONATYPE_PASSWORD"))
66-
.orNull
67-
}
28+
if (signArtifacts) {
29+
signAllPublications()
6830
}
6931

70-
repositories.maven {
71-
name = "sonatypeSnapshots"
72-
setUrl("https://s01.oss.sonatype.org/content/repositories/snapshots/")
73-
credentials {
74-
username = providers.gradleProperty("sonatype.s01.oss.sonatype.org.username")
75-
.orElse(providers.environmentVariable("SONATYPE_USERNAME"))
76-
.orNull
77-
password = providers.gradleProperty("sonatype.s01.oss.sonatype.org.password")
78-
.orElse(providers.environmentVariable("SONATYPE_PASSWORD"))
79-
.orNull
80-
}
81-
}
82-
}
83-
84-
tasks.register("publishSnapshot") {
85-
if (providers.gradleProperty("version").get().endsWith("-SNAPSHOT")) {
86-
dependsOn("publishAllPublicationsToSonatypeSnapshotsRepository")
87-
}
88-
}
89-
90-
val javadocJar by tasks.registering(Jar::class) {
91-
from(tasks.dokkaGeneratePublicationJavadoc)
92-
archiveClassifier.set("javadoc")
93-
}
94-
95-
val sourcesJar by tasks.registering(Jar::class) {
96-
archiveClassifier.set("sources")
97-
}
98-
99-
val publication = publishing.publications.register<MavenPublication>("autoDagger") {
100-
groupId = rootProject.group as String
101-
artifactId = project.path
102-
.removePrefix(":third-party")
103-
.removePrefix(":")
104-
.replace(':', '-')
105-
version = providers.gradleProperty("version").get()
106-
artifact(sourcesJar)
107-
artifact(javadocJar)
32+
coordinates(
33+
groupId = rootProject.group as String,
34+
artifactId = project.path
35+
.removePrefix(":third-party")
36+
.removePrefix(":")
37+
.replace(':', '-'),
38+
version = version,
39+
)
10840
pom {
10941
val moduleName = project.path
11042
.removePrefix(":third-party")
@@ -137,81 +69,43 @@ val publication = publishing.publications.register<MavenPublication>("autoDagger
13769
}
13870
}
13971

140-
141-
if (findProperty("signArtifacts")?.toString()?.toBoolean() == true) {
72+
if (signArtifacts) {
14273
signing {
14374
useGpgCmd()
144-
sign(publication.get())
14575
}
14676
}
14777

148-
pluginManager.withPlugin("com.android.library") {
149-
extensions.configure<LibraryExtension> {
150-
publishing {
151-
singleVariant("release")
152-
}
78+
tasks.register("publishSnapshot") {
79+
if (providers.gradleProperty("version").get().endsWith("-SNAPSHOT")) {
80+
dependsOn("publishAllPublicationsToMavenCentralRepository")
15381
}
82+
}
15483

155-
publication {
156-
afterEvaluate {
157-
from(components["release"])
158-
}
84+
pluginManager.withPlugin("com.android.library") {
85+
mavenPublishing {
86+
configure(AndroidSingleVariantLibrary(sourcesJar = true, publishJavadocJar = false))
15987
}
16088

161-
sourcesJar {
162-
// This is a "hack" to avoid Android from including generated sources
163-
from(
164-
files("src/main").asFileTree.matching(
165-
PatternSet().include(
166-
"**/*.java",
167-
"**/*.kt",
168-
)
169-
)
170-
)
89+
val javadocJar by tasks.registering(Jar::class) {
90+
from(tasks.dokkaGeneratePublicationJavadoc)
91+
archiveClassifier.set("javadoc")
17192
}
172-
}
17393

174-
pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
175-
publication {
176-
afterEvaluate {
177-
if (pluginManager.hasPlugin("com.gradleup.shadow")) {
178-
from(components["shadow"])
179-
} else {
180-
from(components["java"])
181-
}
94+
publishing {
95+
publications.withType<MavenPublication>().configureEach {
96+
artifact(javadocJar)
18297
}
18398
}
184-
185-
sourcesJar {
186-
dependsOn("classes")
187-
from(project.extensions.getByType<SourceSetContainer>().getByName("main").allSource)
188-
}
18999
}
190100

191-
pluginManager.withPlugin("com.gradleup.shadow") {
192-
val compileShaded: Configuration by configurations.creating
193-
configurations.named("compileOnly") { extendsFrom(compileShaded) }
194-
configurations.named("testRuntimeOnly") { extendsFrom(compileShaded) }
195-
configurations.named("shadow") { extendsFrom(configurations["implementation"]) }
196-
197-
// Since we change the classifier of the shadowJar we need to disable the default jar task or we'll get two
198-
// artifacts that have the same classifier
199-
tasks.named<Jar>("jar") {
200-
archiveClassifier.set("ignored")
201-
}
202-
203-
tasks.named<ShadowJar>("shadowJar") {
204-
archiveClassifier.set("")
205-
configurations = listOf(compileShaded)
206-
isEnableRelocation = true
207-
relocationPrefix = "se.ansman.dagger.auto${project.path.replace(':', '.').replace('-', '_')}"
208-
mergeServiceFiles()
209-
}
210-
211-
pluginManager.withPlugin("org.gradle.java-test-fixtures") {
212-
configurations.named("testFixturesImplementation") { extendsFrom(compileShaded) }
213-
configurations.named("testFixturesImplementation") { extendsFrom(configurations["implementation"]) }
214-
configurations.named("testFixturesApi") { extendsFrom(configurations["api"]) }
101+
pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
102+
mavenPublishing {
103+
configure(
104+
KotlinJvm(
105+
javadocJar = JavadocJar.Dokka(tasks.dokkaGeneratePublicationJavadoc.name),
106+
sourcesJar = true
107+
)
108+
)
215109
}
216110
}
217111

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ ksp.useKSP2=true
1313

1414
android.useAndroidX=true
1515

16-
version=2.1.0-SNAPSHOT
17-
latestRelease=2.0.0
16+
version=2.0.1
17+
latestRelease=2.0.1

gradle/libs.versions.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ kotlin-metadata = { module = "org.jetbrains.kotlin:kotlin-metadata-jvm", version
3434
dokka-gradlePlugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
3535
dokka-versioningPlugin = { module = "org.jetbrains.dokka:versioning-plugin", version.ref = "dokka" }
3636
dokka-allModulesPagePlugin = { module = "org.jetbrains.dokka:all-modules-page-plugin", version.ref = "dokka" }
37+
dokka-androidDocumentationPlugin= { module = "org.jetbrains.dokka:android-documentation-plugin", version.ref = "dokka" }
3738

3839
okio = "com.squareup.okio:okio:3.11.0"
3940

@@ -89,7 +90,7 @@ projectAccessors = { module = "co.hinge.gradle.project-accessors:project-accesso
8990
ktorfit = "de.jensklingenberg.ktorfit:ktorfit-lib:2.5.1"
9091
ktorfit-ksp = "de.jensklingenberg.ktorfit:ktorfit-ksp:2.5.1"
9192

92-
sonatypePublishFix = "se.ansman.sonatype-publish-fix:gradle-plugin:1.0.0"
93+
gradleMavenPublish = "com.vanniktech.maven.publish:com.vanniktech.maven.publish.gradle.plugin:0.31.0"
9394

9495
[bundles]
9596
compileTesting = ["compileTesting", "compileTesting-ksp"]

0 commit comments

Comments
 (0)