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

sudo: required
dist: xenial

services:
  - docker

cache:
  directories:
    - $HOME/.ccache
    - $HOME/.m2  # Maven

env:
  - CCACHE_COMPRESS: 1
  - CCACHE_COMPRESSLEVEL: 5

git:
  # ARROW-3083: We use a higher clone depth to also have the latest tag in the cloned history.
  depth: 250

before_install:
  - source ci/travis/before-install.sh

matrix:
  fast_finish: true
  include:
  - name: "Lint, Release tests"
    os: linux
    language: python
    python: "3.6"
    before_script:
    # Always run RAT checks, in case another build in matrix breaks RAT
    - $TRAVIS_BUILD_DIR/ci/travis_release_audit.sh
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_lint.sh
    - $TRAVIS_BUILD_DIR/ci/travis_release_test.sh
  - name: "C++ unit tests w/ clang 7.0, system packages"
    os: linux
    language: cpp
    before_script:
    - if [ $ARROW_CI_CPP_AFFECTED != "1" ]; then exit; fi
    - git submodule update --init
    - docker-compose build --pull cpp-system-deps
    script:
    - docker-compose run cpp-system-deps
  # Separating Valgrind and C++ coverage makes individual jobs shorter
  - name: "C++ unit tests w/ conda-forge toolchain, coverage"
    compiler: gcc
    language: cpp
    os: linux
    jdk: openjdk8
    env:
    - ARROW_BUILD_WARNING_LEVEL=CHECKIN
    - ARROW_TRAVIS_COVERAGE=1
    - ARROW_TRAVIS_FLIGHT=1
    - ARROW_TRAVIS_GANDIVA=1
    - ARROW_TRAVIS_GANDIVA_JAVA=1
    - ARROW_TRAVIS_ORC=1
    - ARROW_TRAVIS_PARQUET=1
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_S3=1
    - ARROW_TRAVIS_USE_SYSTEM_JAVA=1
    - ARROW_TRAVIS_USE_TOOLCHAIN=1
    # TODO: This fails in re2 code
    # - ARROW_TRAVIS_VALGRIND=1
    - ARROW_TRAVIS_VERBOSE=1
    # ARROW-6509: disable MIMALLOC on xenial
    # - ARROW_TRAVIS_MIMALLOC=1
    before_script:
    - if [ $ARROW_CI_CPP_AFFECTED != "1" ] && [ $ARROW_CI_JAVA_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    # If either C++ or Python changed, we must install the C++ libraries
    - git submodule update --init
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_cpp.sh || travis_terminate 1
    - $TRAVIS_BUILD_DIR/ci/travis_script_gandiva_java.sh || travis_terminate 1
    - $TRAVIS_BUILD_DIR/ci/travis_upload_cpp_coverage.sh || travis_terminate 1
  - name: "Python 3.6 unit tests w/ Valgrind, conda-forge toolchain, coverage"
    compiler: gcc
    language: cpp
    os: linux
    jdk: openjdk8
    env:
    # Valgrind is needed for the Plasma store tests
    - ARROW_BUILD_WARNING_LEVEL=CHECKIN
    - ARROW_TRAVIS_COVERAGE=1
    - ARROW_TRAVIS_FLIGHT=1
    - ARROW_TRAVIS_OPTIONAL_INSTALL=1
    - ARROW_TRAVIS_PYTHON_DOCS=1
    - ARROW_TRAVIS_PYTHON_JVM=1
    - ARROW_TRAVIS_USE_SYSTEM_JAVA=1
    - ARROW_TRAVIS_USE_TOOLCHAIN=1
    - ARROW_TRAVIS_VALGRIND=1
    # TODO(wesm): Run the benchmarks outside of Travis
    # - ARROW_TRAVIS_PYTHON_BENCHMARKS=1
    before_script:
    - if [ $ARROW_CI_PYTHON_AFFECTED != "1" ] && [ $ARROW_CI_DOCS_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    - $TRAVIS_BUILD_DIR/ci/travis_install_toolchain.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_java.sh || travis_terminate 1
    - export ARROW_TRAVIS_PYTHON_GANDIVA=1
    # Only run Plasma tests with valgrind in one of the Python builds because
    # they are slow
    - export PLASMA_VALGRIND=1
    - $TRAVIS_BUILD_DIR/ci/travis_script_python.sh 3.6
    - $TRAVIS_BUILD_DIR/ci/travis_upload_cpp_coverage.sh
  - name: "[OS X] C++ w/ XCode 9.3"
    compiler: clang
    osx_image: xcode9.3
    os: osx
    cache:
    addons:
    env:
    - ARROW_TRAVIS_USE_TOOLCHAIN=1
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_FLIGHT=1
    - ARROW_TRAVIS_ORC=1
    - ARROW_TRAVIS_PARQUET=1
    # TODO(ARROW-4763): llvm and llvmdev packages are in conflict:
    # https://github.com/conda-forge/llvmdev-feedstock/issues/60
    # - ARROW_TRAVIS_GANDIVA=1
    # - ARROW_TRAVIS_GANDIVA_JAVA=1
    - ARROW_TRAVIS_OPTIONAL_INSTALL=1
    - ARROW_TRAVIS_VERBOSE=1
    - ARROW_BUILD_WARNING_LEVEL=CHECKIN
    - ARROW_TRAVIS_MIMALLOC=1
    before_script:
    - if [ $ARROW_CI_CPP_AFFECTED != "1" ] && [ $ARROW_CI_JAVA_AFFECTED != "1" ]; then exit; fi
    # If either C++ or Python changed, we must install the C++ libraries
    - git submodule update --init
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_cpp.sh || travis_terminate 1
    # Disabled because of ARROW-4763
    # - $TRAVIS_BUILD_DIR/ci/travis_script_gandiva_java.sh
  - name: "[OS X] Python w/ XCode 9.3"
    compiler: clang
    osx_image: xcode9.3
    os: osx
    cache:
    addons:
    env:
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_USE_TOOLCHAIN=1
    - ARROW_BUILD_WARNING_LEVEL=CHECKIN
    - ARROW_TRAVIS_OPTIONAL_INSTALL=1
    - ARROW_TRAVIS_VERBOSE=1
    - MACOSX_DEPLOYMENT_TARGET="10.9"
    before_script:
    script:
    - if [ $ARROW_CI_PYTHON_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_script_python.sh 3.6
  - name: "Java OpenJDK8 and OpenJDK11"
    language: cpp
    os: linux
    before_script:
    - if [ $ARROW_CI_JAVA_AFFECTED != "1" ]; then exit; fi
    - docker-compose build --pull java-all-jdks
    script:
    - docker-compose run java-all-jdks
  - name: "Integration w/ OpenJDK 8, conda-forge toolchain"
    language: java
    os: linux
    env: ARROW_TEST_GROUP=integration
    jdk: openjdk8
    env:
    - ARROW_TRAVIS_USE_TOOLCHAIN=1
    - ARROW_TRAVIS_FLIGHT=1
    - ARROW_TRAVIS_INTEGRATION=1
    # TODO(ARROW-4764): Using system java and plasma built with conda doesn't work
    #- ARROW_TRAVIS_PLASMA=1
    #- ARROW_TRAVIS_PLASMA_JAVA_CLIENT=1
    - ARROW_TRAVIS_MIMALLOC=1
    before_script:
    - if [ $ARROW_CI_INTEGRATION_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    # C++: Only build integration targets
    - export ARROW_CPP_BUILD_TARGETS=arrow-integration
    - export ARROW_TRAVIS_OPTIONAL_INSTALL=1
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh
    # Javascript
    - nvm install 11.12
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_js.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_integration.sh
    # - $TRAVIS_BUILD_DIR/ci/travis_script_plasma_java_client.sh
  - name: "NodeJS"
    language: node_js
    os: linux
    node_js:
    - '11.12'
    before_script:
    - if [ $ARROW_CI_JS_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_js.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_js.sh
  - name: "C++ & GLib & Ruby w/ gcc 5.4"
    compiler: gcc
    os: linux
    env:
    - ARROW_TRAVIS_ORC=1
    - ARROW_TRAVIS_GANDIVA=1
    - ARROW_TRAVIS_PARQUET=1
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_MIMALLOC=1
    before_script:
    - if [ $ARROW_CI_RUBY_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh --only-library
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_c_glib.sh
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_ruby.sh
    script:
    - if [ $ARROW_CI_C_GLIB_AFFECTED = "1" ]; then $TRAVIS_BUILD_DIR/ci/travis_script_c_glib.sh; fi
    - $TRAVIS_BUILD_DIR/ci/travis_script_ruby.sh
  - name: "[OS X] C++ & GLib & Ruby w/ XCode 10.2 & Homebrew"
    compiler: clang
    osx_image: xcode10.2
    os: osx
    env:
    - ARROW_TRAVIS_FLIGHT=1
    - ARROW_TRAVIS_GANDIVA=1
    - ARROW_TRAVIS_ORC=1
    - ARROW_TRAVIS_PARQUET=1
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_PYTHON=1
    - ARROW_TRAVIS_VERBOSE=1
    - ARROW_TRAVIS_MIMALLOC=1
    cache:
    addons:
    before_script:
    - if [ $ARROW_CI_RUBY_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_osx.sh
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh --only-library --homebrew
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_c_glib.sh
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_ruby.sh
    script:
    - if [ $ARROW_CI_C_GLIB_AFFECTED = "1" ]; then $TRAVIS_BUILD_DIR/ci/travis_script_c_glib.sh; fi
    - $TRAVIS_BUILD_DIR/ci/travis_script_ruby.sh
  - name: Rust
    language: rust
    cache: cargo
    addons:
      apt:
        packages:
          - libcurl4-openssl-dev
          - libelf-dev
          - libdw-dev
          - binutils-dev
          - libssl-dev
          - cmake
    before_script:
      - if [ $ARROW_CI_RUST_AFFECTED != "1" ]; then exit; fi
      - $TRAVIS_BUILD_DIR/ci/travis_install_cargo.sh
    script:
      - RUSTUP_TOOLCHAIN=nightly $TRAVIS_BUILD_DIR/ci/travis_script_rust.sh
    before_cache:
      cargo install cargo-tarpaulin -f
    after_success:
      - pushd ${TRAVIS_BUILD_DIR}/rust
      # Run coverage for codecov.io
      - export ARROW_TEST_DATA=$TRAVIS_BUILD_DIR/testing/data
      - export PARQUET_TEST_DATA=$TRAVIS_BUILD_DIR/cpp/submodules/parquet-testing/data
      - cargo tarpaulin --out Xml
      - bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports"
  - name: Go
    language: go
    go_import_path: github.com/apache/arrow
    os: linux
    go:
    - 1.12.x
    before_script:
    - if [ $ARROW_CI_GO_AFFECTED != "1" ]; then exit; fi
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_go.sh
    after_success:
    - pushd ${TRAVIS_BUILD_DIR}/go/arrow
    - bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports"
  - name: R (with and without libarrow)
    language: r
    cache: packages
    dist: xenial
    env:
    - ARROW_TRAVIS_PARQUET=1
    - ARROW_TRAVIS_USE_SYSTEM=1
    - ARROW_TRAVIS_MIMALLOC=1
    before_install:
    # Have to copy-paste this here because of how R's build steps work
    - eval `python $TRAVIS_BUILD_DIR/ci/detect-changes.py`
    - if [ $ARROW_CI_R_AFFECTED != "1" ]; then exit; fi
    # First check that it builds without libarrow
    - pushd ${TRAVIS_BUILD_DIR}/r
    - R -e 'install.packages("remotes"); remotes::install_deps(dep = TRUE)'
    - R CMD build .
    - R CMD check arrow_*tar.gz
    - rm arrow_*tar.gz
    - popd
    # Now, proceed to install the c++ lib and the rest of the job
    - |
        if [ $TRAVIS_OS_NAME == "linux" ]; then
          sudo bash -c "echo -e 'Acquire::Retries 10; Acquire::http::Timeout \"20\";' > /etc/apt/apt.conf.d/99-travis-retry"
          sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
          sudo apt-get update -qq
        fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    # On Xenial, installing clang-7 leads these to get removed,
    # but that breaks R, so let's reinstall them.
    - sudo apt-get install gfortran gfortran-5 libblas-dev libgfortran-5-dev libgfortran3 liblapack-dev liblapack3
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh --only-library
    - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TRAVIS_BUILD_DIR/cpp-install/lib
    - export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$TRAVIS_BUILD_DIR/cpp-install/lib/pkgconfig
    - export CXX11FLAGS=-Wall
    # Add this env var so we can assert in the tests that the library is installed correctly
    - export TEST_R_WITH_ARROW=TRUE
    - pushd ${TRAVIS_BUILD_DIR}/r
    after_success:
    - Rscript ../ci/travis_upload_r_coverage.R

after_failure:
  - source ci/travis/after-failure.sh

after_script:
  - source ci/travis/after-script.sh

env:
  global:
  - secure: "GcrPtsKUCgNY7HKYjWlHQo8SiFrShDvdZSU8t1m1FJrE+UfK0Dgh9zXmAausM8GmhqSwkF0q4UbLQf2uCnSITWKeEPAL8Mo9eu4ib+ikJx/b3Sk81frgW5ADoHfW1Eyqd8xJNIMwMegJOtRLSDqiXh1CvMlKnY8PyTOGM2DgN9ona/v6p9OFH9Qs0JhBRVXAn0S4ztjumck8E56+01hqRfxbZ88pTfpKghBxYp9PJaMjtGdomjVWlqPaWaWJj+KptT8inV9NK+TVYKx0dXWD+S1Vgr1PytQnLdILOYV23gsOBYqn33ByF/yADl4m3hUjU/qeT0Fi7aWxmVpj+oTJISOSH5N8nIsuNH8mQk2ZzzXHfV7btFvP+cOPRczadoKkT6D6cHA8nQ7b0dphC6bl6SAeSfc/cbhRT+fYnIjg8jFXC8jlyWBr7LR6GXVpc0bND7i300ITo0FuRJhy2OxqPtGo3dKLE7eAcv78tuO0OYJ/kol1PEqFdFkbYbNVbg/cFpbGqiCXDsOtPDbAGBv69YnXdVowSxxs8cRGjSkDydv6ZSytb/Zd4lH/KAomcFNk8adx12O1Lk4sbmVav1cGig5P6OcQKS0jC5IiRb4THcQzVzAkXXbaafKm5sru/NoYxhzmkyhkOc11nTYHKVng+XKWzLCNn7pTTSLitp5+xa4="
