qapi: Normalize version references x.y.0 to just x.y
[qemu.git] / .gitlab-ci.yml
blob98bff03b47bd616e59c6d9df3496c44044191f8b
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
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'
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
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
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
70 build-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
83 check-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
92 acceptance-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
102 build-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
115 check-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
124 acceptance-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
134 build-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
147 check-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
156 acceptance-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
166 build-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
179 check-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
188 acceptance-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
198 build-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
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.
280 build-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
300 build-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
307 build-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
314 # Only build the softmmu targets we have check-tcg tests for
315 build-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
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
326 build-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
334 build-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
342 build-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
351 # These targets are on the way out
352 build-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
365 # We split the check-tcg step as test failures are expected but we still
366 # want to catch the build breaking.
367 check-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
377 build-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
395 build-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
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
418 build-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
425 build-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
432 # Most jobs test latest gcrypt or nettle builds
434 # These jobs test old gcrypt and nettle from RHEL7
435 # which had some API differences.
436 build-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
447 check-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
457 build-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
468 check-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
478 build-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
489 check-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
498 # We don't need to exercise every backend with every front-end
499 build-trace-multi-user:
500   <<: *native_build_job_definition
501   variables:
502     IMAGE: ubuntu2004
503     CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
505 build-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
511 build-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
517 check-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
528 check-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
538 build-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
549 pages:
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