1dist: xenial
2language: cpp
3os:
4  - linux
5  - osx
6arch:
7  - amd64
8  - arm64
9  - ppc64le
10compiler:
11  - clang
12  - gcc
13osx_image: xcode9.4
14cache:
15  - ccache
16
17addons:
18  apt:
19    sources:
20      - ubuntu-toolchain-r-test
21    packages:
22      - libgflags-dev
23      - libbz2-dev
24      - liblz4-dev
25      - libsnappy-dev
26      - liblzma-dev  # xv
27      - libzstd-dev
28      - zlib1g-dev
29  homebrew:
30    update: true
31    packages:
32      - ccache
33      - gflags
34      - lz4
35      - snappy
36      - xz
37      - zstd
38
39env:
40  - TEST_GROUP=platform_dependent # 16-18 minutes
41  - TEST_GROUP=1 # 33-35 minutes
42  - TEST_GROUP=2 # 18-20 minutes
43  - TEST_GROUP=3 # 20-22 minutes
44  - TEST_GROUP=4 # 12-14 minutes
45  # Run java tests
46  - JOB_NAME=java_test # 4-11 minutes
47  # Build ROCKSDB_LITE
48  - JOB_NAME=lite_build # 3-4 minutes
49  # Build examples
50  - JOB_NAME=examples # 5-7 minutes
51  - JOB_NAME=cmake # 3-5 minutes
52  - JOB_NAME=cmake-gcc8 # 3-5 minutes
53  - JOB_NAME=cmake-mingw # 3 minutes
54
55matrix:
56  exclude:
57  - os: osx
58    env: JOB_NAME=cmake-gcc8
59  - os: osx
60    env: JOB_NAME=cmake-mingw
61  - os: osx
62    arch: ppc64le
63  - os: osx
64    compiler: gcc
65  - os : linux
66    arch: arm64
67    env: JOB_NAME=cmake-mingw
68  - os: linux
69    arch: ppc64le
70    env: JOB_NAME=cmake-mingw
71  - os: linux
72    compiler: clang
73  # Exclude most osx, arm64 and ppc64le tests for pull requests, but build in branches
74  # NB: the cmake build is a partial java test
75  - if: type = pull_request
76    os: osx
77    env: TEST_GROUP=1
78  - if: type = pull_request
79    os : linux
80    arch: arm64
81    env: TEST_GROUP=1
82  - if: type = pull_request
83    os: linux
84    arch: ppc64le
85    env: TEST_GROUP=1
86  - if: type = pull_request
87    os: osx
88    env: TEST_GROUP=2
89  - if: type = pull_request
90    os : linux
91    arch: arm64
92    env: TEST_GROUP=2
93  - if: type = pull_request
94    os: linux
95    arch: ppc64le
96    env: TEST_GROUP=2
97  - if: type = pull_request
98    os: osx
99    env: TEST_GROUP=3
100  - if: type = pull_request
101    os : linux
102    arch: arm64
103    env: TEST_GROUP=3
104  - if: type = pull_request
105    os: linux
106    arch: ppc64le
107    env: TEST_GROUP=3
108  - if: type = pull_request
109    os: osx
110    env: TEST_GROUP=4
111  - if: type = pull_request
112    os : linux
113    arch: arm64
114    env: TEST_GROUP=4
115  - if: type = pull_request
116    os: linux
117    arch: ppc64le
118    env: TEST_GROUP=4
119  - if: type = pull_request
120    os : osx
121    env: JOB_NAME=java_test
122  - if: type = pull_request
123    os : linux
124    arch: arm64
125    env: JOB_NAME=java_test
126  - if: type = pull_request
127    os: linux
128    arch: ppc64le
129    env: JOB_NAME=java_test
130  - if: type = pull_request
131    os : osx
132    env: JOB_NAME=lite_build
133  - if: type = pull_request
134    os : linux
135    arch: arm64
136    env: JOB_NAME=lite_build
137  - if: type = pull_request
138    os: linux
139    arch: ppc64le
140    env: JOB_NAME=lite_build
141  - if: type = pull_request
142    os : osx
143    env: JOB_NAME=examples
144  - if: type = pull_request
145    os : linux
146    arch: arm64
147    env: JOB_NAME=examples
148  - if: type = pull_request
149    os: linux
150    arch: ppc64le
151    env: JOB_NAME=examples
152  - if: type = pull_request
153    os : linux
154    arch: arm64
155    env: JOB_NAME=cmake-gcc8
156  - if: type = pull_request
157    os: linux
158    arch: ppc64le
159    env: JOB_NAME=cmake-gcc8
160
161install:
162  - if [ "${TRAVIS_OS_NAME}" == osx ]; then
163      PATH=$PATH:/usr/local/opt/ccache/libexec;
164    fi
165  - if [ "${JOB_NAME}" == cmake-gcc8 ]; then
166      sudo apt-get install -y g++-8;
167      CC=gcc-8 && CXX=g++-8;
168    fi
169  - if [ "${JOB_NAME}" == cmake-mingw ]; then
170      sudo apt-get install -y mingw-w64 ;
171    fi
172  - if [[ "${JOB_NAME}" == cmake* ]] && [ "${TRAVIS_OS_NAME}" == linux ]; then
173      CMAKE_DIST_URL="https://rocksdb-deps.s3-us-west-2.amazonaws.com/cmake/cmake-3.14.5-Linux-$(uname -m).tar.bz2";
174      TAR_OPT="--strip-components=1 -xj";
175      if [ "aarch64" == "$(uname -m)" ]; then
176        sudo apt-get install -y libuv1 librhash0;
177        sudo apt-get upgrade -y libstdc++6;
178      fi;
179      mkdir cmake-dist && curl --silent --fail --show-error --location "${CMAKE_DIST_URL}" | tar -C cmake-dist ${TAR_OPT} && export PATH=$PWD/cmake-dist/bin:$PATH;
180    fi
181  - |
182    if [[ "${JOB_NAME}" == java_test || "${JOB_NAME}" == cmake* ]]; then
183      # Ensure JDK 8
184      if [ "${TRAVIS_OS_NAME}" == osx ]; then
185        brew tap AdoptOpenJDK/openjdk
186        brew cask install adoptopenjdk8
187        export JAVA_HOME=$(/usr/libexec/java_home)
188      else
189        sudo apt-get install -y openjdk-8-jdk
190        export PATH=/usr/lib/jvm/java-8-openjdk-$(dpkg --print-architecture)/bin:$PATH
191        export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-$(dpkg --print-architecture)
192      fi
193      echo "JAVA_HOME=${JAVA_HOME}"
194      which java && java -version
195      which javac && javac -version
196    fi
197
198before_script:
199  # Increase the maximum number of open file descriptors, since some tests use
200  # more FDs than the default limit.
201  - ulimit -n 8192
202
203script:
204  - ${CXX} --version
205  - if [ `command -v ccache` ]; then ccache -C; fi
206  - case $TEST_GROUP in
207    platform_dependent)
208      OPT=-DTRAVIS V=1 ROCKSDBTESTS_END=db_block_cache_test make -j4 all_but_some_tests check_some
209      ;;
210    1)
211      OPT=-DTRAVIS V=1 ROCKSDBTESTS_START=db_block_cache_test ROCKSDBTESTS_END=db_iter_test make -j4 check_some
212      ;;
213    2)
214      OPT="-DTRAVIS -DROCKSDB_NAMESPACE=alternative_rocksdb_ns" V=1 make -j4 tools && OPT="-DTRAVIS -DROCKSDB_NAMESPACE=alternative_rocksdb_ns" V=1 ROCKSDBTESTS_START=db_iter_test ROCKSDBTESTS_END=options_file_test make -j4 check_some
215      ;;
216    3)
217      OPT=-DTRAVIS V=1 ROCKSDBTESTS_START=options_file_test ROCKSDBTESTS_END=write_prepared_transaction_test make -j4 check_some
218      ;;
219    4)
220      OPT=-DTRAVIS V=1 ROCKSDBTESTS_START=write_prepared_transaction_test make -j4 check_some
221      ;;
222    esac
223  - case $JOB_NAME in
224    java_test)
225      OPT=-DTRAVIS V=1 make rocksdbjava jtest
226      ;;
227    lite_build)
228      OPT='-DTRAVIS -DROCKSDB_LITE' V=1 make -j4 static_lib tools
229      ;;
230    examples)
231      OPT=-DTRAVIS V=1 make -j4 static_lib && cd examples && make -j4
232      ;;
233    cmake-mingw)
234      sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix;
235      mkdir build && cd build && cmake -DJNI=1 -DWITH_GFLAGS=OFF .. -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ -DCMAKE_SYSTEM_NAME=Windows && make -j4 rocksdb rocksdbjni
236      ;;
237    cmake*)
238      mkdir build && cd build && cmake -DJNI=1 .. -DCMAKE_BUILD_TYPE=Release && make -j4 rocksdb rocksdbjni
239      ;;
240    esac
241notifications:
242    email:
243      - [email protected]
244