xref: /qemu/.gitlab-ci.yml (revision f917eed3)
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
10include:
11  - local: '/.gitlab-ci.d/edk2.yml'
12  - local: '/.gitlab-ci.d/opensbi.yml'
13  - local: '/.gitlab-ci.d/containers.yml'
14  - local: '/.gitlab-ci.d/crossbuilds.yml'
15
16.native_build_job_template: &native_build_job_definition
17  stage: build
18  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
19  before_script:
20    - JOBS=$(expr $(nproc) + 1)
21    - sed -i s,git.qemu.org/git,gitlab.com/qemu-project, .gitmodules
22  script:
23    - mkdir build
24    - cd build
25    - if test -n "$TARGETS";
26      then
27        ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ;
28      else
29        ../configure --enable-werror $CONFIGURE_ARGS ;
30      fi || { cat config.log meson-logs/meson-log.txt && exit 1; }
31    - make -j"$JOBS"
32    - if test -n "$MAKE_CHECK_ARGS";
33      then
34        make -j"$JOBS" $MAKE_CHECK_ARGS ;
35      fi
36
37.native_test_job_template: &native_test_job_definition
38  stage: test
39  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
40  script:
41    - cd build
42    - find . -type f -exec touch {} +
43    - make $MAKE_CHECK_ARGS
44
45.acceptance_template: &acceptance_definition
46  cache:
47    key: "${CI_JOB_NAME}-cache"
48    paths:
49      - ${CI_PROJECT_DIR}/avocado-cache
50    policy: pull-push
51  artifacts:
52    paths:
53      - build/tests/results/latest/results.xml
54    reports:
55      junit: build/tests/results/latest/results.xml
56  before_script:
57    - mkdir -p ~/.config/avocado
58    - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
59    - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
60           >> ~/.config/avocado/avocado.conf
61    - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
62        du -chs ${CI_PROJECT_DIR}/avocado-cache ;
63      fi
64    - export AVOCADO_ALLOW_UNTRUSTED_CODE=1
65  after_script:
66    - cd build
67    - 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
68    - du -chs ${CI_PROJECT_DIR}/avocado-cache
69
70build-system-ubuntu:
71  <<: *native_build_job_definition
72  variables:
73    IMAGE: ubuntu2004
74    TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
75      moxie-softmmu microblazeel-softmmu mips64el-softmmu
76    MAKE_CHECK_ARGS: check-build
77    CONFIGURE_ARGS: --enable-docs
78  artifacts:
79    expire_in: 2 days
80    paths:
81      - build
82
83check-system-ubuntu:
84  <<: *native_test_job_definition
85  needs:
86    - job: build-system-ubuntu
87      artifacts: true
88  variables:
89    IMAGE: ubuntu2004
90    MAKE_CHECK_ARGS: check
91
92acceptance-system-ubuntu:
93  <<: *native_test_job_definition
94  needs:
95    - job: build-system-ubuntu
96      artifacts: true
97  variables:
98    IMAGE: ubuntu2004
99    MAKE_CHECK_ARGS: check-acceptance
100  <<: *acceptance_definition
101
102build-system-debian:
103  <<: *native_build_job_definition
104  variables:
105    IMAGE: debian-amd64
106    TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
107      riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
108    MAKE_CHECK_ARGS: check-build
109    CONFIGURE_ARGS: --enable-docs
110  artifacts:
111    expire_in: 2 days
112    paths:
113      - build
114
115check-system-debian:
116  <<: *native_test_job_definition
117  needs:
118    - job: build-system-debian
119      artifacts: true
120  variables:
121    IMAGE: debian-amd64
122    MAKE_CHECK_ARGS: check
123
124acceptance-system-debian:
125  <<: *native_test_job_definition
126  needs:
127    - job: build-system-debian
128      artifacts: true
129  variables:
130    IMAGE: debian-amd64
131    MAKE_CHECK_ARGS: check-acceptance
132  <<: *acceptance_definition
133
134build-system-fedora:
135  <<: *native_build_job_definition
136  variables:
137    IMAGE: fedora
138    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
139    TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
140      xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
141    MAKE_CHECK_ARGS: check-build
142  artifacts:
143    expire_in: 2 days
144    paths:
145      - build
146
147check-system-fedora:
148  <<: *native_test_job_definition
149  needs:
150    - job: build-system-fedora
151      artifacts: true
152  variables:
153    IMAGE: fedora
154    MAKE_CHECK_ARGS: check
155
156acceptance-system-fedora:
157  <<: *native_test_job_definition
158  needs:
159    - job: build-system-fedora
160      artifacts: true
161  variables:
162    IMAGE: fedora
163    MAKE_CHECK_ARGS: check-acceptance
164  <<: *acceptance_definition
165
166build-system-centos:
167  <<: *native_build_job_definition
168  variables:
169    IMAGE: centos8
170    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
171    TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
172      x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
173    MAKE_CHECK_ARGS: check-build
174  artifacts:
175    expire_in: 2 days
176    paths:
177      - build
178
179check-system-centos:
180  <<: *native_test_job_definition
181  needs:
182    - job: build-system-centos
183      artifacts: true
184  variables:
185    IMAGE: centos8
186    MAKE_CHECK_ARGS: check
187
188acceptance-system-centos:
189  <<: *native_test_job_definition
190  needs:
191    - job: build-system-centos
192      artifacts: true
193  variables:
194    IMAGE: centos8
195    MAKE_CHECK_ARGS: check-acceptance
196  <<: *acceptance_definition
197
198build-disabled:
199  <<: *native_build_job_definition
200  variables:
201    IMAGE: fedora
202    CONFIGURE_ARGS:
203      --disable-attr
204      --disable-auth-pam
205      --disable-avx2
206      --disable-bochs
207      --disable-brlapi
208      --disable-bzip2
209      --disable-cap-ng
210      --disable-capstone
211      --disable-cloop
212      --disable-coroutine-pool
213      --disable-curl
214      --disable-curses
215      --disable-dmg
216      --disable-docs
217      --disable-gcrypt
218      --disable-glusterfs
219      --disable-gnutls
220      --disable-gtk
221      --disable-guest-agent
222      --disable-iconv
223      --disable-keyring
224      --disable-kvm
225      --disable-libiscsi
226      --disable-libpmem
227      --disable-libssh
228      --disable-libudev
229      --disable-libusb
230      --disable-libxml2
231      --disable-linux-aio
232      --disable-live-block-migration
233      --disable-lzo
234      --disable-malloc-trim
235      --disable-mpath
236      --disable-nettle
237      --disable-numa
238      --disable-opengl
239      --disable-parallels
240      --disable-pie
241      --disable-qcow1
242      --disable-qed
243      --disable-qom-cast-debug
244      --disable-rbd
245      --disable-rdma
246      --disable-replication
247      --disable-sdl
248      --disable-seccomp
249      --disable-sheepdog
250      --disable-slirp
251      --disable-smartcard
252      --disable-snappy
253      --disable-sparse
254      --disable-spice
255      --disable-strip
256      --disable-tpm
257      --disable-usb-redir
258      --disable-vdi
259      --disable-vhost-crypto
260      --disable-vhost-net
261      --disable-vhost-scsi
262      --disable-vhost-user
263      --disable-vhost-vdpa
264      --disable-vhost-vsock
265      --disable-virglrenderer
266      --disable-vnc
267      --disable-vte
268      --disable-vvfat
269      --disable-xen
270      --disable-zstd
271    TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
272      s390x-softmmu i386-linux-user
273    MAKE_CHECK_ARGS: check-qtest SPEED=slow
274
275# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
276# the configure script. The container doesn't contain Xen headers so
277# Xen accelerator is not detected / selected. As result it build the
278# i386-softmmu and x86_64-softmmu with KVM being the single accelerator
279# available.
280build-tcg-disabled:
281  <<: *native_build_job_definition
282  variables:
283    IMAGE: centos8
284  script:
285    - mkdir build
286    - cd build
287    - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; }
288    - make -j"$JOBS"
289    - make check-unit
290    - make check-qapi-schema
291    - cd tests/qemu-iotests/
292    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
293            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
294            170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
295    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
296            124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
297            208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
298            260 261 262 263 264 270 272 273 277 279
299
300build-user:
301  <<: *native_build_job_definition
302  variables:
303    IMAGE: debian-all-test-cross
304    CONFIGURE_ARGS: --disable-tools --disable-system
305    MAKE_CHECK_ARGS: check-tcg
306
307build-user-static:
308  <<: *native_build_job_definition
309  variables:
310    IMAGE: debian-all-test-cross
311    CONFIGURE_ARGS: --disable-tools --disable-system --static
312    MAKE_CHECK_ARGS: check-tcg
313
314# Only build the softmmu targets we have check-tcg tests for
315build-some-softmmu:
316  <<: *native_build_job_definition
317  variables:
318    IMAGE: debian-all-test-cross
319    CONFIGURE_ARGS: --disable-tools --enable-debug-tcg
320    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
321    MAKE_CHECK_ARGS: check-tcg
322
323# Run check-tcg against linux-user (with plugins)
324# we skip sparc64-linux-user until it has been fixed somewhat
325# we skip cris-linux-user as it doesn't use the common run loop
326build-user-plugins:
327  <<: *native_build_job_definition
328  variables:
329    IMAGE: debian-all-test-cross
330    CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
331    MAKE_CHECK_ARGS: check-tcg
332  timeout: 1h 30m
333
334build-some-softmmu-plugins:
335  <<: *native_build_job_definition
336  variables:
337    IMAGE: debian-all-test-cross
338    CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
339    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
340    MAKE_CHECK_ARGS: check-tcg
341
342build-clang:
343  <<: *native_build_job_definition
344  variables:
345    IMAGE: fedora
346    CONFIGURE_ARGS: --cc=clang --cxx=clang++
347    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
348      ppc-softmmu s390x-softmmu arm-linux-user
349    MAKE_CHECK_ARGS: check
350
351# These targets are on the way out
352build-deprecated:
353  <<: *native_build_job_definition
354  variables:
355    IMAGE: debian-all-test-cross
356    CONFIGURE_ARGS: --disable-docs --disable-tools
357    MAKE_CHECK_ARGS: build-tcg
358    TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
359      unicore32-softmmu
360  artifacts:
361    expire_in: 2 days
362    paths:
363      - build
364
365# We split the check-tcg step as test failures are expected but we still
366# want to catch the build breaking.
367check-deprecated:
368  <<: *native_test_job_definition
369  needs:
370    - job: build-deprecated
371      artifacts: true
372  variables:
373    IMAGE: debian-all-test-cross
374    MAKE_CHECK_ARGS: check-tcg
375  allow_failure: true
376
377build-oss-fuzz:
378  <<: *native_build_job_definition
379  variables:
380    IMAGE: fedora
381  script:
382    - mkdir build-oss-fuzz
383    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
384      ./scripts/oss-fuzz/build.sh
385    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
386    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
387                      | grep -v slirp); do
388        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
389        echo Testing ${fuzzer} ... ;
390        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
391      done
392    # Unrelated to fuzzer: run some tests with -fsanitize=address
393    - cd build-oss-fuzz && make check-qtest-i386 check-unit
394
395build-tci:
396  <<: *native_build_job_definition
397  variables:
398    IMAGE: fedora
399  script:
400    - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
401    - mkdir build
402    - cd build
403    - ../configure --enable-tcg-interpreter
404        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
405    - make -j"$JOBS"
406    - make run-tcg-tests-x86_64-softmmu
407    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
408    - for tg in $TARGETS ; do
409        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
410        ./tests/qtest/boot-serial-test || exit 1 ;
411        ./tests/qtest/cdrom-test || exit 1 ;
412      done
413    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
414    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
415
416# Alternate coroutines implementations are only really of interest to KVM users
417# However we can't test against KVM on Gitlab-CI so we can only run unit tests
418build-coroutine-ucontext:
419  <<: *native_build_job_definition
420  variables:
421    IMAGE: ubuntu2004
422    CONFIGURE_ARGS: --with-coroutine=ucontext --disable-tcg
423    MAKE_CHECK_ARGS: check-unit
424
425build-coroutine-sigaltstack:
426  <<: *native_build_job_definition
427  variables:
428    IMAGE: ubuntu2004
429    CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
430    MAKE_CHECK_ARGS: check-unit
431
432# Most jobs test latest gcrypt or nettle builds
433#
434# These jobs test old gcrypt and nettle from RHEL7
435# which had some API differences.
436build-crypto-old-nettle:
437  <<: *native_build_job_definition
438  variables:
439    IMAGE: centos7
440    TARGETS: x86_64-softmmu x86_64-linux-user
441    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
442    MAKE_CHECK_ARGS: check-build
443  artifacts:
444    paths:
445      - build
446
447check-crypto-old-nettle:
448  <<: *native_test_job_definition
449  needs:
450    - job: build-crypto-old-nettle
451      artifacts: true
452  variables:
453    IMAGE: centos7
454    MAKE_CHECK_ARGS: check
455
456
457build-crypto-old-gcrypt:
458  <<: *native_build_job_definition
459  variables:
460    IMAGE: centos7
461    TARGETS: x86_64-softmmu x86_64-linux-user
462    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
463    MAKE_CHECK_ARGS: check-build
464  artifacts:
465    paths:
466      - build
467
468check-crypto-old-gcrypt:
469  <<: *native_test_job_definition
470  needs:
471    - job: build-crypto-old-gcrypt
472      artifacts: true
473  variables:
474    IMAGE: centos7
475    MAKE_CHECK_ARGS: check
476
477
478build-crypto-only-gnutls:
479  <<: *native_build_job_definition
480  variables:
481    IMAGE: centos7
482    TARGETS: x86_64-softmmu x86_64-linux-user
483    CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
484    MAKE_CHECK_ARGS: check-build
485  artifacts:
486    paths:
487      - build
488
489check-crypto-only-gnutls:
490  <<: *native_test_job_definition
491  needs:
492    - job: build-crypto-only-gnutls
493      artifacts: true
494  variables:
495    IMAGE: centos7
496    MAKE_CHECK_ARGS: check
497
498# We don't need to exercise every backend with every front-end
499build-trace-multi-user:
500  <<: *native_build_job_definition
501  variables:
502    IMAGE: ubuntu2004
503    CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
504
505build-trace-ftrace-system:
506  <<: *native_build_job_definition
507  variables:
508    IMAGE: ubuntu2004
509    CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
510
511build-trace-ust-system:
512  <<: *native_build_job_definition
513  variables:
514    IMAGE: ubuntu2004
515    CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
516
517check-patch:
518  stage: build
519  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
520  script: .gitlab-ci.d/check-patch.py
521  except:
522    variables:
523      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
524  variables:
525    GIT_DEPTH: 1000
526  allow_failure: true
527
528check-dco:
529  stage: build
530  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
531  script: .gitlab-ci.d/check-dco.py
532  except:
533    variables:
534      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
535  variables:
536    GIT_DEPTH: 1000
537
538build-libvhost-user:
539  stage: build
540  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
541  before_script:
542    - dnf install -y meson ninja-build
543  script:
544    - mkdir subprojects/libvhost-user/build
545    - cd subprojects/libvhost-user/build
546    - meson
547    - ninja
548
549pages:
550  image: $CI_REGISTRY_IMAGE/qemu/ubuntu2004:latest
551  stage: test
552  needs:
553    - job: build-system-ubuntu
554      artifacts: true
555  script:
556    - mkdir public
557    - mv build/docs/index.html public/
558    - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done
559  artifacts:
560    paths:
561      - public
562