From f57882fe192d3a384a40febd502e58cdcef883ce Mon Sep 17 00:00:00 2001 From: Michael Rittmeister Date: Sat, 5 Aug 2023 15:23:04 +0200 Subject: [PATCH 1/5] Migrate Publishing to vanniktech plugin --- .github/workflows/deployment-ci.yml | 8 +- .../src/main/kotlin/kord-module.gradle.kts | 11 +-- .../kord-multiplatform-module.gradle.kts | 7 ++ .../main/kotlin/kord-publishing.gradle.kts | 99 +++++++------------ gradle/libs.versions.toml | 4 +- 5 files changed, 54 insertions(+), 75 deletions(-) diff --git a/.github/workflows/deployment-ci.yml b/.github/workflows/deployment-ci.yml index 20f02ea035dc..230e39285b8f 100644 --- a/.github/workflows/deployment-ci.yml +++ b/.github/workflows/deployment-ci.yml @@ -40,10 +40,10 @@ jobs: !contains(github.event.head_commit.message, '[publish skip]') && github.event_name != 'pull_request' && github.ref != 'refs/heads/master' env: KORD_TEST_TOKEN: ${{ secrets.KORD_TEST_TOKEN }} - NEXUS_USER: ${{ secrets.NEXUS_USER }} - NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} - SIGNING_KEY: ${{ secrets.signingKey }} - SIGNING_PASSWORD: ${{ secrets.signingPassword }} + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.NEXUS_USER }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.NEXUS_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.signingKey }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.signingPassword }} steps: - uses: actions/checkout@v3 with: diff --git a/buildSrc/src/main/kotlin/kord-module.gradle.kts b/buildSrc/src/main/kotlin/kord-module.gradle.kts index bb56104574fb..5451c3370e3e 100644 --- a/buildSrc/src/main/kotlin/kord-module.gradle.kts +++ b/buildSrc/src/main/kotlin/kord-module.gradle.kts @@ -1,3 +1,5 @@ +import com.vanniktech.maven.publish.JavadocJar +import com.vanniktech.maven.publish.KotlinJvm import org.jetbrains.dokka.gradle.AbstractDokkaLeafTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -8,7 +10,7 @@ plugins { `kotlinx-atomicfu` org.jetbrains.kotlinx.`binary-compatibility-validator` com.google.devtools.ksp - `maven-publish` + id("com.vanniktech.maven.publish.base") } repositories { @@ -51,9 +53,6 @@ tasks { } } -publishing { - publications.register(Library.name) { - from(components["java"]) - artifact(tasks.kotlinSourcesJar) - } +mavenPublishing { + configure(KotlinJvm(javadocJar = JavadocJar.Dokka("dokkaHtml"))) } diff --git a/buildSrc/src/main/kotlin/kord-multiplatform-module.gradle.kts b/buildSrc/src/main/kotlin/kord-multiplatform-module.gradle.kts index ea4cbbf586f0..1ce4ade57535 100644 --- a/buildSrc/src/main/kotlin/kord-multiplatform-module.gradle.kts +++ b/buildSrc/src/main/kotlin/kord-multiplatform-module.gradle.kts @@ -1,3 +1,5 @@ +import com.vanniktech.maven.publish.JavadocJar +import com.vanniktech.maven.publish.KotlinMultiplatform import org.jetbrains.dokka.gradle.AbstractDokkaLeafTask import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest @@ -8,6 +10,7 @@ plugins { `kotlinx-atomicfu` org.jetbrains.kotlinx.`binary-compatibility-validator` com.google.devtools.ksp + id("com.vanniktech.maven.publish.base") } repositories { @@ -92,3 +95,7 @@ tasks { dependsOn("kspCommonMainKotlinMetadata") } } + +mavenPublishing { + configure(KotlinMultiplatform(javadocJar = JavadocJar.Dokka("dokkaHtml"))) +} diff --git a/buildSrc/src/main/kotlin/kord-publishing.gradle.kts b/buildSrc/src/main/kotlin/kord-publishing.gradle.kts index a001f7113cc7..cd4a497e5fa1 100644 --- a/buildSrc/src/main/kotlin/kord-publishing.gradle.kts +++ b/buildSrc/src/main/kotlin/kord-publishing.gradle.kts @@ -1,79 +1,50 @@ -import java.lang.System.getenv -import java.util.Base64 - plugins { - `maven-publish` - signing + // For some reason, Gradle does not generate an accessor for this + id("com.vanniktech.maven.publish.base") } -fun MavenPublication.registerDokkaJar() = - tasks.register("${name}DokkaJar") { - archiveClassifier = "javadoc" - destinationDirectory = destinationDirectory.get().dir(name) - from(tasks.named("dokkaHtml")) - } - -publishing { - publications { - withType().configureEach { - if (project.name != "bom") artifact(registerDokkaJar()) - - groupId = Library.group - artifactId = "kord-$artifactId" - version = libraryVersion +group = Library.group +version = libraryVersion - pom { - name = Library.name - description = Library.description - url = Library.projectUrl +mavenPublishing { + coordinates(Library.group, "kord-${project.name}", libraryVersion) + // This sets up OSSRH snapshots + maven central + publishToMavenCentral(automaticRelease = true) + signAllPublications() - organization { - name = "Kord" - url = "https://github.com/kordlib" - } + pom { + name = Library.name + description = Library.description + url = Library.projectUrl - developers { - developer { - name = "The Kord Team" - } - } - - issueManagement { - system = "GitHub" - url = "https://github.com/kordlib/kord/issues" - } - - licenses { - license { - name = "MIT" - url = "https://opensource.org/licenses/MIT" - } - } + organization { + name = "Kord" + url = "https://github.com/kordlib" + } - scm { - connection = "scm:git:ssh://github.com/kordlib/kord.git" - developerConnection = "scm:git:ssh://git@github.com:kordlib/kord.git" - url = Library.projectUrl - } + developers { + developer { + name = "The Kord Team" } } - } - repositories { - maven { - url = uri(if (isRelease) Repo.releasesUrl else Repo.snapshotsUrl) + issueManagement { + system = "GitHub" + url = "https://github.com/kordlib/kord/issues" + } - credentials { - username = getenv("NEXUS_USER") - password = getenv("NEXUS_PASSWORD") + licenses { + license { + name = "MIT" + url = "https://opensource.org/licenses/MIT" + distribution = "https://github.com/kordlib/kord/blob/LICENSE" } } - } -} -signing { - val secretKey = getenv("SIGNING_KEY")?.let { String(Base64.getDecoder().decode(it)) } - val password = getenv("SIGNING_PASSWORD") - useInMemoryPgpKeys(secretKey, password) - sign(publishing.publications) + scm { + connection = "scm:git:ssh://github.com/kordlib/kord.git" + developerConnection = "scm:git:ssh://git@github.com:kordlib/kord.git" + url = Library.projectUrl + } + } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8c9e24129c11..087d575e63ac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,6 +29,7 @@ dokka = "1.8.20" # https://github.com/Kotlin/dokka kotlinx-atomicfu = "0.21.0" # https://github.com/Kotlin/kotlinx-atomicfu binary-compatibility-validator = "0.13.2" # https://github.com/Kotlin/binary-compatibility-validator buildconfig = "4.1.2" # https://github.com/gmazzo/gradle-buildconfig-plugin +maven-publish-plugin = "0.25.3" [libraries] @@ -84,7 +85,7 @@ dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref atomicfu-plugin = { module = "org.jetbrains.kotlinx:atomicfu-gradle-plugin", version.ref = "kotlinx-atomicfu" } binary-compatibility-validator-plugin = { module = "org.jetbrains.kotlinx:binary-compatibility-validator", version.ref = "binary-compatibility-validator" } ksp-plugin = { module = "com.google.devtools.ksp:symbol-processing-gradle-plugin", version.ref = "ksp" } - +maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "maven-publish-plugin" } [bundles] @@ -101,6 +102,7 @@ pluginsForBuildSrc = [ "atomicfu-plugin", "binary-compatibility-validator-plugin", "ksp-plugin", + "maven-publish-plugin" ] From abda5df97b3d0bed0b2dbed2d42590a90647029f Mon Sep 17 00:00:00 2001 From: Michael Rittmeister Date: Sat, 5 Aug 2023 15:25:11 +0200 Subject: [PATCH 2/5] Migrate bom publishing --- bom/build.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bom/build.gradle.kts b/bom/build.gradle.kts index 534d252b314d..31fd973f7fc9 100644 --- a/bom/build.gradle.kts +++ b/bom/build.gradle.kts @@ -1,6 +1,8 @@ +import com.vanniktech.maven.publish.JavaPlatform + plugins { `java-platform` - `maven-publish` + id("com.vanniktech.maven.publish.base") } val me = project @@ -26,10 +28,8 @@ dependencies { } } -publishing { - publications.register(Library.name) { - from(components["javaPlatform"]) - } +mavenPublishing { + configure(JavaPlatform()) } apply(plugin = "kord-publishing") From e0946891ffde6927e237f5dab80b5339790c9fb4 Mon Sep 17 00:00:00 2001 From: Michael Rittmeister Date: Sat, 5 Aug 2023 15:28:38 +0200 Subject: [PATCH 3/5] Update CI toolchain to jdk 11 --- .github/workflows/deployment-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deployment-ci.yml b/.github/workflows/deployment-ci.yml index 230e39285b8f..c3eb1834f73c 100644 --- a/.github/workflows/deployment-ci.yml +++ b/.github/workflows/deployment-ci.yml @@ -52,7 +52,7 @@ jobs: uses: actions/setup-java@v3 with: distribution: temurin - java-version: 8 + java-version: 11 - name: Build with Gradle uses: gradle/gradle-build-action@v2 with: From 9474aff04f081ec7d72d72461ab5e73f94c3b204 Mon Sep 17 00:00:00 2001 From: Michael Rittmeister Date: Sat, 5 Aug 2023 15:33:20 +0200 Subject: [PATCH 4/5] Actually upgrade CI toolchain to 11 --- .github/workflows/deployment-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deployment-ci.yml b/.github/workflows/deployment-ci.yml index c3eb1834f73c..9b06dff26940 100644 --- a/.github/workflows/deployment-ci.yml +++ b/.github/workflows/deployment-ci.yml @@ -27,7 +27,7 @@ jobs: uses: actions/setup-java@v3 with: distribution: temurin - java-version: 8 + java-version: 11 - name: Build with Gradle uses: gradle/gradle-build-action@v2 with: From a7d34485a6fd183c8558338ab88846a03152bb4d Mon Sep 17 00:00:00 2001 From: Michael Rittmeister Date: Sat, 5 Aug 2023 16:09:06 +0200 Subject: [PATCH 5/5] Revert signing changes for now --- .github/workflows/deployment-ci.yml | 4 ++-- buildSrc/src/main/kotlin/kord-publishing.gradle.kts | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deployment-ci.yml b/.github/workflows/deployment-ci.yml index 9b06dff26940..d0ce2aa7f7e7 100644 --- a/.github/workflows/deployment-ci.yml +++ b/.github/workflows/deployment-ci.yml @@ -42,8 +42,8 @@ jobs: KORD_TEST_TOKEN: ${{ secrets.KORD_TEST_TOKEN }} ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.NEXUS_USER }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.NEXUS_PASSWORD }} - ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.signingKey }} - ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.signingPassword }} + SIGNING_KEY: ${{ secrets.signingKey }} + SIGNING_PASSWORD: ${{ secrets.signingPassword }} steps: - uses: actions/checkout@v3 with: diff --git a/buildSrc/src/main/kotlin/kord-publishing.gradle.kts b/buildSrc/src/main/kotlin/kord-publishing.gradle.kts index cd4a497e5fa1..178ac1630b64 100644 --- a/buildSrc/src/main/kotlin/kord-publishing.gradle.kts +++ b/buildSrc/src/main/kotlin/kord-publishing.gradle.kts @@ -1,11 +1,21 @@ +import java.util.Base64 + plugins { // For some reason, Gradle does not generate an accessor for this id("com.vanniktech.maven.publish.base") + signing } group = Library.group version = libraryVersion +signing { + val secretKey = System.getenv("SIGNING_KEY")?.let { String(Base64.getDecoder().decode(it)) } + val password = System.getenv("SIGNING_PASSWORD") + useInMemoryPgpKeys(secretKey, password) + sign(publishing.publications) +} + mavenPublishing { coordinates(Library.group, "kord-${project.name}", libraryVersion) // This sets up OSSRH snapshots + maven central