# 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: 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: 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:
      ["/bin/bash", "-c",
       "git config --global --add safe.directory /arrow-java &&
        /arrow-java/ci/scripts/jni_manylinux_build.sh /arrow-java /arrow /build/java /arrow-java/jni"]
