Skip to content

Commit

Permalink
Add support for kotlin multiplatform (#59)
Browse files Browse the repository at this point in the history
  • Loading branch information
jmateoac authored Mar 18, 2024
1 parent 57bdde7 commit 28b6e69
Show file tree
Hide file tree
Showing 53 changed files with 148 additions and 140 deletions.
24 changes: 3 additions & 21 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
alias(libs.plugins.kotlinGradlePlugin) apply false
alias(libs.plugins.kotlinMultiplatform) apply false
alias(libs.plugins.kotlinBinaryCompatibilityPlugin) apply false
alias(libs.plugins.mavenPublishGradlePlugin) apply false
alias(libs.plugins.versionsGradlePlugin)
Expand Down Expand Up @@ -34,42 +35,23 @@ subprojects {
mavenCentral()
}

apply(plugin = "java")
apply(plugin = "kotlin")
apply(plugin = rootProject.project.libs.plugins.kotlinBinaryCompatibilityPlugin.get().pluginId)
apply(plugin = rootProject.project.libs.plugins.mavenPublishGradlePlugin.get().pluginId)

configure<JavaPluginExtension> {
withSourcesJar()
withJavadocJar()
}

plugins.withId("com.vanniktech.maven.publish.base") {
val publishingExtension = extensions.getByType(PublishingExtension::class.java)
configure<com.vanniktech.maven.publish.MavenPublishBaseExtension> {
pomFromGradleProperties()
publishToMavenCentral(com.vanniktech.maven.publish.SonatypeHost.DEFAULT, true)
signAllPublications()
}

publishingExtension.publications.create<MavenPublication>("maven") {
from(components["java"])
}
}

apply(plugin = "version-catalog")

// Only apply if the project has the kotlin plugin added:
plugins.withType<KotlinPluginWrapper> {
val compileKotlin by tasks.getting(KotlinCompile::class) {
kotlinOptions {
jvmTarget = "11"
jvmTarget = "17"
allWarningsAsErrors = true
}
}
val compileTestKotlin by tasks.getting(KotlinCompile::class) {
kotlinOptions {
jvmTarget = "11"
jvmTarget = "17"
allWarningsAsErrors = true
}
}
Expand Down
19 changes: 12 additions & 7 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
[versions]
acinqSecp256 = "0.10.1"
acinqSecp256 = "0.15.0"
guava = "31.1-jre"
junit = "5.9.3"
kotest = "5.6.2"
kotest = "5.8.1"
# @pin
kotlin = "1.7.22"
kotlin = "1.9.23"
kotlinBinaryCompatibilityPlugin = "0.13.2"
kotlinCoroutines = "1.7.2"
kotlinLogging = "3.0.5"
Expand All @@ -17,34 +17,39 @@ versionCatalogUpdateGradlePlugin = "0.8.1"
versionsGradlePlugin = "0.47.0"

[libraries]
acinqSecp256k1 = { module = "fr.acinq.secp256k1:secp256k1-kmp", version.ref = "acinqSecp256" }
acinqSecp256k1JniJvm = { module = "fr.acinq.secp256k1:secp256k1-kmp-jni-jvm", version.ref = "acinqSecp256" }
acinqSecp256k1Jvm = { module = "fr.acinq.secp256k1:secp256k1-kmp-jvm", version.ref = "acinqSecp256" }
guava = { module = "com.google.guava:guava", version.ref = "guava" }
junitApi = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" }
junitEngine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" }
kotestAssertions = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" }
kotestJunitRunnerJvm = { module = "io.kotest:kotest-runner-junit5-jvm", version.ref = "kotest" }
kotestKmmEngine = { module = "io.kotest:kotest-framework-engine", version.ref = "kotest" }
kotestProperty = { module = "io.kotest:kotest-property", version.ref = "kotest" }
kotlinLoggingJvm = { module = "io.github.microutils:kotlin-logging-jvm", version.ref = "kotlinLogging" }
kotlinxCoroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinCoroutines" }
moshi = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "moshi" }
okHttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okHttp" }
okIo = { module = "com.squareup.okio:okio-jvm", version.ref = "okIo" }
okIo = { module = "com.squareup.okio:okio", version.ref = "okIo" }
slf4jSimple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }
turbine = "app.cash.turbine:turbine:1.0.0"
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }

