# 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

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/travis_detect_changes.py`


matrix:
  fast_finish: true
  allow_failures:
  - jdk: oraclejdk9
  include:
  # C++ & Python w/ clang 5.0
  - compiler: gcc
    language: cpp
    os: linux
    group: deprecated
    env:
    - ARROW_TRAVIS_USE_TOOLCHAIN=1
    - ARROW_TRAVIS_VALGRIND=1
    - ARROW_TRAVIS_PLASMA=1
    - ARROW_TRAVIS_ORC=1
    - ARROW_TRAVIS_CLANG_FORMAT=1
    - ARROW_BUILD_WARNING_LEVEL=CHECKIN
    - CC="clang-5.0"
    - CXX="clang++-5.0"
    before_script:
    # (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 [ $ARROW_CI_CPP_AFFECTED == "1" ]; then $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh; fi
    script:
    - if [ $ARROW_CI_CPP_AFFECTED == "1" ]; then $TRAVIS_BUILD_DIR/ci/travis_script_cpp.sh; fi
    - $TRAVIS_BUILD_DIR/ci/travis_build_parquet_cpp.sh
    - $TRAVIS_BUILD_DIR/ci/travis_script_python.sh 2.7
    - $TRAVIS_BUILD_DIR/ci/travis_script_python.sh 3.6
  # [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_BUILD_WARNING_LEVEL=CHECKIN
    before_script:
    - if [ $ARROW_CI_PYTHON_AFFECTED != "1" ]; then exit; fi
    - if [ $ARROW_CI_CPP_AFFECTED == "1" ]; then travis_wait 50 $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh; fi
    script:
    - if [ $ARROW_CI_CPP_AFFECTED == "1" ]; then $TRAVIS_BUILD_DIR/ci/travis_script_cpp.sh; fi
    - $TRAVIS_BUILD_DIR/ci/travis_build_parquet_cpp.sh
    - $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 7
  - language: java
    os: linux
    jdk: openjdk7
    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:
    - CC="clang-5.0"
    - CXX="clang++-5.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 node
    - $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
  # NodeJS
  - language: node_js
    os: linux
    node_js: node
    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 w/ gcc 4.9 & autotools
  - compiler: gcc
    language: cpp
    os: linux
    env:
    - BUILD_SYSTEM=autotools BUILD_TORCH_EXAMPLE=no
    - CC="gcc-4.9"
    - CXX="g++-4.9"
    before_script:
    - if [ $ARROW_CI_C_GLIB_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
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_c_glib.sh
  # C++ & glib w/ gcc 4.9 & meson
  - compiler: gcc
    language: cpp
    os: linux
    env:
    - BUILD_SYSTEM=meson BUILD_TORCH_EXAMPLE=no
    - CC="gcc-4.9"
    - CXX="g++-4.9"
    before_script:
    - if [ $ARROW_CI_C_GLIB_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
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_c_glib.sh
  # [OS X] C++ & glib w/ XCode 8.3 & autotools
  - compiler: clang
    osx_image: xcode8.3
    os: osx
    cache:
    addons:
    rvm: 2.2
    env:
    - BUILD_SYSTEM=autotools
    before_script:
    - if [ $ARROW_CI_C_GLIB_AFFECTED != "1" ]; then exit; fi
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_cpp.sh --only-library
    - $TRAVIS_BUILD_DIR/ci/travis_before_script_c_glib.sh
    script:
    - $TRAVIS_BUILD_DIR/ci/travis_script_c_glib.sh

after_failure:
- 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

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