OSDN Git Service

gitlab: centralize the container tag name
[qmiga/qemu.git] / .gitlab-ci.d / buildtest.yml
1 include:
2   - local: '/.gitlab-ci.d/buildtest-template.yml'
3
4 build-system-alpine:
5   extends:
6     - .native_build_job_template
7     - .native_build_artifact_template
8   needs:
9     - job: amd64-alpine-container
10   variables:
11     IMAGE: alpine
12     TARGETS: avr-softmmu loongarch64-softmmu mips64-softmmu mipsel-softmmu
13     MAKE_CHECK_ARGS: check-build
14     CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog
15
16 check-system-alpine:
17   extends: .native_test_job_template
18   needs:
19     - job: build-system-alpine
20       artifacts: true
21   variables:
22     IMAGE: alpine
23     MAKE_CHECK_ARGS: check-unit check-qtest
24
25 avocado-system-alpine:
26   extends: .avocado_test_job_template
27   needs:
28     - job: build-system-alpine
29       artifacts: true
30   variables:
31     IMAGE: alpine
32     MAKE_CHECK_ARGS: check-avocado
33
34 build-system-ubuntu:
35   extends:
36     - .native_build_job_template
37     - .native_build_artifact_template
38   needs:
39     job: amd64-ubuntu2204-container
40   variables:
41     IMAGE: ubuntu2204
42     CONFIGURE_ARGS: --enable-docs
43     TARGETS: alpha-softmmu cris-softmmu hppa-softmmu
44       microblazeel-softmmu mips64el-softmmu
45     MAKE_CHECK_ARGS: check-build
46
47 check-system-ubuntu:
48   extends: .native_test_job_template
49   needs:
50     - job: build-system-ubuntu
51       artifacts: true
52   variables:
53     IMAGE: ubuntu2204
54     MAKE_CHECK_ARGS: check
55
56 avocado-system-ubuntu:
57   extends: .avocado_test_job_template
58   needs:
59     - job: build-system-ubuntu
60       artifacts: true
61   variables:
62     IMAGE: ubuntu2204
63     MAKE_CHECK_ARGS: check-avocado
64
65 build-system-debian:
66   extends:
67     - .native_build_job_template
68     - .native_build_artifact_template
69   needs:
70     job: amd64-debian-container
71   variables:
72     IMAGE: debian-amd64
73     CONFIGURE_ARGS: --with-coroutine=sigaltstack
74     TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4eb-softmmu
75       sparc-softmmu xtensaeb-softmmu
76     MAKE_CHECK_ARGS: check-build
77
78 check-system-debian:
79   extends: .native_test_job_template
80   needs:
81     - job: build-system-debian
82       artifacts: true
83   variables:
84     IMAGE: debian-amd64
85     MAKE_CHECK_ARGS: check
86
87 avocado-system-debian:
88   extends: .avocado_test_job_template
89   needs:
90     - job: build-system-debian
91       artifacts: true
92   variables:
93     IMAGE: debian-amd64
94     MAKE_CHECK_ARGS: check-avocado
95
96 crash-test-debian:
97   extends: .native_test_job_template
98   needs:
99     - job: build-system-debian
100       artifacts: true
101   variables:
102     IMAGE: debian-amd64
103   script:
104     - cd build
105     - make NINJA=":" check-venv
106     - tests/venv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
107
108 build-system-fedora:
109   extends:
110     - .native_build_job_template
111     - .native_build_artifact_template
112   needs:
113     job: amd64-fedora-container
114   variables:
115     IMAGE: fedora
116     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
117     TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
118       xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
119     MAKE_CHECK_ARGS: check-build
120
121 check-system-fedora:
122   extends: .native_test_job_template
123   needs:
124     - job: build-system-fedora
125       artifacts: true
126   variables:
127     IMAGE: fedora
128     MAKE_CHECK_ARGS: check
129
130 avocado-system-fedora:
131   extends: .avocado_test_job_template
132   needs:
133     - job: build-system-fedora
134       artifacts: true
135   variables:
136     IMAGE: fedora
137     MAKE_CHECK_ARGS: check-avocado
138
139 crash-test-fedora:
140   extends: .native_test_job_template
141   needs:
142     - job: build-system-fedora
143       artifacts: true
144   variables:
145     IMAGE: fedora
146   script:
147     - cd build
148     - make NINJA=":" check-venv
149     - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
150     - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
151
152 build-system-centos:
153   extends:
154     - .native_build_job_template
155     - .native_build_artifact_template
156   needs:
157     job: amd64-centos8-container
158   variables:
159     IMAGE: centos8
160     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-vfio-user-server
161       --enable-modules --enable-trace-backends=dtrace --enable-docs
162     TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
163       x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
164     MAKE_CHECK_ARGS: check-build
165
166 check-system-centos:
167   extends: .native_test_job_template
168   needs:
169     - job: build-system-centos
170       artifacts: true
171   variables:
172     IMAGE: centos8
173     MAKE_CHECK_ARGS: check
174
175 avocado-system-centos:
176   extends: .avocado_test_job_template
177   needs:
178     - job: build-system-centos
179       artifacts: true
180   variables:
181     IMAGE: centos8
182     MAKE_CHECK_ARGS: check-avocado
183
184 build-system-opensuse:
185   extends:
186     - .native_build_job_template
187     - .native_build_artifact_template
188   needs:
189     job: amd64-opensuse-leap-container
190   variables:
191     IMAGE: opensuse-leap
192     TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
193     MAKE_CHECK_ARGS: check-build
194
195 check-system-opensuse:
196   extends: .native_test_job_template
197   needs:
198     - job: build-system-opensuse
199       artifacts: true
200   variables:
201     IMAGE: opensuse-leap
202     MAKE_CHECK_ARGS: check
203
204 avocado-system-opensuse:
205   extends: .avocado_test_job_template
206   needs:
207     - job: build-system-opensuse
208       artifacts: true
209   variables:
210     IMAGE: opensuse-leap
211     MAKE_CHECK_ARGS: check-avocado
212
213
214 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
215 # the configure script. The container doesn't contain Xen headers so
216 # Xen accelerator is not detected / selected. As result it build the
217 # i386-softmmu and x86_64-softmmu with KVM being the single accelerator
218 # available.
219 # Also use a different coroutine implementation (which is only really of
220 # interest to KVM users, i.e. with TCG disabled)
221 build-tcg-disabled:
222   extends: .native_build_job_template
223   needs:
224     job: amd64-centos8-container
225   variables:
226     IMAGE: centos8
227   script:
228     - mkdir build
229     - cd build
230     - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
231                    --disable-docs --disable-sdl --disable-gtk --disable-vnc
232       || { cat config.log meson-logs/meson-log.txt && exit 1; }
233     - make -j"$JOBS"
234     - make check-unit
235     - make check-qapi-schema
236     - cd tests/qemu-iotests/
237     - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
238             052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
239             170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing
240     - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
241             124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
242             208 209 216 218 227 234 246 247 248 250 254 255 257 258
243             260 261 262 263 264 270 272 273 277 279 image-fleecing
244
245 build-user:
246   extends: .native_build_job_template
247   needs:
248     job: amd64-debian-user-cross-container
249   variables:
250     IMAGE: debian-all-test-cross
251     CONFIGURE_ARGS: --disable-tools --disable-system
252     MAKE_CHECK_ARGS: check-tcg
253
254 build-user-static:
255   extends: .native_build_job_template
256   needs:
257     job: amd64-debian-user-cross-container
258   variables:
259     IMAGE: debian-all-test-cross
260     CONFIGURE_ARGS: --disable-tools --disable-system --static
261     MAKE_CHECK_ARGS: check-tcg
262
263 build-user-hexagon:
264   extends: .native_build_job_template
265   needs:
266     job: hexagon-cross-container
267   variables:
268     IMAGE: debian-hexagon-cross
269     TARGETS: hexagon-linux-user
270     CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
271     MAKE_CHECK_ARGS: check-tcg
272
273 # Only build the softmmu targets we have check-tcg tests for
274 build-some-softmmu:
275   extends: .native_build_job_template
276   needs:
277     job: amd64-debian-user-cross-container
278   variables:
279     IMAGE: debian-all-test-cross
280     CONFIGURE_ARGS: --disable-tools --enable-debug
281     TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
282     MAKE_CHECK_ARGS: check-tcg
283
284 # We build tricore in a very minimal tricore only container
285 build-tricore-softmmu:
286   extends: .native_build_job_template
287   needs:
288     job: tricore-debian-cross-container
289   variables:
290     IMAGE: debian-tricore-cross
291     CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
292     TARGETS: tricore-softmmu
293     MAKE_CHECK_ARGS: check-tcg
294
295 clang-system:
296   extends: .native_build_job_template
297   needs:
298     job: amd64-fedora-container
299   variables:
300     IMAGE: fedora
301     CONFIGURE_ARGS: --cc=clang --cxx=clang++
302       --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
303     TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu
304     MAKE_CHECK_ARGS: check-qtest check-tcg
305
306 clang-user:
307   extends: .native_build_job_template
308   needs:
309     job: amd64-debian-user-cross-container
310   timeout: 70m
311   variables:
312     IMAGE: debian-all-test-cross
313     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
314       --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
315       --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
316     MAKE_CHECK_ARGS: check-unit check-tcg
317
318 # Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
319 # On gitlab runners, default value sometimes end up calling 2 lds concurrently and
320 # triggers an Out-Of-Memory error
321 #
322 # Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
323 # CFI builds, and thus have to disable it here.
324 #
325 # Split in three sets of build/check/avocado to limit the execution time of each
326 # job
327 build-cfi-aarch64:
328   extends:
329     - .native_build_job_template
330     - .native_build_artifact_template
331   needs:
332   - job: amd64-fedora-container
333   variables:
334     LD_JOBS: 1
335     AR: llvm-ar
336     IMAGE: fedora
337     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
338       --enable-safe-stack --disable-slirp
339     TARGETS: aarch64-softmmu
340     MAKE_CHECK_ARGS: check-build
341     # FIXME: This job is often failing, likely due to out-of-memory problems in
342     # the constrained containers of the shared runners. Thus this is marked as
343     # skipped until the situation has been solved.
344     QEMU_JOB_SKIPPED: 1
345   timeout: 90m
346
347 check-cfi-aarch64:
348   extends: .native_test_job_template
349   needs:
350     - job: build-cfi-aarch64
351       artifacts: true
352   variables:
353     IMAGE: fedora
354     MAKE_CHECK_ARGS: check
355
356 avocado-cfi-aarch64:
357   extends: .avocado_test_job_template
358   needs:
359     - job: build-cfi-aarch64
360       artifacts: true
361   variables:
362     IMAGE: fedora
363     MAKE_CHECK_ARGS: check-avocado
364
365 build-cfi-ppc64-s390x:
366   extends:
367     - .native_build_job_template
368     - .native_build_artifact_template
369   needs:
370   - job: amd64-fedora-container
371   variables:
372     LD_JOBS: 1
373     AR: llvm-ar
374     IMAGE: fedora
375     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
376       --enable-safe-stack --disable-slirp
377     TARGETS: ppc64-softmmu s390x-softmmu
378     MAKE_CHECK_ARGS: check-build
379     # FIXME: This job is often failing, likely due to out-of-memory problems in
380     # the constrained containers of the shared runners. Thus this is marked as
381     # skipped until the situation has been solved.
382     QEMU_JOB_SKIPPED: 1
383   timeout: 80m
384
385 check-cfi-ppc64-s390x:
386   extends: .native_test_job_template
387   needs:
388     - job: build-cfi-ppc64-s390x
389       artifacts: true
390   variables:
391     IMAGE: fedora
392     MAKE_CHECK_ARGS: check
393
394 avocado-cfi-ppc64-s390x:
395   extends: .avocado_test_job_template
396   needs:
397     - job: build-cfi-ppc64-s390x
398       artifacts: true
399   variables:
400     IMAGE: fedora
401     MAKE_CHECK_ARGS: check-avocado
402
403 build-cfi-x86_64:
404   extends:
405     - .native_build_job_template
406     - .native_build_artifact_template
407   needs:
408   - job: amd64-fedora-container
409   variables:
410     LD_JOBS: 1
411     AR: llvm-ar
412     IMAGE: fedora
413     CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
414       --enable-safe-stack --disable-slirp
415     TARGETS: x86_64-softmmu
416     MAKE_CHECK_ARGS: check-build
417   timeout: 70m
418
419 check-cfi-x86_64:
420   extends: .native_test_job_template
421   needs:
422     - job: build-cfi-x86_64
423       artifacts: true
424   variables:
425     IMAGE: fedora
426     MAKE_CHECK_ARGS: check
427
428 avocado-cfi-x86_64:
429   extends: .avocado_test_job_template
430   needs:
431     - job: build-cfi-x86_64
432       artifacts: true
433   variables:
434     IMAGE: fedora
435     MAKE_CHECK_ARGS: check-avocado
436
437 tsan-build:
438   extends: .native_build_job_template
439   needs:
440     job: amd64-ubuntu2204-container
441   variables:
442     IMAGE: ubuntu2204
443     CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++
444           --enable-trace-backends=ust --disable-slirp
445     TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
446
447 # gcov is a GCC features
448 gcov:
449   extends: .native_build_job_template
450   needs:
451     job: amd64-ubuntu2204-container
452   timeout: 80m
453   variables:
454     IMAGE: ubuntu2204
455     CONFIGURE_ARGS: --enable-gcov
456     TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
457     MAKE_CHECK_ARGS: check
458   after_script:
459     - cd build
460     - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
461         -o coverage.xml --root ${CI_PROJECT_DIR} . *.p
462   coverage: /^\s*lines:\s*\d+.\d+\%/
463   artifacts:
464     name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
465     expire_in: 2 days
466     reports:
467       coverage_report:
468         coverage_format: cobertura
469         path: build/coverage.xml
470
471 build-oss-fuzz:
472   extends: .native_build_job_template
473   needs:
474     job: amd64-fedora-container
475   variables:
476     IMAGE: fedora
477   script:
478     - mkdir build-oss-fuzz
479     - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt
480     - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
481       ./scripts/oss-fuzz/build.sh
482     - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
483     - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
484                       | grep -v slirp); do
485         grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
486         echo Testing ${fuzzer} ... ;
487         "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
488       done
489
490 build-tci:
491   extends: .native_build_job_template
492   needs:
493     job: amd64-debian-user-cross-container
494   variables:
495     IMAGE: debian-all-test-cross
496   script:
497     - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
498     - mkdir build
499     - cd build
500     - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
501         --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
502         || { cat config.log meson-logs/meson-log.txt && exit 1; }
503     - make -j"$JOBS"
504     - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
505     - for tg in $TARGETS ; do
506         export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
507         ./tests/qtest/boot-serial-test || exit 1 ;
508         ./tests/qtest/cdrom-test || exit 1 ;
509       done
510     - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
511     - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
512     - make check-tcg
513
514 # Check our reduced build configurations
515 build-without-defaults:
516   extends: .native_build_job_template
517   needs:
518     job: amd64-centos8-container
519   variables:
520     IMAGE: centos8
521     CONFIGURE_ARGS:
522       --without-default-devices
523       --without-default-features
524       --disable-fdt
525       --disable-pie
526       --disable-qom-cast-debug
527       --disable-strip
528     TARGETS: avr-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
529       sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
530     MAKE_CHECK_ARGS: check
531
532 build-libvhost-user:
533   extends: .base_job_template
534   stage: build
535   image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
536   needs:
537     job: amd64-fedora-container
538   script:
539     - mkdir subprojects/libvhost-user/build
540     - cd subprojects/libvhost-user/build
541     - meson
542     - ninja
543
544 # No targets are built here, just tools, docs, and unit tests. This
545 # also feeds into the eventual documentation deployment steps later
546 build-tools-and-docs-debian:
547   extends:
548     - .native_build_job_template
549     - .native_build_artifact_template
550   needs:
551     job: amd64-debian-container
552     # when running on 'master' we use pre-existing container
553     optional: true
554   variables:
555     IMAGE: debian-amd64
556     MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
557     CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
558     QEMU_JOB_PUBLISH: 1
559
560 # Prepare for GitLab pages deployment. Anything copied into the
561 # "public" directory will be deployed to $USER.gitlab.io/$PROJECT
562 #
563 # GitLab publishes from any branch that triggers a CI pipeline
564 #
565 # For the main repo we don't want to publish from 'staging'
566 # since that content may not be pushed, nor do we wish to
567 # publish from 'stable-NNN' branches as that content is outdated.
568 # Thus we restrict to just the default branch
569 #
570 # For contributor forks we want to publish from any repo so
571 # that users can see the results of their commits, regardless
572 # of what topic branch they're currently using
573 pages:
574   extends: .base_job_template
575   image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:$QEMU_CI_CONTAINER_TAG
576   stage: test
577   needs:
578     - job: build-tools-and-docs-debian
579   script:
580     - mkdir -p public
581     # HTML-ised source tree
582     - make gtags
583     - htags -anT --tree-view=filetree -m qemu_init
584         -t "Welcome to the QEMU sourcecode"
585     - mv HTML public/src
586     # Project documentation
587     - make -C build install DESTDIR=$(pwd)/temp-install
588     - mv temp-install/usr/local/share/doc/qemu/* public/
589   artifacts:
590     paths:
591       - public
592   variables:
593     QEMU_JOB_PUBLISH: 1