# 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, 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_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_S3=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
    - $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
    # Disabled until either ORC-480 or ORC-561 is fixed
    - ARROW_TRAVIS_ORC=0
    - 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="
