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