Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
199 changes: 149 additions & 50 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,27 +35,14 @@ permissions:

env:
DOCKER_VOLUME_PREFIX: ".docker/"
MAVEN: 3.9.9

jobs:
ubuntu:
name: AMD64 ${{ matrix.name }} JDK ${{ matrix.jdk }} Maven ${{ matrix.maven }}
build-java:
name: Build Java artifacts
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
jdk: [17, 21, 23]
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 }}
steps:
- name: Checkout Arrow
uses: actions/checkout@v7
Expand All @@ -65,85 +52,197 @@ jobs:
- name: Cache Docker Volumes
uses: actions/cache@v6
with:
path: .docker
key: maven-${{ matrix.jdk }}-${{ matrix.maven }}-${{ hashFiles('compose.yaml', '**/pom.xml') }}
restore-keys: maven-${{ matrix.jdk }}-${{ matrix.maven }}-
- name: Execute Docker Build
path: .docker/maven-cache
key: java-build-17-${{ env.MAVEN }}-${{ hashFiles('compose.yaml', '**/pom.xml') }}
restore-keys: java-build-17-${{ env.MAVEN }}-
- name: Build without tests
env:
# Enables build caching, but not strictly required
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
JDK: 17
run: |
docker compose run \
--rm \
-e CI=true \
-e "DEVELOCITY_ACCESS_KEY=$DEVELOCITY_ACCESS_KEY" \
${{ matrix.image }}
ubuntu-artifacts
sudo chown -R "$(id -u):$(id -g)" .docker
- name: Pack reusable artifacts
run: |
tar -czf java-build.tgz \
.docker/java-build \
.docker/maven-cache/repository/org/apache/arrow
- name: Upload reusable artifacts
uses: actions/upload-artifact@v5
with:
name: java-build
path: java-build.tgz
retention-days: 1
Comment thread
xborder marked this conversation as resolved.

macos:
name: ${{ matrix.arch }} macOS ${{ matrix.macos }} Java JDK ${{ matrix.jdk }}
runs-on: macos-${{ matrix.macos }}
test-java:
name: ${{ matrix.name || format('AMD64 Ubuntu JDK {0} Maven 3.9.9', matrix.jdk) }}
needs: build-java
runs-on: ${{ matrix.os }}
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
jdk: [17, 21, 23]
os: [ubuntu-latest]
include:
- arch: AMD64
- os: ubuntu-latest
compose_service: ubuntu-test-prebuilt
- name: AMD64 macOS 15-intel Java JDK 17
os: macos-15-intel
jdk: 17
- name: AArch64 macOS latest Java JDK 17
os: macos-latest
jdk: 17
macos: 15-intel
- arch: AArch64
- name: AMD64 Windows Server 2022 Java JDK 17
os: windows-latest
jdk: 17
macos: latest
env:
JDK: ${{ matrix.jdk }}
steps:
- name: Checkout Arrow
uses: actions/checkout@v7
with:
fetch-depth: 0
submodules: recursive
- name: Set up Java
if: ${{ !matrix.compose_service }}
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: ${{ matrix.jdk }}
cache: 'maven'
- name: Build
- name: Cache Docker Volumes
if: ${{ matrix.compose_service }}
uses: actions/cache@v6
with:
path: .docker/maven-cache
key: java-build-17-${{ env.MAVEN }}-${{ hashFiles('compose.yaml', '**/pom.xml') }}
restore-keys: java-build-17-${{ env.MAVEN }}-
- name: Download reusable artifacts
uses: actions/download-artifact@v6
with:
name: java-build
- name: Restore reusable artifacts
shell: bash
run: |
rm -rf \
.docker/java-build \
.docker/maven-cache/repository/org/apache/arrow
tar -xzf java-build.tgz
- name: Restore reusable artifacts for hosted runner
if: ${{ !matrix.compose_service }}
shell: bash
run: |
cp -a .docker/java-build/build build
mkdir -p "${HOME}/.m2/repository/org/apache"
cp -a .docker/maven-cache/repository/org/apache/arrow "${HOME}/.m2/repository/org/apache/"
- name: Test prebuilt artifacts on macOS/Windows
if: ${{ !matrix.compose_service }}
shell: bash
env:
ARROW_JAVA_TEST_PREBUILT: "ON"
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: ci/scripts/build.sh . build jni
- name: Test
run: ci/scripts/test.sh . build jni
- name: Test prebuilt artifacts on Ubuntu Docker
if: ${{ matrix.compose_service }}
shell: bash
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: ci/scripts/test.sh . build jni
run: |
docker compose run \
--rm \
-e CI=true \
-e "DEVELOCITY_ACCESS_KEY=$DEVELOCITY_ACCESS_KEY" \
${{ matrix.compose_service }}

