# 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.

# Usage
# -----
#
# The docker compose file is parametrized using environment variables, the
# defaults are set in .env file.
#
# Example:
# $ ARCH=arm64v8 docker compose build java
# $ ARCH=arm64v8 docker compose run java

volumes:
  ccache-cache:
    name: ccache-cache
  maven-cache:
    name: maven-cache

services:
  ubuntu:
    # Build and test arrow-java on Ubuntu.
    #
    # Usage:
    #   docker compose build ubuntu
    #   docker compose run ubuntu
    # Parameters:
    #   MAVEN: 3.9.9
    #   JDK: 11, 17, 21
    image: ${ARCH}/maven:${MAVEN}-eclipse-temurin-${JDK}
    volumes:
      - .:/arrow-java:delegated
      - ${DOCKER_VOLUME_PREFIX}maven-cache:/root/.m2:delegated
    command:
      /bin/bash -c "
        /arrow-java/ci/scripts/build.sh /arrow-java /build /jni &&
        /arrow-java/ci/scripts/test.sh /arrow-java /build /jni"

  conda-jni-cdata:
    # Builds and tests just the C Data Interface JNI library and JARs.
    # (No dependencies on arrow-cpp.)
    # This build isn't meant for distribution. It's for testing only.
    #
    # 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/jni_build.sh /arrow-java /build/jni /build /jni &&
        /arrow-java/ci/scripts/build.sh /arrow-java /build /jni &&
        /arrow-java/ci/scripts/test.sh /arrow-java /build /jni"

  vcpkg-jni:
    # Builds all the JNI libraries, but not the JARs.
    # (Requires arrow-cpp.)
    # The artifacts from this build are meant to be used for packaging.
    #
    # Usage:
    #   docker compose build vcpkg-jni
    #   docker compose run vcpkg-jni
    image: ${REPO}:${ARCH}-vcpkg-jni-${VCPKG}
    build:
      context: .
      dockerfile: ci/docker/vcpkg-jni.dockerfile
      cache_from:
        - ${REPO}:${ARCH}-vcpkg-jni-${VCPKG}
      args:
        base: ${ARROW_REPO}:${ARCH}-cpp-jni-${VCPKG}
    volumes:
      - .:/arrow-java:delegated
      - ${ARROW_REPO_ROOT}:/arrow:delegated
      - ${DOCKER_VOLUME_PREFIX}ccache-cache:/ccache:delegated
      - ${DOCKER_VOLUME_PREFIX}maven-cache:/root/.m2:delegated
    environment:
      ARROW_JAVA_CDATA: "ON"
      CCACHE_DIR: "/ccache"
    command:
      ["git config --global --add safe.directory /arrow-java && \
        /arrow-java/ci/scripts/jni_manylinux_build.sh /arrow-java /arrow /build/java /arrow-java/jni"]
