blob: 1197fe782a6de677aa77d8e20495171c6fd2f65d [file] [log] [blame]
Roger Meiera0836f62013-05-05 00:19:38 +02001#
2# Licensed to the Apache Software Foundation (ASF) under one
3# or more contributor license agreements. See the NOTICE file
4# distributed with this work for additional information
5# regarding copyright ownership. The ASF licenses this file
6# to you under the Apache License, Version 2.0 (the
7# "License"); you may not use this file except in compliance
8# with the License. You may obtain a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing,
13# software distributed under the License is distributed on an
14# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15# KIND, either express or implied. See the License for the
16# specific language governing permissions and limitations
17# under the License.
18#
19
20# build Apache Thrift on Travis CI - https://travis-ci.org/
21
henriqued17f1c92014-04-30 16:21:25 +020022language: cpp
henriquea139c912014-04-02 14:45:39 +020023
Henrique Mendonçaaba4b1f2015-06-26 20:56:18 +100024sudo: required
25
henriquea139c912014-04-02 14:45:39 +020026cache:
27 - apt
28 - npm
henriqued17f1c92014-04-30 16:21:25 +020029 - maven
Roger Meiera0836f62013-05-05 00:19:38 +020030
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090031compiler:
32 - clang
33 - gcc
34
35before_install:
jfarrelle03f7e82015-02-18 23:25:54 -050036 - sh build/travis/installCXXDependencies.sh
37 - if [ "$ALL_DEPS" != "no" ] ; then sh build/travis/installDependencies.sh 1> /dev/null ; fi
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090038 - if [ "$BUILD_HASKELL" != "no" ] ; then export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.20/bin:$PATH ; fi
39 - if [ "$BUILD_HASKELL" != "no" ] ; then cabal update ; fi
Nobuaki Sukegawa2a640c42015-08-23 18:35:15 +090040 # Disabling any cabal concurrent jobs to workaround GHC crashes due to out of memory.
41 # We can safely remove this to speed up cabal install, once Travis infrastructure is upgraded.
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090042 - if [ "$BUILD_HASKELL" != "no" ] ; then sed -i 's/^\s*jobs\s*:\s*\$ncpus\s*$/jobs:1/g' $HOME/.cabal/config && cat $HOME/.cabal/config | grep jobs ; fi
Nobuaki Sukegawa2a640c42015-08-23 18:35:15 +090043
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090044before_script:
45 - sudo /etc/init.d/mysql stop
46 - sudo /etc/init.d/postgresql stop
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090047
48script:
henrique7f9fa882015-02-23 10:27:34 +080049 - if [ "x$CMAKE_CONFIG" != "xnone" ] ; then mkdir cmake_build && cd cmake_build && cmake -GNinja -DQT_MOC_EXECUTABLE="moq-qt5" $CMAKE_CONFIG $TRAVIS_BUILD_DIR ; fi
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090050 - if [ "x$CMAKE_CONFIG" != "xnone" ] ; then ninja -j $CONCURRENT_JOBS ; fi
51 - if [ "x$CMAKE_CONFIG" != "xnone" ] ; then cpack ; fi
52 - if [ "x$CMAKE_CONFIG" != "xnone" ] ; then ctest -VV -E "(concurrency_test|processor_test|Haskell)" ; fi
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090053 - if [ "x$CONFIG" != "xnone" ] ; then sh bootstrap.sh ; fi
54 - if [ "x$CONFIG" != "xnone" ] ; then sh configure $CONFIG ; fi
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090055 - if [ "x$CONFIG" != "xnone" ] ; then make $MAKE_TARGET -j $CONCURRENT_JOBS ; fi
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090056
Roger Meier7ed94ef2015-04-26 16:55:35 +020057after_failure:
58 - if [ "x$ERROR_LOG" != "xnone" ] ; then cat $ERROR_LOG ; fi
59
henriqueac8d8e22014-07-23 23:31:04 +020060env:
Roger Meier5effab62014-11-16 22:31:33 +010061 global:
62 - TEST_NAME=""
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090063 - CMAKE_CONFIG="none"
64 - CONFIG="none"
65 - MAKE_TARGET="check"
66 - ALL_DEPS="no"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090067 # Invoke cabal only when necessary because it is flaky due to network and package updates.
68 - BUILD_HASKELL="no"
Roger Meier5effab62014-11-16 22:31:33 +010069 - GHCVER=7.8.3
Nobuaki Sukegawafd5a4d22015-05-10 16:14:03 +090070 - ERROR_LOG="none"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090071 - CONCURRENT_JOBS=2
henriquec0a7d722014-07-26 13:11:12 +020072
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090073 matrix:
74 # Put it here because it's most time consuming
Roger Meier41ad4342015-03-24 22:30:40 +010075 - TEST_NAME="make cross (automake)"
Roger Meier41ad4342015-03-24 22:30:40 +010076 THRIFT_CROSSTEST_CONCURRENCY=6
Nobuaki Sukegawa826ea992015-10-28 22:19:45 +090077 CONFIG="--enable-tutorial=no --without-lua --without-haxe --without-d"
Roger Meier41ad4342015-03-24 22:30:40 +010078 ALL_DEPS="yes"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090079 BUILD_HASKELL="yes"
Nobuaki Sukegawaf5b795d2015-03-29 14:48:48 +090080 MAKE_TARGET="cross"
Roger Meier7ed94ef2015-04-26 16:55:35 +020081 ERROR_LOG="test/log/unexpected_failures.log"
Roger Meier41ad4342015-03-24 22:30:40 +010082
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090083 # CMake builds
84 - TEST_NAME="compiler (CMake + CPack)"
85 CMAKE_CONFIG="-DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF"
86 - TEST_NAME="all (CMake + CPack)"
87 CMAKE_CONFIG=""
88 ALL_DEPS="yes"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090089 BUILD_HASKELL="yes"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090090 - TEST_NAME="C++/boost-threads (CMake + CPack)"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090091 CMAKE_CONFIG="-DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF -DWITH_BOOSTTHREADS=ON"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090092 - TEST_NAME="C++/std-threads (CMake + CPack)"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +090093 CMAKE_CONFIG="-DCMAKE_CXX_FLAGS=-std=c++0x -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF -DWITH_STDTHREADS=ON"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090094 - TEST_NAME="compiler (mingw32-gcc, CMake + CPack)"
Roger Meier4ead5202015-05-15 16:21:41 +020095 CMAKE_CONFIG="-DCMAKE_TOOLCHAIN_FILE=../build/cmake/mingw32-toolchain.cmake -DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +090096
97 # Autotool builds
98 # TODO: Remove them as migration is made
99 - TEST_NAME="compiler (automake)"
100 CONFIG="--disable-libs"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900101
Nobuaki Sukegawa73fae0f2015-12-01 23:49:53 +0900102 # TODO: Enable tutorial once "make check -C tutorial/go" is fixed
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900103 - TEST_NAME="C C# D Dart Erlang Go Haxe (automake)"
Nobuaki Sukegawa73fae0f2015-12-01 23:49:53 +0900104 CONFIG="--without-cpp --without-haskell --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby --enable-tutorial=no"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900105 ALL_DEPS="yes"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900106
107 - TEST_NAME="Java Lua Node.js Perl PHP Python Ruby (automake)"
108 CONFIG="--without-cpp --without-haskell --without-c_glib --without-csharp --without-d --without-dart --without-erlang --without-go --without-haxe"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900109 ALL_DEPS="yes"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900110
111 # Isolate unstable builds from others
112 - TEST_NAME="C++ (automake)"
113 CONFIG="--without-haskell --without-c_glib --without-csharp --without-d --without-dart --without-erlang --without-go --without-haxe --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby"
114
115 - TEST_NAME="Haskell (automake)"
116 CONFIG="--without-cpp --without-c_glib --without-csharp --without-d --without-dart --without-erlang --without-go --without-haxe --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900117 ALL_DEPS="yes"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900118 BUILD_HASKELL="yes"
119
Roger Meier41ad4342015-03-24 22:30:40 +0100120 - TEST_NAME="dist (automake)"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900121 CONFIG=""
122 ALL_DEPS="yes"
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900123 BUILD_HASKELL="yes"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900124 MAKE_TARGET="dist"
125
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900126
henriqueac8d8e22014-07-23 23:31:04 +0200127matrix:
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900128 allow_failures:
129 # gcc fails on travis seemingly due to out of memory
130 - compiler: gcc
131
132 exclude:
133 # This one takes very long
134 - compiler: gcc
Roger Meier41ad4342015-03-24 22:30:40 +0100135 env: TEST_NAME="make cross (automake)" CONFIG="--without-python" ALL_DEPS="yes" MAKE_TARGET="cross"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900136
137 # Does not use native compiler, no need to do it twice
138 - compiler: gcc
Roger Meier4ead5202015-05-15 16:21:41 +0200139 env: TEST_NAME="compiler (mingw32-gcc, CMake + CPack)" CMAKE_CONFIG="-DCMAKE_TOOLCHAIN_FILE=../build/cmake/mingw32-toolchain.cmake -DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900140 - compiler: gcc
Roger Meier41ad4342015-03-24 22:30:40 +0100141 env: TEST_NAME="dist (automake)" CONFIG="" ALL_DEPS="yes" MAKE_TARGET="dist"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900142
henriqueac8d8e22014-07-23 23:31:04 +0200143 include:
Roger Meier5effab62014-11-16 22:31:33 +0100144 - env:
Roger Meier5effab62014-11-16 22:31:33 +0100145 - TEST_NAME="Debian Packages"
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900146 compiler: clang
Roger Meier5effab62014-11-16 22:31:33 +0100147 before_install:
jfarrelle03f7e82015-02-18 23:25:54 -0500148 - sh build/travis/installCXXDependencies.sh;
149 - sh build/travis/installDependencies.sh 1> /dev/null;
Roger Meier5effab62014-11-16 22:31:33 +0100150 - sudo apt-get install build-essential mono-gmcs mono-devel libmono-system-web2.0-cil erlang-base ruby1.8-dev python-all python-all-dev python-all-dbg php5 php5-dev
151 script:
152 - dpkg-buildpackage -tc -us -uc
153 - ls -al ..
154
155
Roger Meier5effab62014-11-16 22:31:33 +0100156 # QA jobs for code analytics and metrics
157
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900158 # static code analysis with cppcheck
159 # add --error-exitcode=1 to --enable=all as soon as everything is fixed
160 - env: TEST_NAME="cppcheck"
Roger Meier5effab62014-11-16 22:31:33 +0100161 before_install: sudo apt-get install cppcheck
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900162 script:
163 # Compiler cppcheck (All)
164 - cppcheck --force --quiet --inline-suppr --enable=all -j2 compiler/cpp/src
165 # C++ cppcheck (All)
166 - cppcheck --force --quiet --inline-suppr --enable=all -j2 lib/cpp/src lib/cpp/test test/cpp tutorial/cpp
167 # C Glib cppcheck (All)
168 - cppcheck --force --quiet --inline-suppr --enable=all -j2 lib/c_glib/src lib/c_glib/test test/c_glib/src tutorial/c_glib
169 # Silent error checks
170 - cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 compiler/cpp/src
171 - cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 lib/cpp/src lib/cpp/test test/cpp tutorial/cpp
172 - cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 lib/c_glib/src lib/c_glib/test test/c_glib/src tutorial/c_glib
Roger Meier5effab62014-11-16 22:31:33 +0100173
174 # TODO use findbugs for Java
175 # TODO use fxcop for C#
176
177 # TODO do style checks
178
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900179 # search for TODO etc within source tree
Roger Meier5effab62014-11-16 22:31:33 +0100180 # some statistics about the code base
Roger Meier5effab62014-11-16 22:31:33 +0100181 # some info about the build machine
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900182 - env: TEST_NAME="TODO FIXME HACK, LoC and system info"
183 before_install: sudo apt-get install sloccount
Roger Meier5effab62014-11-16 22:31:33 +0100184 script:
Nobuaki Sukegawae58ed1a2015-11-23 19:23:43 +0900185 - grep -r TODO *
186 - grep -r FIXME *
187 - grep -r HACK *
188 # LoC
189 - sloccount .
190 # System Info
191 - dpkg -l
192 - uname -a
Roger Meier5effab62014-11-16 22:31:33 +0100193
194# TODO make it perfect ;-r
Nobuaki Sukegawaa10697a2014-12-21 19:43:22 +0900195#