Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,41 +8,32 @@
import com.vanniktech.maven.publish.MavenPublishBaseExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
import org.jetbrains.kotlin.gradle.dsl.abi.AbiValidationExtension
import org.jetbrains.kotlin.gradle.dsl.abi.AbiValidationMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation

class PublishingConventionPlugin : Plugin<Project> {
@OptIn(ExperimentalAbiValidation::class)
override fun apply(target: Project) = with(target) {
pluginManager.apply("com.vanniktech.maven.publish")

// Enable Kotlin Gradle Plugin's built-in ABI validation (Kotlin 2.2+),
// the JetBrains-supported successor to kotlinx-binary-compatibility-validator.
// Enable Kotlin Gradle Plugin's built-in ABI validation, the
// JetBrains-supported successor to kotlinx-binary-compatibility-validator.
// Tasks: ./gradlew checkKotlinAbi (verify, auto-bound to check)
// ./gradlew updateKotlinAbi (refresh reference dump).
// The `abiValidation` accessor is a dynamic Gradle extension on the
// KotlinProjectExtension; lookup is by name+type for plugin-id agnosticism.
plugins.withId("org.jetbrains.kotlin.multiplatform") {
val kotlin = extensions.getByType(KotlinProjectExtension::class)
val abi = (kotlin as ExtensionAware).extensions
.getByName("abiValidation") as AbiValidationMultiplatformExtension
abi.enabled.set(true)
// Hide implementation packages from the public ABI surface
// (e.g. SQLDelight-generated row classes / queries / database in
// `…internal.**`). See ADR-005 and API-P0-2.
abi.filters.exclude.byNames.add("**.internal.**")
}
plugins.withId("org.jetbrains.kotlin.jvm") {
val kotlin = extensions.getByType(KotlinProjectExtension::class)
val abi = (kotlin as ExtensionAware).extensions
.getByName("abiValidation") as AbiValidationExtension
abi.enabled.set(true)
abi.filters.exclude.byNames.add("**.internal.**")
// KGP 2.4 unified the DSL: `abiValidation { }` on the Kotlin extension
// both enables validation and configures it (the old per-flavor
// extensions and their `enabled` property were removed).
listOf("org.jetbrains.kotlin.multiplatform", "org.jetbrains.kotlin.jvm").forEach { id ->
plugins.withId(id) {
extensions.getByType(KotlinProjectExtension::class).abiValidation {
// Hide implementation packages from the public ABI surface
// (e.g. SQLDelight-generated row classes / queries / database
// in `…internal.**`). See ADR-005 and API-P0-2.
filters.exclude.byNames.add("**.internal.**")
}
}
}

extensions.configure<MavenPublishBaseExtension> {
Expand Down
5 changes: 4 additions & 1 deletion core/api/jvm/core.api
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ public final class org/meshtastic/sdk/AdminResultException$Unauthorized : org/me

public final class org/meshtastic/sdk/AutoReconnectConfig {
public static final field Companion Lorg/meshtastic/sdk/AutoReconnectConfig$Companion;
public fun <init> ()V
public synthetic fun <init> (ZJJLjava/lang/Integer;DDILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (ZJJLjava/lang/Integer;DDLkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (ZLkotlin/time/Duration;Lkotlin/time/Duration;Ljava/lang/Integer;DD)V
Expand Down Expand Up @@ -919,7 +920,7 @@ public abstract class org/meshtastic/sdk/MeshtasticException : java/lang/Excepti
public final fun getOperation ()Ljava/lang/String;
public final fun getTransportIdentity ()Lorg/meshtastic/sdk/TransportIdentity;
public final fun getTransportIdentity-qAME2vk ()Ljava/lang/String;
public final fun setTransportIdentity$core (Lorg/meshtastic/sdk/TransportIdentity;)V
public final fun setTransportIdentity$org_meshtastic_core (Lorg/meshtastic/sdk/TransportIdentity;)V
public final fun withContext (Lorg/meshtastic/sdk/MeshtasticException;Lorg/meshtastic/sdk/TransportIdentity;Ljava/lang/String;)Lorg/meshtastic/sdk/MeshtasticException;
public final fun withContext-V_XA3as (Lorg/meshtastic/sdk/MeshtasticException;Ljava/lang/String;Ljava/lang/String;)Lorg/meshtastic/sdk/MeshtasticException;
public static synthetic fun withContext-V_XA3as$default (Lorg/meshtastic/sdk/MeshtasticException;Lorg/meshtastic/sdk/MeshtasticException;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lorg/meshtastic/sdk/MeshtasticException;
Expand Down Expand Up @@ -1385,6 +1386,7 @@ public abstract class org/meshtastic/sdk/RetryPolicy {
}

public final class org/meshtastic/sdk/RetryPolicy$ExponentialBackoff : org/meshtastic/sdk/RetryPolicy {
public fun <init> ()V
public synthetic fun <init> (IJJDDILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (IJJDDLkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (ILkotlin/time/Duration;Lkotlin/time/Duration;DD)V
Expand All @@ -1411,6 +1413,7 @@ public final class org/meshtastic/sdk/RetryPolicy$ExponentialBackoff : org/mesht
}

public final class org/meshtastic/sdk/RetryPolicy$Fixed : org/meshtastic/sdk/RetryPolicy {
public fun <init> ()V
public synthetic fun <init> (IJILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (IJLkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (ILkotlin/time/Duration;)V
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[versions]
# --- Kotlin & build ---
kotlin = "2.4.10" # SKIE 0.10.12 supports up to 2.3.21 (build-logic ABI DSL + SKIE both break on 2.4.0)
kotlin = "2.4.0" # SKIE 0.10.13 ceiling — it rejects 2.4.10 outright; bump both together when SKIE releases support
agp = "9.3.0"
gradle = "9.5.1"
javaVersion = "21"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package org.meshtastic.sdk.transport.ble
import com.juul.kable.Characteristic
import com.juul.kable.Descriptor
import com.juul.kable.DiscoveredService
import com.juul.kable.ExperimentalApi
import com.juul.kable.ExperimentalKableApi
import com.juul.kable.Identifier
import com.juul.kable.Peripheral
import com.juul.kable.State
Expand Down Expand Up @@ -130,7 +130,7 @@ class BleTransportHookTest {
*/
// ExperimentalUuidApi: on iOS targets Kable's `Identifier` is kotlin.uuid.Uuid (experimental);
// the override below trips the opt-in only when compiled for those targets.
@OptIn(ExperimentalApi::class, kotlin.uuid.ExperimentalUuidApi::class)
@OptIn(ExperimentalKableApi::class, kotlin.uuid.ExperimentalUuidApi::class)
private class FakePeripheral : Peripheral {

private val stateFlow = MutableStateFlow<State>(State.Disconnected())
Expand Down
2 changes: 0 additions & 2 deletions transport-tcp/api/jvm/transport-tcp.api
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
public final class org/meshtastic/sdk/transport/tcp/TcpTransport : org/meshtastic/sdk/RadioTransport {
public static final field READ_CHUNK_BYTES I
public static final field READ_TIMEOUT_MS J
public fun <init> (Ljava/lang/String;I)V
public synthetic fun <init> (Ljava/lang/String;IILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun connect (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down