diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index f2c3c95..9c0126c 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -10,8 +10,8 @@ repositories { dependencies { implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.20") - implementation("io.github.gradle-nexus:publish-plugin:1.1.0") implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.9.20") + implementation("com.gradleup.nmcp:nmcp:0.2.1") // Override the 1.6.1 dependency coming from kotlin-gradle-plugin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1") diff --git a/build-logic/src/main/kotlin/conventions-multiplatform.gradle.kts b/build-logic/src/main/kotlin/conventions-multiplatform.gradle.kts index 7f394e0..c87e755 100644 --- a/build-logic/src/main/kotlin/conventions-multiplatform.gradle.kts +++ b/build-logic/src/main/kotlin/conventions-multiplatform.gradle.kts @@ -18,15 +18,12 @@ kotlin { "any" val isLinux = platform == "linux" val isMac = platform == "mac" - val isWindows = platform == "windows" jvmToolchain(11) - val isLocalMultiplatform = project.hasProperty("isLocalMultiplatform") jvm { } - if(isLocalMultiplatform && !isCI) { js { browser() nodejs() @@ -34,67 +31,61 @@ kotlin { linuxX64() macosX64() mingwX64() - } // If we are a CI, build all the targets for the specified platform - if (isLinux && isCI) { - js { - browser() - nodejs() - } - - linuxX64() - linuxArm64() - - @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) - wasmWasi() - @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) - wasmJs() - - androidNativeX64() - androidNativeX86() - androidNativeArm32() - androidNativeArm64() - - // Need to know about this since we publish the -tooling metadata from - // the linux containers. Although it doesn't build these it needs to know about them. - macosX64() - macosArm64() - iosX64() - iosArm64() - iosSimulatorArm64() - tvosX64() - tvosArm64() - watchosX64() - watchosArm32() - watchosArm64() - - watchosDeviceArm64() - tvosSimulatorArm64() - watchosSimulatorArm64() - - mingwX64() + js { + browser() + nodejs() } - if (isMac && isCI) { - macosX64() - macosArm64() - iosX64() - iosArm64() - iosSimulatorArm64() - tvosX64() - tvosArm64() - watchosX64() - watchosArm32() - watchosArm64() - - watchosDeviceArm64() - tvosSimulatorArm64() - watchosSimulatorArm64() - } - if (isWindows && isCI) { - mingwX64() - } + linuxX64() + linuxArm64() + + @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) + wasmWasi() + @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) + wasmJs() + + androidNativeX64() + androidNativeX86() + androidNativeArm32() + androidNativeArm64() + + // Need to know about this since we publish the -tooling metadata from + // the linux containers. Although it doesn't build these it needs to know about them. + macosX64() + macosArm64() + iosX64() + iosArm64() + iosSimulatorArm64() + tvosX64() + tvosArm64() + watchosX64() + watchosArm32() + watchosArm64() + + watchosDeviceArm64() + tvosSimulatorArm64() + watchosSimulatorArm64() + + mingwX64() + + + macosX64() + macosArm64() + iosX64() + iosArm64() + iosSimulatorArm64() + tvosX64() + tvosArm64() + watchosX64() + watchosArm32() + watchosArm64() + + watchosDeviceArm64() + tvosSimulatorArm64() + watchosSimulatorArm64() + mingwX64() sourceSets { diff --git a/build-logic/src/main/kotlin/publish-jvm.gradle.kts b/build-logic/src/main/kotlin/publish-jvm.gradle.kts index 48e6196..d26a4e7 100644 --- a/build-logic/src/main/kotlin/publish-jvm.gradle.kts +++ b/build-logic/src/main/kotlin/publish-jvm.gradle.kts @@ -6,13 +6,18 @@ plugins { `java-library` `maven-publish` signing - id("io.github.gradle-nexus.publish-plugin") + id("com.gradleup.nmcp") id("org.jetbrains.dokka") } -apply(plugin = "io.github.gradle-nexus.publish-plugin") apply(plugin = "kotlin") -apply(plugin = "maven-publish") + +nmcp { + publishAllPublicationsToCentralPortal { + username = System.getenv("CENTRAL_USERNAME") + password = System.getenv("CENTRAL_PASSWORD") + } +} repositories { mavenCentral() diff --git a/build-logic/src/main/kotlin/publish.gradle.kts b/build-logic/src/main/kotlin/publish.gradle.kts index 6b9e2b7..6bd982a 100644 --- a/build-logic/src/main/kotlin/publish.gradle.kts +++ b/build-logic/src/main/kotlin/publish.gradle.kts @@ -6,11 +6,16 @@ plugins { id("conventions") `maven-publish` signing - id("io.github.gradle-nexus.publish-plugin") + id("com.gradleup.nmcp") id("org.jetbrains.dokka") } -apply(plugin = "io.github.gradle-nexus.publish-plugin") +nmcp { + publishAllPublicationsToCentralPortal { + username = System.getenv("CENTRAL_USERNAME") + password = System.getenv("CENTRAL_PASSWORD") + } +} repositories { mavenCentral() diff --git a/build.gradle.kts b/build.gradle.kts index 199c113..9778e05 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,99 +1,93 @@ -plugins { - kotlin("multiplatform") version "2.2.0" apply false - id("io.github.gradle-nexus.publish-plugin") version "1.1.0" apply false -} - allprojects { repositories { mavenCentral() - maven("https://oss.sonatype.org/content/repositories/releases") - mavenLocal() } } -tasks.register("publishLinux") { - dependsOn( - gradle.includedBuild(Release.Project.`terpal-runtime`).task(":publishAllPublicationsToOssRepository"), - gradle.includedBuild(Release.Project.`terpal-plugin-gradle`).task(":publish"), - gradle.includedBuild(Release.Project.`terpal-plugin-kotlin`).task(":publish"), - ) -} - -tasks.register("publishLinuxLocal") { - ":${Release.Project.`terpal-runtime`}:publishToMavenLocal" // should this first clause even be here? - dependsOn( - gradle.includedBuild(Release.Project.`terpal-runtime`).task(":publishToMavenLocal"), - gradle.includedBuild(Release.Project.`terpal-plugin-gradle`).task(":publishToMavenLocal"), - gradle.includedBuild(Release.Project.`terpal-plugin-kotlin`).task(":publishToMavenLocal"), - ) -} -tasks.register("publishMac") { - Release.macBuildCommands.forEach { - dependsOn(gradle.includedBuild(Release.Project.`terpal-runtime`).task(":$it")) - } - //dependsOn( - // gradle.includedBuild(Release.Project.`terpal-runtime`).task(":publishAllPublicationsToOssRepository") - //) -} - -tasks.register("publishWindows") { - Release.windowsBuildCommands.forEach { - dependsOn(gradle.includedBuild(Release.Project.`terpal-runtime`).task(":$it")) - } -} - - -tasks.register("publishLinuxNoRunner") { - dependsOn( - gradle.includedBuild(Release.Project.`terpal-runtime`).task(":publishAllPublicationsToOssRepository"), - gradle.includedBuild(Release.Project.`terpal-plugin-gradle`).task(":publish"), - gradle.includedBuild(Release.Project.`terpal-plugin-kotlin`).task(":publish"), - ) -} -tasks.register("publishMacNoRunner") { - Release.macBuildCommands.forEach { - dependsOn(gradle.includedBuild(Release.Project.`terpal-runtime`).task(":$it")) - } -} -tasks.register("publishWindowsNoRunner") { - Release.windowsBuildCommands.forEach { - dependsOn(gradle.includedBuild(Release.Project.`terpal-runtime`).task(":$it")) - } -} - - -object Release { - - object Project { - val `terpal-runtime` = "terpal-runtime" - val `terpal-plugin-gradle` = "terpal-plugin-gradle" - val `terpal-plugin-kotlin` = "terpal-plugin-kotlin" - } - - // :terpal-runtime:publishMacosX64PublicationToOss - // :terpal-runtime:publishMacosArm64PublicationToOss - // :terpal-runtime:publishIosX64PublicationToOss - // :terpal-runtime:publishIosArm64PublicationToOss - - val macBuildCommands = - listOf( - //"iosX64", - //"iosArm64", - "tvosX64", - "tvosArm64", - "watchosX64", - "watchosArm32", - "watchosArm64", - //"macosX64", - //"macosArm64", - "iosSimulatorArm64" - ).map { "publish${it.capitalize()}PublicationToOssRepository" } - - val windowsBuildCommands = - listOf( - "mingwX64" - ).map { "publish${it.capitalize()}PublicationToOssRepository" } - - fun String.capitalize() = this.replaceFirstChar { it.uppercase() } -} +//tasks.register("publishLinux") { +// dependsOn( +// gradle.includedBuild(Release.Project.`terpal-runtime`).task(":publishAllPublicationsToOssRepository"), +// gradle.includedBuild(Release.Project.`terpal-plugin-gradle`).task(":publish"), +// gradle.includedBuild(Release.Project.`terpal-plugin-kotlin`).task(":publish"), +// ) +//} +// +//tasks.register("publishLinuxLocal") { +// ":${Release.Project.`terpal-runtime`}:publishToMavenLocal" // should this first clause even be here? +// dependsOn( +// gradle.includedBuild(Release.Project.`terpal-runtime`).task(":publishToMavenLocal"), +// gradle.includedBuild(Release.Project.`terpal-plugin-gradle`).task(":publishToMavenLocal"), +// gradle.includedBuild(Release.Project.`terpal-plugin-kotlin`).task(":publishToMavenLocal"), +// ) +//} +// +//tasks.register("publishMac") { +// Release.macBuildCommands.forEach { +// dependsOn(gradle.includedBuild(Release.Project.`terpal-runtime`).task(":$it")) +// } +// //dependsOn( +// // gradle.includedBuild(Release.Project.`terpal-runtime`).task(":publishAllPublicationsToOssRepository") +// //) +//} +// +//tasks.register("publishWindows") { +// Release.windowsBuildCommands.forEach { +// dependsOn(gradle.includedBuild(Release.Project.`terpal-runtime`).task(":$it")) +// } +//} +// +// +//tasks.register("publishLinuxNoRunner") { +// dependsOn( +// gradle.includedBuild(Release.Project.`terpal-runtime`).task(":publishAllPublicationsToOssRepository"), +// gradle.includedBuild(Release.Project.`terpal-plugin-gradle`).task(":publish"), +// gradle.includedBuild(Release.Project.`terpal-plugin-kotlin`).task(":publish"), +// ) +//} +//tasks.register("publishMacNoRunner") { +// Release.macBuildCommands.forEach { +// dependsOn(gradle.includedBuild(Release.Project.`terpal-runtime`).task(":$it")) +// } +//} +//tasks.register("publishWindowsNoRunner") { +// Release.windowsBuildCommands.forEach { +// dependsOn(gradle.includedBuild(Release.Project.`terpal-runtime`).task(":$it")) +// } +//} +// +// +//object Release { +// +// object Project { +// val `terpal-runtime` = "terpal-runtime" +// val `terpal-plugin-gradle` = "terpal-plugin-gradle" +// val `terpal-plugin-kotlin` = "terpal-plugin-kotlin" +// } +// +// // :terpal-runtime:publishMacosX64PublicationToOss +// // :terpal-runtime:publishMacosArm64PublicationToOss +// // :terpal-runtime:publishIosX64PublicationToOss +// // :terpal-runtime:publishIosArm64PublicationToOss +// +// val macBuildCommands = +// listOf( +// //"iosX64", +// //"iosArm64", +// "tvosX64", +// "tvosArm64", +// "watchosX64", +// "watchosArm32", +// "watchosArm64", +// //"macosX64", +// //"macosArm64", +// "iosSimulatorArm64" +// ).map { "publish${it.capitalize()}PublicationToOssRepository" } +// +// val windowsBuildCommands = +// listOf( +// "mingwX64" +// ).map { "publish${it.capitalize()}PublicationToOssRepository" } +// +// fun String.capitalize() = this.replaceFirstChar { it.uppercase() } +//}