This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-java.git


The following commit(s) were added to refs/heads/main by this push:
     new d650aa03 GH-14: Add JNI CI test (#441)
d650aa03 is described below

commit d650aa03229350e3c7edfc55defd305585fc9bc8
Author: David Li <[email protected]>
AuthorDate: Wed Dec 4 01:28:21 2024 -0500

    GH-14: Add JNI CI test (#441)
    
    Fixes #14.
---
 .env                           |  2 +-
 .github/workflows/test.yml     | 11 ++++--
 ci/docker/conda-jni.dockerfile | 30 ++++++++++++++++
 ci/scripts/java_jni_build.sh   | 80 ++++++++++++++++++++++++++++++++++++++++++
 docker-compose.yml             | 42 ++++++++++++++++++----
 5 files changed, 155 insertions(+), 10 deletions(-)

diff --git a/.env b/.env
index bb9f63ab..b50a16eb 100644
--- a/.env
+++ b/.env
@@ -47,4 +47,4 @@ ULIMIT_CORE=-1
 
 # Default versions for various dependencies
 JDK=11
-MAVEN=3.9.6
+MAVEN=3.9.9
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 473ce84c..69c8db0f 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -38,7 +38,7 @@ env:
 
 jobs:
   ubuntu:
-    name: AMD64 Ubuntu 22.04 JDK ${{ matrix.jdk }} Maven ${{ matrix.maven }}
+    name: AMD64 ${{ matrix.name }} JDK ${{ matrix.jdk }} Maven ${{ 
matrix.maven }}
     runs-on: ubuntu-latest
     if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
     timeout-minutes: 30
@@ -46,8 +46,13 @@ jobs:
       fail-fast: false
       matrix:
         jdk: [11, 17, 21, 22]
-        maven: [3.9.6]
-        image: [java]
+        maven: [3.9.9]
+        image: [ubuntu, conda-jni-cdata]
+        include:
+          - image: ubuntu
+            name: "Ubuntu"
+          - image: conda-jni-cdata
+            name: "Conda JNI"
     env:
       JDK: ${{ matrix.jdk }}
       MAVEN: ${{ matrix.maven }}
diff --git a/ci/docker/conda-jni.dockerfile b/ci/docker/conda-jni.dockerfile
new file mode 100644
index 00000000..e14db736
--- /dev/null
+++ b/ci/docker/conda-jni.dockerfile
@@ -0,0 +1,30 @@
+# 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.
+
+FROM ghcr.io/mamba-org/micromamba:ubuntu24.04
+
+ARG jdk=11
+ARG maven=3.9.9
+
+RUN micromamba install -y \
+        -c conda-forge \
+        cmake \
+        compilers \
+        maven=${maven} \
+        ninja \
+        openjdk=${jdk} && \
+    micromamba clean --all
diff --git a/ci/scripts/java_jni_build.sh b/ci/scripts/java_jni_build.sh
new file mode 100755
index 00000000..7b63dbee
--- /dev/null
+++ b/ci/scripts/java_jni_build.sh
@@ -0,0 +1,80 @@
+#!/usr/bin/env bash
+# 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.
+
+set -eo pipefail
+
+arrow_dir=${1}
+arrow_install_dir=${2}
+build_dir=${3}/java_jni
+# The directory where the final binaries will be stored when scripts finish
+dist_dir=${4}
+prefix_dir="${build_dir}/java-jni"
+
+echo "=== Clear output directories and leftovers ==="
+# Clear output directories and leftovers
+rm -rf ${build_dir}
+
+echo "=== Building Arrow Java C Data Interface native library ==="
+mkdir -p "${build_dir}"
+pushd "${build_dir}"
+
+case "$(uname)" in
+  Linux)
+    n_jobs=$(nproc)
+    ;;
+  Darwin)
+    n_jobs=$(sysctl -n hw.logicalcpu)
+    ;;
+  *)
+    n_jobs=${NPROC:-1}
+    ;;
+esac
+
+: ${ARROW_JAVA_BUILD_TESTS:=${ARROW_BUILD_TESTS:-OFF}}
+: ${CMAKE_BUILD_TYPE:=release}
+cmake \
+  -DARROW_JAVA_JNI_ENABLE_DATASET=${ARROW_DATASET:-OFF} \
+  -DARROW_JAVA_JNI_ENABLE_GANDIVA=${ARROW_GANDIVA:-OFF} \
+  -DARROW_JAVA_JNI_ENABLE_ORC=${ARROW_ORC:-OFF} \
+  -DBUILD_TESTING=${ARROW_JAVA_BUILD_TESTS} \
+  -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} \
+  -DCMAKE_PREFIX_PATH=${arrow_install_dir} \
+  -DCMAKE_INSTALL_PREFIX=${prefix_dir} \
+  -DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD:-OFF} \
+  -DProtobuf_USE_STATIC_LIBS=ON \
+  -GNinja \
+  ${JAVA_JNI_CMAKE_ARGS:-} \
+  ${arrow_dir}
+export CMAKE_BUILD_PARALLEL_LEVEL=${n_jobs}
+cmake --build . --config ${CMAKE_BUILD_TYPE}
+if [ "${ARROW_JAVA_BUILD_TESTS}" = "ON" ]; then
+  ctest \
+    --output-on-failure \
+    --parallel ${n_jobs} \
+    --timeout 300
+fi
+cmake --build . --config ${CMAKE_BUILD_TYPE} --target install
+popd
+
+mkdir -p ${dist_dir}
+# For Windows. *.dll are installed into bin/ on Windows.
+if [ -d "${prefix_dir}/bin" ]; then
+  mv ${prefix_dir}/bin/* ${dist_dir}/
+else
+  mv ${prefix_dir}/lib/* ${dist_dir}/
+fi
diff --git a/docker-compose.yml b/docker-compose.yml
index 103f2f3a..ae378865 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -30,18 +30,48 @@ volumes:
     name: maven-cache
 
 services:
-  java:
+  ubuntu:
     # Usage:
-    #   docker compose build java
-    #   docker compose run java
+    #   docker compose build ubuntu
+    #   docker compose run ubuntu
     # Parameters:
-    #   MAVEN: 3.9.6
+    #   MAVEN: 3.9.9
     #   JDK: 11, 17, 21
     image: ${ARCH}/maven:${MAVEN}-eclipse-temurin-${JDK}
-    volumes: &java-volumes
+    volumes:
       - .:/arrow-java:delegated
       - ${DOCKER_VOLUME_PREFIX}maven-cache:/root/.m2:delegated
-    command: &java-command >
+    command:
       /bin/bash -c "
         /arrow-java/ci/scripts/java_build.sh /arrow-java /build &&
         /arrow-java/ci/scripts/java_test.sh /arrow-java /build"
+
+  conda-jni-cdata:
+    # Usage:
+    #   docker compose build conda-jni-cdata
+    #   docker compose run conda-jni-cdata
+    # Parameters:
+    #   MAVEN: 3.9.9
+    #   JDK: 11, 17, 21
+    image: ${REPO}:${ARCH}-conda-java-${JDK}-maven-${MAVEN}-jni-integration
+    build:
+      context: .
+      dockerfile: ci/docker/conda-jni.dockerfile
+      cache_from:
+        - ${REPO}:${ARCH}-conda-java-${JDK}-maven-${MAVEN}-jni-integration
+      args:
+        jdk: ${JDK}
+        maven: ${MAVEN}
+    # required to use micromamba with rootless docker
+    # 
https://github.com/mamba-org/micromamba-docker/issues/407#issuecomment-2088523507
+    user: root
+    volumes:
+      - .:/arrow-java:delegated
+      - ${DOCKER_VOLUME_PREFIX}maven-cache:/root/.m2:delegated
+    environment:
+      ARROW_JAVA_CDATA: "ON"
+    command:
+      /bin/bash -c "
+        /arrow-java/ci/scripts/java_jni_build.sh /arrow-java /build/jni /build 
/jni &&
+        /arrow-java/ci/scripts/java_build.sh /arrow-java /build /jni &&
+        /arrow-java/ci/scripts/java_test.sh /arrow-java /build /jni"

Reply via email to