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