ec0ef2b46d8f0d697c4b856e1b2c111a7d1b0d3b
[openssl.git] / .github / workflows / ci.yml
1 # Copyright 2021-2022 The OpenSSL Project Authors. All Rights Reserved.
2 #
3 # Licensed under the Apache License 2.0 (the "License").  You may not use
4 # this file except in compliance with the License.  You can obtain a copy
5 # in the file LICENSE in the source distribution or at
6 # https://www.openssl.org/source/license.html
7
8 name: GitHub CI
9
10 on: [pull_request, push]
11
12 # for some reason, this does not work:
13 # variables:
14 #   BUILDOPTS: "-j4"
15 #   HARNESS_JOBS: "${HARNESS_JOBS:-4}"
16
17 # for some reason, this does not work:
18 # before_script:
19 #     - make="make -s"
20
21 permissions:
22   contents: read
23
24 jobs:
25   check_update:
26     runs-on: ubuntu-latest
27     steps:
28     - name: install unifdef
29       run: |
30         sudo apt-get update
31         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install unifdef
32     - uses: actions/checkout@v3
33       with:
34         fetch-depth: 0
35     - name: config
36       run: ./config --banner=Configured --strict-warnings enable-fips enable-quic && perl configdata.pm --dump
37     - name: make build_generated
38       run: make -s build_generated
39     - name: make update
40       run: make update
41     - name: git diff
42       run: git diff --exit-code
43
44   check_docs:
45     runs-on: ubuntu-latest
46     steps:
47     - uses: actions/checkout@v3
48     - name: config
49       run: ./config --banner=Configured --strict-warnings enable-fips enable-quic && perl configdata.pm --dump
50     - name: make build_generated
51       run: make -s build_generated
52     - name: make doc-nits
53       run: make doc-nits
54     - name: make md-nits
55       run: |
56           sudo gem install mdl
57           make md-nits
58
59   # This checks that we use ANSI C language syntax and semantics.
60   # We are not as strict with libraries, but rather adapt to what's
61   # expected to be available in a certain version of each platform.
62   check-ansi:
63     runs-on: ubuntu-latest
64     steps:
65     - uses: actions/checkout@v3
66     - name: config
67       run: CPPFLAGS=-ansi ./config --banner=Configured no-asm no-makedepend enable-buildtest-c++ enable-fips enable-quic --strict-warnings -D_DEFAULT_SOURCE && perl configdata.pm --dump
68     - name: make
69       run: make -s -j4
70
71   basic_gcc:
72     runs-on: ubuntu-latest
73     steps:
74     - uses: actions/checkout@v3
75     - name: localegen
76       run: sudo locale-gen tr_TR.UTF-8
77     - name: config
78       run: CC=gcc ./config --banner=Configured enable-fips enable-quic --strict-warnings && perl configdata.pm --dump
79     - name: make
80       run: make -s -j4
81     - name: make test
82       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
83
84   basic_clang:
85     runs-on: ubuntu-latest
86     steps:
87     - uses: actions/checkout@v3
88     - name: config
89       run: CC=clang ./config --banner=Configured no-fips --strict-warnings && perl configdata.pm --dump
90     - name: make
91       run: make -s -j4
92     - name: make test
93       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
94
95   minimal:
96     runs-on: ubuntu-latest
97     steps:
98     - uses: actions/checkout@v3
99     - name: config
100       run: ./config --banner=Configured --strict-warnings no-bulk no-pic no-asm -DOPENSSL_NO_SECURE_MEMORY -DOPENSSL_SMALL_FOOTPRINT && perl configdata.pm --dump
101     - name: make
102       run: make -j4 # verbose, so no -s here
103     - name: make test
104       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
105
106   no-deprecated:
107     runs-on: ubuntu-latest
108     steps:
109     - uses: actions/checkout@v3
110     - name: config
111       run: ./config --banner=Configured --strict-warnings no-deprecated enable-fips enable-quic && perl configdata.pm --dump
112     - name: make
113       run: make -s -j4
114     - name: make test
115       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
116
117   no-shared:
118     strategy:
119       matrix:
120         os: [ ubuntu-latest, macos-latest ]
121     runs-on: ${{matrix.os}}
122     steps:
123     - uses: actions/checkout@v3
124     - name: config
125       run: ./config --banner=Configured --strict-warnings no-shared no-fips && perl configdata.pm --dump
126     - name: make
127       run: make -s -j4
128     - name: make test
129       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
130
131   non-caching:
132     runs-on: ubuntu-latest
133     steps:
134     - uses: actions/checkout@v3
135     - name: config
136       run: ./config --banner=Configured --debug enable-asan enable-ubsan no-cached-fetch no-fips no-dtls no-tls1 no-tls1-method no-tls1_1 no-tls1_1-method no-async && perl configdata.pm --dump
137     - name: make
138       run: make -s -j4
139     - name: make test
140       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4} OPENSSL_TEST_RAND_ORDER=0 TESTS="-test_fuzz* -test_ssl_* -test_sslapi -test_evp -test_cmp_http -test_verify -test_cms -test_store -test_enc -[01][0-9]"
141
142   address_ub_sanitizer:
143     runs-on: ubuntu-latest
144     steps:
145     - uses: actions/checkout@v3
146     - name: config
147       run: ./config --banner=Configured --debug enable-asan enable-ubsan enable-rc5 enable-md2 enable-ec_nistp_64_gcc_128 enable-fips enable-quic -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION && perl configdata.pm --dump
148     - name: make
149       run: make -s -j4
150     - name: make test
151       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4} OPENSSL_TEST_RAND_ORDER=0
152
153   memory_sanitizer:
154     runs-on: ubuntu-latest
155     steps:
156     - uses: actions/checkout@v3
157     - name: config
158       # --debug -O1 is to produce a debug build that runs in a reasonable amount of time
159       run: CC=clang ./config --banner=Configured --debug -O1 -fsanitize=memory -DOSSL_SANITIZE_MEMORY -fno-optimize-sibling-calls enable-rc5 enable-md2 enable-ec_nistp_64_gcc_128 enable-fips enable-quic && perl configdata.pm --dump
160     - name: make
161       run: make -s -j4
162     - name: make test
163       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4} OPENSSL_TEST_RAND_ORDER=0
164
165   threads_sanitizer:
166     runs-on: ubuntu-latest
167     steps:
168     - uses: actions/checkout@v3
169     - name: config
170       run: CC=clang ./config --banner=Configured no-fips --strict-warnings -fsanitize=thread && perl configdata.pm --dump
171     - name: make
172       run: make -s -j4
173     - name: make test
174       run: make V=1 TESTS="test_threads test_internal_provider test_provfetch test_provider test_pbe test_evp_kdf test_pkcs12 test_store test_evp" test HARNESS_JOBS=${HARNESS_JOBS:-4}
175
176   enable_non-default_options:
177     runs-on: ubuntu-latest
178     steps:
179     - uses: actions/checkout@v3
180     - name: modprobe tls
181       run: sudo modprobe tls
182     - name: config
183       run: ./config --banner=Configured --strict-warnings no-ec enable-ssl-trace enable-zlib enable-zlib-dynamic enable-crypto-mdebug enable-crypto-mdebug-backtrace enable-egd enable-ktls enable-fips enable-quic && perl configdata.pm --dump
184     - name: make
185       run: make -s -j4
186     - name: make test
187       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
188
189   fips_and_ktls:
190     runs-on: ubuntu-latest
191     steps:
192     - uses: actions/checkout@v3
193     - name: modprobe tls
194       run: sudo modprobe tls
195     - name: config
196       run: ./config --banner=Configured --strict-warnings enable-ktls enable-fips enable-quic && perl configdata.pm --dump
197     - name: make
198       run: make -s -j4
199     - name: make test
200       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
201
202   enable_brotli_dynamic:
203     runs-on: ubuntu-latest
204     steps:
205     - name: install brotli
206       run: |
207         sudo apt-get update
208         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install brotli libbrotli1 libbrotli-dev
209     - name: checkout openssl
210       uses: actions/checkout@v3
211     - name: config
212       run: ./config enable-comp enable-brotli enable-brotli-dynamic && perl configdata.pm --dump
213     - name: make
214       run: make -s -j4
215     - name: make test
216       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
217
218   enable_zstd_dynamic:
219     runs-on: ubuntu-latest
220     steps:
221     - name: install zstd
222       run: |
223         sudo apt-get update
224         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install zstd libzstd1 libzstd-dev
225     - name: checkout openssl
226       uses: actions/checkout@v3
227     - name: config
228       run: ./config enable-comp enable-zstd enable-zstd-dynamic && perl configdata.pm --dump
229     - name: make
230       run: make -s -j4
231     - name: make test
232       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
233
234   enable_brotli_and_zstd_dynamic:
235     runs-on: ubuntu-latest
236     steps:
237     - name: install brotli and zstd
238       run: |
239         sudo apt-get update
240         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install brotli libbrotli1 libbrotli-dev
241         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install zstd libzstd1 libzstd-dev
242     - name: checkout openssl
243       uses: actions/checkout@v3
244     - name: config
245       run: ./config enable-comp enable-brotli enable-brotli-dynamic enable-zstd enable-zstd-dynamic && perl configdata.pm --dump
246     - name: make
247       run: make -s -j4
248     - name: make test
249       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
250
251   enable_brotli_and_asan_ubsan:
252     runs-on: ubuntu-latest
253     steps:
254     - name: install brotli
255       run: |
256         sudo apt-get update
257         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install brotli libbrotli1 libbrotli-dev
258     - name: checkout openssl
259       uses: actions/checkout@v3
260     - name: config
261       run: ./config --banner=Configured --debug enable-asan enable-ubsan enable-comp enable-brotli -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -DPEDANTIC && perl configdata.pm --dump
262     - name: make
263       run: make -s -j4
264     - name: make test
265       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4} OPENSSL_TEST_RAND_ORDER=0
266
267   enable_zstd_and_asan_ubsan:
268     runs-on: ubuntu-latest
269     steps:
270     - name: install zstd
271       run: |
272         sudo apt-get update
273         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install zstd libzstd1 libzstd-dev
274     - name: checkout openssl
275       uses: actions/checkout@v3
276     - name: config
277       run: ./config --banner=Configured --debug enable-asan enable-ubsan enable-comp enable-zstd -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -DPEDANTIC && perl configdata.pm --dump
278     - name: make
279       run: make -s -j4
280     - name: make test
281       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4} OPENSSL_TEST_RAND_ORDER=0
282
283   no-legacy:
284     runs-on: ubuntu-latest
285     steps:
286     - uses: actions/checkout@v3
287     - name: config
288       run: ./config --banner=Configured --strict-warnings no-legacy enable-fips enable-quic && perl configdata.pm --dump
289     - name: make
290       run: make -s -j4
291     - name: make test
292       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
293
294   legacy:
295     runs-on: ubuntu-latest
296     steps:
297     - uses: actions/checkout@v3
298     - name: config
299       run: ./config --banner=Configured -Werror --debug no-afalgeng no-shared enable-crypto-mdebug enable-rc5 enable-md2 enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers enable-zlib enable-ec_nistp_64_gcc_128 no-fips && perl configdata.pm --dump
300     - name: make
301       run: make -s -j4
302     - name: make test
303       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
304
305   enable-tfo:
306     strategy:
307       matrix:
308         os: [ ubuntu-latest, macos-latest ]
309     runs-on: ${{matrix.os}}
310     steps:
311     - uses: actions/checkout@v3
312     - name: config
313       run: CC=gcc ./config --banner=Configured enable-tfo enable-quic --strict-warnings && perl configdata.pm --dump
314     - name: make
315       run: make -s -j4
316     - name: make test
317       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
318
319   buildtest:
320     runs-on: ubuntu-latest
321     steps:
322     - uses: actions/checkout@v3
323     - name: config
324       run: ./config --banner=Configured no-asm no-makedepend enable-buildtest-c++ enable-fips --strict-warnings -D_DEFAULT_SOURCE && perl configdata.pm --dump
325     - name: make
326       run: make -s -j4
327     - name: make test
328       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
329
330   out-of-source-and-install:
331     strategy:
332       matrix:
333         os: [ubuntu-latest, macos-latest ]
334     runs-on: ${{matrix.os}}
335     steps:
336     - uses: actions/checkout@v3
337     - name: extra preparations
338       run: |
339         mkdir ./build
340         mkdir ./install
341     - name: config
342       run: ../config --banner=Configured enable-fips enable-acvp-tests --strict-warnings --prefix=$(cd ../install; pwd) && perl configdata.pm --dump
343       working-directory: ./build
344     - name: make
345       run: make -s -j4
346       working-directory: ./build
347     - name: make test
348       run: make test HARNESS_JOBS=${HARNESS_JOBS:-4}
349       working-directory: ./build
350     - name: make install
351       run: make install
352       working-directory: ./build
353
354   external-tests:
355     runs-on: ubuntu-latest
356     steps:
357     - uses: actions/checkout@v3
358       with:
359         submodules: recursive
360     - name: package installs
361       run: |
362         sudo apt-get update
363         sudo apt-get -yq install bison gettext keyutils ldap-utils libldap2-dev libkeyutils-dev python3 python3-paste python3-pyrad slapd tcsh python3-virtualenv virtualenv python3-kdcproxy
364     - name: install cpanm and Test2::V0 for gost_engine testing
365       uses: perl-actions/install-with-cpanm@v1
366       with:
367         install: Test2::V0
368     - name: setup hostname workaround
369       run: sudo hostname localhost
370     - name: config
371       run: ./config --banner=Configured --strict-warnings --debug no-afalgeng enable-rc5 enable-md2 enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers enable-zlib enable-ec_nistp_64_gcc_128 enable-external-tests no-fips && perl configdata.pm --dump
372     - name: make
373       run: make -s -j4
374     - name: test external gost-engine
375       run: make test TESTS="test_external_gost_engine"
376     - name: test external krb5
377       run: make test TESTS="test_external_krb5"
378     - name: test external_tlsfuzzer
379       run: make test TESTS="test_external_tlsfuzzer"
380     - name: test external oqs-provider
381       run: make test TESTS="test_external_oqsprovider"
382
383   external-test-pyca:
384     runs-on: ubuntu-latest
385     strategy:
386       matrix:
387         RUST:
388           - 1.51.0
389         PYTHON:
390           - 3.9
391     steps:
392     - uses: actions/checkout@v3
393       with:
394         submodules: recursive
395     - name: Configure OpenSSL
396       run: ./config --banner=Configured --strict-warnings --debug enable-external-tests && perl configdata.pm --dump
397     - name: make
398       run: make -s -j4
399     - name: Setup Python
400       uses: actions/setup-python@v4.5.0
401       with:
402         python-version: ${{ matrix.PYTHON }}
403     - uses: actions-rs/toolchain@v1
404       with:
405         profile: minimal
406         toolchain: ${{ matrix.RUST }}
407         override: true
408         default: true
409     - name: test external pyca
410       run: make test TESTS="test_external_pyca" VERBOSE=1