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

# build Apache Thrift on Travis CI - https://travis-ci.org/

sudo: required
dist: trusty

services:
  - docker

install:
  - (travis_wait ./build/docker/check_unmodified.sh $DISTRO && touch .unmodified) || true
  - if [ ! -f .unmodified ]; then travis_retry travis_wait docker build -q -t thrift-build:$DISTRO build/docker/$DISTRO; fi

script:
  - docker run --net=host -e BUILD_LIBS="$BUILD_LIBS" $BUILD_ENV -v $(pwd):/thrift/src -it thrift-build:$DISTRO build/docker/scripts/$SCRIPT $BUILD_ARG

env:
  global:
    - TEST_NAME=""
    - SCRIPT="cmake.sh"
    - BUILD_ARG=""
    - BUILD_ENV="-e CC=clang -e CXX=clang++"
    - DISTRO=ubuntu
    - BUILD_LIBS="CPP C_GLIB HASKELL JAVA PYTHON TESTING TUTORIALS"  # only meaningful for CMake builds

  matrix:
    - TEST_NAME="Cross Language Tests (Binary, Header, Multiplexed Protocols)"
      SCRIPT="cross-test.sh"
      BUILD_ARG="-'(binary|header|multiplexed)'"
      BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4"

    - TEST_NAME="Cross Language Tests (Compact and JSON Protocols)"
      SCRIPT="cross-test.sh"
      BUILD_ARG="-'(compact|json)'"
      BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4"

    # TODO: Remove them once migrated to CMake
    # Autotools builds
    - TEST_NAME="C C++ C# D Erlang Haxe Go (automake)"
      SCRIPT="autotools.sh"
      BUILD_ARG="--without-dart --without-haskell --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby"

    - TEST_NAME="C C++ Plugin Haskell Perl - GCC (automake)"
      SCRIPT="autotools.sh"
      BUILD_ARG="--enable-plugin --without-csharp --without-java --without-erlang --without-nodejs --without-lua --without-python --without-perl --without-php --without-php_extension --without-dart --without-ruby --without-haskell --without-go --without-haxe --without-d"
      BUILD_ENV="-e CC=gcc -e CXX=g++"

    - TEST_NAME="Java Lua PHP Ruby Dart Node.js Python (automake)"
      SCRIPT="autotools.sh"
      BUILD_ARG="--without-cpp --without-c_glib --without-csharp --without-d --without-erlang --without-go --without-haxe"

    # CMake builds
    - TEST_NAME="All (Debian)"
      DISTRO=debian

    - TEST_NAME="C C++ - GCC"
      BUILD_LIBS="CPP C_GLIB TESTING TUTORIALS"
      BUILD_ARG="-DWITH_PYTHON=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF"
      BUILD_ENV="-e CC=gcc -e CXX=g++"

    - TEST_NAME="C++ (Boost Thread - GCC)"
      BUILD_LIBS="CPP TESTING TUTORIALS"
      BUILD_ARG="-DWITH_BOOSTTHREADS=ON -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF"
      BUILD_ENV="-e CC=gcc -e CXX=g++"

    - TEST_NAME="C++ Plugin (Std Thread)"
      BUILD_LIBS="CPP TESTING TUTORIALS"
      BUILD_ARG="-DWITH_PLUGIN=ON -DWITH_STDTHREADS=ON -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF"

    - TEST_NAME="Compiler (mingw)"
      BUILD_LIBS=""
      BUILD_ARG="-DCMAKE_TOOLCHAIN_FILE=../build/cmake/mingw32-toolchain.cmake -DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF"
      BUILD_ENV=""

    - TEST_NAME="All - GCC (CentOS)"
      BUILD_ENV="-e CC=gcc -e CXX=g++"
      DISTRO=centos

    - TEST_NAME="C C++ - Clang (CentOS)"
      BUILD_LIBS="CPP C_GLIB TESTING TUTORIALS"
      BUILD_ARG="-DWITH_PYTHON=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF"
      DISTRO=centos

    - TEST_NAME="Python 2.6 (CentOS 6)"
      BUILD_LIBS="PYTHON TESTING TUTORIALS"
      BUILD_ARG="-DWITH_PYTHON=ON -DWITH_CPP=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF"
      BUILD_ENV="-e CC=gcc -e CXX=g++"
      DISTRO=centos6

    # Distribution
    - TEST_NAME="make dist"
      SCRIPT="make-dist.sh"
      BUILD_ENV="-e CC=gcc -e CXX=g++"

    - TEST_NAME="Debian Packages"
      SCRIPT="dpkg.sh"
      BUILD_ENV="-e CC=gcc -e CXX=g++"

    - TEST_NAME="make dist (Debian)"
      SCRIPT="make-dist.sh"
      BUILD_ENV="-e CC=gcc -e CXX=g++"
      DISTRO=debian

    - TEST_NAME="Debian Packages (Debian)"
      SCRIPT="dpkg.sh"
      BUILD_ENV="-e CC=gcc -e CXX=g++"
      DISTRO=debian

    # C and C++ undefined behavior. This wraps autotools.sh, but each binary crashes if
    # undefined behavior occurs. Skips the known flaky tests.
    - TEST_NAME="UBSan"
      SCRIPT="ubsan.sh"
      BUILD_ARG="--without-haskell --without-nodejs --without-perl --without-python"

matrix:
  include:
    # QA jobs for code analytics and metrics
    #
    # C/C++ static code analysis with cppcheck
    # add --error-exitcode=1 to --enable=all as soon as everything is fixed
    #
    # Python code style check with flake8
    #
    # search for TODO etc within source tree
    # some statistics about the code base
    # some info about the build machine
    - env: TEST_NAME="cppcheck, flake8, TODO FIXME HACK, LoC and system info"
      install:
        - travis_retry sudo apt-get update
        - travis_retry sudo apt-get install -ym cppcheck sloccount python-flake8
      script:
        # Compiler cppcheck (All)
        - cppcheck --force --quiet --inline-suppr --enable=all -j2 compiler/cpp/src
        # C++ cppcheck (All)
        - cppcheck --force --quiet --inline-suppr --enable=all -j2 lib/cpp/src lib/cpp/test test/cpp tutorial/cpp
        # C Glib cppcheck (All)
        - cppcheck --force --quiet --inline-suppr --enable=all -j2 lib/c_glib/src lib/c_glib/test test/c_glib/src tutorial/c_glib
        # Silent error checks
        - cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 compiler/cpp/src
        - cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 lib/cpp/src lib/cpp/test test/cpp tutorial/cpp
        - cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 lib/c_glib/src lib/c_glib/test test/c_glib/src tutorial/c_glib
        # Python code style
        - flake8 --ignore=E501 lib/py
        - flake8 tutorial/py
        - flake8 --ignore=E501 test/py
        - flake8 test/py.twisted
        - flake8 test/py.tornado
        - flake8 --ignore=E501 test/test.py
        - flake8 --ignore=E501 test/crossrunner
        - flake8 test/features
        # TODO etc
        - grep -r TODO *
        - grep -r FIXME *
        - grep -r HACK *
        # LoC
        - sloccount .
        # System Info
        - dpkg -l
        - uname -a
