From b643633754ec787d8e66d387214a88b0ff601688 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sat, 16 May 2026 18:03:30 +0100 Subject: [PATCH 01/27] Update dependencies, migrate to latest AGP, refactor targets, and adjust minimum Android version. --- .github/workflows/build.yml | 14 ++++---- .github/workflows/publish.yml | 2 +- CHANGELOG.md | 19 ++++++++++ README.md | 10 +++--- README_CN.md | 10 +++--- ROADMAP.md | 1 + gradle.properties | 3 +- gradle/libs.versions.toml | 18 +++++----- gradle/wrapper/gradle-wrapper.properties | 2 +- sample/build.gradle.kts | 15 +++----- sqllin-driver/build.gradle.kts | 30 +++++----------- .../com/ctrip/sqllin/driver/AndroidTest.kt | 0 sqllin-dsl-test/build.gradle.kts | 36 ++++++------------- .../com/ctrip/sqllin/dsl/test/AndroidTest.kt | 0 sqllin-dsl/build.gradle.kts | 20 +++-------- test_driver_macos.sh | 4 +-- test_dsl_macos.sh | 4 +-- 17 files changed, 82 insertions(+), 106 deletions(-) rename sqllin-driver/src/{androidInstrumentedTest => androidDeviceTest}/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt (100%) rename sqllin-dsl-test/src/{androidInstrumentedTest => androidDeviceTest}/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 48c520d..6d60172 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ on: jobs: build-on-macos: - runs-on: macos-15-intel + runs-on: macos-latest timeout-minutes: 60 steps: @@ -71,9 +71,9 @@ jobs: with: api-level: 36 target: google_apis - arch: x86_64 + arch: arm64-v8a profile: pixel_6 - emulator-build: 14257411 + emulator-build: 15368433 force-avd-creation: false emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true @@ -84,9 +84,9 @@ jobs: with: api-level: 36 target: google_apis - arch: x86_64 + arch: arm64-v8a profile: pixel_6 - emulator-build: 14257411 + emulator-build: 15368433 force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true @@ -232,7 +232,7 @@ jobs: target: default arch: x86_64 profile: pixel_2 - emulator-build: 14257411 + emulator-build: 15368433 force-avd-creation: false emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true @@ -245,7 +245,7 @@ jobs: target: default arch: x86_64 profile: pixel_2 - emulator-build: 14257411 + emulator-build: 15368433 force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9a5db10..fa84e76 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,7 +13,7 @@ env: jobs: build-on-macos: - runs-on: macos-15-intel + runs-on: macos-latest timeout-minutes: 60 steps: diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ea8466..470ac33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ - Date format: YYYY-MM-dd +## 2.3.0 / 2026-05-16 + +### All + +* Update `Kotlin`'s version to `2.3.21` +* Update `AGP`'s version to `9.0.0`, migrated from `com.android.library` plugin to `com.android.kotlin.multiplatform.library` +* Update `kotlinx.serialization`'s version to `1.11.0` +* Update `kotlinx.coroutines`'s version to `1.11.0` +* Fix documentation: Android minimum supported version has been `7.0+` (API 24) since `2.0.0`, the README incorrectly stated `6.0+` +* **Breaking change**: Drop `iosX64`, `macosX64`, `watchosX64`, and `tvosX64` target support + +### sqllin-driver + +* Update `sqlite-jdbc`'s version to `3.53.1.0` + +### sqllin-processor + +* Update `KSP`'s version to `2.3.7` + ## 2.2.0 / 2025-12-15 ### sqllin-dsl diff --git a/README.md b/README.md index 66a1b27..781532f 100644 --- a/README.md +++ b/README.md @@ -31,12 +31,12 @@ and deserialization ability is based on [kotlinx.serialization](https://github.c SQLlin supports these platforms: - Multiplatform Common -- Android (6.0+) +- Android (7.0+) - JVM (Java 11+, since `1.2.0`) -- iOS (x64, arm64, simulatorArm64) -- macOS (x64, arm64) -- watchOS (x64, arm32, arm64, simulatorArm64, deviceArm64) -- tvOS (x64, arm64, simulatorArm64) +- iOS (arm64, simulatorArm64) +- macOS (arm64) +- watchOS (arm32, arm64, simulatorArm64, deviceArm64) +- tvOS (arm64, simulatorArm64) - Linux (x64, arm64) - Windows (mingwX64) diff --git a/README_CN.md b/README_CN.md index 21434d6..f2adc20 100644 --- a/README_CN.md +++ b/README_CN.md @@ -28,12 +28,12 @@ SQLlin 能够直接向数据库插入 Kotlin 对象,也能够直接从数据 SQLlin 支持如下平台: - Multiplatform Common -- Android (6.0+) +- Android (7.0+) - JVM (Java 11+, since `1.2.0`) -- iOS (x64, arm64, simulatorArm64) -- macOS (x64, arm64) -- watchOS (x64, arm32, arm64, simulatorArm64, deviceArm64) -- tvOS (x64, arm64, simulatorArm64) +- iOS (arm64, simulatorArm64) +- macOS (arm64) +- watchOS (arm32, arm64, simulatorArm64, deviceArm64) +- tvOS (arm64, simulatorArm64) - Linux (x64, arm64) - Windows (mingwX64) diff --git a/ROADMAP.md b/ROADMAP.md index 596729e..9f81acb 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -4,6 +4,7 @@ * Support FOREIGN KEY DSL (2.2.0 ✅) * Support CREATE INDEX DSL (2.2.0 ✅) +* Support INSERT OR REPLACE ## Medium Priority diff --git a/gradle.properties b/gradle.properties index df4999d..2eafc6c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION=2.2.0 +VERSION=2.3.0 GROUP_ID=com.ctrip.kotlin #Maven Publishing Information @@ -31,5 +31,4 @@ kotlin.native.ignoreDisabledTargets=true kotlin.jvm.target.validation.mode=warning kotlin.native.binary.pagedAllocator=false kotlin.native.binary.latin1Strings=true -kotlin.native.cacheKind.linuxX64=none #kotlin.compiler.execution.strategy=out-of-process \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dba5044..1cb163b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,18 +1,18 @@ [versions] -kotlin = "2.2.21" -agp = "8.12.3" -ksp = "2.3.3" -serialization = "1.9.0" -coroutines = "1.10.2" -androidx-annotation = "1.9.1" +kotlin = "2.3.21" +agp = "9.0.1" +ksp = "2.3.7" +serialization = "1.11.0" +coroutines = "1.11.0" +androidx-annotation = "1.10.0" androidx-test = "1.7.0" androidx-test-runner = "1.7.0" -sqlite-jdbc = "3.51.1.0" +sqlite-jdbc = "3.53.1.0" jvm-toolchain = "21" android-sdk-compile = "36" android-sdk-min = "24" -vanniktech-maven-publish = "0.35.0" +vanniktech-maven-publish = "0.36.0" [libraries] @@ -35,5 +35,5 @@ kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -android-library = { id = "com.android.library", version.ref = "agp" } +android-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } vanniktech-maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "vanniktech-maven-publish" } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f76881e..c1627d7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Mar 08 15:11:46 CST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME \ No newline at end of file diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index 0c9ab93..cd51277 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -12,13 +12,14 @@ version = "1.0" kotlin { jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) - androidTarget { - publishLibraryVariants("release") + android { + namespace = "com.ctrip.sqllin.sample" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() } jvm { compilerOptions.jvmTarget.set(JvmTarget.JVM_11) } - iosX64() iosArm64() iosSimulatorArm64() @@ -41,14 +42,6 @@ kotlin { } } -android { - namespace = "com.ctrip.sqllin.sample" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - } -} - dependencies { add("kspCommonMainMetadata", project(":sqllin-processor")) } diff --git a/sqllin-driver/build.gradle.kts b/sqllin-driver/build.gradle.kts index d86b0b7..a97d04e 100644 --- a/sqllin-driver/build.gradle.kts +++ b/sqllin-driver/build.gradle.kts @@ -1,6 +1,4 @@ -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.konan.target.HostManager @@ -16,13 +14,16 @@ val VERSION: String by project group = GROUP_ID version = VERSION -@OptIn(ExperimentalKotlinGradlePluginApi::class) kotlin { explicitApi() jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) - androidTarget { - publishLibraryVariants("release") - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + android { + namespace = "com.ctrip.sqllin.driver" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() + withDeviceTest { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } } jvm { @@ -30,21 +31,17 @@ kotlin { } listOf( - iosX64(), iosArm64(), iosSimulatorArm64(), - macosX64(), macosArm64(), watchosArm32(), watchosArm64(), - watchosX64(), watchosSimulatorArm64(), watchosDeviceArm64(), tvosArm64(), - tvosX64(), tvosSimulatorArm64(), linuxX64(), @@ -56,7 +53,7 @@ kotlin { } compilerOptions { - freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters", "-Xnested-type-aliases") + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") } sourceSets { @@ -73,7 +70,7 @@ kotlin { androidMain.dependencies { implementation(libs.androidx.annotation) } - androidInstrumentedTest.dependencies { + getByName("androidDeviceTest").dependencies { implementation(libs.androidx.test.core) implementation(libs.androidx.test.runner) implementation(libs.androidx.test.rules) @@ -99,15 +96,6 @@ gradle.taskGraph.whenReady { } } -android { - namespace = "com.ctrip.sqllin.driver" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } -} - fun KotlinNativeTarget.setupNativeConfig() { val main by compilations.getting val sqlite3 by main.cinterops.creating { diff --git a/sqllin-driver/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt b/sqllin-driver/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt similarity index 100% rename from sqllin-driver/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt rename to sqllin-driver/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 78bab53..7456fd6 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -1,10 +1,7 @@ -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask import org.jetbrains.kotlin.konan.target.HostManager -import kotlin.collections.plusAssign plugins { alias(libs.plugins.kotlin.multiplatform) @@ -15,12 +12,15 @@ plugins { version = "1.0" -@OptIn(ExperimentalKotlinGradlePluginApi::class) kotlin { jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) - androidTarget { - publishLibraryVariants("release") - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) + android { + namespace = "com.ctrip.sqllin.dsl.test" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() + withDeviceTest { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } } jvm { @@ -28,21 +28,17 @@ kotlin { } listOf( - iosX64(), iosArm64(), iosSimulatorArm64(), - macosX64(), macosArm64(), watchosArm32(), watchosArm64(), - watchosX64(), watchosSimulatorArm64(), watchosDeviceArm64(), tvosArm64(), - tvosX64(), tvosSimulatorArm64(), linuxX64(), @@ -73,12 +69,10 @@ kotlin { implementation(kotlin("test")) implementation(libs.kotlinx.coroutines.test) } - androidInstrumentedTest { - dependencies { - implementation(libs.androidx.test.core) - implementation(libs.androidx.test.runner) - implementation(libs.androidx.test.rules) - } + getByName("androidDeviceTest").dependencies { + implementation(libs.androidx.test.core) + implementation(libs.androidx.test.runner) + implementation(libs.androidx.test.rules) } } } @@ -98,14 +92,6 @@ gradle.taskGraph.whenReady { } } -android { - namespace = "com.ctrip.sqllin.dsl.test" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } -} fun KotlinNativeTarget.setupNativeConfig() { binaries { diff --git a/sqllin-dsl-test/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt b/sqllin-dsl-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt similarity index 100% rename from sqllin-dsl-test/src/androidInstrumentedTest/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt rename to sqllin-dsl-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/dsl/test/AndroidTest.kt diff --git a/sqllin-dsl/build.gradle.kts b/sqllin-dsl/build.gradle.kts index 70ea846..404e88f 100644 --- a/sqllin-dsl/build.gradle.kts +++ b/sqllin-dsl/build.gradle.kts @@ -18,29 +18,27 @@ version = VERSION kotlin { explicitApi() jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) - androidTarget { - publishLibraryVariants("release") + android { + namespace = "com.ctrip.sqllin.dsl" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() } jvm { compilerOptions.jvmTarget.set(JvmTarget.JVM_11) } - iosX64() iosArm64() iosSimulatorArm64() - macosX64() macosArm64() watchosArm32() watchosArm64() - watchosX64() watchosSimulatorArm64() watchosDeviceArm64() tvosArm64() - tvosX64() tvosSimulatorArm64() linuxX64() @@ -49,7 +47,7 @@ kotlin { mingwX64() compilerOptions { - freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters", "-Xnested-type-aliases") + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") } sourceSets { @@ -81,14 +79,6 @@ gradle.taskGraph.whenReady { } } -android { - namespace = "com.ctrip.sqllin.dsl" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - } -} - mavenPublishing { publishToMavenCentral() signAllPublications() diff --git a/test_driver_macos.sh b/test_driver_macos.sh index 6c143c3..f2e9e2f 100755 --- a/test_driver_macos.sh +++ b/test_driver_macos.sh @@ -1,3 +1,3 @@ #Run sqllin-driver unit tests on macOS -./gradlew :sqllin-driver:cleanMacosX64Test -./gradlew :sqllin-driver:macosX64Test --stacktrace \ No newline at end of file +./gradlew :sqllin-driver:cleanMacosArm64Test +./gradlew :sqllin-driver:macosArm64Test --stacktrace \ No newline at end of file diff --git a/test_dsl_macos.sh b/test_dsl_macos.sh index 9089b05..da525a6 100755 --- a/test_dsl_macos.sh +++ b/test_dsl_macos.sh @@ -1,3 +1,3 @@ #Run sqllin-dsl unit tests on macOS -./gradlew :sqllin-dsl-test:cleanMacosX64Test -./gradlew :sqllin-dsl-test:macosX64Test --stacktrace \ No newline at end of file +./gradlew :sqllin-dsl-test:cleanMacosArm64Test +./gradlew :sqllin-dsl-test:macosArm64Test --stacktrace \ No newline at end of file From 7f18a2af82363d60f8993280e4a2ecf7a4b2e376 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sat, 16 May 2026 18:15:47 +0100 Subject: [PATCH 02/27] Fix unit test --- .../com/ctrip/sqllin/driver/CommonBasicTest.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt b/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt index fca49d3..5418afb 100644 --- a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt +++ b/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt @@ -91,7 +91,7 @@ class CommonBasicTest(private val path: DatabasePath) { connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96, byteArrayOf())) connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95, byteArrayOf(1, 2, 3))) connection.executeInsert(SQL.INSERT_BOOK, arrayOf("", "Dan Brown", 454, 16.96, byteArrayOf())) - connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", null, 510, 19.95, null)) + connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", null, 510, 19.95, null)) } } val readOnlyConfig = getDefaultDBConfig(true) @@ -114,13 +114,13 @@ class CommonBasicTest(private val path: DatabasePath) { val readWriteConfig = getDefaultDBConfig(false) openDatabase(readWriteConfig) { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) } it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) } } val readOnlyConfig = getDefaultDBConfig(true) @@ -143,8 +143,8 @@ class CommonBasicTest(private val path: DatabasePath) { val readWriteConfig = getDefaultDBConfig(false) openDatabase(readWriteConfig) { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) } it.executeUpdateDelete(SQL.DELETE_BOOK, arrayOf(500)) @@ -174,8 +174,8 @@ class CommonBasicTest(private val path: DatabasePath) { try { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) throw IllegalStateException("Simulate transaction failed.") } } catch (e: IllegalStateException) { From 5b7c232c4a7560a29277fa7d2af15fdcd72d57f1 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sat, 16 May 2026 19:44:49 +0100 Subject: [PATCH 03/27] Update Android test commands to use `connectedAndroidDeviceTest` --- test_android.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_android.sh b/test_android.sh index a4f845b..19fc3c1 100755 --- a/test_android.sh +++ b/test_android.sh @@ -1,5 +1,5 @@ #Run Android instrumented tests -./gradlew :sqllin-driver:connectedDebugAndroidTest --stacktrace -./gradlew :sqllin-dsl-test:connectedDebugAndroidTest --stacktrace +./gradlew :sqllin-driver:connectedAndroidDeviceTest --stacktrace +./gradlew :sqllin-dsl-test:connectedAndroidDeviceTest --stacktrace #adb uninstall com.ctrip.sqllin.driver.test #adb uninstall com.ctrip.sqllin.dsl.test \ No newline at end of file From e5f2c8f71b27cd1040729ee41b8b069be3bf74de Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sat, 16 May 2026 20:04:59 +0100 Subject: [PATCH 04/27] Refactor `androidDeviceTest` to depend on `commonTest` and group dependencies under the task configuration --- sqllin-driver/build.gradle.kts | 11 +++++++---- sqllin-dsl-test/build.gradle.kts | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/sqllin-driver/build.gradle.kts b/sqllin-driver/build.gradle.kts index a97d04e..fd8b9fb 100644 --- a/sqllin-driver/build.gradle.kts +++ b/sqllin-driver/build.gradle.kts @@ -70,10 +70,13 @@ kotlin { androidMain.dependencies { implementation(libs.androidx.annotation) } - getByName("androidDeviceTest").dependencies { - implementation(libs.androidx.test.core) - implementation(libs.androidx.test.runner) - implementation(libs.androidx.test.rules) + getByName("androidDeviceTest") { + dependsOn(commonTest.get()) + dependencies { + implementation(libs.androidx.test.core) + implementation(libs.androidx.test.runner) + implementation(libs.androidx.test.rules) + } } jvmMain.dependencies { implementation(libs.sqlite.jdbc) diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 7456fd6..1153510 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -69,10 +69,13 @@ kotlin { implementation(kotlin("test")) implementation(libs.kotlinx.coroutines.test) } - getByName("androidDeviceTest").dependencies { - implementation(libs.androidx.test.core) - implementation(libs.androidx.test.runner) - implementation(libs.androidx.test.rules) + getByName("androidDeviceTest") { + dependsOn(commonTest.get()) + dependencies { + implementation(libs.androidx.test.core) + implementation(libs.androidx.test.runner) + implementation(libs.androidx.test.rules) + } } } } From 72242c3054430479e415865ec58e7689e114881c Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sat, 16 May 2026 21:59:55 +0100 Subject: [PATCH 05/27] Extract driver tests into a new `sqllin-driver-test` module, upgrade AGP and Android SDK versions, and refactor build scripts. --- gradle/libs.versions.toml | 4 +- settings.gradle.kts | 1 + sqllin-driver-test/build.gradle.kts | 100 ++++++++++++++++++ sqllin-driver-test/build/konan.txt | 1 + .../commonizedNativeDistributionLocation.txt | 1 + .../ctrip/sqllin/driver/test}/AndroidTest.kt | 5 +- .../sqllin/driver/test}/PlatformApple.kt | 2 +- .../sqllin/driver/test}/CommonBasicTest.kt | 7 +- .../com/ctrip/sqllin/driver/test}/SQL.kt | 2 +- .../com/ctrip/sqllin/driver/test}/JvmTest.kt | 8 +- .../sqllin/driver/test}/PlatformLinux.kt | 2 +- .../sqllin/driver/test}/PlatformMingw.kt | 2 +- .../ctrip/sqllin/driver/test}/NativeTest.kt | 6 +- .../com/ctrip/sqllin/driver/test}/Platform.kt | 2 +- sqllin-driver/build.gradle.kts | 16 --- sqllin-dsl-test/build.gradle.kts | 17 ++- .../ctrip/sqllin/dsl/test/CommonBasicTest.kt | 0 test_android.sh | 2 +- test_driver_jvm.sh | 4 +- test_driver_linux.sh | 4 +- test_driver_macos.sh | 4 +- 21 files changed, 140 insertions(+), 50 deletions(-) create mode 100644 sqllin-driver-test/build.gradle.kts create mode 100644 sqllin-driver-test/build/konan.txt create mode 100644 sqllin-driver-test/build/kotlin/commonizedNativeDistributionLocation.txt rename {sqllin-driver/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/test}/AndroidTest.kt (95%) rename {sqllin-driver/src/appleTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/appleTest/kotlin/com/ctrip/sqllin/driver/test}/PlatformApple.kt (96%) rename {sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test}/CommonBasicTest.kt (98%) rename {sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test}/SQL.kt (97%) rename {sqllin-driver/src/jvmTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/jvmTest/kotlin/com/ctrip/sqllin/driver/test}/JvmTest.kt (89%) rename {sqllin-driver/src/linuxTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/linuxTest/kotlin/com/ctrip/sqllin/driver/test}/PlatformLinux.kt (96%) rename {sqllin-driver/src/mingwTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/mingwTest/kotlin/com/ctrip/sqllin/driver/test}/PlatformMingw.kt (96%) rename {sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test}/NativeTest.kt (90%) rename {sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver => sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test}/Platform.kt (95%) rename sqllin-dsl-test/src/{commonTest => commonMain}/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt (100%) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1cb163b..99ca92a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kotlin = "2.3.21" -agp = "9.0.1" +agp = "9.2.1" ksp = "2.3.7" serialization = "1.11.0" coroutines = "1.11.0" @@ -10,7 +10,7 @@ androidx-test = "1.7.0" androidx-test-runner = "1.7.0" sqlite-jdbc = "3.53.1.0" jvm-toolchain = "21" -android-sdk-compile = "36" +android-sdk-compile = "37" android-sdk-min = "24" vanniktech-maven-publish = "0.36.0" diff --git a/settings.gradle.kts b/settings.gradle.kts index d7ae4a7..3c49385 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -3,6 +3,7 @@ include(":sqllin-driver") include(":sqllin-dsl") include(":sqllin-processor") include(":sqllin-dsl-test") +include(":sqllin-driver-test") include(":sample") pluginManagement { diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts new file mode 100644 index 0000000..ec99121 --- /dev/null +++ b/sqllin-driver-test/build.gradle.kts @@ -0,0 +1,100 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget +import org.jetbrains.kotlin.konan.target.HostManager + +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.library) +} + +version = "1.0" + +kotlin { + jvmToolchain(libs.versions.jvm.toolchain.get().toInt()) + android { + namespace = "com.ctrip.sqllin.driver.test" + compileSdk = libs.versions.android.sdk.compile.get().toInt() + minSdk = libs.versions.android.sdk.min.get().toInt() + withDeviceTest { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + } + + jvm { + compilerOptions.jvmTarget.set(JvmTarget.JVM_11) + } + + listOf( + iosArm64(), + iosSimulatorArm64(), + + macosArm64(), + + watchosArm32(), + watchosArm64(), + watchosSimulatorArm64(), + watchosDeviceArm64(), + + tvosArm64(), + tvosSimulatorArm64(), + + linuxX64(), + linuxArm64(), + + mingwX64(), + ).forEach { + it.setupNativeConfig() + } + + compilerOptions { + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") + } + + sourceSets { + all { + languageSettings { + optIn("kotlin.RequiresOptIn") + } + } + commonMain { + dependencies { + implementation(project(":sqllin-driver")) + implementation(kotlin("test")) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.coroutines.test) + } + } + getByName("androidDeviceTest").dependencies { + implementation(libs.androidx.test.core) + implementation(libs.androidx.test.runner) + implementation(libs.androidx.test.rules) + } + } +} + +gradle.taskGraph.whenReady { + if (!project.hasProperty("onCICD")) + return@whenReady + tasks.forEach { + when { + it.name.contains("linux", true) -> it.enabled = HostManager.hostIsLinux + it.name.contains("mingw", true) -> it.enabled = HostManager.hostIsMingw + it.name.contains("ios", true) + || it.name.contains("macos", true) + || it.name.contains("watchos", true) + || it.name.contains("tvos", true) -> it.enabled = HostManager.hostIsMac + } + } +} + +fun KotlinNativeTarget.setupNativeConfig() { + binaries { + all { + linkerOpts += when { + HostManager.hostIsLinux -> listOf("-lsqlite3", "-L$rootDir/libs/linux", "-L/usr/lib/x86_64-linux-gnu", "-L/usr/lib", "-L/usr/lib64") + HostManager.hostIsMingw -> listOf("-Lc:\\msys64\\mingw64\\lib", "-L$rootDir\\libs\\windows", "-lsqlite3") + else -> listOf("-lsqlite3") + } + } + } +} diff --git a/sqllin-driver-test/build/konan.txt b/sqllin-driver-test/build/konan.txt new file mode 100644 index 0000000..aaf65fa --- /dev/null +++ b/sqllin-driver-test/build/konan.txt @@ -0,0 +1 @@ +/Users/qiaoyuang/.konan/kotlin-native-prebuilt-macos-x86_64-2.3.21 \ No newline at end of file diff --git a/sqllin-driver-test/build/kotlin/commonizedNativeDistributionLocation.txt b/sqllin-driver-test/build/kotlin/commonizedNativeDistributionLocation.txt new file mode 100644 index 0000000..731dc41 --- /dev/null +++ b/sqllin-driver-test/build/kotlin/commonizedNativeDistributionLocation.txt @@ -0,0 +1 @@ +/Users/qiaoyuang/.konan/kotlin-native-prebuilt-macos-x86_64-2.3.21/klib/commonized/2.3.21 \ No newline at end of file diff --git a/sqllin-driver/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt b/sqllin-driver-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/test/AndroidTest.kt similarity index 95% rename from sqllin-driver/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt rename to sqllin-driver-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/test/AndroidTest.kt index 28dc11d..215ebef 100644 --- a/sqllin-driver/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/AndroidTest.kt +++ b/sqllin-driver-test/src/androidDeviceTest/kotlin/com/ctrip/sqllin/driver/test/AndroidTest.kt @@ -14,12 +14,13 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test import android.content.Context import androidx.test.core.app.ApplicationProvider import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import androidx.test.platform.app.InstrumentationRegistry +import com.ctrip.sqllin.driver.toDatabasePath import org.junit.After import org.junit.Test import org.junit.runner.RunWith @@ -59,4 +60,4 @@ class AndroidTest { val context = InstrumentationRegistry.getInstrumentation().targetContext context.deleteDatabase(SQL.DATABASE_NAME) } -} \ No newline at end of file +} diff --git a/sqllin-driver/src/appleTest/kotlin/com/ctrip/sqllin/driver/PlatformApple.kt b/sqllin-driver-test/src/appleTest/kotlin/com/ctrip/sqllin/driver/test/PlatformApple.kt similarity index 96% rename from sqllin-driver/src/appleTest/kotlin/com/ctrip/sqllin/driver/PlatformApple.kt rename to sqllin-driver-test/src/appleTest/kotlin/com/ctrip/sqllin/driver/test/PlatformApple.kt index b23b42c..5f2b7f9 100644 --- a/sqllin-driver/src/appleTest/kotlin/com/ctrip/sqllin/driver/PlatformApple.kt +++ b/sqllin-driver-test/src/appleTest/kotlin/com/ctrip/sqllin/driver/test/PlatformApple.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test import kotlinx.cinterop.UnsafeNumber import platform.Foundation.NSDocumentDirectory diff --git a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt similarity index 98% rename from sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt rename to sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt index 5418afb..282485f 100644 --- a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/CommonBasicTest.kt +++ b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt @@ -14,8 +14,11 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test +import com.ctrip.sqllin.driver.DatabaseConfiguration +import com.ctrip.sqllin.driver.DatabasePath +import com.ctrip.sqllin.driver.openDatabase import kotlinx.coroutines.* import kotlinx.coroutines.test.runTest import kotlin.test.assertEquals @@ -238,4 +241,4 @@ class CommonBasicTest(private val path: DatabasePath) { connection.execSQL(SQL.ASSOCIATE) } ) -} \ No newline at end of file +} diff --git a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/SQL.kt b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/SQL.kt similarity index 97% rename from sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/SQL.kt rename to sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/SQL.kt index 453f87a..8f3d71d 100644 --- a/sqllin-driver/src/commonTest/kotlin/com/ctrip/sqllin/driver/SQL.kt +++ b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/SQL.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test /** * SQL statement that used for unit test. diff --git a/sqllin-driver/src/jvmTest/kotlin/com/ctrip/sqllin/driver/JvmTest.kt b/sqllin-driver-test/src/jvmTest/kotlin/com/ctrip/sqllin/driver/test/JvmTest.kt similarity index 89% rename from sqllin-driver/src/jvmTest/kotlin/com/ctrip/sqllin/driver/JvmTest.kt rename to sqllin-driver-test/src/jvmTest/kotlin/com/ctrip/sqllin/driver/test/JvmTest.kt index 8fd4dbc..4e8fc8c 100644 --- a/sqllin-driver/src/jvmTest/kotlin/com/ctrip/sqllin/driver/JvmTest.kt +++ b/sqllin-driver-test/src/jvmTest/kotlin/com/ctrip/sqllin/driver/test/JvmTest.kt @@ -14,13 +14,15 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test +import com.ctrip.sqllin.driver.deleteDatabase +import com.ctrip.sqllin.driver.toDatabasePath import kotlin.test.AfterTest import kotlin.test.Test /** - * Native unit test + * JVM unit test * @author Yuang Qiao */ @@ -51,4 +53,4 @@ class JvmTest { fun setDown() { deleteDatabase(path, SQL.DATABASE_NAME) } -} \ No newline at end of file +} diff --git a/sqllin-driver/src/linuxTest/kotlin/com/ctrip/sqllin/driver/PlatformLinux.kt b/sqllin-driver-test/src/linuxTest/kotlin/com/ctrip/sqllin/driver/test/PlatformLinux.kt similarity index 96% rename from sqllin-driver/src/linuxTest/kotlin/com/ctrip/sqllin/driver/PlatformLinux.kt rename to sqllin-driver-test/src/linuxTest/kotlin/com/ctrip/sqllin/driver/test/PlatformLinux.kt index ee01438..30ca0a5 100644 --- a/sqllin-driver/src/linuxTest/kotlin/com/ctrip/sqllin/driver/PlatformLinux.kt +++ b/sqllin-driver-test/src/linuxTest/kotlin/com/ctrip/sqllin/driver/test/PlatformLinux.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.toKString diff --git a/sqllin-driver/src/mingwTest/kotlin/com/ctrip/sqllin/driver/PlatformMingw.kt b/sqllin-driver-test/src/mingwTest/kotlin/com/ctrip/sqllin/driver/test/PlatformMingw.kt similarity index 96% rename from sqllin-driver/src/mingwTest/kotlin/com/ctrip/sqllin/driver/PlatformMingw.kt rename to sqllin-driver-test/src/mingwTest/kotlin/com/ctrip/sqllin/driver/test/PlatformMingw.kt index 02866e0..de3fbf7 100644 --- a/sqllin-driver/src/mingwTest/kotlin/com/ctrip/sqllin/driver/PlatformMingw.kt +++ b/sqllin-driver-test/src/mingwTest/kotlin/com/ctrip/sqllin/driver/test/PlatformMingw.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test import kotlinx.cinterop.* import platform.posix._wgetcwd diff --git a/sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/NativeTest.kt b/sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/NativeTest.kt similarity index 90% rename from sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/NativeTest.kt rename to sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/NativeTest.kt index 99c5e8a..7c7a50b 100644 --- a/sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/NativeTest.kt +++ b/sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/NativeTest.kt @@ -14,8 +14,10 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test +import com.ctrip.sqllin.driver.deleteDatabase +import com.ctrip.sqllin.driver.toDatabasePath import kotlin.test.AfterTest import kotlin.test.Test @@ -51,4 +53,4 @@ class NativeTest { fun setDown() { deleteDatabase(path, SQL.DATABASE_NAME) } -} \ No newline at end of file +} diff --git a/sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/Platform.kt b/sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/Platform.kt similarity index 95% rename from sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/Platform.kt rename to sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/Platform.kt index 4af84f3..ce5373b 100644 --- a/sqllin-driver/src/nativeTest/kotlin/com/ctrip/sqllin/driver/Platform.kt +++ b/sqllin-driver-test/src/nativeTest/kotlin/com/ctrip/sqllin/driver/test/Platform.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.ctrip.sqllin.driver +package com.ctrip.sqllin.driver.test /** * Some platform-related functions diff --git a/sqllin-driver/build.gradle.kts b/sqllin-driver/build.gradle.kts index fd8b9fb..a38cbf1 100644 --- a/sqllin-driver/build.gradle.kts +++ b/sqllin-driver/build.gradle.kts @@ -21,9 +21,6 @@ kotlin { namespace = "com.ctrip.sqllin.driver" compileSdk = libs.versions.android.sdk.compile.get().toInt() minSdk = libs.versions.android.sdk.min.get().toInt() - withDeviceTest { - instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } } jvm { @@ -62,22 +59,9 @@ kotlin { optIn("kotlin.RequiresOptIn") } } - commonTest.dependencies { - implementation(kotlin("test")) - implementation(libs.kotlinx.coroutines.core) - implementation(libs.kotlinx.coroutines.test) - } androidMain.dependencies { implementation(libs.androidx.annotation) } - getByName("androidDeviceTest") { - dependsOn(commonTest.get()) - dependencies { - implementation(libs.androidx.test.core) - implementation(libs.androidx.test.runner) - implementation(libs.androidx.test.rules) - } - } jvmMain.dependencies { implementation(libs.sqlite.jdbc) } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 1153510..0543228 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -63,19 +63,14 @@ kotlin { implementation(project(":sqllin-dsl")) implementation(libs.kotlinx.serialization) implementation(libs.kotlinx.coroutines.core) + implementation(kotlin("test")) + implementation(libs.kotlinx.coroutines.test) } } - commonTest.dependencies { - implementation(kotlin("test")) - implementation(libs.kotlinx.coroutines.test) - } - getByName("androidDeviceTest") { - dependsOn(commonTest.get()) - dependencies { - implementation(libs.androidx.test.core) - implementation(libs.androidx.test.runner) - implementation(libs.androidx.test.rules) - } + getByName("androidDeviceTest").dependencies { + implementation(libs.androidx.test.core) + implementation(libs.androidx.test.runner) + implementation(libs.androidx.test.rules) } } } diff --git a/sqllin-dsl-test/src/commonTest/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt b/sqllin-dsl-test/src/commonMain/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt similarity index 100% rename from sqllin-dsl-test/src/commonTest/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt rename to sqllin-dsl-test/src/commonMain/kotlin/com/ctrip/sqllin/dsl/test/CommonBasicTest.kt diff --git a/test_android.sh b/test_android.sh index 19fc3c1..d7e8152 100755 --- a/test_android.sh +++ b/test_android.sh @@ -1,5 +1,5 @@ #Run Android instrumented tests -./gradlew :sqllin-driver:connectedAndroidDeviceTest --stacktrace +./gradlew :sqllin-driver-test:connectedAndroidDeviceTest --stacktrace ./gradlew :sqllin-dsl-test:connectedAndroidDeviceTest --stacktrace #adb uninstall com.ctrip.sqllin.driver.test #adb uninstall com.ctrip.sqllin.dsl.test \ No newline at end of file diff --git a/test_driver_jvm.sh b/test_driver_jvm.sh index 8167367..f698240 100755 --- a/test_driver_jvm.sh +++ b/test_driver_jvm.sh @@ -1,3 +1,3 @@ #Run sqllin-driver unit tests on JVM -./gradlew :sqllin-driver:cleanJvmTest -./gradlew :sqllin-driver:jvmTest --stacktrace \ No newline at end of file +./gradlew :sqllin-driver-test:cleanJvmTest +./gradlew :sqllin-driver-test:jvmTest --stacktrace \ No newline at end of file diff --git a/test_driver_linux.sh b/test_driver_linux.sh index cc9b560..2b424fe 100755 --- a/test_driver_linux.sh +++ b/test_driver_linux.sh @@ -1,3 +1,3 @@ #Run sqllin-driver unit tests on Linux -./gradlew :sqllin-driver:cleanLinuxX64Test -./gradlew :sqllin-driver:linuxX64Test --stacktrace \ No newline at end of file +./gradlew :sqllin-driver-test:cleanLinuxX64Test +./gradlew :sqllin-driver-test:linuxX64Test --stacktrace \ No newline at end of file diff --git a/test_driver_macos.sh b/test_driver_macos.sh index f2e9e2f..e86db40 100755 --- a/test_driver_macos.sh +++ b/test_driver_macos.sh @@ -1,3 +1,3 @@ #Run sqllin-driver unit tests on macOS -./gradlew :sqllin-driver:cleanMacosArm64Test -./gradlew :sqllin-driver:macosArm64Test --stacktrace \ No newline at end of file +./gradlew :sqllin-driver-test:cleanMacosArm64Test +./gradlew :sqllin-driver-test:macosArm64Test --stacktrace \ No newline at end of file From 85d525f0735b3ee6226dafc1e6ad3106d4f94fc8 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sat, 16 May 2026 22:12:50 +0100 Subject: [PATCH 06/27] Simplify array declarations and update imports in `CommonBasicTest` --- .../sqllin/driver/test/CommonBasicTest.kt | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt index 282485f..11de892 100644 --- a/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt +++ b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt @@ -19,6 +19,8 @@ package com.ctrip.sqllin.driver.test import com.ctrip.sqllin.driver.DatabaseConfiguration import com.ctrip.sqllin.driver.DatabasePath import com.ctrip.sqllin.driver.openDatabase +import com.ctrip.sqllin.driver.withQuery +import com.ctrip.sqllin.driver.withTransaction import kotlinx.coroutines.* import kotlinx.coroutines.test.runTest import kotlin.test.assertEquals @@ -94,7 +96,7 @@ class CommonBasicTest(private val path: DatabasePath) { connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96, byteArrayOf())) connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95, byteArrayOf(1, 2, 3))) connection.executeInsert(SQL.INSERT_BOOK, arrayOf("", "Dan Brown", 454, 16.96, byteArrayOf())) - connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", null, 510, 19.95, null)) + connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", null, 510, 19.95, null)) } } val readOnlyConfig = getDefaultDBConfig(true) @@ -117,13 +119,13 @@ class CommonBasicTest(private val path: DatabasePath) { val readWriteConfig = getDefaultDBConfig(false) openDatabase(readWriteConfig) { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) } it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) } } val readOnlyConfig = getDefaultDBConfig(true) @@ -146,8 +148,8 @@ class CommonBasicTest(private val path: DatabasePath) { val readWriteConfig = getDefaultDBConfig(false) openDatabase(readWriteConfig) { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) } it.executeUpdateDelete(SQL.DELETE_BOOK, arrayOf(500)) @@ -177,8 +179,8 @@ class CommonBasicTest(private val path: DatabasePath) { try { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) throw IllegalStateException("Simulate transaction failed.") } } catch (e: IllegalStateException) { @@ -241,4 +243,4 @@ class CommonBasicTest(private val path: DatabasePath) { connection.execSQL(SQL.ASSOCIATE) } ) -} +} \ No newline at end of file From 6f4fe46f90e942000ec62eace3747f32ea8e6b80 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sat, 16 May 2026 22:20:04 +0100 Subject: [PATCH 07/27] Explicitly specify array types in `CommonBasicTest` and update `.gitignore` --- .gitignore | 1 + .../sqllin/driver/test/CommonBasicTest.kt | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 857e32e..44bd9a7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ local.properties /sqllin-driver/build /sqllin-dsl/build /sqllin-processor/build +/sqllin-driver-test/build /sqllin-dsl-test/build /sample/build *.podspec diff --git a/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt index 11de892..74f34d3 100644 --- a/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt +++ b/sqllin-driver-test/src/commonMain/kotlin/com/ctrip/sqllin/driver/test/CommonBasicTest.kt @@ -96,7 +96,7 @@ class CommonBasicTest(private val path: DatabasePath) { connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96, byteArrayOf())) connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95, byteArrayOf(1, 2, 3))) connection.executeInsert(SQL.INSERT_BOOK, arrayOf("", "Dan Brown", 454, 16.96, byteArrayOf())) - connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", null, 510, 19.95, null)) + connection.executeInsert(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", null, 510, 19.95, null)) } } val readOnlyConfig = getDefaultDBConfig(true) @@ -119,13 +119,13 @@ class CommonBasicTest(private val path: DatabasePath) { val readWriteConfig = getDefaultDBConfig(false) openDatabase(readWriteConfig) { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) } it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) } } val readOnlyConfig = getDefaultDBConfig(true) @@ -148,8 +148,8 @@ class CommonBasicTest(private val path: DatabasePath) { val readWriteConfig = getDefaultDBConfig(false) openDatabase(readWriteConfig) { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) - connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Da Vinci Code", "Dan Brown", 454, 16.96)) + connection.executeUpdateDelete(SQL.INSERT_BOOK, arrayOf("The Lost Symbol", "Dan Brown", 510, 19.95)) } it.executeUpdateDelete(SQL.DELETE_BOOK, arrayOf(500)) @@ -179,8 +179,8 @@ class CommonBasicTest(private val path: DatabasePath) { try { it.withTransaction { connection -> - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) - connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(18.99, "The Da Vinci Code")) + connection.executeUpdateDelete(SQL.UPDATE_BOOK, arrayOf(25.88, "The Lost Symbol")) throw IllegalStateException("Simulate transaction failed.") } } catch (e: IllegalStateException) { From d4ada54e1a0ed692a4deb2028ba075e7c6be0cd7 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sat, 16 May 2026 22:26:58 +0100 Subject: [PATCH 08/27] Rename macOS CI/CD tasks --- .github/workflows/build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6d60172..f0e0b14 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,19 +41,19 @@ jobs: - name: Build sqllin-driver run: ./gradlew :sqllin-driver:assemble -PonCICD - - name: Run sqllin-driver macOS X64 Tests + - name: Run sqllin-driver macOS Arm64 Tests run: ./test_driver_macos.sh - - name: Run sqllin-driver JVM Unit Tests on macOS X64 + - name: Run sqllin-driver JVM Unit Tests on macOS Arm64 run: ./test_driver_jvm.sh - name: Build sqllin-dsl run: ./gradlew :sqllin-dsl:assemble -PonCICD - - name: Run sqllin-dsl macOS X64 Tests + - name: Run sqllin-dsl macOS Arm64 Tests run: ./test_dsl_macos.sh - - name: Run sqllin-dsl JVM Unit Tests on macOS X64 + - name: Run sqllin-dsl JVM Unit Tests on macOS Arm64 run: ./test_dsl_jvm.sh - name: AVD Cache From 8c6cdc932ca4690d378256bfec6b36f52abc0f33 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 09:36:35 +0100 Subject: [PATCH 09/27] Refactor Android instrumented test in Github Actions --- .github/workflows/build.yml | 74 +++-------------------------- sqllin-driver-test/build.gradle.kts | 14 ++++++ sqllin-dsl-test/build.gradle.kts | 14 ++++++ 3 files changed, 35 insertions(+), 67 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f0e0b14..0d08a1c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,41 +56,8 @@ jobs: - name: Run sqllin-dsl JVM Unit Tests on macOS Arm64 run: ./test_dsl_jvm.sh - - name: AVD Cache - uses: actions/cache@v4 - id: avd-cache - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-36 - - - name: Create AVD and Generate Snapshot for Caching - if: steps.avd-cache.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: 36 - target: google_apis - arch: arm64-v8a - profile: pixel_6 - emulator-build: 15368433 - force-avd-creation: false - emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: echo "Generated AVD snapshot for caching." - - name: Run Android 16 Instrumented Tests - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: 36 - target: google_apis - arch: arm64-v8a - profile: pixel_6 - emulator-build: 15368433 - force-avd-creation: false - emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: ./test_android.sh + run: ./gradlew :sqllin-driver-test:pixel6api36AndroidDeviceTest :sqllin-dsl-test:pixel6api36AndroidDeviceTest --stacktrace - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 @@ -215,41 +182,14 @@ jobs: - name: Run sqllin-dsl JVM Unit Tests on Linux X64 run: ./test_dsl_jvm.sh - - name: AVD Cache - uses: actions/cache@v4 - id: avd-cache - with: - path: | - ~/.android/avd/* - ~/.android/adb* - key: avd-26 - - - name: Create AVD and Generate Snapshot for Caching - if: steps.avd-cache.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: 26 - target: default - arch: x86_64 - profile: pixel_2 - emulator-build: 15368433 - force-avd-creation: false - emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: echo "Generated AVD snapshot for caching." + - name: Enable KVM Group Permissions + run: | + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm - name: Run Android 8 Instrumented Tests - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: 26 - target: default - arch: x86_64 - profile: pixel_2 - emulator-build: 15368433 - force-avd-creation: false - emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none - disable-animations: true - script: ./test_android.sh + run: ./gradlew :sqllin-driver-test:pixel2api27AndroidDeviceTest :sqllin-dsl-test:pixel2api27AndroidDeviceTest --stacktrace - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index ec99121..04faa26 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -17,6 +17,20 @@ kotlin { minSdk = libs.versions.android.sdk.min.get().toInt() withDeviceTest { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + managedDevices { + localDevices { + create("pixel6api36") { + device = "Pixel 6" + apiLevel = 36 + systemImageSource = "google" + } + create("pixel2api27") { + device = "Pixel 2" + apiLevel = 27 + systemImageSource = "aosp" + } + } + } } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 0543228..ecf25cf 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -20,6 +20,20 @@ kotlin { minSdk = libs.versions.android.sdk.min.get().toInt() withDeviceTest { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + managedDevices { + localDevices { + create("pixel6api36") { + device = "Pixel 6" + apiLevel = 36 + systemImageSource = "google" + } + create("pixel2api27") { + device = "Pixel 2" + apiLevel = 27 + systemImageSource = "aosp" + } + } + } } } From f06c8869485a63ae37dc19d1137b853c08e5dc50 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 09:58:11 +0100 Subject: [PATCH 10/27] Fix an issue for Android instrumented test --- sqllin-driver-test/build.gradle.kts | 2 ++ sqllin-dsl-test/build.gradle.kts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 04faa26..9e2ed6d 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -23,11 +23,13 @@ kotlin { device = "Pixel 6" apiLevel = 36 systemImageSource = "google" + testedAbi = "arm64-v8a" } create("pixel2api27") { device = "Pixel 2" apiLevel = 27 systemImageSource = "aosp" + testedAbi = "x86_64" } } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index ecf25cf..ea6e1f5 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -26,11 +26,13 @@ kotlin { device = "Pixel 6" apiLevel = 36 systemImageSource = "google" + testedAbi = "arm64-v8a" } create("pixel2api27") { device = "Pixel 2" apiLevel = 27 systemImageSource = "aosp" + testedAbi = "x86_64" } } } From 003df9c4e4f03b9b7e074495609b8629885a30f3 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 10:49:00 +0100 Subject: [PATCH 11/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 42 ++++++++++++++++++++++++----- sqllin-driver-test/build.gradle.kts | 10 ++----- sqllin-dsl-test/build.gradle.kts | 10 ++----- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0d08a1c..1935370 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,6 +56,9 @@ jobs: - name: Run sqllin-dsl JVM Unit Tests on macOS Arm64 run: ./test_dsl_jvm.sh + - name: Accept Android SDK Licenses + run: yes | sdkmanager --licenses || true + - name: Run Android 16 Instrumented Tests run: ./gradlew :sqllin-driver-test:pixel6api36AndroidDeviceTest :sqllin-dsl-test:pixel6api36AndroidDeviceTest --stacktrace @@ -182,14 +185,41 @@ jobs: - name: Run sqllin-dsl JVM Unit Tests on Linux X64 run: ./test_dsl_jvm.sh - - name: Enable KVM Group Permissions - run: | - echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules - sudo udevadm control --reload-rules - sudo udevadm trigger --name-match=kvm + - name: AVD Cache + uses: actions/cache@v4 + id: avd-cache + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-26 + + - name: Create AVD and Generate Snapshot for Caching + if: steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: 26 + target: default + arch: x86_64 + profile: pixel_2 + emulator-build: 15368433 + force-avd-creation: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: true + script: echo "Generated AVD snapshot for caching." - name: Run Android 8 Instrumented Tests - run: ./gradlew :sqllin-driver-test:pixel2api27AndroidDeviceTest :sqllin-dsl-test:pixel2api27AndroidDeviceTest --stacktrace + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: 26 + target: default + arch: x86_64 + profile: pixel_2 + emulator-build: 15368433 + force-avd-creation: false + emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none + disable-animations: true + script: ./test_android.sh - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 9e2ed6d..653daec 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -20,17 +20,11 @@ kotlin { managedDevices { localDevices { create("pixel6api36") { - device = "Pixel 6" - apiLevel = 36 + device = "Pixel 10" + apiLevel = 37 systemImageSource = "google" testedAbi = "arm64-v8a" } - create("pixel2api27") { - device = "Pixel 2" - apiLevel = 27 - systemImageSource = "aosp" - testedAbi = "x86_64" - } } } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index ea6e1f5..5cb410f 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -23,17 +23,11 @@ kotlin { managedDevices { localDevices { create("pixel6api36") { - device = "Pixel 6" - apiLevel = 36 + device = "Pixel 10" + apiLevel = 37 systemImageSource = "google" testedAbi = "arm64-v8a" } - create("pixel2api27") { - device = "Pixel 2" - apiLevel = 27 - systemImageSource = "aosp" - testedAbi = "x86_64" - } } } } From 5aafd8ae40f9c479ba623a27176e09781a6dc8ea Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 10:58:57 +0100 Subject: [PATCH 12/27] Fix an issue for Android instrumented test --- sqllin-driver-test/build.gradle.kts | 2 ++ sqllin-dsl-test/build.gradle.kts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 653daec..688a9e3 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -1,3 +1,4 @@ +import com.android.build.api.dsl.ManagedVirtualDevice.PageAlignment.FORCE_16KB_PAGES import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.konan.target.HostManager @@ -24,6 +25,7 @@ kotlin { apiLevel = 37 systemImageSource = "google" testedAbi = "arm64-v8a" + pageAlignment = FORCE_16KB_PAGES } } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 5cb410f..685280b 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -1,3 +1,4 @@ +import com.android.build.api.dsl.ManagedVirtualDevice.PageAlignment.FORCE_16KB_PAGES import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask @@ -27,6 +28,7 @@ kotlin { apiLevel = 37 systemImageSource = "google" testedAbi = "arm64-v8a" + pageAlignment = FORCE_16KB_PAGES } } } From 762be9ab20fa9602e9a080e9cb02d8f4dada6b6a Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 11:08:19 +0100 Subject: [PATCH 13/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1935370..0caf7e7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,8 +56,8 @@ jobs: - name: Run sqllin-dsl JVM Unit Tests on macOS Arm64 run: ./test_dsl_jvm.sh - - name: Accept Android SDK Licenses - run: yes | sdkmanager --licenses || true + - name: Setup Android SDK + uses: android-actions/setup-android@v3 - name: Run Android 16 Instrumented Tests run: ./gradlew :sqllin-driver-test:pixel6api36AndroidDeviceTest :sqllin-dsl-test:pixel6api36AndroidDeviceTest --stacktrace From d65331bfda574f9b87c3bb5734ddce4a0d979032 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 11:27:13 +0100 Subject: [PATCH 14/27] Fix an issue for Android instrumented test --- sqllin-driver-test/build.gradle.kts | 4 ++-- sqllin-dsl-test/build.gradle.kts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 688a9e3..baaebd2 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -20,9 +20,9 @@ kotlin { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" managedDevices { localDevices { - create("pixel6api36") { + create("pixel10api36") { device = "Pixel 10" - apiLevel = 37 + apiLevel = 36 systemImageSource = "google" testedAbi = "arm64-v8a" pageAlignment = FORCE_16KB_PAGES diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 685280b..3f4bde7 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -23,9 +23,9 @@ kotlin { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" managedDevices { localDevices { - create("pixel6api36") { + create("pixel10api36") { device = "Pixel 10" - apiLevel = 37 + apiLevel = 36 systemImageSource = "google" testedAbi = "arm64-v8a" pageAlignment = FORCE_16KB_PAGES From ceacb15d15cefc05cbf6a943389bd168e1f80188 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 12:06:43 +0100 Subject: [PATCH 15/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 2 +- sqllin-driver-test/build.gradle.kts | 2 +- sqllin-dsl-test/build.gradle.kts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0caf7e7..70618b3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,7 +60,7 @@ jobs: uses: android-actions/setup-android@v3 - name: Run Android 16 Instrumented Tests - run: ./gradlew :sqllin-driver-test:pixel6api36AndroidDeviceTest :sqllin-dsl-test:pixel6api36AndroidDeviceTest --stacktrace + run: ./gradlew :sqllin-driver-test:pixelAndroidDeviceTest :sqllin-dsl-test:pixelAndroidDeviceTest --stacktrace - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index baaebd2..0a04df3 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -20,7 +20,7 @@ kotlin { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" managedDevices { localDevices { - create("pixel10api36") { + create("pixel") { device = "Pixel 10" apiLevel = 36 systemImageSource = "google" diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 3f4bde7..d95d67f 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -23,7 +23,7 @@ kotlin { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" managedDevices { localDevices { - create("pixel10api36") { + create("pixel") { device = "Pixel 10" apiLevel = 36 systemImageSource = "google" From 506dc603d5923b08e84a47c742aa66f7235169a5 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 12:29:23 +0100 Subject: [PATCH 16/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 2 +- sqllin-driver-test/build.gradle.kts | 2 +- sqllin-dsl-test/build.gradle.kts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 70618b3..8ea36f1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,7 +60,7 @@ jobs: uses: android-actions/setup-android@v3 - name: Run Android 16 Instrumented Tests - run: ./gradlew :sqllin-driver-test:pixelAndroidDeviceTest :sqllin-dsl-test:pixelAndroidDeviceTest --stacktrace + run: ./gradlew :sqllin-driver-test:pixelAndroidDeviceTest :sqllin-dsl-test:pixelAndroidDeviceTest --stacktrace -Pandroid.testoptions.manageddevices.emulator.gpu=host - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 0a04df3..1427749 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -22,7 +22,7 @@ kotlin { localDevices { create("pixel") { device = "Pixel 10" - apiLevel = 36 + apiLevel = 37 systemImageSource = "google" testedAbi = "arm64-v8a" pageAlignment = FORCE_16KB_PAGES diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index d95d67f..298514e 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -25,7 +25,7 @@ kotlin { localDevices { create("pixel") { device = "Pixel 10" - apiLevel = 36 + apiLevel = 37 systemImageSource = "google" testedAbi = "arm64-v8a" pageAlignment = FORCE_16KB_PAGES From de7666921e7da890c7bd24d059e36b7f1ab691c0 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Sun, 17 May 2026 12:41:21 +0100 Subject: [PATCH 17/27] Fix an issue for Android instrumented test --- sqllin-driver-test/build.gradle.kts | 4 ++-- sqllin-dsl-test/build.gradle.kts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 1427749..a031ae8 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -22,10 +22,10 @@ kotlin { localDevices { create("pixel") { device = "Pixel 10" - apiLevel = 37 + apiLevel = 36 systemImageSource = "google" testedAbi = "arm64-v8a" - pageAlignment = FORCE_16KB_PAGES + //pageAlignment = FORCE_16KB_PAGES } } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 298514e..9131330 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -25,10 +25,10 @@ kotlin { localDevices { create("pixel") { device = "Pixel 10" - apiLevel = 37 + apiLevel = 36 systemImageSource = "google" testedAbi = "arm64-v8a" - pageAlignment = FORCE_16KB_PAGES + //pageAlignment = FORCE_16KB_PAGES } } } From 54dda270d211b55dfa62d159a5beacd9494dd6ee Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 08:32:35 +0100 Subject: [PATCH 18/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 5 ++++- sqllin-driver-test/build.gradle.kts | 8 +++----- sqllin-dsl-test/build.gradle.kts | 8 +++----- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8ea36f1..571c9b1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,7 +60,10 @@ jobs: uses: android-actions/setup-android@v3 - name: Run Android 16 Instrumented Tests - run: ./gradlew :sqllin-driver-test:pixelAndroidDeviceTest :sqllin-dsl-test:pixelAndroidDeviceTest --stacktrace -Pandroid.testoptions.manageddevices.emulator.gpu=host + run: ./gradlew :sqllin-driver-test:pixelCIAndroidDeviceTest \ + :sqllin-dsl-test:pixelCIAndroidDeviceTest \ + --stacktrace \ + -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index a031ae8..b9c3beb 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -1,4 +1,3 @@ -import com.android.build.api.dsl.ManagedVirtualDevice.PageAlignment.FORCE_16KB_PAGES import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.konan.target.HostManager @@ -20,12 +19,11 @@ kotlin { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" managedDevices { localDevices { - create("pixel") { - device = "Pixel 10" + create("pixelCI") { + device = "Pixel 6" apiLevel = 36 - systemImageSource = "google" + systemImageSource = "aosp-atd" testedAbi = "arm64-v8a" - //pageAlignment = FORCE_16KB_PAGES } } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 9131330..ff2713a 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -1,4 +1,3 @@ -import com.android.build.api.dsl.ManagedVirtualDevice.PageAlignment.FORCE_16KB_PAGES import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask @@ -23,12 +22,11 @@ kotlin { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" managedDevices { localDevices { - create("pixel") { - device = "Pixel 10" + create("pixelCI") { + device = "Pixel 6" apiLevel = 36 - systemImageSource = "google" + systemImageSource = "aosp-atd" testedAbi = "arm64-v8a" - //pageAlignment = FORCE_16KB_PAGES } } } From 14ea82012c6a7b46cbdfaea8f67eaffac90f2389 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 08:41:37 +0100 Subject: [PATCH 19/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 571c9b1..f9dcf07 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,10 +60,7 @@ jobs: uses: android-actions/setup-android@v3 - name: Run Android 16 Instrumented Tests - run: ./gradlew :sqllin-driver-test:pixelCIAndroidDeviceTest \ - :sqllin-dsl-test:pixelCIAndroidDeviceTest \ - --stacktrace \ - -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect + run: ./gradlew :sqllin-driver-test:pixelCIAndroidDeviceTest :sqllin-dsl-test:pixelCIAndroidDeviceTest --stacktrace -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 From b5bcb56e57ca5cb676fa4bac642a76e6cdf197e2 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 08:52:28 +0100 Subject: [PATCH 20/27] Fix an issue for Android instrumented test --- sample/build.gradle.kts | 2 +- sqllin-driver-test/build.gradle.kts | 2 +- sqllin-dsl-test/build.gradle.kts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index cd51277..3275348 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -24,7 +24,7 @@ kotlin { iosSimulatorArm64() compilerOptions { - freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters", "-Xnested-type-aliases") + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") } sourceSets { diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index b9c3beb..6e4912a 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -22,7 +22,7 @@ kotlin { create("pixelCI") { device = "Pixel 6" apiLevel = 36 - systemImageSource = "aosp-atd" + systemImageSource = "google" testedAbi = "arm64-v8a" } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index ff2713a..20191ad 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -25,7 +25,7 @@ kotlin { create("pixelCI") { device = "Pixel 6" apiLevel = 36 - systemImageSource = "aosp-atd" + systemImageSource = "google" testedAbi = "arm64-v8a" } } @@ -60,7 +60,7 @@ kotlin { } compilerOptions { - freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters", "-Xnested-type-aliases") + freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xcontext-parameters") } sourceSets { From 4522d3acc0052049db634dc600cb6f3fea47ef59 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 10:48:33 +0100 Subject: [PATCH 21/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 2 +- sqllin-driver-test/build.gradle.kts | 4 ++-- sqllin-dsl-test/build.gradle.kts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f9dcf07..00fc334 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,7 +60,7 @@ jobs: uses: android-actions/setup-android@v3 - name: Run Android 16 Instrumented Tests - run: ./gradlew :sqllin-driver-test:pixelCIAndroidDeviceTest :sqllin-dsl-test:pixelCIAndroidDeviceTest --stacktrace -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect + run: ./gradlew :sqllin-driver-test:pixelCIAndroidDeviceTest --stacktrace -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 6e4912a..8c18766 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -20,9 +20,9 @@ kotlin { managedDevices { localDevices { create("pixelCI") { - device = "Pixel 6" + device = "Pixel 9" apiLevel = 36 - systemImageSource = "google" + systemImageSource = "aosp-atd" testedAbi = "arm64-v8a" } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 20191ad..2037287 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -23,9 +23,9 @@ kotlin { managedDevices { localDevices { create("pixelCI") { - device = "Pixel 6" + device = "Pixel 9" apiLevel = 36 - systemImageSource = "google" + systemImageSource = "aosp-atd" testedAbi = "arm64-v8a" } } From d12be914ece0fac6d60060848bd49e4f96a8288c Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 10:56:49 +0100 Subject: [PATCH 22/27] Fix an issue for Android instrumented test --- sqllin-driver-test/build.gradle.kts | 2 +- sqllin-dsl-test/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 8c18766..0136a63 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -22,7 +22,7 @@ kotlin { create("pixelCI") { device = "Pixel 9" apiLevel = 36 - systemImageSource = "aosp-atd" + systemImageSource = "google" testedAbi = "arm64-v8a" } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index 2037287..e57ed71 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -25,7 +25,7 @@ kotlin { create("pixelCI") { device = "Pixel 9" apiLevel = 36 - systemImageSource = "aosp-atd" + systemImageSource = "google" testedAbi = "arm64-v8a" } } From 56feb6fd76fe5e7f9421c507eb6bc1db9e1a58fb Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 16:04:12 +0100 Subject: [PATCH 23/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 21 +++++++++------------ sqllin-driver-test/build.gradle.kts | 10 ---------- sqllin-dsl-test/build.gradle.kts | 10 ---------- 3 files changed, 9 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 00fc334..6e17474 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,12 +56,6 @@ jobs: - name: Run sqllin-dsl JVM Unit Tests on macOS Arm64 run: ./test_dsl_jvm.sh - - name: Setup Android SDK - uses: android-actions/setup-android@v3 - - - name: Run Android 16 Instrumented Tests - run: ./gradlew :sqllin-driver-test:pixelCIAndroidDeviceTest --stacktrace -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect - - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 with: @@ -139,6 +133,9 @@ jobs: build-on-linux: runs-on: ubuntu-latest timeout-minutes: 60 + strategy: + matrix: + api-level: [26, 36] steps: - name: Checkout @@ -192,29 +189,29 @@ jobs: path: | ~/.android/avd/* ~/.android/adb* - key: avd-26 + key: avd - name: Create AVD and Generate Snapshot for Caching if: steps.avd-cache.outputs.cache-hit != 'true' uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 26 + api-level: ${{ matrix.api-level }} target: default arch: x86_64 - profile: pixel_2 + profile: pixel_6 emulator-build: 15368433 force-avd-creation: false emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true script: echo "Generated AVD snapshot for caching." - - name: Run Android 8 Instrumented Tests + - name: Run Android Instrumented Tests uses: reactivecircus/android-emulator-runner@v2 with: - api-level: 26 + api-level: ${{ matrix.api-level }} target: default arch: x86_64 - profile: pixel_2 + profile: pixel_6 emulator-build: 15368433 force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none diff --git a/sqllin-driver-test/build.gradle.kts b/sqllin-driver-test/build.gradle.kts index 0136a63..ec99121 100644 --- a/sqllin-driver-test/build.gradle.kts +++ b/sqllin-driver-test/build.gradle.kts @@ -17,16 +17,6 @@ kotlin { minSdk = libs.versions.android.sdk.min.get().toInt() withDeviceTest { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - managedDevices { - localDevices { - create("pixelCI") { - device = "Pixel 9" - apiLevel = 36 - systemImageSource = "google" - testedAbi = "arm64-v8a" - } - } - } } } diff --git a/sqllin-dsl-test/build.gradle.kts b/sqllin-dsl-test/build.gradle.kts index e57ed71..af2c09d 100644 --- a/sqllin-dsl-test/build.gradle.kts +++ b/sqllin-dsl-test/build.gradle.kts @@ -20,16 +20,6 @@ kotlin { minSdk = libs.versions.android.sdk.min.get().toInt() withDeviceTest { instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - managedDevices { - localDevices { - create("pixelCI") { - device = "Pixel 9" - apiLevel = 36 - systemImageSource = "google" - testedAbi = "arm64-v8a" - } - } - } } } From 0083d8c32aa004b6a95adc505d52ace2bfa23495 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 16:17:15 +0100 Subject: [PATCH 24/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e17474..9cd1608 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -135,7 +135,13 @@ jobs: timeout-minutes: 60 strategy: matrix: - api-level: [26, 36] + include: + - api-level: 26 + target: default + device: pixel_2 + - api-level: 36 + target: google_apis + device: pixel_9 steps: - name: Checkout @@ -189,16 +195,16 @@ jobs: path: | ~/.android/avd/* ~/.android/adb* - key: avd + key: avd-${{ matrix.api-level }} - name: Create AVD and Generate Snapshot for Caching if: steps.avd-cache.outputs.cache-hit != 'true' uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} - target: default + target: ${{ matrix.target }} arch: x86_64 - profile: pixel_6 + profile: ${{ matrix.device }} emulator-build: 15368433 force-avd-creation: false emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none @@ -209,9 +215,9 @@ jobs: uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} - target: default + target: ${{ matrix.target }} arch: x86_64 - profile: pixel_6 + profile: ${{ matrix.device }} emulator-build: 15368433 force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none @@ -221,13 +227,13 @@ jobs: - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 with: - name: Test-Reports-Linux-driver + name: Test-Reports-Linux-driver-API${{ matrix.api-level }} path: sqllin-driver/build/reports if: failure() - name: Upload sqllin-dsl Reports uses: actions/upload-artifact@v4 with: - name: Test-Reports-Linux-dsl + name: Test-Reports-Linux-dsl-API${{ matrix.api-level }} path: sqllin-dsl/build/reports if: failure() From 274133b31b67dacabc281cd58705e22274531cf6 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 16:25:03 +0100 Subject: [PATCH 25/27] Fix an issue for Android instrumented test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9cd1608..6c45554 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -141,7 +141,7 @@ jobs: device: pixel_2 - api-level: 36 target: google_apis - device: pixel_9 + device: pixel_6 steps: - name: Checkout From 73ba62ea247c01e1b86bd68fd24872c4a75adfe9 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 18:58:44 +0100 Subject: [PATCH 26/27] Refactor Android CI --- .github/workflows/build.yml | 85 ++++++++++++++++++++++++++----------- test_android.sh | 5 --- test_driver_jvm.sh | 3 -- test_driver_linux.sh | 3 -- test_driver_macos.sh | 3 -- test_dsl_jvm.sh | 3 -- test_dsl_linux.sh | 3 -- test_dsl_macos.sh | 3 -- 8 files changed, 61 insertions(+), 47 deletions(-) delete mode 100755 test_android.sh delete mode 100755 test_driver_jvm.sh delete mode 100755 test_driver_linux.sh delete mode 100755 test_driver_macos.sh delete mode 100755 test_dsl_jvm.sh delete mode 100755 test_dsl_linux.sh delete mode 100755 test_dsl_macos.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6c45554..b139257 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,19 +42,19 @@ jobs: run: ./gradlew :sqllin-driver:assemble -PonCICD - name: Run sqllin-driver macOS Arm64 Tests - run: ./test_driver_macos.sh + run: ./gradlew :sqllin-driver-test:cleanMacosArm64Test :sqllin-driver-test:macosArm64Test --stacktrace - name: Run sqllin-driver JVM Unit Tests on macOS Arm64 - run: ./test_driver_jvm.sh + run: ./gradlew :sqllin-driver-test:cleanJvmTest :sqllin-driver-test:jvmTest --stacktrace - name: Build sqllin-dsl run: ./gradlew :sqllin-dsl:assemble -PonCICD - name: Run sqllin-dsl macOS Arm64 Tests - run: ./test_dsl_macos.sh + run: ./gradlew :sqllin-dsl-test:cleanMacosArm64Test :sqllin-dsl-test:macosArm64Test --stacktrace - name: Run sqllin-dsl JVM Unit Tests on macOS Arm64 - run: ./test_dsl_jvm.sh + run: ./gradlew :sqllin-dsl-test:cleanJvmTest :sqllin-dsl-test:jvmTest --stacktrace - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 @@ -99,7 +99,7 @@ jobs: ${{ runner.os }}-konan- - name: Build sqllin-driver - run: ./gradlew :sqllin-driver:mingwX64MainKlibrary + run: ./gradlew :sqllin-driver:mingwX64MainKlibrary :sqllin-driver:jvmJar - name: Run sqllin-driver MinGW X64 Tests run: ./gradlew :sqllin-driver:cleanMingwX64Test && ./gradlew :sqllin-driver:mingwX64Test --stacktrace @@ -108,7 +108,7 @@ jobs: run: ./gradlew :sqllin-driver:cleanJvmTest && ./gradlew :sqllin-driver:jvmTest --stacktrace - name: Build sqllin-dsl - run: ./gradlew :sqllin-dsl:mingwX64MainKlibrary + run: ./gradlew :sqllin-dsl:mingwX64MainKlibrary :sqllin-dsl:jvmJar - name: Run sqllin-dsl MinGW X64 Tests run: ./gradlew :sqllin-dsl-test:cleanMingwX64Test && ./gradlew :sqllin-dsl-test:mingwX64Test --stacktrace @@ -133,15 +133,6 @@ jobs: build-on-linux: runs-on: ubuntu-latest timeout-minutes: 60 - strategy: - matrix: - include: - - api-level: 26 - target: default - device: pixel_2 - - api-level: 36 - target: google_apis - device: pixel_6 steps: - name: Checkout @@ -168,25 +159,71 @@ jobs: ${{ runner.os }}-konan- - name: Build sqllin-driver - run: ./gradlew :sqllin-driver:assemble -PonCICD + run: ./gradlew :sqllin-driver:linuxX64MainKlibrary :sqllin-driver:jvmJar - name: Run sqllin-driver Linux X64 Tests - run: ./test_driver_linux.sh + run: ./gradlew :sqllin-driver-test:cleanLinuxX64Test :sqllin-driver-test:linuxX64Test --stacktrace - name: Run sqllin-driver JVM Unit Tests on Linux X64 - run: ./test_driver_jvm.sh + run: ./gradlew :sqllin-driver-test:cleanJvmTest :sqllin-driver-test:jvmTest --stacktrace - name: Build sqllin-processor run: ./gradlew :sqllin-processor:assemble - name: Build sqllin-dsl - run: ./gradlew :sqllin-dsl:assemble -PonCICD + run: ./gradlew :sqllin-dsl:linuxX64MainKlibrary :sqllin-dsl:jvmJar - name: Run sqllin-dsl Linux X64 Tests - run: ./test_dsl_linux.sh + run: ./gradlew :sqllin-dsl-test:cleanLinuxX64Test :sqllin-dsl-test:linuxX64Test --stacktrace - name: Run sqllin-dsl JVM Unit Tests on Linux X64 - run: ./test_dsl_jvm.sh + run: ./gradlew :sqllin-dsl-test:cleanJvmTest :sqllin-dsl-test:jvmTest --stacktrace + + - name: Upload sqllin-driver Reports + uses: actions/upload-artifact@v4 + with: + name: Test-Reports-Linux-driver + path: sqllin-driver/build/reports + if: failure() + + - name: Upload sqllin-dsl Reports + uses: actions/upload-artifact@v4 + with: + name: Test-Reports-Linux-dsl + path: sqllin-dsl/build/reports + if: failure() + + build-android-and-test: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + matrix: + include: + - api-level: 26 + target: default + device: pixel_2 + - api-level: 36 + target: google_apis + device: pixel_6 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate Gradle Wrapper + uses: gradle/actions/wrapper-validation@v3 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 21 + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Build Android + run: ./gradlew :sqllin-driver:assembleAndroidMain :sqllin-dsl:assembleAndroidMain - name: AVD Cache uses: actions/cache@v4 @@ -222,18 +259,18 @@ jobs: force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true - script: ./test_android.sh + script: ./gradlew :sqllin-driver-test:connectedAndroidDeviceTest :sqllin-dsl-test:connectedAndroidDeviceTest --stacktrace - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4 with: - name: Test-Reports-Linux-driver-API${{ matrix.api-level }} + name: Test-Reports-Android-driver-API${{ matrix.api-level }} path: sqllin-driver/build/reports if: failure() - name: Upload sqllin-dsl Reports uses: actions/upload-artifact@v4 with: - name: Test-Reports-Linux-dsl-API${{ matrix.api-level }} + name: Test-Reports-Android-dsl-API${{ matrix.api-level }} path: sqllin-dsl/build/reports if: failure() diff --git a/test_android.sh b/test_android.sh deleted file mode 100755 index d7e8152..0000000 --- a/test_android.sh +++ /dev/null @@ -1,5 +0,0 @@ -#Run Android instrumented tests -./gradlew :sqllin-driver-test:connectedAndroidDeviceTest --stacktrace -./gradlew :sqllin-dsl-test:connectedAndroidDeviceTest --stacktrace -#adb uninstall com.ctrip.sqllin.driver.test -#adb uninstall com.ctrip.sqllin.dsl.test \ No newline at end of file diff --git a/test_driver_jvm.sh b/test_driver_jvm.sh deleted file mode 100755 index f698240..0000000 --- a/test_driver_jvm.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-driver unit tests on JVM -./gradlew :sqllin-driver-test:cleanJvmTest -./gradlew :sqllin-driver-test:jvmTest --stacktrace \ No newline at end of file diff --git a/test_driver_linux.sh b/test_driver_linux.sh deleted file mode 100755 index 2b424fe..0000000 --- a/test_driver_linux.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-driver unit tests on Linux -./gradlew :sqllin-driver-test:cleanLinuxX64Test -./gradlew :sqllin-driver-test:linuxX64Test --stacktrace \ No newline at end of file diff --git a/test_driver_macos.sh b/test_driver_macos.sh deleted file mode 100755 index e86db40..0000000 --- a/test_driver_macos.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-driver unit tests on macOS -./gradlew :sqllin-driver-test:cleanMacosArm64Test -./gradlew :sqllin-driver-test:macosArm64Test --stacktrace \ No newline at end of file diff --git a/test_dsl_jvm.sh b/test_dsl_jvm.sh deleted file mode 100755 index 248f32b..0000000 --- a/test_dsl_jvm.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-driver unit tests on JVM -./gradlew :sqllin-dsl-test:cleanJvmTest -./gradlew :sqllin-dsl-test:jvmTest --stacktrace \ No newline at end of file diff --git a/test_dsl_linux.sh b/test_dsl_linux.sh deleted file mode 100755 index 504e0fc..0000000 --- a/test_dsl_linux.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-dsl unit tests on Linux -./gradlew :sqllin-dsl-test:cleanLinuxX64Test -./gradlew :sqllin-dsl-test:linuxX64Test --stacktrace \ No newline at end of file diff --git a/test_dsl_macos.sh b/test_dsl_macos.sh deleted file mode 100755 index da525a6..0000000 --- a/test_dsl_macos.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Run sqllin-dsl unit tests on macOS -./gradlew :sqllin-dsl-test:cleanMacosArm64Test -./gradlew :sqllin-dsl-test:macosArm64Test --stacktrace \ No newline at end of file From 79c70ac9c3d091572a4ec56db4916fb5218fd141 Mon Sep 17 00:00:00 2001 From: qiaoyuang Date: Mon, 18 May 2026 20:05:50 +0100 Subject: [PATCH 27/27] Update build workflow to run Android device tests in parallel --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b139257..e751bf1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -259,7 +259,7 @@ jobs: force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true - script: ./gradlew :sqllin-driver-test:connectedAndroidDeviceTest :sqllin-dsl-test:connectedAndroidDeviceTest --stacktrace + script: ./gradlew :sqllin-driver-test:connectedAndroidDeviceTest --stacktrace & ./gradlew :sqllin-dsl-test:connectedAndroidDeviceTest --stacktrace - name: Upload sqllin-driver Reports uses: actions/upload-artifact@v4