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