# 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: trusty

services:
  - docker

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

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


before_install:
  # Common pre-install steps for all builds
  - ulimit -c unlimited -S
  - |
      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
  - eval `python $TRAVIS_BUILD_DIR/ci/detect-changes.py`


matrix:
  fast_finish: true
  allow_failures:
  - jdk: oraclejdk9
  include:
  # C++ & Python w/ clang 6.0
  - compiler: gcc
    language: cpp
    os: linux
    jdk: openjdk8
    env:
    - ARROW_TRAVIS_USE_TOOLCHAIN=1
    - ARROW_TRAVIS_VALGRIND=1
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_ORC=1
    - ARROW_TRAVIS_CLANG_FORMAT=1
    - ARROW_TRAVIS_COVERAGE=1
    - ARROW_TRAVIS_PARQUET=1
    - ARROW_TRAVIS_PYTHON_DOCS=1
    - ARROW_BUILD_WARNING_LEVEL=CHECKIN
    - ARROW_TRAVIS_PYTHON_JVM=1
    - ARROW_TRAVIS_JAVA_BUILD_ONLY=1
    # ARROW-2999 Benchmarks are disabled in Travis CI for the time being
    # - ARROW_TRAVIS_PYTHON_BENCHMARKS=1
    - CC="clang-6.0"
    - CXX="clang++-6.0"
    before_script:
    # Always run RAT checks, in case another build in matrix breaks RAT
    - $TRAVIS_BUILD_DIR/ci/travis_release_audit.sh
    # (ARROW_CI_CPP_AFFECTED implies ARROW_CI_PYTHON_AFFECTED)
    - if [ $ARROW_CI_PYTHON_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    - $TRAVIS_BUILD_DIR/ci/travis_lint.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:
    # All test steps are required for accurate C++ coverage info
    - $TRAVIS_BUILD_DIR/ci/travis_script_cpp.sh
    # Build Arrow Java to test the pyarrow<->JVM in-process bridge
    - $TRAVIS_BUILD_DIR/ci/travis_script_java.sh
    # Only run Plasma tests with valgrind in one of the Python builds because
    # they are slow
    - export PLASMA_VALGRIND=0
    - $TRAVIS_BUILD_DIR/ci/travis_script_python.sh 2.7
    - export PLASMA_VALGRIND=1
    - $TRAVIS_BUILD_DIR/ci/travis_script_python.sh 3.6
    - $TRAVIS_BUILD_DIR/ci/travis_upload_cpp_coverage.sh
  # [OS X] C++ & Python w/ XCode 6.4
  - compiler: clang
    language: cpp
    osx_image: xcode6.4
    os: osx
    cache:
    addons:
    env:
    - ARROW_TRAVIS_USE_TOOLCHAIN=1
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_ORC=1
    - ARROW_TRAVIS_PARQUET=1
    - ARROW_BUILD_WARNING_LEVEL=CHECKIN
    before_script:
    - if [ $ARROW_CI_PYTHON_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:
    - if [ $ARROW_CI_CPP_AFFECTED == "1" ]; then $TRAVIS_BUILD_DIR/ci/travis_script_cpp.sh; fi
    - $TRAVIS_BUILD_DIR/ci/travis_script_python.sh 2.7
    - $TRAVIS_BUILD_DIR/ci/travis_script_python.sh 3.6
  # [manylinux1] Python
  - language: cpp
    before_script:
    - if [ $ARROW_CI_PYTHON_AFFECTED == "1" ]; then docker pull quay.io/xhochy/arrow_manylinux1_x86_64_base:latest; fi
    script:
    - if [ $ARROW_CI_PYTHON_AFFECTED == "1" ]; then $TRAVIS_BUILD_DIR/ci/travis_script_manylinux.sh; fi
  # Java w/ OpenJDK 8
  - language: java
    os: linux
    jdk: openjdk8
    before_script:
    - if [ $ARROW_CI_JAVA_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_java.sh
    - $TRAVIS_BUILD_DIR/ci/travis_script_javadoc.sh
  # Java w/ Oracle JDK 9
  - language: java
    os: linux
    jdk: oraclejdk9
    before_script:
    - if [ $ARROW_CI_JAVA_AFFECTED != "1" ]; then exit; fi
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_java.sh
    addons:
      apt:
        packages:
          - oracle-java9-installer
  # Integration w/ OpenJDK 8
  - language: java
    os: linux
    env: ARROW_TEST_GROUP=integration
    jdk: openjdk8
    env:
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_PLASMA_JAVA_CLIENT=1
    - CC="clang-6.0"
    - CXX="clang++-6.0"
    before_script:
    - if [ $ARROW_CI_INTEGRATION_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_linux.sh
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    - nvm install 10.1
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_js.sh
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_integration.sh
    - $TRAVIS_BUILD_DIR/ci/travis_script_plasma_java_client.sh
  # NodeJS
  - language: node_js
    os: linux
    node_js:
    - '10.1'
    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
  # C++ & GLib & Ruby w/ gcc 4.9
  - compiler: gcc
    language: cpp
    os: linux
    env:
    - ARROW_TRAVIS_ORC=1
    - ARROW_TRAVIS_PARQUET=1
    - BUILD_TORCH_EXAMPLE=no
    - CC="gcc-4.9"
    - CXX="g++-4.9"
    before_script:
    - if [ $ARROW_CI_RUBY_AFFECTED != "1" ]; then exit; fi
    - $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
  # [OS X] C++ & GLib & Ruby w/ XCode 8.3 & homebrew
  - compiler: clang
    osx_image: xcode8.3
    os: osx
    env:
    - ARROW_TRAVIS_ORC=1
    cache:
    addons:
    rvm: 2.2
    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
  # Rust
  - language: rust
    cache: cargo
    addons:
      apt:
        packages:
          - libcurl4-openssl-dev
          - libelf-dev
          - libdw-dev
          - binutils-dev
          - cmake
    before_script:
    - if [ $ARROW_CI_RUST_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_install_cargo.sh
    script:
    - RUSTUP_TOOLCHAIN=stable $TRAVIS_BUILD_DIR/ci/travis_script_rust.sh
    - RUSTUP_TOOLCHAIN=nightly $TRAVIS_BUILD_DIR/ci/travis_script_rust.sh || true
    after_success:
    - pushd ${TRAVIS_BUILD_DIR}/rust
    # Run coverage for codecov.io
    - mkdir -p target/kcov
    - RUST_BACKTRACE=1 RUSTUP_TOOLCHAIN=stable cargo coverage --verbose
    - bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports"
  # Go
  - language: go
    go_import_path: github.com/apache/arrow
    os: linux
    go:
    - 1.10.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"
  # R
  - language: r
    cache: packages
    latex: false
    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
    - |
        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_linux.sh
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh --only-library
    - $TRAVIS_BUILD_DIR/ci/travis_install_clang_tools.sh
    - $TRAVIS_BUILD_DIR/ci/travis_lint.sh
    - 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
    - pushd ${TRAVIS_BUILD_DIR}/r


after_failure:
- |
    if [ "$TRAVIS_OS_NAME" = "osx" ]; then
      COREFILE=$(find /cores -maxdepth 1 -type f -name "core.*" | head -n 1)
      if [[ -f "$COREFILE" ]]; then
        lldb -c "$COREFILE" --batch --one-line "thread backtrace all -e true"
      fi
      ls -la ~/Library/Logs/DiagnosticReports/
      cat ~/Library/Logs/DiagnosticReports/*.crash
    else
      COREFILE=$(find . -maxdepth 2 -name "core*" | head -n 1)
      if [[ -f "$COREFILE" ]]; then
        gdb -c "$COREFILE" example -ex "thread apply all bt" -ex "set pagination 0" -batch
      fi
    fi

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="
