Skip to content

Commit e38fd79

Browse files
authored
Enable KLib validation (#135)
* Enable KLib validation * Run API check with native and JS explicitly enabled * Update dump with native targets
1 parent b5dfe8a commit e38fd79

File tree

6 files changed

+81
-7
lines changed

6 files changed

+81
-7
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
matrix:
3434
os: [ ubuntu-latest ]
3535
target:
36-
- apiCheck
36+
- apiCheck -Pks3_enableKotlinNative=true -Pks3_enableKotlinJs=true
3737
- jvmTest
3838
- jsTest
3939
- linuxX64Test

build.gradle.kts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ dependencies {
1616
dokkatooPluginHtml(libs.dokka.allModulesPage)
1717
}
1818

19+
apiValidation {
20+
@OptIn(kotlinx.validation.ExperimentalBCVApi::class)
21+
klib {
22+
enabled = true
23+
}
24+
}
25+
1926
dokkatoo {
2027
moduleName.set("KS3")
2128

@@ -34,11 +41,12 @@ idea {
3441
module {
3542
isDownloadSources = true
3643
isDownloadJavadoc = false
37-
excludeDirs = excludeDirs + layout.files(
38-
".idea",
39-
"gradle/kotlin-js-store", // location of the lock file, overridden by Kotlin/JS convention
40-
"gradle/wrapper",
41-
)
44+
excludeDirs = excludeDirs +
45+
layout.files(
46+
".idea",
47+
"gradle/kotlin-js-store", // location of the lock file, overridden by Kotlin/JS convention
48+
"gradle/wrapper",
49+
)
4250

4351
// exclude generated Gradle code, so it doesn't clog up search results
4452
excludeDirs.addAll(

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ okio = "3.9.0"
1313
gradlePlugin-ktlint = "12.1.1"
1414
gradlePlugin-testlogger = "4.0.0"
1515

16-
kotlinBinaryCompatibilityValidator = "0.14.0"
16+
kotlinBinaryCompatibilityValidator = "0.15.0-Beta.2"
1717

1818
[libraries]
1919

ks3-core/api/ks3-core.klib.api

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Klib ABI Dump
2+
// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxX64, macosArm64, macosX64, mingwX64, tvosArm64, tvosSimulatorArm64, tvosX64, watchosArm32, watchosArm64, watchosSimulatorArm64, watchosX64]
3+
// Rendering settings:
4+
// - Signature version: 2
5+
// - Show manifest properties: true
6+
// - Show declarations: true
7+
8+
// Library unique name: <io.ks3:ks3-core>
9+
open annotation class io.ks3.core/ExperimentalKs3 : kotlin/Annotation { // io.ks3.core/ExperimentalKs3|null[0]
10+
constructor <init>() // io.ks3.core/ExperimentalKs3.<init>|<init>(){}[0]
11+
}
12+
open annotation class io.ks3.core/Ks3Internal : kotlin/Annotation { // io.ks3.core/Ks3Internal|null[0]
13+
constructor <init>() // io.ks3.core/Ks3Internal.<init>|<init>(){}[0]
14+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Klib ABI Dump
2+
// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxX64, macosArm64, macosX64, mingwX64, tvosArm64, tvosSimulatorArm64, tvosX64, watchosArm32, watchosArm64, watchosSimulatorArm64, watchosX64]
3+
// Rendering settings:
4+
// - Signature version: 2
5+
// - Show manifest properties: true
6+
// - Show declarations: true
7+
8+
// Library unique name: <io.ks3:ks3-standard>
9+
final class io.ks3.standard/EnumDecodingException : kotlinx.serialization/SerializationException { // io.ks3.standard/EnumDecodingException|null[0]
10+
constructor <init>(kotlin/String? =..., kotlin/Throwable? =...) // io.ks3.standard/EnumDecodingException.<init>|<init>(kotlin.String?;kotlin.Throwable?){}[0]
11+
}
12+
final inline fun <#A: reified kotlin/Any> io.ks3.standard/objectWrappingSerializer(kotlin/String): kotlinx.serialization.json/JsonTransformingSerializer<#A> // io.ks3.standard/objectWrappingSerializer|objectWrappingSerializer(kotlin.String){0§<kotlin.Any>}[0]
13+
final inline fun <#A: reified kotlin/Any?> io.ks3.standard/doubleSerializer(crossinline kotlin/Function1<kotlin/Double, #A>, crossinline kotlin/Function1<#A, kotlin/Double>, kotlin/String? =...): kotlinx.serialization/KSerializer<#A> // io.ks3.standard/doubleSerializer|doubleSerializer(kotlin.Function1<kotlin.Double,0:0>;kotlin.Function1<0:0,kotlin.Double>;kotlin.String?){0§<kotlin.Any?>}[0]
14+
final inline fun <#A: reified kotlin/Any?> io.ks3.standard/intSerializer(crossinline kotlin/Function1<kotlin/Int, #A>, crossinline kotlin/Function1<#A, kotlin/Int>, kotlin/String? =...): kotlinx.serialization/KSerializer<#A> // io.ks3.standard/intSerializer|intSerializer(kotlin.Function1<kotlin.Int,0:0>;kotlin.Function1<0:0,kotlin.Int>;kotlin.String?){0§<kotlin.Any?>}[0]
15+
final inline fun <#A: reified kotlin/Any?> io.ks3.standard/lenientJsonArraySerializer(kotlinx.serialization/KSerializer<#A>? =...): kotlinx.serialization/KSerializer<kotlin.collections/List<#A>> // io.ks3.standard/lenientJsonArraySerializer|lenientJsonArraySerializer(kotlinx.serialization.KSerializer<0:0>?){0§<kotlin.Any?>}[0]
16+
final inline fun <#A: reified kotlin/Any?> io.ks3.standard/longSerializer(crossinline kotlin/Function1<kotlin/Long, #A>, crossinline kotlin/Function1<#A, kotlin/Long>, kotlin/String? =...): kotlinx.serialization/KSerializer<#A> // io.ks3.standard/longSerializer|longSerializer(kotlin.Function1<kotlin.Long,0:0>;kotlin.Function1<0:0,kotlin.Long>;kotlin.String?){0§<kotlin.Any?>}[0]
17+
final inline fun <#A: reified kotlin/Any?> io.ks3.standard/sortedCollectionSerializer(kotlin/Comparator<in #A>): kotlinx.serialization/KSerializer<kotlin.collections/Collection<#A>> // io.ks3.standard/sortedCollectionSerializer|sortedCollectionSerializer(kotlin.Comparator<in|0:0>){0§<kotlin.Any?>}[0]
18+
final inline fun <#A: reified kotlin/Any?> io.ks3.standard/sortedListSerializer(kotlin/Comparator<in #A>): kotlinx.serialization/KSerializer<kotlin.collections/List<#A>> // io.ks3.standard/sortedListSerializer|sortedListSerializer(kotlin.Comparator<in|0:0>){0§<kotlin.Any?>}[0]
19+
final inline fun <#A: reified kotlin/Any?> io.ks3.standard/sortedSetSerializer(kotlin/Comparator<in #A>): kotlinx.serialization/KSerializer<kotlin.collections/Set<#A>> // io.ks3.standard/sortedSetSerializer|sortedSetSerializer(kotlin.Comparator<in|0:0>){0§<kotlin.Any?>}[0]
20+
final inline fun <#A: reified kotlin/Any?> io.ks3.standard/stringSerializer(crossinline kotlin/Function1<kotlin/String, #A>, crossinline kotlin/Function1<#A, kotlin/String> =..., kotlin/String? =...): kotlinx.serialization/KSerializer<#A> // io.ks3.standard/stringSerializer|stringSerializer(kotlin.Function1<kotlin.String,0:0>;kotlin.Function1<0:0,kotlin.String>;kotlin.String?){0§<kotlin.Any?>}[0]
21+
final inline fun <#A: reified kotlin/Enum<#A>> io.ks3.standard/enumAsOrdinalSerializer(): kotlinx.serialization/KSerializer<#A> // io.ks3.standard/enumAsOrdinalSerializer|enumAsOrdinalSerializer(){0§<kotlin.Enum<0:0>>}[0]
22+
final object io.ks3.standard/ByteArrayAsBase64StringSerializer : kotlinx.serialization/KSerializer<kotlin/ByteArray> { // io.ks3.standard/ByteArrayAsBase64StringSerializer|null[0]
23+
final fun deserialize(kotlinx.serialization.encoding/Decoder): kotlin/ByteArray // io.ks3.standard/ByteArrayAsBase64StringSerializer.deserialize|deserialize(kotlinx.serialization.encoding.Decoder){}[0]
24+
final fun serialize(kotlinx.serialization.encoding/Encoder, kotlin/ByteArray) // io.ks3.standard/ByteArrayAsBase64StringSerializer.serialize|serialize(kotlinx.serialization.encoding.Encoder;kotlin.ByteArray){}[0]
25+
final val descriptor // io.ks3.standard/ByteArrayAsBase64StringSerializer.descriptor|{}descriptor[0]
26+
final fun <get-descriptor>(): kotlinx.serialization.descriptors/SerialDescriptor // io.ks3.standard/ByteArrayAsBase64StringSerializer.descriptor.<get-descriptor>|<get-descriptor>(){}[0]
27+
}

ks3-test/api/ks3-test.klib.api

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Klib ABI Dump
2+
// Targets: [iosArm64, iosSimulatorArm64, iosX64, js, linuxX64, macosArm64, macosX64, mingwX64, tvosArm64, tvosSimulatorArm64, tvosX64, watchosArm32, watchosArm64, watchosSimulatorArm64, watchosX64]
3+
// Rendering settings:
4+
// - Signature version: 2
5+
// - Show manifest properties: true
6+
// - Show declarations: true
7+
8+
// Library unique name: <io.ks3:ks3-test>
9+
final class <#A: kotlin/Any?> io.ks3.test/Encoders { // io.ks3.test/Encoders|null[0]
10+
constructor <init>(kotlin.collections/List<kotlin/Function1<#A, kotlin/String>>, kotlin.collections/List<kotlin/Function1<kotlin/String, #A>>) // io.ks3.test/Encoders.<init>|<init>(kotlin.collections.List<kotlin.Function1<1:0,kotlin.String>>;kotlin.collections.List<kotlin.Function1<kotlin.String,1:0>>){}[0]
11+
final fun component1(): kotlin.collections/List<kotlin/Function1<#A, kotlin/String>> // io.ks3.test/Encoders.component1|component1(){}[0]
12+
final fun component2(): kotlin.collections/List<kotlin/Function1<kotlin/String, #A>> // io.ks3.test/Encoders.component2|component2(){}[0]
13+
final fun copy(kotlin.collections/List<kotlin/Function1<#A, kotlin/String>> =..., kotlin.collections/List<kotlin/Function1<kotlin/String, #A>> =...): io.ks3.test/Encoders<#A> // io.ks3.test/Encoders.copy|copy(kotlin.collections.List<kotlin.Function1<1:0,kotlin.String>>;kotlin.collections.List<kotlin.Function1<kotlin.String,1:0>>){}[0]
14+
final fun equals(kotlin/Any?): kotlin/Boolean // io.ks3.test/Encoders.equals|equals(kotlin.Any?){}[0]
15+
final fun hashCode(): kotlin/Int // io.ks3.test/Encoders.hashCode|hashCode(){}[0]
16+
final fun toString(): kotlin/String // io.ks3.test/Encoders.toString|toString(){}[0]
17+
final val decoders // io.ks3.test/Encoders.decoders|{}decoders[0]
18+
final fun <get-decoders>(): kotlin.collections/List<kotlin/Function1<kotlin/String, #A>> // io.ks3.test/Encoders.decoders.<get-decoders>|<get-decoders>(){}[0]
19+
final val encoders // io.ks3.test/Encoders.encoders|{}encoders[0]
20+
final fun <get-encoders>(): kotlin.collections/List<kotlin/Function1<#A, kotlin/String>> // io.ks3.test/Encoders.encoders.<get-encoders>|<get-encoders>(){}[0]
21+
}
22+
final inline fun <#A: reified kotlin/Any?> (kotlinx.serialization.json/Json).io.ks3.test/decoders(kotlinx.serialization/KSerializer<#A>): kotlin.collections/List<kotlin/Function1<kotlin/String, #A>> // io.ks3.test/decoders|[email protected](kotlinx.serialization.KSerializer<0:0>){0§<kotlin.Any?>}[0]
23+
final inline fun <#A: reified kotlin/Any?> (kotlinx.serialization.json/Json).io.ks3.test/encoders(kotlinx.serialization/KSerializer<#A>): kotlin.collections/List<kotlin/Function1<#A, kotlin/String>> // io.ks3.test/encoders|[email protected](kotlinx.serialization.KSerializer<0:0>){0§<kotlin.Any?>}[0]
24+
final inline fun <#A: reified kotlin/Any?> (kotlinx.serialization.json/Json).io.ks3.test/generateEncoders(kotlinx.serialization/KSerializer<#A>): io.ks3.test/Encoders<#A> // io.ks3.test/generateEncoders|[email protected](kotlinx.serialization.KSerializer<0:0>){0§<kotlin.Any?>}[0]
25+
final inline fun <#A: reified kotlin/Any?> io.ks3.test/generateSerializerTests(kotlinx.serialization/KSerializer<#A>, io.kotest.property/Gen<#A>, crossinline kotlin/Function0<kotlin/String> =..., crossinline kotlin/Function2<#A, #A, kotlin/Unit> =...): io.kotest.core.factory/TestFactory // io.ks3.test/generateSerializerTests|generateSerializerTests(kotlinx.serialization.KSerializer<0:0>;io.kotest.property.Gen<0:0>;kotlin.Function0<kotlin.String>;kotlin.Function2<0:0,0:0,kotlin.Unit>){0§<kotlin.Any?>}[0]

0 commit comments

Comments
 (0)