From 0d93da1df95fffa016a9b7aa74b891b14fe18278 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Fri, 2 Jan 2026 18:52:58 +0100 Subject: [PATCH] Update publishing config Use nmcp --- .github/workflows/run_publish_maven.yml | 6 +- build.gradle.kts | 15 +++++ buildSrc/build.gradle.kts | 1 + .../conventions/maven-publishing.gradle.kts | 57 +++++++++---------- .../settings/MavenPublishingSettings.kt | 2 +- gradle/libs.versions.toml | 2 + 6 files changed, 49 insertions(+), 34 deletions(-) diff --git a/.github/workflows/run_publish_maven.yml b/.github/workflows/run_publish_maven.yml index 1d7afe6..05767a7 100644 --- a/.github/workflows/run_publish_maven.yml +++ b/.github/workflows/run_publish_maven.yml @@ -38,9 +38,9 @@ jobs: uses: ./.github/workflows/run_gradle_task.yml secrets: inherit with: - runs-on: macos-latest # only macOS supports building all Kotlin targets + runs-on: linux-latest gradle-task: >- - publishAllPublicationsToSonatypeReleaseRepository + nmcpPublish --stacktrace --no-configuration-cache --no-parallel @@ -56,7 +56,7 @@ jobs: uses: ./.github/workflows/run_gradle_task.yml secrets: inherit with: - runs-on: macos-latest + runs-on: linux-latest gradle-task: >- publishAllPublicationsToAdamkoDevRepository --stacktrace diff --git a/build.gradle.kts b/build.gradle.kts index 7a75ec7..b5b8242 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -99,3 +99,18 @@ idea { ) } } + +tasks.nmcpPublishAllPublicationsToCentralPortal { + val isReleaseVersion = mavenPublishing.isReleaseVersion + onlyIf("is release version") { isReleaseVersion.get() } +} +tasks.nmcpPublishAllPublicationsToCentralPortalSnapshots { + val isReleaseVersion = mavenPublishing.isReleaseVersion + onlyIf("is snapshot version") { !isReleaseVersion.get() } +} + +tasks.register("nmcpPublish") { + group = PublishingPlugin.PUBLISH_TASK_GROUP + dependsOn(tasks.nmcpPublishAllPublicationsToCentralPortal) + dependsOn(tasks.nmcpPublishAllPublicationsToCentralPortalSnapshots) +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 5b0cb99..7188647 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -8,4 +8,5 @@ dependencies { implementation("org.gradle.kotlin:gradle-kotlin-dsl-plugins:$expectedKotlinDslPluginsVersion") implementation(libs.gradlePlugin.pluginPublishPlugin) + implementation(libs.gradlePlugin.nmcp) } diff --git a/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publishing.gradle.kts b/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publishing.gradle.kts index 40d24a4..c35b3f9 100644 --- a/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publishing.gradle.kts +++ b/buildSrc/src/main/kotlin/buildsrc/conventions/maven-publishing.gradle.kts @@ -5,6 +5,7 @@ import buildsrc.settings.MavenPublishingSettings plugins { `maven-publish` signing + id("com.gradleup.nmcp") } val mavenPublishing = @@ -43,34 +44,18 @@ publishing { //endregion -//region GitHub branch publishing publishing { repositories { - mavenPublishing.githubPublishDir.orNull?.let { githubPublishDir -> - maven(githubPublishDir) { - name = "GitHubPublish" - } + maven(rootProject.layout.buildDirectory.dir("project-repo")) { + name = "ProjectRootBuild" } } } -//endregion //region Maven Central publishing/signing publishing { repositories { - val mavenCentralUsername = mavenPublishing.mavenCentralUsername.orNull - val mavenCentralPassword = mavenPublishing.mavenCentralPassword.orNull - if (!mavenCentralUsername.isNullOrBlank() && !mavenCentralPassword.isNullOrBlank()) { - maven(mavenPublishing.sonatypeReleaseUrl) { - name = "SonatypeRelease" - credentials { - username = mavenCentralUsername - password = mavenCentralPassword - } - } - } - val adamkoDevUsername = mavenPublishing.adamkoDevUsername.orNull val adamkoDevPassword = mavenPublishing.adamkoDevPassword.orNull if (!adamkoDevUsername.isNullOrBlank() && !adamkoDevPassword.isNullOrBlank()) { @@ -94,15 +79,23 @@ signing { val key = mavenPublishing.signingKey.orNull val password = mavenPublishing.signingPassword.orNull + val signingCredentialsPresent = + !keyId.isNullOrBlank() && !key.isNullOrBlank() && !password.isNullOrBlank() + + if (signingCredentialsPresent) { + logger.info("maven-publishing.gradle.kts enabled signing for ${project.displayName}") + useInMemoryPgpKeys(keyId, key, password) + } + if (!keyId.isNullOrBlank() && !key.isNullOrBlank() && !password.isNullOrBlank()) { useInMemoryPgpKeys(keyId, key, password) } setRequired({ - gradle.taskGraph.allTasks + signingCredentialsPresent || gradle.taskGraph.allTasks .filterIsInstance() - .any { - it.repository.name in setOf( + .any { task -> + task.repository.name in setOf( "SonatypeRelease", "AdamkoDev", ) @@ -110,15 +103,6 @@ signing { }) } -//afterEvaluate { -// com.gradle.plugin-publish automatically signs tasks in a weird way, that stops this from working: -// signing { -// sign(publishing.publications) -// } -//} -//endregion - - //region Fix Gradle warning about signing tasks using publishing task outputs without explicit dependencies // https://youtrack.jetbrains.com/issue/KT-46466 https://github.com/gradle/gradle/issues/26091 tasks.withType().configureEach { @@ -138,3 +122,16 @@ tasks.withType().configureEach { } } //endregion + +//region Maven Central can't handle parallel uploads, so limit parallel uploads with a service. +abstract class MavenPublishLimiter : BuildService + +val mavenPublishLimiter = + gradle.sharedServices.registerIfAbsent("mavenPublishLimiter", MavenPublishLimiter::class) { + maxParallelUsages = 1 + } + +tasks.withType().configureEach { + usesService(mavenPublishLimiter) +} +//endregion diff --git a/buildSrc/src/main/kotlin/buildsrc/settings/MavenPublishingSettings.kt b/buildSrc/src/main/kotlin/buildsrc/settings/MavenPublishingSettings.kt index 5fa3201..4c4e323 100644 --- a/buildSrc/src/main/kotlin/buildsrc/settings/MavenPublishingSettings.kt +++ b/buildSrc/src/main/kotlin/buildsrc/settings/MavenPublishingSettings.kt @@ -17,7 +17,7 @@ abstract class MavenPublishingSettings @Inject constructor( private val providers: ProviderFactory, ) { - private val isReleaseVersion: Provider = + val isReleaseVersion: Provider = providers.provider { !project.version.toString().endsWith("-SNAPSHOT") } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f6608b4..a21ce8f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,6 +4,7 @@ junit = "6.0.1" kotest = "6.0.7" gradlePlugin-pluginPublishPlugin = "2.0.0" +gradlePlugin-nmcp = "1.4.3" [libraries] @@ -19,4 +20,5 @@ junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "jun ## region Gradle Plugins gradlePlugin-pluginPublishPlugin = { module = "com.gradle.publish:plugin-publish-plugin", version.ref = "gradlePlugin-pluginPublishPlugin" } +gradlePlugin-nmcp = { module = "com.gradleup.nmcp:nmcp", version.ref = "gradlePlugin-nmcp" } ## endregion