1# Medium Tests: Run on all commits/PRs to dev branch
2
3language: c
4dist: trusty
5
6git:
7  depth: 1
8
9branches:
10  only:
11  - dev
12  - master
13  - travisTest
14
15addons:
16  apt:
17    update: true
18
19env:
20  global:
21    - FUZZERTEST=-T2mn
22      ZSTREAM_TESTTIME=-T2mn
23      DECODECORPUS_TESTTIME=-T1mn
24
25
26matrix:
27  fast_finish: true
28  include:
29    - name: arm64
30      os: linux
31      arch: arm64
32      script:
33        - make check
34
35    - name: Trusty (Test All)
36      script:
37        - make test
38
39    - name: gcc-6 + gcc-7 compilation
40      script:
41        - make gcc6install gcc7install
42        - CC=gcc-6 CFLAGS=-Werror make -j all
43        - make clean
44        - CC=gcc-7 CFLAGS=-Werror make -j all
45
46    - name: gcc-8 + ASan + UBSan + Test Zstd
47      script:
48        - make gcc8install
49        - CC=gcc-8 CFLAGS="-Werror" make -j all
50        - make clean
51        - CC=gcc-8 make -j uasan-test-zstd </dev/null   # test when stdin is not a tty
52
53    - name: gcc-6 + ASan + UBSan + Test Zstd, 32bit mode
54      script:
55        - make gcc6install libc6install
56        - CC=gcc-6 CFLAGS="-Werror -m32" make -j all32
57        - make clean
58        - CC=gcc-6 make -j uasan-test-zstd32   # note : can complain about pointer overflow
59
60    - name: Trusty (clang-3.8 + MSan + Test Zstd)
61      script:
62        - make clang38install
63        # External libraries must be turned off when using MSAN tests,
64        # because they are not msan-instrumented,
65        # so any data coming from these libraries is always considered "uninitialized"
66        - CC=clang-3.8 make clean msan-test-zstd HAVE_ZLIB=0 HAVE_LZ4=0 HAVE_LZMA=0
67
68    - name: Trusty (Minimal Decompressor Macros)
69      script:
70        - make clean
71        - CFLAGS=-Werror make -j all MOREFLAGS="-Werror -DHUF_FORCE_DECOMPRESS_X1 -DZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT"
72        - make clean
73        - make -j check MOREFLAGS="-Werror -DHUF_FORCE_DECOMPRESS_X1 -DZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT"
74        - make clean
75        - CFLAGS=-Werror make -j all MOREFLAGS="-Werror -DHUF_FORCE_DECOMPRESS_X2 -DZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG"
76        - make clean
77        - make -j check MOREFLAGS="-Werror -DHUF_FORCE_DECOMPRESS_X2 -DZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG"
78        - make clean
79        - CFLAGS=-Werror make -j all MOREFLAGS="-Werror -DZSTD_NO_INLINE -DZSTD_STRIP_ERROR_STRINGS"
80        - make clean
81        - make -j check MOREFLAGS="-Werror -DZSTD_NO_INLINE -DZSTD_STRIP_ERROR_STRINGS"
82
83    - name: Trusty (CMake)
84      script:
85        - make cmakebuild
86
87    - name: Trusty (Static Analyze)
88      script:
89        - make staticAnalyze
90
91    - name: Trusty (gcc-8 + ASan + UBSan + Fuzz Test)
92      script:
93        - make gcc8install
94        - CC=gcc-8 make clean uasan-fuzztest
95
96    - name: Trusty (gcc-6 + ASan + UBSan + Fuzz Test 32bit)
97      script:
98        - make gcc6install libc6install
99        - CC=gcc-6 CFLAGS="-O2 -m32" make uasan-fuzztest   # can complain about pointer overflow
100
101    - name: Trusty (clang-3.8 + MSan + Fuzz Test)
102      script:
103        - make clang38install
104        - CC=clang-3.8 make clean msan-fuzztest
105
106    - name: Trusty (ASan + UBSan + MSan + Regression Test)
107      script:
108        - make -j uasanregressiontest
109        - make clean
110        - make -j msanregressiontest
111
112    - name: Trusty (Valgrind + Fuzz Test Stack Mode)
113      script:
114        - make valgrindinstall
115        - make -C tests clean valgrindTest
116        - make clean
117        - make -C tests test-fuzzer-stackmode
118
119    - name: Trusty (ARM + Fuzz Test)
120      script:
121        - make arminstall
122        - make armfuzz
123
124    - name: Xenial (AARCH64 + Fuzz Test)
125      dist: xenial
126      script:
127        - make arminstall
128        - make aarch64fuzz
129
130    - name: Trusty (PPC + Fuzz Test)
131      script:
132        - make ppcinstall
133        - make ppcfuzz
134
135    - name: Trusty (Versions Compatibility Test)
136      script:
137        - make -C tests versionsTest
138
139    # check release number
140    - name: Tag-Specific Test
141      if: tag =~ ^v[0-9]\.[0-9]
142      script:
143        - make -C tests checkTag
144        - tests/checkTag "$TRAVIS_BRANCH"
145
146    # tests for master branch and cron job only
147    - name: OS-X
148      if: branch = master
149      os: osx
150      script:
151        - make test
152
153    - name: thread sanitizer
154      if: branch = master
155      script:
156        - make clang38install
157        - CC=clang-3.8 make tsan-test-zstream
158        - CC=clang-3.8 make tsan-fuzztest
159
160    - name: C++ and gnu90 compatibility
161      if: branch = master
162      script:
163        - make cxxtest
164        - make clean
165        - make gnu90build
166        - make clean
167        - make travis-install    # just ensures `make install` works
168
169    - name: c99 compatibility
170      if: branch = master
171      script:
172        - make c99build
173        - make -C tests test-zstd
174
175    - name: PPC64
176      if: branch = master
177      script:
178        - make ppcinstall
179        - make ppc64fuzz
180
181    - name: zlib wrapper test
182      if: branch = master
183      script:
184        - make gpp6install valgrindinstall
185        - make -C zlibWrapper test
186        - make -C zlibWrapper valgrindTest
187
188    - name: LZ4, thread pool, and partial libs tests
189      if: branch = master
190      script:
191        - make lz4install
192        - make -C tests test-lz4
193        - make clean
194        - make -C tests test-pool
195        - make clean
196        - bash tests/libzstd_partial_builds.sh
197
198    # meson dedicated test
199    - name: Xenial (Meson + clang)
200      # env: ALLOW_FAILURES=true
201      dist: xenial
202      language: cpp
203      compiler: clang
204      install:
205        - sudo apt-get install -qq liblz4-dev valgrind tree
206        - |
207          travis_retry curl -o ~/ninja.zip -L 'https://github.com/ninja-build/ninja/releases/download/v1.9.0/ninja-linux.zip' &&
208          unzip ~/ninja.zip -d ~/.local/bin
209        - |
210          travis_retry curl -o ~/get-pip.py -L 'https://bootstrap.pypa.io/get-pip.py' &&
211          python3 ~/get-pip.py --user &&
212          pip3 install --user meson
213      script:
214        - |
215          meson setup \
216            --buildtype=debugoptimized \
217            -Db_lundef=false \
218            -Dauto_features=enabled \
219            -Dbin_programs=true \
220            -Dbin_tests=true \
221            -Dbin_contrib=true \
222            -Ddefault_library=both \
223             build/meson builddir
224        - pushd builddir
225        - ninja
226        - meson test --verbose --no-rebuild
227        - DESTDIR=./staging ninja install
228        - tree ./staging
229      after_failure:
230        - cat "$TRAVIS_BUILD_DIR"/builddir/meson-logs/testlog.txt
231
232  allow_failures:
233    - env: ALLOW_FAILURES=true
234