diff options
Diffstat (limited to '.travis.yml')
-rw-r--r-- | .travis.yml | 283 |
1 files changed, 171 insertions, 112 deletions
diff --git a/.travis.yml b/.travis.yml index fcd334a9b..0f9500c6e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,134 +19,193 @@ # build Apache Thrift on Travis CI - https://travis-ci.org/ +# +# Docker Integration +# +# DOCKER_REPO +# [required] The repository name (within your account). +# DOCKER_PASS +# [optional, secure] Your docker account password. +# If you do not set this, each build job in the "test" +# stage might rebuild the docker image and extend build +# time by about 10 minutes per job. If you do set this +# then each build job in the "docker" stage" will build +# the docker image if Dockerfile has changed, and then +# push the new tag up to your docker hub account. +# DOCKER_USER +# [required] Your docker hub account name. +# +# The resulting tag is: +# $DOCKER_USER/$DOCKER_REPO:$DISTRO +# example (and the default): +# apache/thrift:ubuntu-xenial +# + sudo: required dist: trusty +language: cpp 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 + - if [[ `uname` == "Linux" ]]; then build/docker/refresh.sh; 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 +stages: +# - osx # up front for now (for testing) + - docker # docker images + - thrift # thrift build jobs env: global: - - TEST_NAME="" - SCRIPT="cmake.sh" - BUILD_ARG="" - BUILD_ENV="-e CC=clang -e CXX=clang++" - DISTRO=ubuntu-xenial - BUILD_LIBS="CPP C_GLIB HASKELL JAVA PYTHON TESTING TUTORIALS" # only meaningful for CMake builds + - TRAVIS_BUILD_STAGE=test + - DEFAULT_DOCKER_USER="apache" + - DEFAULT_DOCKER_REPO="thrift" - matrix: - - TEST_NAME="Cross Language Tests (Binary Protocol)" - SCRIPT="cross-test.sh" - BUILD_ARG="-'(binary)'" - BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4" - - - TEST_NAME="Cross Language Tests (Header, JSON Protocols)" - SCRIPT="cross-test.sh" - BUILD_ARG="-'(header|json)'" - BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4" - - - TEST_NAME="Cross Language Tests (Compact and Multiplexed Protocols)" - SCRIPT="cross-test.sh" - BUILD_ARG="-'(compact|multiplexed)'" - BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4" - - # Autotools builds - # TODO: Remove them once migrated to CMake - - - TEST_NAME="Autotools (Ubuntu Trusty)" - DISTRO=ubuntu-trusty - SCRIPT="autotools.sh" - BUILD_ENV="-e CC=gcc -e CXX=g++" - - - TEST_NAME="Autotools (Ubuntu Xenial)" - SCRIPT="autotools.sh" - BUILD_ENV="-e CC=gcc -e CXX=g++" - BUILD_ARG="--enable-plugin" - - # CMake builds - - - TEST_NAME="CMake (Ubuntu Trusty)" - DISTRO=ubuntu-trusty - - - TEST_NAME="CMake (Ubuntu Xenial)" - - # C++ specific options: compiler plug-in, threading model - - - TEST_NAME="C++98 (Boost Thread)" - BUILD_LIBS="CPP TESTING TUTORIALS" - BUILD_ARG="-DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DCMAKE_CXX_EXTENSIONS=OFF --DWITH_BOOSTTHREADS=ON -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF" - - - TEST_NAME="C++ (Std Thread) and Plugin" - 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" - - # Distribution - - - TEST_NAME="make dist" - SCRIPT="make-dist.sh" - - - TEST_NAME="Debian Packages" - SCRIPT="dpkg.sh" - - # 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" - UNSTABLE=true - -matrix: - allow_failures: - - env: UNSTABLE=true +jobs: include: + # ------------------------- phase: osx -------------------------- + # - stage: osx + # os: osx + # osx_image: xcode9 + # script: build/docker/scripts/autotools.sh + + # ========================= stage: docker ========================= + - stage: docker + script: true + env: + - JOB="Docker Build ubuntu-trusty 14.04" + - DISTRO=ubuntu-trusty + - TRAVIS_BUILD_STAGE=docker + - script: true + env: + - JOB="Docker Build ubuntu-xenial 16.04" + - DISTRO=ubuntu-xenial + - TRAVIS_BUILD_STAGE=docker + - script: true + env: + - JOB="Docker Build ubuntu-artful 17.10" + - DISTRO=ubuntu-artful + - TRAVIS_BUILD_STAGE=docker + + # ========================= stage: thrift ======================= + # ------------------------- phase: cross ------------------------ + # apache/thrift official PR builds can exceed 50 minutes per job so combine all cross tests + - stage: thrift + script: build/docker/run.sh + if: repo = apache/thrift + env: + - JOB="Cross Language Tests" + - SCRIPT="cross-test.sh" + - BUILD_ARG="" + - BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4" + + # fork based PR builds cannot exceed 50 minutes per job + - stage: thrift + script: build/docker/run.sh + if: repo != apache/thrift + env: + - JOB="Cross Language Tests (Binary Protocol)" + - SCRIPT="cross-test.sh" + - BUILD_ARG="-'(binary)'" + - BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4" + + - stage: thrift + script: build/docker/run.sh + if: repo != apache/thrift + env: + - JOB="Cross Language Tests (Header, JSON Protocols)" + - SCRIPT="cross-test.sh" + - BUILD_ARG="-'(header|json)'" + - BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4" + + - stage: thrift + script: build/docker/run.sh + if: repo != apache/thrift + env: + - JOB="Cross Language Tests (Compact and Multiplexed Protocols)" + - SCRIPT="cross-test.sh" + - BUILD_ARG="-'(compact|multiplexed)'" + - BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4" + + # ------------------------- phase: sca -------------------------- # 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 + - stage: thrift + script: build/docker/run.sh + env: + - JOB="Static Code Analysis" + - SCRIPT="sca.sh" + - DISTRO=ubuntu-artful + + # C and C++ undefined behavior. + # A binary crashes if undefined behavior occurs and produces a stack trace. + # python is disabled, see: THRIFT-4360 + - script: build/docker/run.sh + env: + - JOB="UBSan" + - SCRIPT="ubsan.sh" + - DISTRO=ubuntu-artful + - BUILD_ARG="--without-python --without-py3" + + # ------------------------- phase: cmake ------------------------ + - script: build/docker/run.sh + env: + - JOB="CMake (Ubuntu Xenial)" + + # C++ specific options: compiler plug-in, threading model + - script: build/docker/run.sh + env: + - JOB="C++98 (Boost Thread)" + - SCRIPT="cmake.sh" + - BUILD_LIBS="CPP TESTING TUTORIALS" + - BUILD_ARG="-DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DCMAKE_CXX_EXTENSIONS=OFF --DWITH_BOOSTTHREADS=ON -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF" + - BUILD_ENV="" + + - script: build/docker/run.sh + env: + - JOB="C++ (Std Thread) and Plugin" + - SCRIPT="cmake.sh" + - 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" + - BUILD_ENV="-e CC=clang -e CXX=clang++" + + # ------------------------- phase: autotools -------------------- + # TODO: Remove them once migrated to CMake + - script: build/docker/run.sh + env: + - JOB="Autotools (Ubuntu Artful)" + - DISTRO=ubuntu-artful + - SCRIPT="autotools.sh" + - BUILD_ENV="-e CC=gcc -e CXX=g++" + + - script: build/docker/run.sh + env: + - JOB="Autotools (Ubuntu Xenial)" + - DISTRO=ubuntu-xenial + - SCRIPT="autotools.sh" + - BUILD_ENV="-e CC=gcc -e CXX=g++" + + - script: build/docker/run.sh + env: + - JOB="Autotools (Ubuntu Trusty)" + - DISTRO=ubuntu-trusty + - SCRIPT="autotools.sh" + - BUILD_ENV="-e CC=gcc -e CXX=g++" + + # ------------------------- phase: dist ------------------------- + - script: build/docker/run.sh + env: + - JOB="make dist" + - SCRIPT="make-dist.sh" + - BUILD_ENV="-e CC=gcc -e CXX=g++" + + - script: build/docker/run.sh + env: + - JOB="Debian Packages" + - SCRIPT="dpkg.sh" + - BUILD_ENV="-e CC=gcc -e CXX=g++" |