[bundles]
kotest = [
"kotestAssertions",
"kotestJunitRunnerJvm",
"kotestProperty",
"kotestAssertions",
"kotestJunitRunnerJvm",
"kotestProperty",
]

[plugins]
dokka = "org.jetbrains.dokka:1.8.20"
gradleDocker = "com.bmuschko.docker-remote-api:9.3.1"
kotlinBinaryCompatibilityPlugin = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinBinaryCompatibilityPlugin" }
kotlinGradlePlugin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotestMultiplatform = { id = "io.kotest.multiplatform", version.ref = "kotest" }
mavenPublishGradlePlugin = { id = "com.vanniktech.maven.publish.base", version.ref = "mavenPublishGradlePlugin" }
versionCatalogUpdateGradlePlugin = { id = "nl.littlerobots.version-catalog-update", version.ref = "versionCatalogUpdateGradlePlugin" }
versionsGradlePlugin = { id = "com.github.ben-manes.versions", version.ref = "versionsGradlePlugin" }
76 changes: 76 additions & 0 deletions lib-test/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
import com.bmuschko.gradle.docker.tasks.container.DockerCreateContainer
import com.bmuschko.gradle.docker.tasks.container.DockerStartContainer
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
import com.bmuschko.gradle.docker.tasks.image.Dockerfile
import org.jetbrains.dokka.gradle.DokkaTask
import java.net.ServerSocket
import java.net.URL

plugins {
id("java")
id("kotlin")
`java-library`
id("com.bmuschko.docker-remote-api") version "9.3.0"
}

dependencies {
implementation(project(":lib"))
implementation(libs.kotestProperty)
Expand All @@ -11,9 +23,17 @@ dependencies {
// JSON
implementation(libs.moshi)

// Curves
implementation(libs.acinqSecp256k1JniJvm)
implementation(libs.acinqSecp256k1Jvm)

// Basic test libraries:

testImplementation(libs.kotestAssertions)
testImplementation(libs.kotestJunitRunnerJvm)
testImplementation(libs.kotestProperty)
testImplementation(libs.turbine)
testRuntimeOnly(libs.slf4jSimple)
testRuntimeOnly(libs.junitEngine)

apply(plugin = libs.plugins.dokka.get().pluginId)
Expand All @@ -36,3 +56,59 @@ tasks.withType<DokkaTask>().configureEach {
}
}
}

val createDockerfile by tasks.creating(Dockerfile::class) {
from("scsibug/nostr-rs-relay:latest")
}

val buildImage by tasks.creating(DockerBuildImage::class) {
dependsOn(createDockerfile)
images.add("scsibug/nostr-rs-relay:latest")
}

val createContainer by tasks.creating(DockerCreateContainer::class) {
onlyIf { !relayIsRunning() }
dependsOn(buildImage)
targetImageId(buildImage.imageId)
containerName.set("nostr-relay")
hostConfig.portBindings.set(listOf("7707:8080"))
hostConfig.autoRemove.set(true)
}

val startContainer by tasks.creating(DockerStartContainer::class) {
onlyIf { !relayIsRunning() }
dependsOn(createContainer)
targetContainerId(createContainer.containerId)
}

tasks.withType<Test>().configureEach {
dependsOn(startContainer)
}

fun relayIsRunning() =
try {
val s = ServerSocket(7707)
s.close()
false
} catch (_: java.io.IOException) {
true
}

// Publishing

configure<JavaPluginExtension> {
withSourcesJar()
withJavadocJar()
}