windows:
name: AMD64 Windows Server 2022 Java JDK ${{ matrix.jdk }}
runs-on: windows-latest
build-cdata:
name: Build C Data artifacts
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 30
env:
JDK: 17
steps:
- name: Checkout Arrow
uses: actions/checkout@v7
with:
fetch-depth: 0
submodules: recursive
- name: Cache Docker Volumes
uses: actions/cache@v6
with:
path: .docker/maven-cache
key: cdata-${{ env.JDK }}-${{ env.MAVEN }}-${{ hashFiles('compose.yaml', '**/pom.xml') }}
restore-keys: cdata-${{ env.JDK }}-${{ env.MAVEN }}-
- name: Build C Data without tests
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: |
docker compose run \
--rm \
-e CI=true \
-e "DEVELOCITY_ACCESS_KEY=$DEVELOCITY_ACCESS_KEY" \
cdata-artifacts
sudo chown -R "$(id -u):$(id -g)" .docker
- name: Pack reusable C Data artifacts
run: |
tar -czf cdata-build.tgz \
.docker/cdata-build \
.docker/cdata-jni-dist \
.docker/maven-cache/repository/org/apache/arrow
- name: Upload reusable C Data artifacts
uses: actions/upload-artifact@v5
with:
name: cdata-build
path: cdata-build.tgz
retention-days: 1

test-cdata:
name: AMD64 Conda JNI JDK ${{ matrix.jdk }} Maven 3.9.9
needs: build-cdata
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
jdk: [17]
jdk: [17, 21, 23]
env:
JDK: ${{ matrix.jdk }}
steps:
- name: Checkout Arrow
uses: actions/checkout@v7
with:
fetch-depth: 0
submodules: recursive
- name: Set up Java
uses: actions/setup-java@v5
- name: Cache Docker Volumes
uses: actions/cache@v6
with:
java-version: ${{ matrix.jdk }}
distribution: 'temurin'
cache: 'maven'
- name: Build
shell: bash
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: ci/scripts/build.sh . build jni
- name: Test
shell: bash
path: .docker/maven-cache
key: cdata-17-${{ env.MAVEN }}-${{ hashFiles('compose.yaml', '**/pom.xml') }}
restore-keys: cdata-17-${{ env.MAVEN }}-
- name: Download reusable C Data artifacts
uses: actions/download-artifact@v6
with:
name: cdata-build
- name: Restore reusable C Data artifacts
run: |
rm -rf \
.docker/cdata-build \
.docker/cdata-jni-dist \
.docker/maven-cache/repository/org/apache/arrow
tar -xzf cdata-build.tgz
- name: Test C Data without compiler lifecycle
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
run: ci/scripts/test.sh . build jni
run: |
docker compose run \
--rm \
-e CI=true \
-e "DEVELOCITY_ACCESS_KEY=$DEVELOCITY_ACCESS_KEY" \
cdata-test-prebuilt
2 changes: 1 addition & 1 deletion ci/scripts/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ cp -r "${source_dir}/dev" "${build_dir}"
# crawl back up to the top. GNU realpath has --relative-to but this does not
# work on macOS

