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