Extract shared build logic to convention plugins

See: https://docs.gradle.org/current/userguide/sharing_build_logic_between_subprojects.html#sec:convention_plugins
This commit is contained in:
Michael Bull 2024-03-02 23:29:17 +00:00
parent bae2d88e3d
commit 88e31cd1ac
14 changed files with 302 additions and 337 deletions

View File

@ -1,9 +1,7 @@
description = "Benchmarks for kotlin-result."
plugins {
kotlin("multiplatform")
id("org.jetbrains.kotlinx.benchmark")
id("org.jetbrains.kotlin.plugin.allopen")
id("kotlin-conventions")
}
allOpen {
@ -19,15 +17,6 @@ benchmark {
}
kotlin {
jvmToolchain(8)
jvm {
}
js(IR) {
nodejs()
}
sourceSets {
val commonMain by getting {
dependencies {

View File

@ -0,0 +1 @@
description=Benchmarks for kotlin-result.

View File

@ -1,26 +1,11 @@
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
import com.github.benmanes.gradle.versions.updates.gradle.GradleReleaseChannel
import org.jetbrains.dokka.gradle.DokkaTask
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
val ossrhUsername: String? by project
val ossrhPassword: String? by project
val signingKeyId: String? by project // must be the last 8 digits of the key
val signingKey: String? by project
val signingPassword: String? by project
description = "A Result monad for modelling success or failure operations."
plugins {
base
alias(libs.plugins.versions)
alias(libs.plugins.kotlin.multiplatform) apply false
alias(libs.plugins.kotlin.benchmark) apply false
alias(libs.plugins.kotlin.allopen) apply false
alias(libs.plugins.dokka) apply false
}
tasks.withType<DependencyUpdatesTask> {
@ -32,237 +17,3 @@ tasks.withType<DependencyUpdatesTask> {
}
}
}
subprojects {
plugins.withType<MavenPublishPlugin> {
apply(plugin = "org.gradle.signing")
plugins.withType<KotlinMultiplatformPluginWrapper> {
apply(plugin = "org.jetbrains.dokka")
val dokkaHtml by tasks.existing(DokkaTask::class)
val javadocJar by tasks.registering(Jar::class) {
group = LifecycleBasePlugin.BUILD_GROUP
description = "Assembles a jar archive containing the Javadoc API documentation."
archiveClassifier.set("javadoc")
from(dokkaHtml)
}
tasks.withType<Jar> {
from(rootDir.resolve("LICENSE")) {
into("META-INF")
}
}
configure<KotlinMultiplatformExtension> {
explicitApi()
jvmToolchain(8)
jvm {
mavenPublication {
artifact(javadocJar.get())
}
}
js(IR) {
browser()
nodejs()
}
linuxX64()
mingwX64()
macosArm64()
macosX64()
iosArm64()
iosSimulatorArm64()
iosX64()
tvosArm64()
tvosSimulatorArm64()
tvosX64()
watchosArm32()
watchosArm64()
watchosSimulatorArm64()
watchosX64()
}
}
configure<PublishingExtension> {
repositories {
maven {
if (project.version.toString().endsWith("SNAPSHOT")) {
setUrl("https://oss.sonatype.org/content/repositories/snapshots")
} else {
setUrl("https://oss.sonatype.org/service/local/staging/deploy/maven2")
}
credentials {
username = ossrhUsername
password = ossrhPassword
}
}
}
publications.withType<MavenPublication> {
pom {
name.set(project.name)
url.set("https://github.com/michaelbull/kotlin-result")
inceptionYear.set("2017")
licenses {
license {
name.set("ISC License")
url.set("https://opensource.org/licenses/isc-license.txt")
}
}
developers {
developer {
name.set("Michael Bull")
url.set("https://www.michael-bull.com")
}
}
contributors {
contributor {
name.set("Kevin Herron")
url.set("https://github.com/kevinherron")
}
contributor {
name.set("Markus Padourek")
url.set("https://github.com/Globegitter")
}
contributor {
name.set("Tristan Hamilton")
url.set("https://github.com/Munzey")
}
contributor {
name.set("Joseph Van der Wee")
url.set("https://github.com/jvanderwee")
}
contributor {
name.set("Gregory Inouye")
url.set("https://github.com/gregoryinouye")
}
contributor {
name.set("Thomas Oddsund")
url.set("https://github.com/oddsund")
}
contributor {
name.set("Jan Müller")
url.set("https://github.com/DerYeger")
}
contributor {
name.set("avently")
url.set("https://github.com/avently")
}
contributor {
name.set("gsteckman")
url.set("https://github.com/gsteckman")
}
contributor {
name.set("Mathias Guelton")
url.set("https://github.com/mguelton")
}
contributor {
name.set("Jordan Bergin")
url.set("https://github.com/MrBergin")
}
contributor {
name.set("Pablo Gonzalez Alonso")
url.set("https://pablisco.com/")
}
contributor {
name.set("Joseph Cooper")
url.set("https://grodin.github.io/")
}
contributor {
name.set("Sebastian Kappen")
url.set("https://github.com/Nimelrian")
}
contributor {
name.set("Dmitry Suzdalev")
url.set("https://github.com/dimsuz")
}
contributor {
name.set("Berik Visschers")
url.set("https://visschers.nu/")
}
contributor {
name.set("Matthew Nelson")
url.set("https://matthewnelson.io/")
}
contributor {
name.set("Matthias Geisler")
url.set("https://github.com/bitPogo")
}
contributor {
name.set("Kirill Zhukov")
url.set("https://github.com/kirillzh")
}
contributor {
name.set("Peter Cunderlik")
url.set("https://github.com/peter-cunderlik-kmed")
}
contributor {
name.set("YuitoSato")
url.set("https://github.com/YuitoSato")
}
contributor {
name.set("Dmitry Bock")
url.set("https://github.com/Jhabkin")
}
}
scm {
connection.set("scm:git:https://github.com/michaelbull/kotlin-result")
developerConnection.set("scm:git:git@github.com:michaelbull/kotlin-result.git")
url.set("https://github.com/michaelbull/kotlin-result")
}
issueManagement {
system.set("GitHub")
url.set("https://github.com/michaelbull/kotlin-result/issues")
}
ciManagement {
system.set("GitHub")
url.set("https://github.com/michaelbull/kotlin-result/actions?query=workflow%3Aci")
}
}
}
configure<SigningExtension> {
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
sign(publications)
}
}
}
}

View File

@ -0,0 +1,7 @@
plugins {
`kotlin-dsl`
}
dependencies {
implementation(libs.kotlin.gradle.plugin)
}

View File

@ -0,0 +1,19 @@
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositories {
mavenCentral()
gradlePluginPortal()
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}

View File

@ -0,0 +1,66 @@
plugins {
kotlin("multiplatform")
}
kotlin {
jvmToolchain(8)
jvm()
js(IR) {
browser()
nodejs()
}
linuxX64()
mingwX64()
macosArm64()
macosX64()
iosArm64()
iosSimulatorArm64()
iosX64()
tvosArm64()
tvosSimulatorArm64()
tvosX64()
watchosArm32()
watchosArm64()
watchosSimulatorArm64()
watchosX64()
sourceSets {
all {
languageSettings.apply {
optIn("kotlin.contracts.ExperimentalContracts")
}
}
commonTest {
dependencies {
implementation(kotlin("test"))
}
}
jvmTest {
dependencies {
implementation(kotlin("test-junit"))
}
}
jsTest {
dependencies {
implementation(kotlin("test-js"))
}
}
}
}
tasks.withType<Jar> {
from(rootDir.resolve("LICENSE")) {
into("META-INF")
}
}

View File

@ -0,0 +1,196 @@
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.bundling.Jar
import org.gradle.kotlin.dsl.`maven-publish`
plugins {
`maven-publish`
signing
}
publishing {
repositories {
maven {
if (project.version.toString().endsWith("SNAPSHOT")) {
setUrl("https://oss.sonatype.org/content/repositories/snapshots")
} else {
setUrl("https://oss.sonatype.org/service/local/staging/deploy/maven2")
}
credentials {
val ossrhUsername: String? by project
val ossrhPassword: String? by project
username = ossrhUsername
password = ossrhPassword
}
}
}
publications.withType<MavenPublication> {
val targetName = this@withType.name
artifact(tasks.register("${targetName}JavadocJar", Jar::class) {
group = LifecycleBasePlugin.BUILD_GROUP
description = "Assembles a jar archive containing the Javadoc API documentation of target '$targetName'."
archiveClassifier.set("javadoc")
archiveAppendix.set(targetName)
})
pom {
name.set(project.name)
description.set(project.description)
inceptionYear.set("2017")
licenses {
license {
name.set("ISC License")
url.set("https://opensource.org/licenses/isc-license.txt")
}
}
developers {
developer {
name.set("Michael Bull")
url.set("https://www.michael-bull.com")
}
}
contributors {
contributor {
name.set("Kevin Herron")
url.set("https://github.com/kevinherron")
}
contributor {
name.set("Markus Padourek")
url.set("https://github.com/Globegitter")
}
contributor {
name.set("Tristan Hamilton")
url.set("https://github.com/Munzey")
}
contributor {
name.set("Joseph Van der Wee")
url.set("https://github.com/jvanderwee")
}
contributor {
name.set("Gregory Inouye")
url.set("https://github.com/gregoryinouye")
}
contributor {
name.set("Thomas Oddsund")
url.set("https://github.com/oddsund")
}
contributor {
name.set("Jan Müller")
url.set("https://github.com/DerYeger")
}
contributor {
name.set("avently")
url.set("https://github.com/avently")
}
contributor {
name.set("gsteckman")
url.set("https://github.com/gsteckman")
}
contributor {
name.set("Mathias Guelton")
url.set("https://github.com/mguelton")
}
contributor {
name.set("Jordan Bergin")
url.set("https://github.com/MrBergin")
}
contributor {
name.set("Pablo Gonzalez Alonso")
url.set("https://pablisco.com/")
}
contributor {
name.set("Joseph Cooper")
url.set("https://grodin.github.io/")
}
contributor {
name.set("Sebastian Kappen")
url.set("https://github.com/Nimelrian")
}
contributor {
name.set("Dmitry Suzdalev")
url.set("https://github.com/dimsuz")
}
contributor {
name.set("Berik Visschers")
url.set("https://visschers.nu/")
}
contributor {
name.set("Matthew Nelson")
url.set("https://matthewnelson.io/")
}
contributor {
name.set("Matthias Geisler")
url.set("https://github.com/bitPogo")
}
contributor {
name.set("Kirill Zhukov")
url.set("https://github.com/kirillzh")
}
contributor {
name.set("Peter Cunderlik")
url.set("https://github.com/peter-cunderlik-kmed")
}
contributor {
name.set("YuitoSato")
url.set("https://github.com/YuitoSato")
}
contributor {
name.set("Dmitry Bock")
url.set("https://github.com/Jhabkin")
}
}
scm {
connection.set("scm:git:https://github.com/michaelbull/kotlin-result")
developerConnection.set("scm:git:git@github.com:michaelbull/kotlin-result.git")
url.set("https://github.com/michaelbull/kotlin-result")
}
issueManagement {
system.set("GitHub")
url.set("https://github.com/michaelbull/kotlin-result/issues")
}
ciManagement {
system.set("GitHub")
url.set("https://github.com/michaelbull/kotlin-result/actions?query=workflow%3Aci")
}
}
}
}
signing {
val signingKeyId: String? by project // must be the last 8 digits of the key
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
sign(publishing.publications)
}

View File

@ -1,5 +1,3 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
application
kotlin("jvm")

View File

@ -1,5 +1,6 @@
group=com.michael-bull.kotlin-result
version=1.1.19-SNAPSHOT
description=A multiplatform Result monad for modelling success or failure operations.
kotlin.code.style=official
kotlin.native.ignoreDisabledTargets=true

View File

@ -1,15 +1,15 @@
[versions]
dokka = "1.9.10"
kotlin = "1.9.22"
kotlin-benchmark = "0.4.10"
kotlin-coroutines = "1.8.0"
ktor = "2.3.8"
logback = "1.5.1"
logback = "1.3.14"
versions-plugin = "0.51.0"
[libraries]
logback = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlin-benchmark-runtime = { module = "org.jetbrains.kotlinx:kotlinx-benchmark-runtime", version.ref = "kotlin-benchmark" }
kotlin-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlin-coroutines" }
@ -21,7 +21,6 @@ ktor-server-content-negotiation = { module = "io.ktor:ktor-server-content-negoti
ktor-server-netty = { module = "io.ktor:ktor-server-netty", version.ref = "ktor" }
[plugins]
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
kotlin-allopen = { id = "org.jetbrains.kotlin.plugin.allopen", version.ref = "kotlin" }
kotlin-benchmark = { id = "org.jetbrains.kotlinx.benchmark", version.ref = "kotlin-benchmark" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }

View File

@ -1,18 +1,13 @@
description = "Extensions for using kotlin-result with kotlinx-coroutines."
plugins {
`maven-publish`
kotlin("multiplatform")
id("kotlin-conventions")
id("publish-conventions")
}
kotlin {
sourceSets {
all {
languageSettings.apply {
optIn("kotlin.contracts.ExperimentalContracts")
}
}
explicitApi()
sourceSets {
commonMain {
dependencies {
implementation(libs.kotlin.coroutines.core)
@ -22,31 +17,8 @@ kotlin {
commonTest {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
implementation(libs.kotlin.coroutines.test)
}
}
jvmTest {
dependencies {
implementation(kotlin("test-junit"))
implementation(kotlin("test"))
}
}
jsTest {
dependencies {
implementation(kotlin("test-js"))
}
}
}
}
publishing {
publications.withType<MavenPublication> {
pom {
description.set(project.description)
}
}
}

View File

@ -0,0 +1 @@
description=Extensions for using kotlin-result with kotlinx-coroutines.

View File

@ -1,15 +1,14 @@
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
description = "A Result monad for modelling success or failure operations."
plugins {
`maven-publish`
kotlin("multiplatform")
id("kotlin-conventions")
id("publish-conventions")
}
kotlin {
jvmToolchain(8)
explicitApi()
// Additional targets not currently supported by coroutines
androidNativeArm32()
@ -24,40 +23,6 @@ kotlin {
binaries.executable()
nodejs()
}
sourceSets {
all {
languageSettings.apply {
optIn("kotlin.contracts.ExperimentalContracts")
}
}
commonTest {
dependencies {
implementation(kotlin("test"))
}
}
jvmTest {
dependencies {
implementation(kotlin("test-junit"))
}
}
jsTest {
dependencies {
implementation(kotlin("test-js"))
}
}
}
}
publishing {
publications.withType<MavenPublication> {
pom {
description.set(project.description)
}
}
}
/* https://youtrack.jetbrains.com/issue/KT-63014/Running-tests-with-wasmJs-in-1.9.20-requires-Chrome-Canary#focus=Comments-27-8321383.0-0 */

View File

@ -6,7 +6,7 @@ pluginManagement {
}
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.4.0"
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
dependencyResolutionManagement {