poms=$(find "${source_dir}" -not \( -path "${source_dir}"/build -prune \) -type f -name pom.xml)
poms=$(find "${source_dir}" \( -path "${source_dir}"/build -o -path "${source_dir}"/.docker \) -prune -o -type f -name pom.xml -print)
if [[ "$OSTYPE" == "darwin"* ]]; then
poms=$(echo "$poms" | xargs -n1 python -c "import sys; import os.path; print(os.path.relpath(sys.argv[1], '${source_dir}'))")
else
Expand Down
83 changes: 75 additions & 8 deletions ci/scripts/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
# specific language governing permissions and limitations
# under the License.

set -ex
set -exo pipefail

if [[ "${ARROW_JAVA_TEST:-ON}" != "ON" ]]; then
exit
Expand All @@ -31,14 +31,76 @@ if [ -d "${java_jni_dist_dir}" ]; then
java_jni_dist_dir="$(cd "${java_jni_dist_dir}" && pwd)"
fi

mvn="mvn -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
# Use `2 * ncores` threads
mvn="${mvn} -T 2C"
mvn="${mvn} -Denforcer.skip=true"
mvn=(
mvn
-B
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
-T
2C
-Denforcer.skip=true
)

run_tests() {
if [[ "${ARROW_JAVA_TEST_PREBUILT:-OFF}" = "ON" ]]; then
run_prebuilt_tests "${@}" -DfailIfNoTests=false surefire:test
else
"${@}" test
fi
}

run_prebuilt_tests() {
local log
log=$(mktemp)

"${@}" | tee "${log}"

if grep -E "Compiling [0-9]+ source files?" "${log}"; then
echo "Unexpected compilation occurred while running prebuilt tests."
exit 1
fi

if ! grep -q "Tests run:" "${log}"; then
echo "No surefire test summary found; tests may have been skipped."
exit 1
fi

rm -f "${log}"
}

pushd "${build_dir}"

${mvn} -Darrow.test.dataRoot="${source_dir}/testing/data" test
if [[ "${ARROW_JAVA_TEST_BASE:-ON}" = "ON" ]]; then
if [[ "${ARROW_JAVA_TEST_PREBUILT:-OFF}" = "ON" ]]; then
run_prebuilt_tests \
"${mvn[@]}" \
-Darrow.test.dataRoot="${source_dir}/testing/data" \
-DfailIfNoTests=false \
-pl "!vector" \
surefire:test
# Direct Surefire skips Vector's lifecycle-bound allocator test passes.
run_prebuilt_tests \
"${mvn[@]}" \
-Darrow.test.dataRoot="${source_dir}/testing/data" \
-DfailIfNoTests=false \
-pl vector \
org.apache.maven.plugins:maven-surefire-plugin:test@default-test
run_prebuilt_tests \
"${mvn[@]}" \
-Darrow.test.dataRoot="${source_dir}/testing/data" \
-DfailIfNoTests=false \
-pl vector \
org.apache.maven.plugins:maven-surefire-plugin:test@run-unsafe
run_prebuilt_tests \
"${mvn[@]}" \
-DfailIfNoTests=false \
-pl memory/memory-core \
org.apache.maven.plugins:maven-surefire-plugin:test@opens-tests
Comment thread
xborder marked this conversation as resolved.
else
run_tests \
"${mvn[@]}" \
-Darrow.test.dataRoot="${source_dir}/testing/data"
fi
fi

projects=()
if [ "${ARROW_JAVA_JNI}" = "ON" ]; then
Expand All @@ -47,7 +109,8 @@ if [ "${ARROW_JAVA_JNI}" = "ON" ]; then
projects+=(gandiva)
fi
if [ "${#projects[@]}" -gt 0 ]; then
${mvn} test \
run_tests \
"${mvn[@]}" \
-Parrow-jni \
-pl "$(
IFS=,
Expand All @@ -57,7 +120,11 @@ if [ "${#projects[@]}" -gt 0 ]; then
fi

if [ "${ARROW_JAVA_CDATA}" = "ON" ]; then
${mvn} test -Parrow-c-data -pl c -Darrow.c.jni.dist.dir="${java_jni_dist_dir}"
run_tests \
"${mvn[@]}" \
-Parrow-c-data \
-pl c \
-Darrow.c.jni.dist.dir="${java_jni_dist_dir}"
fi

popd
Loading
Loading