From 9f532bc4da89a136b6ada170c34b7a6c4a17b547 Mon Sep 17 00:00:00 2001 From: Matthew Nelson Date: Fri, 30 Aug 2024 14:17:24 -0400 Subject: [PATCH 1/2] Enable klib api validataion --- build.gradle.kts | 5 +++++ gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- secure-random/api/secure-random.klib.api | 21 +++++++++++++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 secure-random/api/secure-random.klib.api diff --git a/build.gradle.kts b/build.gradle.kts index a727333..ecb4941 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,6 +36,11 @@ plugins.withType { } apiValidation { + // Only enable when selectively enabled targets are not being passed via cli. + // See https://github.com/Kotlin/binary-compatibility-validator/issues/269 + @OptIn(kotlinx.validation.ExperimentalBCVApi::class) + klib.enabled = findProperty("KMP_TARGETS") == null + if (findProperty("CHECK_PUBLICATION") != null) { ignoredProjects.add("check-publication") } else { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 40fe5b3..b9be07b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -gradle-binary-compat = "0.14.0" +gradle-binary-compat = "0.16.3" gradle-kmp-configuration = "0.3.2" gradle-kotlin = "1.9.24" gradle-publish-maven = "0.29.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6357ddc..c47a56d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -4,5 +4,5 @@ zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME # https://gradle.org/release-checksums/ -distributionSha256Sum=85719317abd2112f021d4f41f09ec370534ba288432065f4b477b6a3b652910d -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip +distributionSha256Sum=f8b4f4772d302c8ff580bc40d0f56e715de69b163546944f787c87abf209c961 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip diff --git a/secure-random/api/secure-random.klib.api b/secure-random/api/secure-random.klib.api new file mode 100644 index 0000000..86ec3f4 --- /dev/null +++ b/secure-random/api/secure-random.klib.api @@ -0,0 +1,21 @@ +// Klib ABI Dump +// Targets: [androidNativeArm32, androidNativeArm64, androidNativeX64, androidNativeX86, iosArm64, iosSimulatorArm64, iosX64, js, linuxArm64, linuxX64, macosArm64, macosX64, mingwX64, tvosArm64, tvosSimulatorArm64, tvosX64, wasmJs, wasmWasi, watchosArm32, watchosArm64, watchosDeviceArm64, watchosSimulatorArm64, watchosX64] +// Rendering settings: +// - Signature version: 2 +// - Show manifest properties: true +// - Show declarations: true + +// Library unique name: +final class org.kotlincrypto/SecRandomCopyException : kotlin/RuntimeException { // org.kotlincrypto/SecRandomCopyException|null[0] + constructor () // org.kotlincrypto/SecRandomCopyException.|(){}[0] + constructor (kotlin/String?) // org.kotlincrypto/SecRandomCopyException.|(kotlin.String?){}[0] + constructor (kotlin/String?, kotlin/Throwable?) // org.kotlincrypto/SecRandomCopyException.|(kotlin.String?;kotlin.Throwable?){}[0] + constructor (kotlin/Throwable?) // org.kotlincrypto/SecRandomCopyException.|(kotlin.Throwable?){}[0] +} + +final class org.kotlincrypto/SecureRandom { // org.kotlincrypto/SecureRandom|null[0] + constructor () // org.kotlincrypto/SecureRandom.|(){}[0] + + final fun nextBytesCopyTo(kotlin/ByteArray?) // org.kotlincrypto/SecureRandom.nextBytesCopyTo|nextBytesCopyTo(kotlin.ByteArray?){}[0] + final fun nextBytesOf(kotlin/Int): kotlin/ByteArray // org.kotlincrypto/SecureRandom.nextBytesOf|nextBytesOf(kotlin.Int){}[0] +} From 35267b41073a2c2c76efda5aaac0fe924aff6ee1 Mon Sep 17 00:00:00 2001 From: Matthew Nelson Date: Fri, 30 Aug 2024 14:22:31 -0400 Subject: [PATCH 2/2] Add CI check for API compatibility --- .github/workflows/CI.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 999cb5f..99b6f7c 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -48,16 +48,23 @@ jobs: distribution: 'zulu' java-version: 11 + - name: Check API Compatibility + if: matrix.os == 'macos-latest' + run: > + ./gradlew apiCheck --stacktrace + - name: Run macOS Tests if: matrix.os == 'macos-latest' run: > ./gradlew check --stacktrace -PKMP_TARGETS="JVM,JS,IOS_ARM64,IOS_X64,IOS_SIMULATOR_ARM64,MACOS_ARM64,MACOS_X64,TVOS_ARM64,TVOS_X64,TVOS_SIMULATOR_ARM64,WATCHOS_ARM32,WATCHOS_ARM64,WATCHOS_DEVICE_ARM64,WATCHOS_X64,WATCHOS_SIMULATOR_ARM64,WASM_JS,WASM_WASI" + - name: Run Linux Tests if: matrix.os == 'ubuntu-latest' run: > ./gradlew check --stacktrace -PKMP_TARGETS="JVM,JS,ANDROID,ANDROID_ARM32,ANDROID_ARM64,ANDROID_X64,ANDROID_X86,LINUX_ARM64,LINUX_X64,WASM_JS,WASM_WASI" + - name: Run Windows Tests if: matrix.os == 'windows-latest' run: >