]> Git Repo - qemu.git/blob - .gitlab-ci.yml
gitlab-ci: Split CONFIGURE_ARGS one argument per line for build-disabled
[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     - 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
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
82
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
91
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
101
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
114
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
123
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
133
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
146
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
155
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
165
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
178
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
187
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
197
198 build-disabled:
199   <<: *native_build_job_definition
200   variables:
201     IMAGE: fedora
202     CONFIGURE_ARGS:
203       --disable-attr
204       --disable-avx2
205       --disable-bochs
206       --disable-brlapi
207       --disable-bzip2
208       --disable-cap-ng
209       --disable-capstone
210       --disable-cloop
211       --disable-coroutine-pool
212       --disable-curl
213       --disable-curses
214       --disable-dmg
215       --disable-docs
216       --disable-glusterfs
217       --disable-gnutls
218       --disable-gtk
219       --disable-guest-agent
220       --disable-iconv
221       --disable-kvm
222       --disable-libiscsi
223       --disable-libpmem
224       --disable-libssh
225       --disable-libusb
226       --disable-libxml2
227       --disable-linux-aio
228       --disable-live-block-migration
229       --disable-lzo
230       --disable-malloc-trim
231       --disable-mpath
232       --disable-nettle
233       --disable-numa
234       --disable-parallels
235       --disable-pie
236       --disable-qcow1
237       --disable-qed
238       --disable-qom-cast-debug
239       --disable-rbd
240       --disable-rdma
241       --disable-replication
242       --disable-sdl
243       --disable-seccomp
244       --disable-sheepdog
245       --disable-slirp
246       --disable-smartcard
247       --disable-snappy
248       --disable-spice
249       --disable-strip
250       --disable-tpm
251       --disable-usb-redir
252       --disable-vdi
253       --disable-vhost-crypto
254       --disable-vhost-net
255       --disable-vhost-scsi
256       --disable-vhost-user
257       --disable-vhost-vdpa
258       --disable-vhost-vsock
259       --disable-virglrenderer
260       --disable-vnc
261       --disable-vte
262       --disable-vvfat
263       --disable-xen
264       --disable-zstd
265     TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
266       s390x-softmmu i386-linux-user
267     MAKE_CHECK_ARGS: check-qtest SPEED=slow
268
269 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
270 # the configure script. The container doesn't contain Xen headers so
271 # Xen accelerator is not detected / selected. As result it build the
272 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
273 # available.
274 build-tcg-disabled:
275   <<: *native_build_job_definition
276   variables:
277     IMAGE: centos8
278   script:
279     - mkdir build
280     - cd build
281     - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; }
282     - make -j"$JOBS"
283     - make check-unit
284     - make check-qapi-schema
285     - cd tests/qemu-iotests/
286     - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
287             052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
288             170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
289     - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
290             124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
291             208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
292             260 261 262 263 264 270 272 273 277 279
293
294 build-user:
295   <<: *native_build_job_definition
296   variables:
297     IMAGE: debian-all-test-cross
298     CONFIGURE_ARGS: --disable-tools --disable-system
299     MAKE_CHECK_ARGS: check-tcg
300
301 # Only build the softmmu targets we have check-tcg tests for
302 build-some-softmmu:
303   <<: *native_build_job_definition
304   variables:
305     IMAGE: debian-all-test-cross
306     CONFIGURE_ARGS: --disable-tools --enable-debug-tcg
307     TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
308     MAKE_CHECK_ARGS: check-tcg
309
310 # Run check-tcg against linux-user (with plugins)
311 # we skip sparc64-linux-user until it has been fixed somewhat
312 # we skip cris-linux-user as it doesn't use the common run loop
313 build-user-plugins:
314   <<: *native_build_job_definition
315   variables:
316     IMAGE: debian-all-test-cross
317     CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
318     MAKE_CHECK_ARGS: check-tcg
319   timeout: 1h 30m
320
321 build-some-softmmu-plugins:
322   <<: *native_build_job_definition
323   variables:
324     IMAGE: debian-all-test-cross
325     CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
326     TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
327     MAKE_CHECK_ARGS: check-tcg
328
329 build-clang:
330   <<: *native_build_job_definition
331   variables:
332     IMAGE: fedora
333     CONFIGURE_ARGS: --cc=clang --cxx=clang++
334     TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
335       ppc-softmmu s390x-softmmu arm-linux-user
336     MAKE_CHECK_ARGS: check
337
338 # These targets are on the way out
339 build-deprecated:
340   <<: *native_build_job_definition
341   variables:
342     IMAGE: debian-all-test-cross
343     CONFIGURE_ARGS: --disable-docs --disable-tools
344     MAKE_CHECK_ARGS: build-tcg
345     TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
346       unicore32-softmmu
347   artifacts:
348     expire_in: 2 days
349     paths:
350       - build
351
352 # We split the check-tcg step as test failures are expected but we still
353 # want to catch the build breaking.
354 check-deprecated:
355   <<: *native_test_job_definition
356   needs:
357     - job: build-deprecated
358       artifacts: true
359   variables:
360     IMAGE: debian-all-test-cross
361     MAKE_CHECK_ARGS: check-tcg
362   allow_failure: true
363
364 build-oss-fuzz:
365   <<: *native_build_job_definition
366   variables:
367     IMAGE: fedora
368   script:
369     - mkdir build-oss-fuzz
370     - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
371       ./scripts/oss-fuzz/build.sh
372     - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
373     - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
374                       | grep -v slirp); do
375         grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
376         echo Testing ${fuzzer} ... ;
377         "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
378       done
379     # Unrelated to fuzzer: run some tests with -fsanitize=address
380     - cd build-oss-fuzz && make check-qtest-i386 check-unit
381
382 build-tci:
383   <<: *native_build_job_definition
384   variables:
385     IMAGE: fedora
386   script:
387     - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
388     - mkdir build
389     - cd build
390     - ../configure --enable-tcg-interpreter
391         --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
392     - make -j"$JOBS"
393     - make run-tcg-tests-x86_64-softmmu
394     - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
395     - for tg in $TARGETS ; do
396         export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
397         ./tests/qtest/boot-serial-test || exit 1 ;
398         ./tests/qtest/cdrom-test || exit 1 ;
399       done
400     - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
401     - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
402
403 # Most jobs test latest gcrypt or nettle builds
404 #
405 # These jobs test old gcrypt and nettle from RHEL7
406 # which had some API differences.
407 build-crypto-old-nettle:
408   <<: *native_build_job_definition
409   variables:
410     IMAGE: centos7
411     TARGETS: x86_64-softmmu x86_64-linux-user
412     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
413     MAKE_CHECK_ARGS: check-build
414   artifacts:
415     paths:
416       - build
417
418 check-crypto-old-nettle:
419   <<: *native_test_job_definition
420   needs:
421     - job: build-crypto-old-nettle
422       artifacts: true
423   variables:
424     IMAGE: centos7
425     MAKE_CHECK_ARGS: check
426
427
428 build-crypto-old-gcrypt:
429   <<: *native_build_job_definition
430   variables:
431     IMAGE: centos7
432     TARGETS: x86_64-softmmu x86_64-linux-user
433     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
434     MAKE_CHECK_ARGS: check-build
435   artifacts:
436     paths:
437       - build
438
439 check-crypto-old-gcrypt:
440   <<: *native_test_job_definition
441   needs:
442     - job: build-crypto-old-gcrypt
443       artifacts: true
444   variables:
445     IMAGE: centos7
446     MAKE_CHECK_ARGS: check
447
448
449 build-crypto-only-gnutls:
450   <<: *native_build_job_definition
451   variables:
452     IMAGE: centos7
453     TARGETS: x86_64-softmmu x86_64-linux-user
454     CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
455     MAKE_CHECK_ARGS: check-build
456   artifacts:
457     paths:
458       - build
459
460 check-crypto-only-gnutls:
461   <<: *native_test_job_definition
462   needs:
463     - job: build-crypto-only-gnutls
464       artifacts: true
465   variables:
466     IMAGE: centos7
467     MAKE_CHECK_ARGS: check
468
469 # We don't need to exercise every backend with every front-end
470 build-trace-multi-user:
471   <<: *native_build_job_definition
472   variables:
473     IMAGE: ubuntu2004
474     CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
475
476 build-trace-ftrace-system:
477   <<: *native_build_job_definition
478   variables:
479     IMAGE: ubuntu2004
480     CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
481
482 build-trace-ust-system:
483   <<: *native_build_job_definition
484   variables:
485     IMAGE: ubuntu2004
486     CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
487
488 check-patch:
489   stage: build
490   image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
491   script: .gitlab-ci.d/check-patch.py
492   except:
493     variables:
494       - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
495   variables:
496     GIT_DEPTH: 1000
497   allow_failure: true
498
499 check-dco:
500   stage: build
501   image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
502   script: .gitlab-ci.d/check-dco.py
503   except:
504     variables:
505       - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
506   variables:
507     GIT_DEPTH: 1000
508
509 pages:
510   image: $CI_REGISTRY_IMAGE/qemu/ubuntu2004:latest
511   stage: test
512   needs:
513     - job: build-system-ubuntu
514       artifacts: true
515   script:
516     - mkdir public
517     - mv build/docs/index.html public/
518     - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done
519   artifacts:
520     paths:
521       - public
This page took 0.05106 seconds and 4 git commands to generate.