This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new d5d557b52 test(java/driver/jni): expand test matrix (#4376)
d5d557b52 is described below
commit d5d557b52daa625c61f3e5244cbe3c1bf737a17e
Author: David Li <[email protected]>
AuthorDate: Wed Jun 10 18:10:10 2026 -0700
test(java/driver/jni): expand test matrix (#4376)
Actually build/test (sort of) on Windows and ARM Linux.
After this I think we should add DuckDB to the testing so that we have a
reasonably complete driver that runs on all platforms and doesn't depend
on an external service (as the Docker setup can't be used on
macOS/Windows).
Closes #2688.
---
.github/workflows/java.yml | 82 ++++++++++++++++++----
ci/scripts/python_wheel_windows_build.bat | 3 +-
.../adbc/driver/jni/FlightSqlIntegrationTest.java | 4 +-
java/driver/jni/src/main/cpp/jni_wrapper.cc | 1 +
.../arrow/adbc/driver/jni/JniDriverTest.java | 4 ++
5 files changed, 80 insertions(+), 14 deletions(-)
diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml
index 74e8f0125..183d8d188 100644
--- a/.github/workflows/java.yml
+++ b/.github/workflows/java.yml
@@ -111,8 +111,10 @@ jobs:
strategy:
matrix:
include:
- - { os: Linux, arch: amd64, vcpkg_arch: x64, runner: ubuntu-latest }
+ - { os: Linux, arch: amd64, vcpkg_arch: x64, runner: ubuntu-latest,
platform: "linux/amd64" }
+ - { os: Linux, arch: arm64v8, vcpkg_arch: arm64, runner:
ubuntu-24.04-arm, platform: "linux/arm64/v8" }
- { os: macOS, arch: arm64v8, vcpkg_arch: arm64, runner:
macos-latest }
+ - { os: Windows, arch: amd64, vcpkg_arch: x64, runner:
windows-latest }
env:
VCPKG_ROOT: "${{ github.workspace }}/vcpkg"
steps:
@@ -141,8 +143,11 @@ jobs:
- name: Install Homebrew dependencies
if: matrix.os == 'macOS'
run: brew install autoconf bash pkg-config ninja
- - name: Build artifacts
- if: matrix.os != 'macOS'
+ - name: Build artifacts (Linux)
+ if: matrix.os == 'Linux'
+ env:
+ ARCH: ${{ matrix.arch }}
+ PLATFORM: ${{ matrix.platform }}
run: |
docker compose run python-wheel-manylinux-build
- name: Build artifacts (macOS)
@@ -156,8 +161,33 @@ jobs:
export ADBC_USE_ASAN=OFF
export ADBC_USE_UBSAN=OFF
./ci/scripts/python_wheel_unix_build.sh ${{ matrix.arch }} $(pwd)
$(pwd)/build
+ - name: Build artifacts (Windows)
+ if: matrix.os == 'Windows'
+ # TODO(https://github.com/apache/arrow-adbc/issues/4269): remove
cmd.exe usage
+ shell: cmd # zizmor: ignore[misfeature]
+ run: |
+ .\ci\scripts\python_wheel_windows_build.bat %cd% %cd%\build\${{
matrix.vcpkg_arch }}
+
+ - name: Build driver manager (Windows)
+ if: matrix.os == 'Windows'
+ run: |
+ ls -laR $(pwd)/build/${{ matrix.vcpkg_arch }}
+ rm -rf $(pwd)/build/${{ matrix.vcpkg_arch
}}/bin/adbc_driver_manager.dll
+ rm -rf $(pwd)/build/${{ matrix.vcpkg_arch }}/driver_manager
+
+ # I think static and shared conflict on Windows so build static
separately
+ - name: Build driver manager (Windows)
+ if: matrix.os == 'Windows'
+ # TODO(https://github.com/apache/arrow-adbc/issues/4269): remove
cmd.exe usage
+ shell: cmd # zizmor: ignore[misfeature]
+ run: |
+ cmake -G "Visual Studio 18 2026" -A x64 -DADBC_BUILD_SHARED=OFF
-DADBC_BUILD_STATIC=ON -DCMAKE_VERBOSE_MAKEFILE=ON -DADBC_DRIVER_MANAGER=ON
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=%cd%\build\${{
matrix.vcpkg_arch }} -B %cd%\buildmanager %cd%\c || exit /B 1
+ cmake --build %cd%\buildmanager --config Debug --target install
--verbose -j || exit /B 1
+
- name: Build JNI artifacts
run: |
+ ls -l $(pwd)/build/${{ matrix.vcpkg_arch }}
+
export ADBC_BUILD_STATIC=ON
export ADBC_BUILD_TESTS=OFF
export ADBC_USE_ASAN=OFF
@@ -165,6 +195,7 @@ jobs:
./ci/scripts/java_build.sh $(pwd)
./ci/scripts/java_jni_build.sh $(pwd) $(pwd)/build_jni
$(pwd)/build/${{ matrix.vcpkg_arch }}
- name: Assemble artifacts
+ if: matrix.os != 'Windows'
run: |
mkdir artifacts
cp -r java/driver/jni/src/main/resources/ artifacts/jni
@@ -172,6 +203,15 @@ jobs:
ls -laR artifacts
mv artifacts artifacts-${{ matrix.os }}-${{ matrix.arch }}
tar czf artifacts-${{ matrix.os }}-${{ matrix.arch }}.tgz
artifacts-${{ matrix.os }}-${{ matrix.arch }}
+ - name: Assemble artifacts (Windows)
+ if: matrix.os == 'Windows'
+ run: |
+ mkdir -p artifacts/driver
+ cp -r java/driver/jni/src/main/resources/ artifacts/jni
+ cp -r build/${{ matrix.vcpkg_arch }}/bin/*.dll artifacts/driver
+ ls -laR artifacts
+ mv artifacts artifacts-${{ matrix.os }}-${{ matrix.arch }}
+ tar czf artifacts-${{ matrix.os }}-${{ matrix.arch }}.tgz
artifacts-${{ matrix.os }}-${{ matrix.arch }}
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
# v7.0.1
with:
name: jni-artifacts-${{ matrix.os }}-${{ matrix.arch }}
@@ -183,11 +223,15 @@ jobs:
run: |
mkdir ~/logs
find "$VCPKG_ROOT" -name 'build-*.log' -exec cp '{}' ~/logs ';'
+
+ if [[ -d "$(pwd)/build/${{ matrix.vcpkg_arch }}" ]]; then
+ mv "$(pwd)/build/${{ matrix.vcpkg_arch }}" ~/logs/artifacts
+ fi
- name: Upload failure logs
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
# v7.0.1
with:
- name: jni-artifacts-${{ matrix.os }}-${{ matrix.arch }}
+ name: jni-debug-logs-${{ matrix.os }}-${{ matrix.arch }}
retention-days: 7
path: ~/logs
@@ -199,10 +243,16 @@ jobs:
strategy:
matrix:
include:
- - { java: '11', os: Linux, arch: amd64, vcpkg_arch: x64, runner:
ubuntu-latest }
- - { java: '25', os: Linux, arch: amd64, vcpkg_arch: x64, runner:
ubuntu-latest }
- - { java: '11', os: macOS, arch: arm64v8, vcpkg_arch: arm64, runner:
macos-latest }
- - { java: '25', os: macOS, arch: arm64v8, vcpkg_arch: arm64, runner:
macos-latest }
+ # To keep the matrix down, only test Java 11 on some platforms
+ - { java: '11', os: Linux, arch: amd64, runner: ubuntu-latest }
+ - { java: '11', os: macOS, arch: arm64v8, runner: macos-latest }
+ - { java: '11', os: Windows, arch: amd64, runner: windows-latest }
+ - { java: '11', os: Linux, arch: arm64v8, runner: ubuntu-24.04-arm }
+
+ - { java: '25', os: Linux, arch: amd64, runner: ubuntu-latest }
+ - { java: '25', os: macOS, arch: arm64v8, runner: macos-latest }
+ - { java: '25', os: Windows, arch: amd64, runner: windows-latest }
+ max-parallel: 4
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 #
v6.0.3
with:
@@ -223,11 +273,9 @@ jobs:
run: |
set -x
pushd artifacts
- for archive in artifacts*.tgz; do
- tar xvf $archive
- done
+ tar xvf artifacts-${{ matrix.os }}-${{ matrix.arch }}.tgz
popd
- cp -r artifacts/*/jni/adbc_driver_jni
java/driver/jni/src/main/resources
+ cp -r artifacts/artifacts-${{ matrix.os }}-${{ matrix.arch
}}/jni/adbc_driver_jni java/driver/jni/src/main/resources
env BUILD_JNI=ON ./ci/scripts/java_build.sh $(pwd)
- name: Start Dependencies
@@ -236,6 +284,12 @@ jobs:
docker compose up --detach --wait flightsql-test
flightsql-sqlite-test mssql-test postgres-test
cat .env | grep -v -e '^#' | grep -e '^ADBC_' | awk NF | sed
's/"//g' | tee -a $GITHUB_ENV
+ - name: Start Dependencies
+ if: matrix.os == 'Linux' && matrix.arch == 'arm64v8'
+ run: |
+ docker compose up --detach --wait flightsql-test
flightsql-sqlite-test postgres-test
+ cat .env | grep -v -e '^#' | grep -v "MSSQL" | grep -e '^ADBC_' |
awk NF | sed 's/"//g' | tee -a $GITHUB_ENV
+
- name: Download thirdparty driver
if: matrix.os == 'Linux' && matrix.arch == 'amd64'
run: |
@@ -256,6 +310,10 @@ jobs:
for driver in artifacts/*/driver; do
export LD_LIBRARY_PATH=$(pwd)/$driver:${LD_LIBRARY_PATH:-}
export DYLD_LIBRARY_PATH=$(pwd)/$driver:${DYLD_LIBRARY_PATH:-}
+ export PATH=$(pwd)/$driver:${PATH:-}
done
+ echo LD_LIBRARY_PATH=$LD_LIBRARY_PATH
+ echo DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
+ echo PATH=$PATH
cd java
mvn -B -Pjni test -pl :adbc-driver-jni -pl
:adbc-driver-jni-validation
diff --git a/ci/scripts/python_wheel_windows_build.bat
b/ci/scripts/python_wheel_windows_build.bat
index 4ca2051be..0a81ea792 100644
--- a/ci/scripts/python_wheel_windows_build.bat
+++ b/ci/scripts/python_wheel_windows_build.bat
@@ -31,6 +31,7 @@ set VCPKG_TARGET_TRIPLET=x64-windows-static
set VCPKG_DEFAULT_HOST_TRIPLET=x64-windows-static
IF NOT DEFINED VCPKG_ROOT (echo "Must set VCPKG_ROOT" && exit /B 1)
+IF NOT DEFINED ADBC_BUILD_STATIC SET ADBC_BUILD_STATIC=OFF
%VCPKG_ROOT%\vcpkg install --triplet=%VCPKG_TARGET_TRIPLET% libpq
"sqlite3[dbstat,fts3,fts4,fts5,geopoly,json1,limit,math,rtree,session,snapshot,soundex]"
IF %errorlevel% NEQ 0 EXIT /B %errorlevel%
@@ -42,7 +43,7 @@ cmake ^
-G "%CMAKE_GENERATOR%" ^
-A "%CMAKE_GENERATOR_PLATFORM%" ^
-DADBC_BUILD_SHARED=ON ^
- -DADBC_BUILD_STATIC=OFF ^
+ -DADBC_BUILD_STATIC=%ADBC_BUILD_STATIC% ^
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE% ^
-DCMAKE_INSTALL_PREFIX=%build_dir% ^
-DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake ^
diff --git
a/java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/FlightSqlIntegrationTest.java
b/java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/FlightSqlIntegrationTest.java
index c63bf8dd0..764eeab73 100644
---
a/java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/FlightSqlIntegrationTest.java
+++
b/java/driver/jni-validation/src/test/java/org/apache/arrow/adbc/driver/jni/FlightSqlIntegrationTest.java
@@ -170,7 +170,9 @@ public class FlightSqlIntegrationTest {
new Thread(
() -> {
try {
- while (stmt.getProgress() < 0.05) {
+ // try to make sure we get into the hasNext call below first
+ Thread.sleep(500);
+ while (stmt.getProgress() < 0.20) {
Thread.sleep(100);
}
System.out.println("progress: " + stmt.getProgress());
diff --git a/java/driver/jni/src/main/cpp/jni_wrapper.cc
b/java/driver/jni/src/main/cpp/jni_wrapper.cc
index 7a8a73d53..385a65ae1 100644
--- a/java/driver/jni/src/main/cpp/jni_wrapper.cc
+++ b/java/driver/jni/src/main/cpp/jni_wrapper.cc
@@ -25,6 +25,7 @@
#include <utility>
#include <vector>
+#define ADBC_EXPORT
#include <arrow-adbc/adbc.h>
#include <arrow-adbc/adbc_driver_manager.h>
#include <jni.h>
diff --git
a/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
b/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
index 318923571..7415cce23 100644
---
a/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
+++
b/java/driver/jni/src/test/java/org/apache/arrow/adbc/driver/jni/JniDriverTest.java
@@ -51,6 +51,8 @@ import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.Schema;
import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledOnOs;
+import org.junit.jupiter.api.condition.OS;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
@@ -109,7 +111,9 @@ class JniDriverTest {
}
}
+ // the driver doesn't really support URIs and seems to choke on Windows in
particular
@Test
+ @DisabledOnOs(OS.WINDOWS)
void loadUri() throws Exception {
try (final BufferAllocator allocator = new RootAllocator()) {
JniDriver driver = new JniDriver(allocator);