xref: /openbmc/qemu/.gitlab-ci.yml (revision e6b5a071)
1# Currently we have two build stages after our containers are built:
2#  - build (for traditional build and test or first stage build)
3#  - test (for test stages, using build artefacts from a build stage)
4stages:
5  - containers
6  - containers-layer2
7  - build
8  - test
9
10# We assume GitLab has it's own caching set up for RPM/APT repositories so we
11# just take care of avocado assets here.
12cache:
13  paths:
14    - $HOME/avocado/data/cache
15
16include:
17  - local: '/.gitlab-ci.d/edk2.yml'
18  - local: '/.gitlab-ci.d/opensbi.yml'
19  - local: '/.gitlab-ci.d/containers.yml'
20  - local: '/.gitlab-ci.d/crossbuilds.yml'
21
22.native_build_job_template: &native_build_job_definition
23  stage: build
24  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
25  before_script:
26    - JOBS=$(expr $(nproc) + 1)
27  script:
28    - mkdir build
29    - cd build
30    - if test -n "$TARGETS";
31      then
32        ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ;
33      else
34        ../configure --enable-werror $CONFIGURE_ARGS ;
35      fi || { cat config.log meson-logs/meson-log.txt && exit 1; }
36    - make -j"$JOBS"
37    - if test -n "$MAKE_CHECK_ARGS";
38      then
39        make -j"$JOBS" $MAKE_CHECK_ARGS ;
40      fi
41
42.native_test_job_template: &native_test_job_definition
43  stage: test
44  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
45  script:
46    - cd build
47    - find . -type f -exec touch {} +
48    - make $MAKE_CHECK_ARGS
49
50.acceptance_template: &acceptance_definition
51  cache:
52    key: "${CI_JOB_NAME}-cache"
53    paths:
54      - ${CI_PROJECT_DIR}/avocado-cache
55    policy: pull-push
56  artifacts:
57    paths:
58      - build/tests/results/latest/results.xml
59    reports:
60      junit: build/tests/results/latest/results.xml
61  before_script:
62    - mkdir -p ~/.config/avocado
63    - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
64    - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
65           >> ~/.config/avocado/avocado.conf
66    - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
67        du -chs ${CI_PROJECT_DIR}/avocado-cache ;
68      fi
69  after_script:
70    - cd build
71    - python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP", "CANCEL")]' | xargs cat
72    - du -chs ${CI_PROJECT_DIR}/avocado-cache
73
74build-system-ubuntu:
75  <<: *native_build_job_definition
76  variables:
77    IMAGE: ubuntu2004
78    TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
79      moxie-softmmu microblazeel-softmmu mips64el-softmmu
80    MAKE_CHECK_ARGS: check-build
81  artifacts:
82    expire_in: 2 days
83    paths:
84      - build
85
86check-system-ubuntu:
87  <<: *native_test_job_definition
88  needs:
89    - job: build-system-ubuntu
90      artifacts: true
91  variables:
92    IMAGE: ubuntu2004
93    MAKE_CHECK_ARGS: check
94
95acceptance-system-ubuntu:
96  <<: *native_test_job_definition
97  needs:
98    - job: build-system-ubuntu
99      artifacts: true
100  variables:
101    IMAGE: ubuntu2004
102    MAKE_CHECK_ARGS: check-acceptance
103  <<: *acceptance_definition
104
105build-system-debian:
106  <<: *native_build_job_definition
107  variables:
108    IMAGE: debian-amd64
109    TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
110      riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
111    MAKE_CHECK_ARGS: check-build
112  artifacts:
113    expire_in: 2 days
114    paths:
115      - build
116
117check-system-debian:
118  <<: *native_test_job_definition
119  needs:
120    - job: build-system-debian
121      artifacts: true
122  variables:
123    IMAGE: debian-amd64
124    MAKE_CHECK_ARGS: check
125
126acceptance-system-debian:
127  <<: *native_test_job_definition
128  needs:
129    - job: build-system-debian
130      artifacts: true
131  variables:
132    IMAGE: debian-amd64
133    MAKE_CHECK_ARGS: check-acceptance
134  <<: *acceptance_definition
135
136build-system-fedora:
137  <<: *native_build_job_definition
138  variables:
139    IMAGE: fedora
140    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
141    TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
142      xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
143    MAKE_CHECK_ARGS: check-build
144  artifacts:
145    expire_in: 2 days
146    paths:
147      - build
148
149check-system-fedora:
150  <<: *native_test_job_definition
151  needs:
152    - job: build-system-fedora
153      artifacts: true
154  variables:
155    IMAGE: fedora
156    MAKE_CHECK_ARGS: check
157
158acceptance-system-fedora:
159  <<: *native_test_job_definition
160  needs:
161    - job: build-system-fedora
162      artifacts: true
163  variables:
164    IMAGE: fedora
165    MAKE_CHECK_ARGS: check-acceptance
166  <<: *acceptance_definition
167
168build-system-centos:
169  <<: *native_build_job_definition
170  variables:
171    IMAGE: centos8
172    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
173    TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
174      x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
175    MAKE_CHECK_ARGS: check-build
176  artifacts:
177    expire_in: 2 days
178    paths:
179      - build
180
181check-system-centos:
182  <<: *native_test_job_definition
183  needs:
184    - job: build-system-centos
185      artifacts: true
186  variables:
187    IMAGE: centos8
188    MAKE_CHECK_ARGS: check
189
190acceptance-system-centos:
191  <<: *native_test_job_definition
192  needs:
193    - job: build-system-centos
194      artifacts: true
195  variables:
196    IMAGE: centos8
197    MAKE_CHECK_ARGS: check-acceptance
198  <<: *acceptance_definition
199
200build-disabled:
201  <<: *native_build_job_definition
202  variables:
203    IMAGE: fedora
204    CONFIGURE_ARGS: --disable-attr --disable-avx2 --disable-bochs
205      --disable-brlapi --disable-bzip2 --disable-cap-ng --disable-capstone
206      --disable-cloop --disable-coroutine-pool --disable-curl --disable-curses
207      --disable-dmg --disable-docs --disable-glusterfs --disable-gnutls
208      --disable-gtk --disable-guest-agent --disable-iconv --disable-kvm
209      --disable-libiscsi --disable-libpmem --disable-libssh --disable-libusb
210      --disable-libxml2 --disable-linux-aio --disable-live-block-migration
211      --disable-lzo --disable-malloc-trim --disable-mpath --disable-nettle
212      --disable-numa --disable-parallels --disable-pie --disable-qcow1
213      --disable-qed --disable-qom-cast-debug --disable-rbd --disable-rdma
214      --disable-replication --disable-sdl --disable-seccomp --disable-sheepdog
215      --disable-slirp --disable-smartcard --disable-snappy --disable-spice
216      --disable-strip --disable-tpm --disable-usb-redir --disable-vdi
217      --disable-vhost-crypto --disable-vhost-net --disable-vhost-scsi
218      --disable-vhost-user --disable-vhost-vdpa --disable-vhost-vsock
219      --disable-virglrenderer --disable-vnc --disable-vte --disable-vvfat
220      --disable-xen --disable-zstd
221    TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
222      s390x-softmmu i386-linux-user
223    MAKE_CHECK_ARGS: check-qtest SPEED=slow
224
225build-tcg-disabled:
226  <<: *native_build_job_definition
227  variables:
228    IMAGE: centos8
229  script:
230    - mkdir build
231    - cd build
232    - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; }
233    - make -j"$JOBS"
234    - make check-unit
235    - make check-qapi-schema
236    - cd tests/qemu-iotests/
237    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
238            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
239            170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
240    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
241            124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
242            208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
243            260 261 262 263 264 270 272 273 277 279
244
245build-user:
246  <<: *native_build_job_definition
247  variables:
248    IMAGE: debian-all-test-cross
249    CONFIGURE_ARGS: --disable-tools --disable-system
250    MAKE_CHECK_ARGS: check-tcg
251
252# Run check-tcg against linux-user (with plugins)
253# we skip sparc64-linux-user until it has been fixed somewhat
254# we skip cris-linux-user as it doesn't use the common run loop
255build-user-plugins:
256  <<: *native_build_job_definition
257  variables:
258    IMAGE: debian-all-test-cross
259    CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
260    MAKE_CHECK_ARGS: check-tcg
261  timeout: 1h 30m
262
263build-clang:
264  <<: *native_build_job_definition
265  variables:
266    IMAGE: fedora
267    CONFIGURE_ARGS: --cc=clang --cxx=clang++
268    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
269      ppc-softmmu s390x-softmmu arm-linux-user
270    MAKE_CHECK_ARGS: check
271
272# These targets are on the way out
273build-deprecated:
274  <<: *native_build_job_definition
275  variables:
276    IMAGE: debian-all-test-cross
277    CONFIGURE_ARGS: --disable-docs --disable-tools
278    MAKE_CHECK_ARGS: build-tcg
279    TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
280      unicore32-softmmu
281  artifacts:
282    expire_in: 2 days
283    paths:
284      - build
285
286# We split the check-tcg step as test failures are expected but we still
287# want to catch the build breaking.
288check-deprecated:
289  <<: *native_test_job_definition
290  needs:
291    - job: build-deprecated
292      artifacts: true
293  variables:
294    IMAGE: debian-all-test-cross
295    MAKE_CHECK_ARGS: check-tcg
296  allow_failure: true
297
298build-oss-fuzz:
299  <<: *native_build_job_definition
300  variables:
301    IMAGE: fedora
302  script:
303    - mkdir build-oss-fuzz
304    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
305      ./scripts/oss-fuzz/build.sh
306    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
307    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
308                      | grep -v slirp); do
309        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
310        echo Testing ${fuzzer} ... ;
311        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
312      done
313    # Unrelated to fuzzer: run some tests with -fsanitize=address
314    - cd build-oss-fuzz && make check-qtest-i386 check-unit
315
316build-tci:
317  <<: *native_build_job_definition
318  variables:
319    IMAGE: fedora
320  script:
321    - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
322    - mkdir build
323    - cd build
324    - ../configure --enable-tcg-interpreter
325        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
326    - make -j"$JOBS"
327    - make run-tcg-tests-x86_64-softmmu
328    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
329    - for tg in $TARGETS ; do
330        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
331        ./tests/qtest/boot-serial-test || exit 1 ;
332        ./tests/qtest/cdrom-test || exit 1 ;
333      done
334    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
335    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
336
337# Most jobs test latest gcrypt or nettle builds
338#
339# These jobs test old gcrypt and nettle from RHEL7
340# which had some API differences.
341build-crypto-old-nettle:
342  <<: *native_build_job_definition
343  variables:
344    IMAGE: centos7
345    TARGETS: x86_64-softmmu x86_64-linux-user
346    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
347    MAKE_CHECK_ARGS: check-build
348  artifacts:
349    paths:
350      - build
351
352check-crypto-old-nettle:
353  <<: *native_test_job_definition
354  needs:
355    - job: build-crypto-old-nettle
356      artifacts: true
357  variables:
358    IMAGE: centos7
359    MAKE_CHECK_ARGS: check
360
361
362build-crypto-old-gcrypt:
363  <<: *native_build_job_definition
364  variables:
365    IMAGE: centos7
366    TARGETS: x86_64-softmmu x86_64-linux-user
367    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
368    MAKE_CHECK_ARGS: check-build
369  artifacts:
370    paths:
371      - build
372
373check-crypto-old-gcrypt:
374  <<: *native_test_job_definition
375  needs:
376    - job: build-crypto-old-gcrypt
377      artifacts: true
378  variables:
379    IMAGE: centos7
380    MAKE_CHECK_ARGS: check
381
382
383build-crypto-only-gnutls:
384  <<: *native_build_job_definition
385  variables:
386    IMAGE: centos7
387    TARGETS: x86_64-softmmu x86_64-linux-user
388    CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
389    MAKE_CHECK_ARGS: check-build
390  artifacts:
391    paths:
392      - build
393
394check-crypto-only-gnutls:
395  <<: *native_test_job_definition
396  needs:
397    - job: build-crypto-only-gnutls
398      artifacts: true
399  variables:
400    IMAGE: centos7
401    MAKE_CHECK_ARGS: check
402
403
404check-patch:
405  stage: build
406  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
407  script: .gitlab-ci.d/check-patch.py
408  except:
409    variables:
410      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
411  variables:
412    GIT_DEPTH: 1000
413  allow_failure: true
414
415check-dco:
416  stage: build
417  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
418  script: .gitlab-ci.d/check-dco.py
419  except:
420    variables:
421      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
422  variables:
423    GIT_DEPTH: 1000
424