From eff464d0302ef1c116ee2f8dbd2686e2cd3e35f0 Mon Sep 17 00:00:00 2001 From: Matas Lauzadis Date: Tue, 23 Dec 2025 16:12:58 -0600 Subject: [PATCH 1/5] building with latest KSP version --- gradle/libs.versions.toml | 27 +++++++++---------- .../dynamodb-mapper/build.gradle.kts | 17 ++++-------- .../internal/DynamoDbMapperImpl.kt | 2 +- 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 836509da321..143a7f66b78 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,10 @@ [versions] -kotlin-version = "2.2.0" -ksp-version = "2.2.0-2.0.2" # Keep in sync with kotlin-version +kotlin-version = "2.3.0" +ksp-version = "2.3.4" dokka-version = "2.0.0" +# TODO Upgrade to 0.5.0 before merging aws-kotlin-repo-tools-version = "0.4.65" # libs @@ -12,27 +13,28 @@ atomicfu-version = "0.29.0" binary-compatibility-validator-version = "0.18.0" # smithy-kotlin codegen and runtime are versioned separately +# TODO Upgrade to 1.6.0 before merging smithy-kotlin-runtime-version = "1.5.24" +# TODO Upgrade to 0.36.0 before merging smithy-kotlin-codegen-version = "0.35.24" # codegen -smithy-version = "1.64.0" +smithy-version = "1.65.0" # testing ddb-local-version = "2.5.2" -junit-version = "5.13.2" +junit-version = "5.14.1" kotest-version = "5.9.1" -kotlinx-benchmark-version = "0.4.12" -kotlinx-serialization-version = "1.7.3" -mockk-version = "1.13.13" -slf4j-version = "2.0.16" -jsoup-version = "1.20.1" +kotlinx-benchmark-version = "0.4.15" +kotlinx-serialization-version = "1.9.0" +mockk-version = "1.14.7" +slf4j-version = "2.0.17" +jsoup-version = "1.21.2" [libraries] aws-kotlin-repo-tools-build-support = { module="aws.sdk.kotlin.gradle:build-support", version.ref = "aws-kotlin-repo-tools-version" } kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin-version" } -kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin-version" } kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin-version" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin-version" } kotlin-test-junit5 = { module = "org.jetbrains.kotlin:kotlin-test-junit5", version.ref = "kotlin-version" } @@ -43,11 +45,8 @@ dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", vers kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu-version" } kotlinx-atomicfu-plugin = { module = "org.jetbrains.kotlinx:atomicfu-gradle-plugin", version.ref = "atomicfu-version" } -kotlinx-coroutines-debug = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-debug", version.ref = "coroutines-version" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines-version" } kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines-version" } -kotlinx-coroutines-jdk8 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8", version.ref = "coroutines-version" } -kotlinx-coroutines-slf4j = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-slf4j", version.ref = "coroutines-version" } ksp-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp-version" } ksp-gradle-plugin = { module = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin", version.ref = "ksp-version" } @@ -146,10 +145,8 @@ smithy-kotlin-service-client = [ ] [plugins] -dokka = { id = "org.jetbrains.dokka", version.ref = "dokka-version"} kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-version" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin-version" } -kotlinx-benchmark = { id = "org.jetbrains.kotlinx.benchmark", version.ref = "kotlinx-benchmark-version" } kotlinx-binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator-version" } kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin-version"} ksp = { id = "com.google.devtools.ksp", version.ref = "ksp-version" } diff --git a/hll/dynamodb-mapper/dynamodb-mapper/build.gradle.kts b/hll/dynamodb-mapper/dynamodb-mapper/build.gradle.kts index a8f3af51954..cda2529bf75 100644 --- a/hll/dynamodb-mapper/dynamodb-mapper/build.gradle.kts +++ b/hll/dynamodb-mapper/dynamodb-mapper/build.gradle.kts @@ -6,8 +6,6 @@ import aws.sdk.kotlin.gradle.kmp.NATIVE_ENABLED import com.amazonaws.services.dynamodbv2.local.main.ServerRunner import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer -import com.google.devtools.ksp.gradle.KspTaskJvm -import com.google.devtools.ksp.gradle.KspTaskMetadata import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import java.net.ServerSocket import java.nio.file.Files @@ -76,10 +74,8 @@ if (project.NATIVE_ENABLED) { dependencies.kspCommonMainMetadata(project(":hll:dynamodb-mapper:dynamodb-mapper-ops-codegen")) kotlin.sourceSets.commonMain { - tasks.withType { - // Wire up the generated source to the commonMain source set - kotlin.srcDir(destinationDirectory) - } + // Wire up the generated source to the commonMain source set + kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin") } } else { // FIXME This is a dirty hack for JVM-only builds which KSP doesn't consider to be "multiplatform". Explanation of @@ -120,10 +116,7 @@ if (project.NATIVE_ENABLED) { } tasks.withType> { - if (this !is KspTaskJvm) { - // Ensure that any **non-KSP** compile tasks depend on the generated src move - dependsOn(moveGenSrc) - } + dependsOn(moveGenSrc) } // Finally, wire up the generated source to the commonMain source set @@ -174,7 +167,7 @@ open class DynamoDbLocalInstance : DefaultTask() { } } -val startDdbLocal = task("startDdbLocal") { +val startDdbLocal = tasks.register("startDdbLocal") { portFile.set(file("build/ddblocal/port.info")) // Keep in sync with DdbLocalTest.kt outputs.upToDateWhen { false } // Always run this task even if a portFile already exists } @@ -182,6 +175,6 @@ val startDdbLocal = task("startDdbLocal") { tasks.withType { dependsOn(startDdbLocal) doLast { - startDdbLocal.stop() + startDdbLocal.get().stop() } } diff --git a/hll/dynamodb-mapper/dynamodb-mapper/common/src/aws/sdk/kotlin/hll/dynamodbmapper/internal/DynamoDbMapperImpl.kt b/hll/dynamodb-mapper/dynamodb-mapper/common/src/aws/sdk/kotlin/hll/dynamodbmapper/internal/DynamoDbMapperImpl.kt index 1206c3d51f7..a1c0a2b0c22 100644 --- a/hll/dynamodb-mapper/dynamodb-mapper/common/src/aws/sdk/kotlin/hll/dynamodbmapper/internal/DynamoDbMapperImpl.kt +++ b/hll/dynamodb-mapper/dynamodb-mapper/common/src/aws/sdk/kotlin/hll/dynamodbmapper/internal/DynamoDbMapperImpl.kt @@ -45,7 +45,7 @@ internal class MapperConfigBuilderImpl : DynamoDbMapper.Config.Builder { /** * An interceptor that emits the DynamoDB Mapper business metric */ -private object BusinessMetricInterceptor : HttpInterceptor { +internal object BusinessMetricInterceptor : HttpInterceptor { override suspend fun modifyBeforeSerialization(context: RequestInterceptorContext): Any { context.executionContext.emitBusinessMetric(AwsBusinessMetric.DDB_MAPPER) return context.request From 3b14351a09b0d19bce601592e32fd0e191675c47 Mon Sep 17 00:00:00 2001 From: Matas Lauzadis Date: Tue, 23 Dec 2025 16:13:19 -0600 Subject: [PATCH 2/5] building with latest KSP version --- gradle.properties | 5 ----- 1 file changed, 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index e13a7e6a148..983beb94c8e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,11 +14,6 @@ kotlinx.atomicfu.enableJvmIrTransformation=true # FIXME - https://github.com/Kotlin/kotlinx-atomicfu/issues/274 kotlinx.atomicfu.enableNativeIrTransformation=false -# https://github.com/google/ksp/blob/main/docs/ksp2.md -# Disable KSP2 due to a bug around subsequent invocations -# https://github.com/google/dagger/issues/4181 / https://github.com/google/ksp/issues/1678 -ksp.useKSP2=false - # FIXME Remove after Dokka 2.0 Gradle plugin is stable org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true \ No newline at end of file From e4db702dc7e4250db7534ac0528ed055f64437b9 Mon Sep 17 00:00:00 2001 From: Matas Lauzadis Date: Tue, 23 Dec 2025 16:48:48 -0600 Subject: [PATCH 3/5] remove NATIVE_ENABLED path --- .../dynamodb-mapper/build.gradle.kts | 105 +++++++++--------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/hll/dynamodb-mapper/dynamodb-mapper/build.gradle.kts b/hll/dynamodb-mapper/dynamodb-mapper/build.gradle.kts index cda2529bf75..080640fe05e 100644 --- a/hll/dynamodb-mapper/dynamodb-mapper/build.gradle.kts +++ b/hll/dynamodb-mapper/dynamodb-mapper/build.gradle.kts @@ -3,7 +3,6 @@ * SPDX-License-Identifier: Apache-2.0 */ -import aws.sdk.kotlin.gradle.kmp.NATIVE_ENABLED import com.amazonaws.services.dynamodbv2.local.main.ServerRunner import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask @@ -66,63 +65,69 @@ ksp { ) arg("op-allowlist", allowlist.joinToString(";")) } +// FIXME dynamodb-mapper native compilation never worked? +//if (project.NATIVE_ENABLED) { +// // Configure KSP for multiplatform: https://kotlinlang.org/docs/ksp-multiplatform.html +// // https://github.com/google/ksp/issues/963#issuecomment-1894144639 +// // https://github.com/google/ksp/issues/965 +// dependencies.kspCommonMainMetadata(project(":hll:dynamodb-mapper:dynamodb-mapper-ops-codegen")) +// +// kotlin.sourceSets.commonMain { +// // Wire up the generated source to the commonMain source set +// kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin") +// } +//} + +// FIXME This is a dirty hack for JVM-only builds which KSP doesn't consider to be "multiplatform". +// Explanation of hack follows in narrative, minimally-opinionated comments. + +// Start by invoking the JVM-only KSP configuration +dependencies.kspJvm(project(":hll:dynamodb-mapper:dynamodb-mapper-ops-codegen")) + +// Then we need to move the generated source from jvm to common +val moveGenSrc by tasks.registering { + // Can't move src until the src is generated + dependsOn(tasks.named("kspKotlinJvm")) + + // Detecting these paths programmatically is complex; just hardcode them + val srcDir = file("build/generated/ksp/jvm/jvmMain") + val destDir = file("build/generated/ksp/common/commonMain") + + inputs.dir(srcDir) + outputs.dirs(srcDir, destDir) -if (project.NATIVE_ENABLED) { - // Configure KSP for multiplatform: https://kotlinlang.org/docs/ksp-multiplatform.html - // https://github.com/google/ksp/issues/963#issuecomment-1894144639 - // https://github.com/google/ksp/issues/965 - dependencies.kspCommonMainMetadata(project(":hll:dynamodb-mapper:dynamodb-mapper-ops-codegen")) - - kotlin.sourceSets.commonMain { - // Wire up the generated source to the commonMain source set - kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin") - } -} else { - // FIXME This is a dirty hack for JVM-only builds which KSP doesn't consider to be "multiplatform". Explanation of - // hack follows in narrative, minimally-opinionated comments. - - // Start by invoking the JVM-only KSP configuration - dependencies.kspJvm(project(":hll:dynamodb-mapper:dynamodb-mapper-ops-codegen")) - - // Then we need to move the generated source from jvm to common - val moveGenSrc by tasks.registering { - // Can't move src until the src is generated - dependsOn(tasks.named("kspKotlinJvm")) - - // Detecting these paths programmatically is complex; just hardcode them - val srcDir = file("build/generated/ksp/jvm/jvmMain") - val destDir = file("build/generated/ksp/common/commonMain") - - inputs.dir(srcDir) - outputs.dirs(srcDir, destDir) - - doLast { - if (destDir.exists()) { - // Clean out the existing destination, otherwise move fails - require(destDir.deleteRecursively()) { "Failed to delete $destDir before moving from $srcDir" } - } else { - // Create the destination directories, otherwise move fails - require(destDir.mkdirs()) { "Failed to create path $destDir" } - } - - Files.move(srcDir.toPath(), destDir.toPath(), StandardCopyOption.REPLACE_EXISTING) + doLast { + if (destDir.exists()) { + // Clean out the existing destination, otherwise move fails + require(destDir.deleteRecursively()) { "Failed to delete $destDir before moving from $srcDir" } + } else { + // Create the destination directories, otherwise move fails + require(destDir.mkdirs()) { "Failed to create path $destDir" } } - } - listOf("jvmSourcesJar", "metadataSourcesJar", "jvmProcessResources").forEach { - tasks.named(it) { - dependsOn(moveGenSrc) - } + Files.move(srcDir.toPath(), destDir.toPath(), StandardCopyOption.REPLACE_EXISTING) } +} + +// Ensure all source jar tasks depend on the generated source move +tasks.matching { it.name.endsWith("SourcesJar") || it.name == "sourcesJar" }.configureEach { + dependsOn(moveGenSrc) +} - tasks.withType> { +// Also ensure specific tasks depend on the move +listOf("jvmProcessResources", "metadataSourcesJar").forEach { taskName -> + tasks.matching { it.name == taskName }.configureEach { dependsOn(moveGenSrc) } +} - // Finally, wire up the generated source to the commonMain source set - kotlin.sourceSets.commonMain { - kotlin.srcDir("build/generated/ksp/common/commonMain/kotlin") - } +tasks.withType> { + dependsOn(moveGenSrc) +} + +// Finally, wire up the generated source to the commonMain source set +kotlin.sourceSets.commonMain { + kotlin.srcDir("build/generated/ksp/common/commonMain/kotlin") } open class DynamoDbLocalInstance : DefaultTask() { From 5dd3ebdf717b984b816c407588307a559fc502fe Mon Sep 17 00:00:00 2001 From: Matas Lauzadis Date: Tue, 23 Dec 2025 16:48:56 -0600 Subject: [PATCH 4/5] disable various K/N tests --- .../runtime/auth/credentials/EcsCredentialsProviderTest.kt | 2 ++ .../runtime/auth/credentials/LoginCredentialsProviderTest.kt | 5 ++++- .../runtime/auth/credentials/LoginTokenProviderTest.kt | 2 ++ .../auth/credentials/ProfileCredentialsProviderTest.kt | 4 ++++ .../kotlin/runtime/region/DefaultRegionProviderChainTest.kt | 2 ++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/EcsCredentialsProviderTest.kt b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/EcsCredentialsProviderTest.kt index 8401b507b59..2d872bace63 100644 --- a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/EcsCredentialsProviderTest.kt +++ b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/EcsCredentialsProviderTest.kt @@ -9,6 +9,7 @@ import aws.sdk.kotlin.runtime.auth.credentials.internal.credentials import aws.sdk.kotlin.runtime.config.AwsSdkSetting import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric +import aws.smithy.kotlin.runtime.IgnoreNative import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProviderException import aws.smithy.kotlin.runtime.http.Headers @@ -143,6 +144,7 @@ class EcsCredentialsProviderTest { engine.assertRequests() } + @IgnoreNative @Test fun testNonLocalFullUri() = runTest { val uri = "http://amazonaws.com/full" diff --git a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/LoginCredentialsProviderTest.kt b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/LoginCredentialsProviderTest.kt index 19dce8662e2..4b09943e41e 100644 --- a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/LoginCredentialsProviderTest.kt +++ b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/LoginCredentialsProviderTest.kt @@ -8,6 +8,7 @@ package aws.sdk.kotlin.runtime.auth.credentials import aws.sdk.kotlin.runtime.auth.credentials.internal.credentials import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric +import aws.smithy.kotlin.runtime.IgnoreNative import aws.smithy.kotlin.runtime.http.Headers import aws.smithy.kotlin.runtime.http.HttpBody import aws.smithy.kotlin.runtime.http.HttpStatusCode @@ -27,7 +28,7 @@ import kotlin.time.Duration.Companion.minutes import kotlin.to class LoginCredentialsProviderTest { - + @IgnoreNative @Test fun testCacheFilename() { val expected = "36db1d138ff460920374e4c3d8e01f53f9f73537e89c88d639f68393df0e2726.json" @@ -35,6 +36,7 @@ class LoginCredentialsProviderTest { assertEquals(expected, actual) } + @IgnoreNative @Test fun testExpiredToken() = runTest( // TODO: Figure out why this test takes so long to run on some developer machines (@aoperez) @@ -82,6 +84,7 @@ class LoginCredentialsProviderTest { }.message.shouldMatch(Regex("Login token for login-session: .* is expired")) } + @IgnoreNative @Test fun testSuccess() = runTest { val expectedExpiration = Instant.fromIso8601("2020-10-16T04:56:00Z") diff --git a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/LoginTokenProviderTest.kt b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/LoginTokenProviderTest.kt index 9a175d4b276..a899daba52a 100644 --- a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/LoginTokenProviderTest.kt +++ b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/LoginTokenProviderTest.kt @@ -6,6 +6,7 @@ package aws.sdk.kotlin.runtime.auth.credentials import aws.sdk.kotlin.runtime.client.AwsClientOption +import aws.smithy.kotlin.runtime.IgnoreNative import aws.smithy.kotlin.runtime.http.Headers import aws.smithy.kotlin.runtime.http.HttpBody import aws.smithy.kotlin.runtime.http.HttpStatusCode @@ -95,6 +96,7 @@ class LoginTokenProviderTest { data class Error(val message: String) : TestOutcome() } + @IgnoreNative @Test fun testLoginTokenCacheBehavior() = runTest(timeout = 2.minutes) { val testList = Json.parseToJsonElement(LOGIN_TOKEN_PROVIDER_TEST_SUITE).jsonArray diff --git a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/ProfileCredentialsProviderTest.kt b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/ProfileCredentialsProviderTest.kt index 52147854751..b2184909a4d 100644 --- a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/ProfileCredentialsProviderTest.kt +++ b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/auth/credentials/ProfileCredentialsProviderTest.kt @@ -10,6 +10,7 @@ import aws.sdk.kotlin.runtime.client.AwsClientOption import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.AwsBusinessMetric import aws.sdk.kotlin.runtime.http.interceptors.businessmetrics.withBusinessMetric import aws.sdk.kotlin.runtime.util.testAttributes +import aws.smithy.kotlin.runtime.IgnoreNative import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials import aws.smithy.kotlin.runtime.auth.awscredentials.copy import aws.smithy.kotlin.runtime.collections.attributesOf @@ -106,6 +107,7 @@ class ProfileCredentialsProviderTest { assertEquals(expected, actual) } + @IgnoreNative @Test fun testBasicAssumeRole() = runTest { // smoke test for assume role, more involved scenarios are tested through the default chain @@ -275,6 +277,7 @@ class ProfileCredentialsProviderTest { assertEquals(Host.Domain("sts.us-west-2.amazonaws.com"), requests.actual.url.host) } + @IgnoreNative @Test fun testPlatformRegion() = runTest { val testArn = "arn:aws:iam::1234567:role/test-role" @@ -335,6 +338,7 @@ class ProfileCredentialsProviderTest { assertEquals(expected, actual) } + @IgnoreNative @Test fun assumeRoleWithNamedProviderBusinessMetrics() = runTest { val testArn = "arn:aws:iam::1234567:role/test-role" diff --git a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/region/DefaultRegionProviderChainTest.kt b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/region/DefaultRegionProviderChainTest.kt index fecaab8f73a..b6ccb87f15d 100644 --- a/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/region/DefaultRegionProviderChainTest.kt +++ b/aws-runtime/aws-config/common/test/aws/sdk/kotlin/runtime/region/DefaultRegionProviderChainTest.kt @@ -6,6 +6,7 @@ package aws.sdk.kotlin.runtime.region import aws.sdk.kotlin.runtime.util.TestInstanceMetadataProvider +import aws.smithy.kotlin.runtime.IgnoreNative import aws.smithy.kotlin.runtime.util.TestPlatformProvider import kotlinx.coroutines.test.runTest import kotlinx.serialization.json.* @@ -21,6 +22,7 @@ class DefaultRegionProviderChainTest { val targets: List = emptyList(), ) + @IgnoreNative @Test fun testSuite() = runTest { val tests = Json.parseToJsonElement(REGION_PROVIDER_CHAIN_TEST_SUITE).jsonArray From a51efa2a85d2b0ae227087a23d7a730f649542f6 Mon Sep 17 00:00:00 2001 From: Matas Lauzadis Date: Tue, 23 Dec 2025 16:55:38 -0600 Subject: [PATCH 5/5] changelog --- .changes/9e312657-9d30-4092-9877-a70b40d34e74.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changes/9e312657-9d30-4092-9877-a70b40d34e74.json diff --git a/.changes/9e312657-9d30-4092-9877-a70b40d34e74.json b/.changes/9e312657-9d30-4092-9877-a70b40d34e74.json new file mode 100644 index 00000000000..c77c80facd9 --- /dev/null +++ b/.changes/9e312657-9d30-4092-9877-a70b40d34e74.json @@ -0,0 +1,6 @@ +{ + "id": "9e312657-9d30-4092-9877-a70b40d34e74", + "type": "misc", + "description": "⚠️ **IMPORTANT**: Upgrade to Kotlin 2.3.0", + "requiresMinorVersionBump": true +} \ No newline at end of file