xref: /qemu/.gitlab-ci.d/buildtest.yml (revision d884e272)
1include:
2  - local: '/.gitlab-ci.d/buildtest-template.yml'
3
4build-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
16check-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
25avocado-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    AVOCADO_TAGS: arch:avr arch:loongarch64 arch:mips64 arch:mipsel
34
35build-system-ubuntu:
36  extends:
37    - .native_build_job_template
38    - .native_build_artifact_template
39  needs:
40    job: amd64-ubuntu2204-container
41  variables:
42    IMAGE: ubuntu2204
43    CONFIGURE_ARGS: --enable-docs
44    TARGETS: alpha-softmmu microblazeel-softmmu mips64el-softmmu
45    MAKE_CHECK_ARGS: check-build
46
47check-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
56avocado-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    AVOCADO_TAGS: arch:alpha arch:microblazeel arch:mips64el
65
66build-system-debian:
67  extends:
68    - .native_build_job_template
69    - .native_build_artifact_template
70  needs:
71    job: amd64-debian-container
72  variables:
73    IMAGE: debian
74    CONFIGURE_ARGS: --with-coroutine=sigaltstack
75    TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4eb-softmmu
76      sparc-softmmu xtensa-softmmu
77    MAKE_CHECK_ARGS: check-build
78
79check-system-debian:
80  extends: .native_test_job_template
81  needs:
82    - job: build-system-debian
83      artifacts: true
84  variables:
85    IMAGE: debian
86    MAKE_CHECK_ARGS: check
87
88avocado-system-debian:
89  extends: .avocado_test_job_template
90  needs:
91    - job: build-system-debian
92      artifacts: true
93  variables:
94    IMAGE: debian
95    MAKE_CHECK_ARGS: check-avocado
96    AVOCADO_TAGS: arch:arm arch:i386 arch:riscv64 arch:sh4 arch:sparc arch:xtensa
97
98crash-test-debian:
99  extends: .native_test_job_template
100  needs:
101    - job: build-system-debian
102      artifacts: true
103  variables:
104    IMAGE: debian
105  script:
106    - cd build
107    - make NINJA=":" check-venv
108    - pyvenv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
109
110build-system-fedora:
111  extends:
112    - .native_build_job_template
113    - .native_build_artifact_template
114  needs:
115    job: amd64-fedora-container
116  variables:
117    IMAGE: fedora
118    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
119    TARGETS: microblaze-softmmu mips-softmmu
120      xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
121    MAKE_CHECK_ARGS: check-build
122
123check-system-fedora:
124  extends: .native_test_job_template
125  needs:
126    - job: build-system-fedora
127      artifacts: true
128  variables:
129    IMAGE: fedora
130    MAKE_CHECK_ARGS: check
131
132avocado-system-fedora:
133  extends: .avocado_test_job_template
134  needs:
135    - job: build-system-fedora
136      artifacts: true
137  variables:
138    IMAGE: fedora
139    MAKE_CHECK_ARGS: check-avocado
140    AVOCADO_TAGS: arch:microblaze arch:mips arch:xtensa arch:m68k
141      arch:riscv32 arch:ppc arch:sparc64
142
143crash-test-fedora:
144  extends: .native_test_job_template
145  needs:
146    - job: build-system-fedora
147      artifacts: true
148  variables:
149    IMAGE: fedora
150  script:
151    - cd build
152    - make NINJA=":" check-venv
153    - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
154    - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
155
156build-system-centos:
157  extends:
158    - .native_build_job_template
159    - .native_build_artifact_template
160  needs:
161    job: amd64-centos8-container
162  variables:
163    IMAGE: centos8
164    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-vfio-user-server
165      --enable-modules --enable-trace-backends=dtrace --enable-docs
166    TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
167      x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
168    MAKE_CHECK_ARGS: check-build
169
170# Previous QEMU release. Used for cross-version migration tests.
171build-previous-qemu:
172  extends: .native_build_job_template
173  artifacts:
174    when: on_success
175    expire_in: 2 days
176    paths:
177      - build-previous
178    exclude:
179      - build-previous/**/*.p
180      - build-previous/**/*.a.p
181      - build-previous/**/*.fa.p
182      - build-previous/**/*.c.o
183      - build-previous/**/*.c.o.d
184      - build-previous/**/*.fa
185  needs:
186    job: amd64-opensuse-leap-container
187  variables:
188    IMAGE: opensuse-leap
189    TARGETS: x86_64-softmmu aarch64-softmmu
190  before_script:
191    - export QEMU_PREV_VERSION="$(sed 's/\([0-9.]*\)\.[0-9]*/v\1.0/' VERSION)"
192    - git remote add upstream https://gitlab.com/qemu-project/qemu
193    - git fetch upstream refs/tags/$QEMU_PREV_VERSION:refs/tags/$QEMU_PREV_VERSION
194    - git checkout $QEMU_PREV_VERSION
195  after_script:
196    - mv build build-previous
197
198.migration-compat-common:
199  extends: .common_test_job_template
200  needs:
201    - job: build-previous-qemu
202    - job: build-system-opensuse
203  # The old QEMU could have bugs unrelated to migration that are
204  # already fixed in the current development branch, so this test
205  # might fail.
206  allow_failure: true
207  variables:
208    IMAGE: opensuse-leap
209    MAKE_CHECK_ARGS: check-build
210  script:
211    # Use the migration-tests from the older QEMU tree. This avoids
212    # testing an old QEMU against new features/tests that it is not
213    # compatible with.
214    - cd build-previous
215    # old to new
216    - QTEST_QEMU_BINARY_SRC=./qemu-system-${TARGET}
217          QTEST_QEMU_BINARY=../build/qemu-system-${TARGET} ./tests/qtest/migration-test
218    # new to old
219    - QTEST_QEMU_BINARY_DST=./qemu-system-${TARGET}
220          QTEST_QEMU_BINARY=../build/qemu-system-${TARGET} ./tests/qtest/migration-test
221
222# This job needs to be disabled until we can have an aarch64 CPU model that
223# will both (1) support both KVM and TCG, and (2) provide a stable ABI.
224# Currently only "-cpu max" can provide (1), however it doesn't guarantee
225# (2).  Mark this test skipped until later.
226migration-compat-aarch64:
227  extends: .migration-compat-common
228  variables:
229    TARGET: aarch64
230    QEMU_JOB_SKIPPED: 1
231
232migration-compat-x86_64:
233  extends: .migration-compat-common
234  variables:
235    TARGET: x86_64
236
237check-system-centos:
238  extends: .native_test_job_template
239  needs:
240    - job: build-system-centos
241      artifacts: true
242  variables:
243    IMAGE: centos8
244    MAKE_CHECK_ARGS: check
245
246avocado-system-centos:
247  extends: .avocado_test_job_template
248  needs:
249    - job: build-system-centos
250      artifacts: true
251  variables:
252    IMAGE: centos8
253    MAKE_CHECK_ARGS: check-avocado
254    AVOCADO_TAGS: arch:ppc64 arch:or1k arch:s390x arch:x86_64 arch:rx
255      arch:sh4 arch:nios2
256
257build-system-opensuse:
258  extends:
259    - .native_build_job_template
260    - .native_build_artifact_template
261  needs:
262    job: amd64-opensuse-leap-container
263  variables:
264    IMAGE: opensuse-leap
265    TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
266    MAKE_CHECK_ARGS: check-build
267
268check-system-opensuse:
269  extends: .native_test_job_template
270  needs:
271    - job: build-system-opensuse
272      artifacts: true
273  variables:
274    IMAGE: opensuse-leap
275    MAKE_CHECK_ARGS: check
276
277avocado-system-opensuse:
278  extends: .avocado_test_job_template
279  needs:
280    - job: build-system-opensuse
281      artifacts: true
282  variables:
283    IMAGE: opensuse-leap
284    MAKE_CHECK_ARGS: check-avocado
285    AVOCADO_TAGS: arch:s390x arch:x86_64 arch:aarch64
286
287#
288# Flaky tests. We don't run these by default and they are allow fail
289# but often the CI system is the only way to trigger the failures.
290#
291
292build-system-flaky:
293  extends:
294    - .native_build_job_template
295    - .native_build_artifact_template
296  needs:
297    job: amd64-debian-container
298  variables:
299    IMAGE: debian
300    QEMU_JOB_OPTIONAL: 1
301    TARGETS: aarch64-softmmu arm-softmmu mips64el-softmmu
302      ppc64-softmmu rx-softmmu s390x-softmmu sh4-softmmu x86_64-softmmu
303    MAKE_CHECK_ARGS: check-build
304
305avocado-system-flaky:
306  extends: .avocado_test_job_template
307  needs:
308    - job: build-system-flaky
309      artifacts: true
310  allow_failure: true
311  variables:
312    IMAGE: debian
313    MAKE_CHECK_ARGS: check-avocado
314    QEMU_JOB_OPTIONAL: 1
315    QEMU_TEST_FLAKY_TESTS: 1
316    AVOCADO_TAGS: flaky
317
318# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
319# the configure script. The container doesn't contain Xen headers so
320# Xen accelerator is not detected / selected. As result it build the
321# i386-softmmu and x86_64-softmmu with KVM being the single accelerator
322# available.
323# Also use a different coroutine implementation (which is only really of
324# interest to KVM users, i.e. with TCG disabled)
325build-tcg-disabled:
326  extends: .native_build_job_template
327  needs:
328    job: amd64-centos8-container
329  variables:
330    IMAGE: centos8
331  script:
332    - mkdir build
333    - cd build
334    - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
335                   --disable-docs --disable-sdl --disable-gtk --disable-vnc
336      || { cat config.log meson-logs/meson-log.txt && exit 1; }
337    - make -j"$JOBS"
338    - make check-unit
339    - make check-qapi-schema
340    - cd tests/qemu-iotests/
341    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
342            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
343            170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing
344    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
345            124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
346            208 209 216 218 227 234 246 247 248 250 254 255 257 258
347            260 261 262 263 264 270 272 273 277 279 image-fleecing
348
349build-user:
350  extends: .native_build_job_template
351  needs:
352    job: amd64-debian-user-cross-container
353  variables:
354    IMAGE: debian-all-test-cross
355    CONFIGURE_ARGS: --disable-tools --disable-system
356      --target-list-exclude=alpha-linux-user,sh4-linux-user
357    MAKE_CHECK_ARGS: check-tcg
358
359build-user-static:
360  extends: .native_build_job_template
361  needs:
362    job: amd64-debian-user-cross-container
363  variables:
364    IMAGE: debian-all-test-cross
365    CONFIGURE_ARGS: --disable-tools --disable-system --static
366      --target-list-exclude=alpha-linux-user,sh4-linux-user
367    MAKE_CHECK_ARGS: check-tcg
368
369# targets stuck on older compilers
370build-legacy:
371  extends: .native_build_job_template
372  needs:
373    job: amd64-debian-legacy-cross-container
374  variables:
375    IMAGE: debian-legacy-test-cross
376    TARGETS: alpha-linux-user alpha-softmmu sh4-linux-user
377    CONFIGURE_ARGS: --disable-tools
378    MAKE_CHECK_ARGS: check-tcg
379
380build-user-hexagon:
381  extends: .native_build_job_template
382  needs:
383    job: hexagon-cross-container
384  variables:
385    IMAGE: debian-hexagon-cross
386    TARGETS: hexagon-linux-user
387    CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
388    MAKE_CHECK_ARGS: check-tcg
389
390# Build the softmmu targets we have check-tcg tests and compilers in
391# our omnibus all-test-cross container. Those targets that haven't got
392# Debian cross compiler support need to use special containers.
393build-some-softmmu:
394  extends: .native_build_job_template
395  needs:
396    job: amd64-debian-user-cross-container
397  variables:
398    IMAGE: debian-all-test-cross
399    CONFIGURE_ARGS: --disable-tools --enable-debug
400    TARGETS: arm-softmmu aarch64-softmmu i386-softmmu riscv64-softmmu
401      s390x-softmmu x86_64-softmmu
402    MAKE_CHECK_ARGS: check-tcg
403
404build-loongarch64:
405  extends: .native_build_job_template
406  needs:
407    job: loongarch-debian-cross-container
408  variables:
409    IMAGE: debian-loongarch-cross
410    CONFIGURE_ARGS: --disable-tools --enable-debug
411    TARGETS: loongarch64-linux-user loongarch64-softmmu
412    MAKE_CHECK_ARGS: check-tcg
413
414# We build tricore in a very minimal tricore only container
415build-tricore-softmmu:
416  extends: .native_build_job_template
417  needs:
418    job: tricore-debian-cross-container
419  variables:
420    IMAGE: debian-tricore-cross
421    CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
422    TARGETS: tricore-softmmu
423    MAKE_CHECK_ARGS: check-tcg
424
425clang-system:
426  extends: .native_build_job_template
427  needs:
428    job: amd64-fedora-container
429  variables:
430    IMAGE: fedora
431    CONFIGURE_ARGS: --cc=clang --cxx=clang++
432      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
433    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu
434    MAKE_CHECK_ARGS: check-qtest check-tcg
435
436clang-user:
437  extends: .native_build_job_template
438  needs:
439    job: amd64-debian-user-cross-container
440  timeout: 70m
441  variables:
442    IMAGE: debian-all-test-cross
443    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
444      --target-list-exclude=alpha-linux-user,microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
445      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
446    MAKE_CHECK_ARGS: check-unit check-tcg
447
448# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
449# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
450# triggers an Out-Of-Memory error
451#
452# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
453# CFI builds, and thus have to disable it here.
454#
455# Split in three sets of build/check/avocado to limit the execution time of each
456# job
457build-cfi-aarch64:
458  extends:
459    - .native_build_job_template
460    - .native_build_artifact_template
461  needs:
462  - job: amd64-fedora-container
463  variables:
464    LD_JOBS: 1
465    AR: llvm-ar
466    IMAGE: fedora
467    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
468      --enable-safe-stack --disable-slirp
469    TARGETS: aarch64-softmmu
470    MAKE_CHECK_ARGS: check-build
471    # FIXME: This job is often failing, likely due to out-of-memory problems in
472    # the constrained containers of the shared runners. Thus this is marked as
473    # skipped until the situation has been solved.
474    QEMU_JOB_SKIPPED: 1
475  timeout: 90m
476
477check-cfi-aarch64:
478  extends: .native_test_job_template
479  needs:
480    - job: build-cfi-aarch64
481      artifacts: true
482  variables:
483    IMAGE: fedora
484    MAKE_CHECK_ARGS: check
485
486avocado-cfi-aarch64:
487  extends: .avocado_test_job_template
488  needs:
489    - job: build-cfi-aarch64
490      artifacts: true
491  variables:
492    IMAGE: fedora
493    MAKE_CHECK_ARGS: check-avocado
494
495build-cfi-ppc64-s390x:
496  extends:
497    - .native_build_job_template
498    - .native_build_artifact_template
499  needs:
500  - job: amd64-fedora-container
501  variables:
502    LD_JOBS: 1
503    AR: llvm-ar
504    IMAGE: fedora
505    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
506      --enable-safe-stack --disable-slirp
507    TARGETS: ppc64-softmmu s390x-softmmu
508    MAKE_CHECK_ARGS: check-build
509    # FIXME: This job is often failing, likely due to out-of-memory problems in
510    # the constrained containers of the shared runners. Thus this is marked as
511    # skipped until the situation has been solved.
512    QEMU_JOB_SKIPPED: 1
513  timeout: 80m
514
515check-cfi-ppc64-s390x:
516  extends: .native_test_job_template
517  needs:
518    - job: build-cfi-ppc64-s390x
519      artifacts: true
520  variables:
521    IMAGE: fedora
522    MAKE_CHECK_ARGS: check
523
524avocado-cfi-ppc64-s390x:
525  extends: .avocado_test_job_template
526  needs:
527    - job: build-cfi-ppc64-s390x
528      artifacts: true
529  variables:
530    IMAGE: fedora
531    MAKE_CHECK_ARGS: check-avocado
532
533build-cfi-x86_64:
534  extends:
535    - .native_build_job_template
536    - .native_build_artifact_template
537  needs:
538  - job: amd64-fedora-container
539  variables:
540    LD_JOBS: 1
541    AR: llvm-ar
542    IMAGE: fedora
543    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
544      --enable-safe-stack --disable-slirp
545    TARGETS: x86_64-softmmu
546    MAKE_CHECK_ARGS: check-build
547  timeout: 70m
548
549check-cfi-x86_64:
550  extends: .native_test_job_template
551  needs:
552    - job: build-cfi-x86_64
553      artifacts: true
554  variables:
555    IMAGE: fedora
556    MAKE_CHECK_ARGS: check
557
558avocado-cfi-x86_64:
559  extends: .avocado_test_job_template
560  needs:
561    - job: build-cfi-x86_64
562      artifacts: true
563  variables:
564    IMAGE: fedora
565    MAKE_CHECK_ARGS: check-avocado
566
567tsan-build:
568  extends: .native_build_job_template
569  needs:
570    job: amd64-ubuntu2204-container
571  variables:
572    IMAGE: ubuntu2204
573    CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++
574          --enable-trace-backends=ust --disable-slirp
575    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
576
577# gcov is a GCC features
578gcov:
579  extends: .native_build_job_template
580  needs:
581    job: amd64-ubuntu2204-container
582  timeout: 80m
583  variables:
584    IMAGE: ubuntu2204
585    CONFIGURE_ARGS: --enable-gcov
586    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
587    MAKE_CHECK_ARGS: check-unit check-softfloat
588  after_script:
589    - cd build
590    - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
591        -o coverage.xml --root ${CI_PROJECT_DIR} . *.p
592  coverage: /^\s*lines:\s*\d+.\d+\%/
593  artifacts:
594    name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
595    when: always
596    expire_in: 2 days
597    paths:
598      - build/meson-logs/testlog.txt
599    reports:
600      junit: build/meson-logs/testlog.junit.xml
601      coverage_report:
602        coverage_format: cobertura
603        path: build/coverage.xml
604
605build-oss-fuzz:
606  extends: .native_build_job_template
607  needs:
608    job: amd64-fedora-container
609  variables:
610    IMAGE: fedora
611  script:
612    - mkdir build-oss-fuzz
613    - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt
614    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
615      ./scripts/oss-fuzz/build.sh
616    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
617    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
618                      | grep -v slirp); do
619        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
620        echo Testing ${fuzzer} ... ;
621        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
622      done
623
624build-tci:
625  extends: .native_build_job_template
626  needs:
627    job: amd64-debian-user-cross-container
628  variables:
629    IMAGE: debian-all-test-cross
630  script:
631    - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
632    - mkdir build
633    - cd build
634    - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
635        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
636        || { cat config.log meson-logs/meson-log.txt && exit 1; }
637    - make -j"$JOBS"
638    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
639    - for tg in $TARGETS ; do
640        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
641        ./tests/qtest/boot-serial-test || exit 1 ;
642        ./tests/qtest/cdrom-test || exit 1 ;
643      done
644    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
645    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
646    - make check-tcg
647
648# Check our reduced build configurations
649build-without-defaults:
650  extends: .native_build_job_template
651  needs:
652    job: amd64-centos8-container
653  variables:
654    IMAGE: centos8
655    CONFIGURE_ARGS:
656      --without-default-devices
657      --without-default-features
658      --disable-fdt
659      --disable-pie
660      --disable-qom-cast-debug
661      --disable-strip
662    TARGETS: avr-softmmu s390x-softmmu sh4-softmmu
663      sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
664    MAKE_CHECK_ARGS: check
665
666build-libvhost-user:
667  extends: .base_job_template
668  stage: build
669  image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
670  needs:
671    job: amd64-fedora-container
672  script:
673    - mkdir subprojects/libvhost-user/build
674    - cd subprojects/libvhost-user/build
675    - meson
676    - ninja
677
678# No targets are built here, just tools, docs, and unit tests. This
679# also feeds into the eventual documentation deployment steps later
680build-tools-and-docs-debian:
681  extends:
682    - .native_build_job_template
683    - .native_build_artifact_template
684  needs:
685    job: amd64-debian-container
686    # when running on 'master' we use pre-existing container
687    optional: true
688  variables:
689    IMAGE: debian
690    MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
691    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
692    QEMU_JOB_PUBLISH: 1
693
694# Prepare for GitLab pages deployment. Anything copied into the
695# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
696#
697# GitLab publishes from any branch that triggers a CI pipeline
698#
699# For the main repo we don't want to publish from 'staging'
700# since that content may not be pushed, nor do we wish to
701# publish from 'stable-NNN' branches as that content is outdated.
702# Thus we restrict to just the default branch
703#
704# For contributor forks we want to publish from any repo so
705# that users can see the results of their commits, regardless
706# of what topic branch they're currently using
707pages:
708  extends: .base_job_template
709  image: $CI_REGISTRY_IMAGE/qemu/debian:$QEMU_CI_CONTAINER_TAG
710  stage: test
711  needs:
712    - job: build-tools-and-docs-debian
713  script:
714    - mkdir -p public
715    # HTML-ised source tree
716    - make gtags
717    # We unset variables to work around a bug in some htags versions
718    # which causes it to fail when the environment is large
719    - CI_COMMIT_MESSAGE= CI_COMMIT_TAG_MESSAGE= htags
720        -anT --tree-view=filetree -m qemu_init
721        -t "Welcome to the QEMU sourcecode"
722    - mv HTML public/src
723    # Project documentation
724    - make -C build install DESTDIR=$(pwd)/temp-install
725    - mv temp-install/usr/local/share/doc/qemu/* public/
726  artifacts:
727    when: on_success
728    paths:
729      - public
730  variables:
731    QEMU_JOB_PUBLISH: 1
732
733coverity:
734  image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
735  stage: build
736  allow_failure: true
737  timeout: 3h
738  needs:
739    - job: amd64-fedora-container
740      optional: true
741  before_script:
742    - dnf install -y curl wget
743  script:
744    # would be nice to cancel the job if over quota (https://gitlab.com/gitlab-org/gitlab/-/issues/256089)
745    # for example:
746    #   curl --request POST --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" "${CI_SERVER_URL}/api/v4/projects/${CI_PROJECT_ID}/jobs/${CI_JOB_ID}/cancel
747    - 'scripts/coverity-scan/run-coverity-scan --check-upload-only || { exitcode=$?; if test $exitcode = 1; then
748        exit 0;
749      else
750        exit $exitcode;
751      fi; };
752      scripts/coverity-scan/run-coverity-scan --update-tools-only > update-tools.log 2>&1 || { cat update-tools.log; exit 1; };
753      scripts/coverity-scan/run-coverity-scan --no-update-tools'
754  rules:
755    - if: '$COVERITY_TOKEN == null'
756      when: never
757    - if: '$COVERITY_EMAIL == null'
758      when: never
759    # Never included on upstream pipelines, except for schedules
760    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM && $CI_PIPELINE_SOURCE == "schedule"'
761      when: on_success
762    - if: '$CI_PROJECT_NAMESPACE == $QEMU_CI_UPSTREAM'
763      when: never
764    # Forks don't get any pipeline unless QEMU_CI=1 or QEMU_CI=2 is set
765    - if: '$QEMU_CI != "1" && $QEMU_CI != "2"'
766      when: never
767    # Always manual on forks even if $QEMU_CI == "2"
768    - when: manual
769