mavenPublishing {
val publishingExtension = extensions.getByType(PublishingExtension::class.java)

pomFromGradleProperties()
publishToMavenCentral(com.vanniktech.maven.publish.SonatypeHost.DEFAULT, true)
signAllPublications()

publishingExtension.publications.create<MavenPublication>("maven") {
from(components["java"])
}
}
2 changes: 1 addition & 1 deletion lib-test/src/main/kotlin/app/cash/nostrino/ArbPrimitive.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import okio.ByteString
import okio.ByteString.Companion.toByteString
import java.time.Instant
import java.time.temporal.ChronoUnit
import java.util.*
import java.util.UUID

object ArbPrimitive {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,10 @@ import app.cash.nostrino.crypto.PubKeyTest.Companion.arbPubKey
import app.cash.nostrino.message.relay.EventMessage
import app.cash.nostrino.message.relay.RelayMessage
import app.cash.nostrino.model.ArbEvent.arbEvent
import app.cash.nostrino.model.ArbEvent.arbEventMessage
import app.cash.nostrino.model.ArbEvent.arbRelayMessage
import app.cash.nostrino.model.ArbEvent.arbSubscriptionId
import app.cash.nostrino.model.Event
import app.cash.nostrino.model.Filter
import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.collections.shouldBeSameSizeAs
import io.kotest.matchers.collections.shouldContainAll
import io.kotest.matchers.collections.shouldContainExactly
import io.kotest.matchers.equals.shouldBeEqual
import io.kotest.matchers.shouldBe
Expand All @@ -37,8 +33,6 @@ import io.kotest.property.arbitrary.next
import io.kotest.property.checkAll
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.toList

class RelaySetTest : StringSpec({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package app.cash.nostrino.model

import app.cash.nostrino.crypto.SecKeyGenerator
import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi
import app.cash.nostrino.model.ArbEvent.arbEventContent
import app.cash.nostrino.model.ArbEvent.arbEventWithContent
import app.cash.nostrino.model.ArbEventContent.arbTextNote
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import app.cash.nostrino.model.ArbEvent.arbEventMessage
import app.cash.nostrino.model.ArbEvent.arbNotice
import app.cash.nostrino.model.ArbEvent.arbRelayMessage
import app.cash.nostrino.model.ArbEvent.moshi
import app.cash.nostrino.model.Event
import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.shouldBe
import io.kotest.matchers.string.shouldStartWith
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
package app.cash.nostrino.model

import app.cash.nostrino.crypto.ArbKeys.arbSecKey
import app.cash.nostrino.message.NostrMessageAdapter
import app.cash.nostrino.model.ArbEventContent.arbZapReceipt
import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.shouldBe
Expand Down
2 changes: 2 additions & 0 deletions lib/api/lib.api
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ public final class app/cash/nostrino/client/ConnectionState : java/lang/Enum {
public static final field Disconnected Lapp/cash/nostrino/client/ConnectionState;
public static final field Disconnecting Lapp/cash/nostrino/client/ConnectionState;
public static final field Failing Lapp/cash/nostrino/client/ConnectionState;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lapp/cash/nostrino/client/ConnectionState;
public static fun values ()[Lapp/cash/nostrino/client/ConnectionState;
}
Expand Down Expand Up @@ -107,6 +108,7 @@ public final class app/cash/nostrino/crypto/Bech32Serde$Encoding : java/lang/Enu
public static final field Bech32m Lapp/cash/nostrino/crypto/Bech32Serde$Encoding;
public static final field Beck32WithoutChecksum Lapp/cash/nostrino/crypto/Bech32Serde$Encoding;
public final fun getConstant ()I
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lapp/cash/nostrino/crypto/Bech32Serde$Encoding;
public static fun values ()[Lapp/cash/nostrino/crypto/Bech32Serde$Encoding;
}
Expand Down
Loading

0 comments on commit 28b6e69

Please sign in to comment.