aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/dev-long-tests.yml
blob: 16202260d0187cac88a763f73564ffd453f4a587 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
name: dev-long-tests
# Tests longer than 10mn

concurrency:
  group: long-${{ github.ref }}
  cancel-in-progress: true

on:
  pull_request:
    branches: [ dev, release, actionsTest ]

permissions: read-all

jobs:
  make-all:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: make all
      run: make all

  # lasts ~24mn
  make-test:
    runs-on: ubuntu-latest
    env:
      DEVNULLRIGHTS: 1
      READFROMBLOCKDEVICE: 1
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: make test
      run: make test

  # lasts ~26mn
  make-test-osx:
    runs-on: macos-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: OS-X test
      run: make test # make -c lib all doesn't work because of the fact that it's not a tty

  # lasts ~24mn
  make-test-32bit:
    runs-on: ubuntu-latest
    env:
      DEVNULLRIGHTS: 1
      READFROMBLOCKDEVICE: 1
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: make test
      run: |
        sudo apt-get -qqq update
        make libc6install
        CFLAGS="-m32" make test

  no-intrinsics-fuzztest:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: no intrinsics fuzztest
      run: MOREFLAGS="-DZSTD_NO_INTRINSICS" make -C tests fuzztest

  tsan-zstreamtest:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: thread sanitizer zstreamtest
      run: CC=clang ZSTREAM_TESTTIME=-T3mn make tsan-test-zstream

  ubsan-zstreamtest:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: undefined behavior sanitizer zstreamtest
      run: CC=clang make uasan-test-zstream

  # lasts ~15mn
  tsan-fuzztest:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: thread sanitizer fuzztest
      run: CC=clang make tsan-fuzztest


  big-tests-zstreamtest32:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: zstream tests in 32bit mode, with big tests
      run: |
        sudo apt-get -qqq update
        make libc6install
        CC=clang make -C tests test-zstream32 FUZZER_FLAGS="--big-tests"

  # lasts ~23mn
  gcc-8-asan-ubsan-testzstd:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: gcc-8 + ASan + UBSan + Test Zstd
      # See https://askubuntu.com/a/1428822
      run: |
        echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a /etc/apt/sources.list
        sudo apt-get -qqq update
        make gcc8install
        CC=gcc-8 make -j uasan-test-zstd </dev/null V=1

  clang-asan-ubsan-testzstd:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: clang + ASan + UBSan + Test Zstd
      run: CC=clang make -j uasan-test-zstd </dev/null V=1

  gcc-asan-ubsan-testzstd-32bit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: ASan + UBSan + Test Zstd, 32bit mode
      run: |
        sudo apt-get -qqq update
        make libc6install
        make -j uasan-test-zstd32 V=1

    # Note : external libraries must be turned off when using MSAN tests,
    # because they are not msan-instrumented,
    # so any data coming from these libraries is always considered "uninitialized"

  gcc-8-asan-ubsan-fuzz:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: gcc-8 + ASan + UBSan + Fuzz Test
      # See https://askubuntu.com/a/1428822
      run: |
        echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a /etc/apt/sources.list
        sudo apt-get -qqq update
        make gcc8install
        CC=gcc-8 FUZZER_FLAGS="--long-tests" make clean uasan-fuzztest

  clang-asan-ubsan-fuzz:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: clang + ASan + UBSan + Fuzz Test
      run: CC=clang FUZZER_FLAGS="--long-tests" make clean uasan-fuzztest

  gcc-asan-ubsan-fuzz32:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: ASan + UBSan + Fuzz Test 32bit
      run: |
        sudo apt-get -qqq update
        make libc6install
        CFLAGS="-O3 -m32" FUZZER_FLAGS="--long-tests" make uasan-fuzztest

  clang-asan-ubsan-fuzz32:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: clang + ASan + UBSan + Fuzz Test 32bit
      run: |
        sudo apt-get -qqq update
        make libc6install
        CC=clang CFLAGS="-O3 -m32" FUZZER_FLAGS="--long-tests" make uasan-fuzztest

  asan-ubsan-regression:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: ASan + UBSan + Regression Test
      run: make -j uasanregressiontest

  clang-ubsan-regression:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: clang + ASan + UBSan + Regression Test
      run: CC=clang make -j uasanregressiontest

  msan-regression:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: MSan + Regression Test
      run: make -j msanregressiontest

  clang-msan-fuzz-unoptimized:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
      - name: clang + MSan + Fuzz Test
        run: |
          sudo apt-get -qqq update
          sudo apt-get install clang
          CC=clang MOREFLAGS="-O0" make clean msan-fuzztest

  clang-msan-fuzz:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: clang + MSan + Fuzz Test
      run: |
        sudo apt-get -qqq update
        sudo apt-get install clang
        CC=clang FUZZER_FLAGS="--long-tests" make clean msan-fuzztest

  # lasts ~24mn
  clang-msan-testzstd:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: clang + MSan + Test Zstd
      run: |
        sudo apt-get update
        sudo apt-get install clang
        CC=clang make msan-test-zstd HAVE_ZLIB=0 HAVE_LZ4=0 HAVE_LZMA=0 V=1

  armfuzz:
      runs-on: ubuntu-latest
      steps:
      - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
      - name: Qemu ARM emulation + Fuzz Test
        run: |
          sudo apt-get -qqq update
          make arminstall
          make armfuzz

  valgrind-fuzz-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - name: valgrind + fuzz test stack mode    # ~ 7mn
      shell: 'script -q -e -c "bash {0}"'
      run: |
        sudo apt-get -qqq update
        make valgrindinstall
        make -C tests test-valgrind
        make clean
        make -C tests test-fuzzer-stackmode

  mingw-long-test:
    runs-on: windows-latest
    defaults:
      run:
        shell: msys2 {0}
    steps:
    - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # tag=v3
    - uses: msys2/setup-msys2@5beef6d11f48bba68b9eb503e3adc60b23c0cc36 # tag=v2
      with:
        msystem: MINGW64
        install: make
        update: true
    # Based on https://ariya.io/2020/07/on-github-actions-with-msys2
    - name: install mingw gcc
      run: pacman --noconfirm -S gcc
    - name: MINGW64 gcc fuzztest
      run: |
        export CC="gcc"
        export CXX="g++"
        export FUZZERTEST="-T2mn"
        export ZSTREAM_TESTTIME="-T2mn"
        echo "Testing $CC $CXX MINGW64"
        make -v
        $CC --version
        $CXX --version
        make -C tests fuzztest

  # lasts ~20mn
  oss-fuzz:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        sanitizer: [address, undefined, memory]
    steps:
    - name: Build Fuzzers (${{ matrix.sanitizer }})
      id: build
      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
      with:
        oss-fuzz-project-name: 'zstd'
        dry-run: false
        sanitizer: ${{ matrix.sanitizer }}
    - name: Run Fuzzers (${{ matrix.sanitizer }})
      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
      with:
        oss-fuzz-project-name: 'zstd'
        fuzz-seconds: 600
        dry-run: false
        sanitizer: ${{ matrix.sanitizer }}
    - name: Upload Crash
      uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # tag=v3.1.2
      if: failure() && steps.build.outcome == 'success'
      with:
        name: ${{ matrix.sanitizer }}-artifacts
        path: ./out/artifacts