Repository navigation
feat(java/core): add fluent ingest API #1527
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| name: Java | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| paths: | |
| - "java/**" | |
| - ".github/workflows/java.yml" | |
| push: | |
| branches-ignore: | |
| - 'dependabot/**' | |
| paths: | |
| - "java/**" | |
| - ".github/workflows/java.yml" | |
| concurrency: | |
| group: ${{ github.repository }}-${{ github.ref }}-${{ github.workflow }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| defaults: | |
| run: | |
| shell: bash -l -eo pipefail {0} | |
| jobs: | |
| java: | |
| name: "Java ${{ matrix.java }}/Linux" | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| java: ['11', '17', '21', '25'] | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| submodules: recursive | |
| - uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0 | |
| with: | |
| cache: "maven" | |
| distribution: "temurin" | |
| java-version: ${{ matrix.java }} | |
| - name: Start test services | |
| run: | | |
| docker compose up --detach --wait flightsql-sqlite-test mssql-test postgres-test | |
| cat .env | grep -v -e '^#' | awk NF | tee -a $GITHUB_ENV | |
| - name: Build/Test | |
| run: | | |
| cd java | |
| mvn install | |
| java-errorprone: | |
| name: "Java ${{ matrix.java }}/Linux with ErrorProne" | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| java: ['21', '25'] | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| submodules: recursive | |
| - uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0 | |
| with: | |
| cache: "maven" | |
| distribution: "temurin" | |
| java-version: ${{ matrix.java }} | |
| - name: Build/Test | |
| run: | | |
| cd java | |
| mkdir .mvn | |
| cat <<HERE > .mvn/jvm.config | |
| --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED | |
| --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED | |
| --add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED | |
| --add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED | |
| --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED | |
| --add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED | |
| --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED | |
| --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED | |
| --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED | |
| --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED | |
| HERE | |
| # Our linters are compile-time, no point re-running tests | |
| mvn -P errorprone install -DskipTests | |
| java-jni-artifacts: | |
| name: "JNI Libraries/${{ matrix.os }} ${{ matrix.arch }}" | |
| runs-on: ${{ matrix.runner }} | |
| strategy: | |
| matrix: | |
| include: | |
| - { 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: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0 | |
| with: | |
| cache: "maven" | |
| distribution: "temurin" | |
| java-version: 11 | |
| - name: Retrieve Go, VCPKG version from .env | |
| run: | | |
| (. .env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV | |
| (. .env && echo "VCPKG_VERSION=${VCPKG}") >> $GITHUB_ENV | |
| - name: Install vcpkg | |
| run: | | |
| ./ci/scripts/install_vcpkg.sh $VCPKG_ROOT $VCPKG_VERSION | |
| - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 | |
| with: | |
| go-version: "${{ env.GO_VERSION }}" | |
| check-latest: true | |
| cache: true | |
| cache-dependency-path: adbc/go/adbc/go.sum | |
| - name: Install Homebrew dependencies | |
| if: matrix.os == 'macOS' | |
| run: brew install autoconf bash pkg-config ninja | |
| - 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) | |
| if: matrix.os == 'macOS' | |
| run: | | |
| export ADBC_BUILD_STATIC=ON | |
| export ADBC_BUILD_TESTS=OFF | |
| 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 | |
| export ADBC_USE_UBSAN=OFF | |
| ./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 | |
| cp -r build/${{ matrix.vcpkg_arch }}/lib 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 }} | |
| - 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 }} | |
| retention-days: 7 | |
| path: | | |
| artifacts-${{ matrix.os }}-${{ matrix.arch }}.tgz | |
| - name: Assemble logs | |
| if: failure() | |
| 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-debug-logs-${{ matrix.os }}-${{ matrix.arch }} | |
| retention-days: 7 | |
| path: ~/logs | |
| java-jni: | |
| name: "Java ${{ matrix.java }} JNI/${{ matrix.os }} ${{ matrix.arch }}" | |
| runs-on: ${{ matrix.runner }} | |
| needs: | |
| - java-jni-artifacts | |
| strategy: | |
| matrix: | |
| include: | |
| # 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| submodules: recursive | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| path: artifacts | |
| pattern: jni-artifacts-* | |
| merge-multiple: true | |
| - uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0 | |
| with: | |
| cache: "maven" | |
| distribution: "temurin" | |
| java-version: 11 | |
| - name: Build | |
| run: | | |
| set -x | |
| pushd artifacts | |
| tar xvf artifacts-${{ matrix.os }}-${{ matrix.arch }}.tgz | |
| popd | |
| 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: Set environment variables | |
| if: matrix.os == 'Linux' && matrix.arch == 'amd64' | |
| run: | | |
| cat .env | grep -v -e '^#' | grep -e '^ADBC_' | awk NF | sed 's/"//g' | tee -a $GITHUB_ENV | |
| # no mssql | |
| - name: Set environment variables | |
| if: matrix.os == 'Linux' && matrix.arch == 'arm64v8' | |
| run: | | |
| cat .env | grep -v -e '^#' | grep -v "MSSQL" | grep -e '^ADBC_' | awk NF | sed 's/"//g' | tee -a $GITHUB_ENV | |
| # only postgresql | |
| - name: Set environment variables | |
| if: matrix.os == 'Windows' || matrix.os == 'macOS' | |
| run: | | |
| cat .env | grep -v -e '^#' | grep "POSTGRESQL" | grep -e '^ADBC_' | awk NF | sed 's/"//g' | tee -a $GITHUB_ENV | |
| - name: Start Dependencies | |
| if: matrix.os == 'Linux' && matrix.arch == 'amd64' | |
| run: | | |
| docker compose up --detach --wait flightsql-test flightsql-sqlite-test mssql-test postgres-test | |
| - name: Start Dependencies | |
| if: matrix.os == 'Linux' && matrix.arch == 'arm64v8' | |
| run: | | |
| docker compose up --detach --wait flightsql-test flightsql-sqlite-test postgres-test | |
| # taking the approach from: | |
| # https://github.com/ikalnytskyi/action-setup-postgres/blob/41a676a2118b02582251d839aa50cc5685355a2f/action.yml | |
| - name: Install Dependencies | |
| if: matrix.os == 'Windows' | |
| env: | |
| POSTGRESQL_VERSION: 18 | |
| run: | | |
| choco install postgresql${POSTGRESQL_VERSION} \ | |
| --params "/Password:$ADBC_JDBC_POSTGRESQL_PASSWORD" \ | |
| --ia "--enable-components server,commandlinetools --extract-only 1" \ | |
| --no-progress | |
| export PG_BINDIR=$("$PROGRAMFILES/PostgreSQL/${POSTGRESQL_VERSION}/bin/pg_config.exe" --bindir) | |
| echo "$PG_BINDIR" | tee -a $GITHUB_PATH | |
| - name: Install Dependencies | |
| if: matrix.os == 'macOS' | |
| env: | |
| POSTGRESQL_VERSION: 18 | |
| run: | | |
| export HOMEBREW_GITHUB_ACTIONS=1 | |
| export HOMEBREW_NO_ENV_HINTS=1 | |
| export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 | |
| export HOMEBREW_NO_INSTALL_CLEANUP=1 | |
| export HOMEBREW_NO_INSTALL_UPGRADE=1 | |
| brew install --quiet postgresql@${POSTGRESQL_VERSION} | |
| brew link --quiet --overwrite postgresql@${POSTGRESQL_VERSION} | |
| - name: Start Dependencies | |
| if: matrix.os == 'Windows' || matrix.os == 'macOS' | |
| run: | | |
| echo "$ADBC_JDBC_POSTGRESQL_PASSWORD" > "$RUNNER_TEMP/postgres_password" | |
| initdb \ | |
| --pgdata="$RUNNER_TEMP/pgdata" \ | |
| --username "$ADBC_JDBC_POSTGRESQL_USER" \ | |
| --pwfile="$RUNNER_TEMP/postgres_password" \ | |
| --auth="scram-sha-256" \ | |
| --encoding="UTF-8" \ | |
| --locale="en_US.UTF-8" \ | |
| --no-instructions | |
| pg_ctl start --pgdata="$RUNNER_TEMP/pgdata" | |
| - name: Download thirdparty driver | |
| if: matrix.os == 'Linux' && matrix.arch == 'amd64' | |
| run: | | |
| wget https://dbc-cdn.columnar.tech/mssql/v1.4.0/mssql_linux_amd64_v1.4.0.tar.gz | |
| echo "89371ba78ffa8d5037d2a4d5331bc8f125598774e1da6e5b46b3af45a34e288b mssql_linux_amd64_v1.4.0.tar.gz" > mssql_linux_amd64_v1.4.0.tar.gz.sha256 | |
| sha256sum -c mssql_linux_amd64_v1.4.0.tar.gz.sha256 | |
| tar xvf mssql_linux_amd64_v1.4.0.tar.gz | |
| mkdir -p ~/.config/adbc/drivers/ | |
| mv libadbc_driver_mssql.so ~/.config/adbc/drivers/ | |
| echo "manifest_version = 1" > ~/.config/adbc/drivers/mssql.toml | |
| echo "[Driver]" >> ~/.config/adbc/drivers/mssql.toml | |
| echo "shared = '$HOME/.config/adbc/drivers/libadbc_driver_mssql.so'" >> ~/.config/adbc/drivers/mssql.toml | |
| cat ~/.config/adbc/drivers/mssql.toml | |
| - name: Test | |
| run: | | |
| 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 |