xref: /qemu/.gitlab-ci.d/buildtest.yml (revision 70704779)
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 $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 is disabled until we release 9.0. The existing
223# migration-test in 8.2 is broken on aarch64. The fix was already
224# commited, but it will only take effect once 9.0 is out.
225migration-compat-aarch64:
226  extends: .migration-compat-common
227  variables:
228    TARGET: aarch64
229    QEMU_JOB_SKIPPED: 1
230
231migration-compat-x86_64:
232  extends: .migration-compat-common
233  variables:
234    TARGET: x86_64
235
236check-system-centos:
237  extends: .native_test_job_template
238  needs:
239    - job: build-system-centos
240      artifacts: true
241  variables:
242    IMAGE: centos8
243    MAKE_CHECK_ARGS: check
244
245avocado-system-centos:
246  extends: .avocado_test_job_template
247  needs:
248    - job: build-system-centos
249      artifacts: true
250  variables:
251    IMAGE: centos8
252    MAKE_CHECK_ARGS: check-avocado
253    AVOCADO_TAGS: arch:ppc64 arch:or1k arch:s390x arch:x86_64 arch:rx
254      arch:sh4 arch:nios2
255
256build-system-opensuse:
257  extends:
258    - .native_build_job_template
259    - .native_build_artifact_template
260  needs:
261    job: amd64-opensuse-leap-container
262  variables:
263    IMAGE: opensuse-leap
264    TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
265    MAKE_CHECK_ARGS: check-build
266
267check-system-opensuse:
268  extends: .native_test_job_template
269  needs:
270    - job: build-system-opensuse
271      artifacts: true
272  variables:
273    IMAGE: opensuse-leap
274    MAKE_CHECK_ARGS: check
275
276avocado-system-opensuse:
277  extends: .avocado_test_job_template
278  needs:
279    - job: build-system-opensuse
280      artifacts: true
281  variables:
282    IMAGE: opensuse-leap
283    MAKE_CHECK_ARGS: check-avocado
284    AVOCADO_TAGS: arch:s390x arch:x86_64 arch:aarch64
285
286#
287# Flaky tests. We don't run these by default and they are allow fail
288# but often the CI system is the only way to trigger the failures.
289#
290
291build-system-flaky:
292  extends:
293    - .native_build_job_template
294    - .native_build_artifact_template
295  needs:
296    job: amd64-debian-container
297  variables:
298    IMAGE: debian
299    QEMU_JOB_OPTIONAL: 1
300    TARGETS: aarch64-softmmu arm-softmmu mips64el-softmmu
301      ppc64-softmmu rx-softmmu s390x-softmmu sh4-softmmu x86_64-softmmu
302    MAKE_CHECK_ARGS: check-build
303
304avocado-system-flaky:
305  extends: .avocado_test_job_template
306  needs:
307    - job: build-system-flaky
308      artifacts: true
309  allow_failure: true
310  variables:
311    IMAGE: debian
312    MAKE_CHECK_ARGS: check-avocado
313    QEMU_JOB_OPTIONAL: 1
314    QEMU_TEST_FLAKY_TESTS: 1
315    AVOCADO_TAGS: flaky
316
317# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
318# the configure script. The container doesn't contain Xen headers so
319# Xen accelerator is not detected / selected. As result it build the
320# i386-softmmu and x86_64-softmmu with KVM being the single accelerator
321# available.
322# Also use a different coroutine implementation (which is only really of
323# interest to KVM users, i.e. with TCG disabled)
324build-tcg-disabled:
325  extends: .native_build_job_template
326  needs:
327    job: amd64-centos8-container
328  variables:
329    IMAGE: centos8
330  script:
331    - mkdir build
332    - cd build
333    - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext
334                   --disable-docs --disable-sdl --disable-gtk --disable-vnc
335      || { cat config.log meson-logs/meson-log.txt && exit 1; }
336    - make -j"$JOBS"
337    - make check-unit
338    - make check-qapi-schema
339    - cd tests/qemu-iotests/
340    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
341            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
342            170 171 183 184 192 194 208 221 226 227 236 253 277 image-fleecing
343    - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
344            124 132 139 142 144 145 151 152 155 157 165 194 196 200 202
345            208 209 216 218 227 234 246 247 248 250 254 255 257 258
346            260 261 262 263 264 270 272 273 277 279 image-fleecing
347
348build-user:
349  extends: .native_build_job_template
350  needs:
351    job: amd64-debian-user-cross-container
352  variables:
353    IMAGE: debian-all-test-cross
354    CONFIGURE_ARGS: --disable-tools --disable-system
355      --target-list-exclude=alpha-linux-user,sh4-linux-user
356    MAKE_CHECK_ARGS: check-tcg
357
358build-user-static:
359  extends: .native_build_job_template
360  needs:
361    job: amd64-debian-user-cross-container
362  variables:
363    IMAGE: debian-all-test-cross
364    CONFIGURE_ARGS: --disable-tools --disable-system --static
365      --target-list-exclude=alpha-linux-user,sh4-linux-user
366    MAKE_CHECK_ARGS: check-tcg
367
368# targets stuck on older compilers
369build-legacy:
370  extends: .native_build_job_template
371  needs:
372    job: amd64-debian-legacy-cross-container
373  variables:
374    IMAGE: debian-legacy-test-cross
375    TARGETS: alpha-linux-user alpha-softmmu sh4-linux-user
376    CONFIGURE_ARGS: --disable-tools
377    MAKE_CHECK_ARGS: check-tcg
378
379build-user-hexagon:
380  extends: .native_build_job_template
381  needs:
382    job: hexagon-cross-container
383  variables:
384    IMAGE: debian-hexagon-cross
385    TARGETS: hexagon-linux-user
386    CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
387    MAKE_CHECK_ARGS: check-tcg
388
389# Build the softmmu targets we have check-tcg tests and compilers in
390# our omnibus all-test-cross container. Those targets that haven't got
391# Debian cross compiler support need to use special containers.
392build-some-softmmu:
393  extends: .native_build_job_template
394  needs:
395    job: amd64-debian-user-cross-container
396  variables:
397    IMAGE: debian-all-test-cross
398    CONFIGURE_ARGS: --disable-tools --enable-debug
399    TARGETS: arm-softmmu aarch64-softmmu i386-softmmu riscv64-softmmu
400      s390x-softmmu x86_64-softmmu
401    MAKE_CHECK_ARGS: check-tcg
402
403build-loongarch64:
404  extends: .native_build_job_template
405  needs:
406    job: loongarch-debian-cross-container
407  variables:
408    IMAGE: debian-loongarch-cross
409    CONFIGURE_ARGS: --disable-tools --enable-debug
410    TARGETS: loongarch64-linux-user loongarch64-softmmu
411    MAKE_CHECK_ARGS: check-tcg
412
413# We build tricore in a very minimal tricore only container
414build-tricore-softmmu:
415  extends: .native_build_job_template
416  needs:
417    job: tricore-debian-cross-container
418  variables:
419    IMAGE: debian-tricore-cross
420    CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
421    TARGETS: tricore-softmmu
422    MAKE_CHECK_ARGS: check-tcg
423
424clang-system:
425  extends: .native_build_job_template
426  needs:
427    job: amd64-fedora-container
428  variables:
429    IMAGE: fedora
430    CONFIGURE_ARGS: --cc=clang --cxx=clang++
431      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
432    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu s390x-softmmu
433    MAKE_CHECK_ARGS: check-qtest check-tcg
434
435clang-user:
436  extends: .native_build_job_template
437  needs:
438    job: amd64-debian-user-cross-container
439  timeout: 70m
440  variables:
441    IMAGE: debian-all-test-cross
442    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
443      --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
444      --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
445    MAKE_CHECK_ARGS: check-unit check-tcg
446
447# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory.
448# On gitlab runners, default value sometimes end up calling 2 lds concurrently and
449# triggers an Out-Of-Memory error
450#
451# Since slirp callbacks are used in QEMU Timers, we cannot use libslirp with
452# CFI builds, and thus have to disable it here.
453#
454# Split in three sets of build/check/avocado to limit the execution time of each
455# job
456build-cfi-aarch64:
457  extends:
458    - .native_build_job_template
459    - .native_build_artifact_template
460  needs:
461  - job: amd64-fedora-container
462  variables:
463    LD_JOBS: 1
464    AR: llvm-ar
465    IMAGE: fedora
466    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
467      --enable-safe-stack --disable-slirp
468    TARGETS: aarch64-softmmu
469    MAKE_CHECK_ARGS: check-build
470    # FIXME: This job is often failing, likely due to out-of-memory problems in
471    # the constrained containers of the shared runners. Thus this is marked as
472    # skipped until the situation has been solved.
473    QEMU_JOB_SKIPPED: 1
474  timeout: 90m
475
476check-cfi-aarch64:
477  extends: .native_test_job_template
478  needs:
479    - job: build-cfi-aarch64
480      artifacts: true
481  variables:
482    IMAGE: fedora
483    MAKE_CHECK_ARGS: check
484
485avocado-cfi-aarch64:
486  extends: .avocado_test_job_template
487  needs:
488    - job: build-cfi-aarch64
489      artifacts: true
490  variables:
491    IMAGE: fedora
492    MAKE_CHECK_ARGS: check-avocado
493
494build-cfi-ppc64-s390x:
495  extends:
496    - .native_build_job_template
497    - .native_build_artifact_template
498  needs:
499  - job: amd64-fedora-container
500  variables:
501    LD_JOBS: 1
502    AR: llvm-ar
503    IMAGE: fedora
504    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
505      --enable-safe-stack --disable-slirp
506    TARGETS: ppc64-softmmu s390x-softmmu
507    MAKE_CHECK_ARGS: check-build
508    # FIXME: This job is often failing, likely due to out-of-memory problems in
509    # the constrained containers of the shared runners. Thus this is marked as
510    # skipped until the situation has been solved.
511    QEMU_JOB_SKIPPED: 1
512  timeout: 80m
513
514check-cfi-ppc64-s390x:
515  extends: .native_test_job_template
516  needs:
517    - job: build-cfi-ppc64-s390x
518      artifacts: true
519  variables:
520    IMAGE: fedora
521    MAKE_CHECK_ARGS: check
522
523avocado-cfi-ppc64-s390x:
524  extends: .avocado_test_job_template
525  needs:
526    - job: build-cfi-ppc64-s390x
527      artifacts: true
528  variables:
529    IMAGE: fedora
530    MAKE_CHECK_ARGS: check-avocado
531
532build-cfi-x86_64:
533  extends:
534    - .native_build_job_template
535    - .native_build_artifact_template
536  needs:
537  - job: amd64-fedora-container
538  variables:
539    LD_JOBS: 1
540    AR: llvm-ar
541    IMAGE: fedora
542    CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug
543      --enable-safe-stack --disable-slirp
544    TARGETS: x86_64-softmmu
545    MAKE_CHECK_ARGS: check-build
546  timeout: 70m
547
548check-cfi-x86_64:
549  extends: .native_test_job_template
550  needs:
551    - job: build-cfi-x86_64
552      artifacts: true
553  variables:
554    IMAGE: fedora
555    MAKE_CHECK_ARGS: check
556
557avocado-cfi-x86_64:
558  extends: .avocado_test_job_template
559  needs:
560    - job: build-cfi-x86_64
561      artifacts: true
562  variables:
563    IMAGE: fedora
564    MAKE_CHECK_ARGS: check-avocado
565
566tsan-build:
567  extends: .native_build_job_template
568  needs:
569    job: amd64-ubuntu2204-container
570  variables:
571    IMAGE: ubuntu2204
572    CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++
573          --enable-trace-backends=ust --disable-slirp
574    TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
575
576# gcov is a GCC features
577gcov:
578  extends: .native_build_job_template
579  needs:
580    job: amd64-ubuntu2204-container
581  timeout: 80m
582  variables:
583    IMAGE: ubuntu2204
584    CONFIGURE_ARGS: --enable-gcov
585    TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
586    MAKE_CHECK_ARGS: check-unit check-softfloat
587  after_script:
588    - cd build
589    - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
590        -o coverage.xml --root ${CI_PROJECT_DIR} . *.p
591  coverage: /^\s*lines:\s*\d+.\d+\%/
592  artifacts:
593    name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
594    when: always
595    expire_in: 2 days
596    paths:
597      - build/meson-logs/testlog.txt
598    reports:
599      junit: build/meson-logs/testlog.junit.xml
600      coverage_report:
601        coverage_format: cobertura
602        path: build/coverage.xml
603
604build-oss-fuzz:
605  extends: .native_build_job_template
606  needs:
607    job: amd64-fedora-container
608  variables:
609    IMAGE: fedora
610  script:
611    - mkdir build-oss-fuzz
612    - export LSAN_OPTIONS=suppressions=scripts/oss-fuzz/lsan_suppressions.txt
613    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
614      ./scripts/oss-fuzz/build.sh
615    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
616    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
617                      | grep -v slirp); do
618        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
619        echo Testing ${fuzzer} ... ;
620        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
621      done
622
623build-tci:
624  extends: .native_build_job_template
625  needs:
626    job: amd64-debian-user-cross-container
627  variables:
628    IMAGE: debian-all-test-cross
629  script:
630    - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
631    - mkdir build
632    - cd build
633    - ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
634        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
635        || { cat config.log meson-logs/meson-log.txt && exit 1; }
636    - make -j"$JOBS"
637    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
638    - for tg in $TARGETS ; do
639        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
640        ./tests/qtest/boot-serial-test || exit 1 ;
641        ./tests/qtest/cdrom-test || exit 1 ;
642      done
643    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
644    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
645    - make check-tcg
646
647# Check our reduced build configurations
648build-without-defaults:
649  extends: .native_build_job_template
650  needs:
651    job: amd64-centos8-container
652  variables:
653    IMAGE: centos8
654    CONFIGURE_ARGS:
655      --without-default-devices
656      --without-default-features
657      --disable-fdt
658      --disable-pie
659      --disable-qom-cast-debug
660      --disable-strip
661    TARGETS: avr-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
662      sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
663    MAKE_CHECK_ARGS: check
664
665build-libvhost-user:
666  extends: .base_job_template
667  stage: build
668  image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
669  needs:
670    job: amd64-fedora-container
671  script:
672    - mkdir subprojects/libvhost-user/build
673    - cd subprojects/libvhost-user/build
674    - meson
675    - ninja
676
677# No targets are built here, just tools, docs, and unit tests. This
678# also feeds into the eventual documentation deployment steps later
679build-tools-and-docs-debian:
680  extends:
681    - .native_build_job_template
682    - .native_build_artifact_template
683  needs:
684    job: amd64-debian-container
685    # when running on 'master' we use pre-existing container
686    optional: true
687  variables:
688    IMAGE: debian
689    MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
690    CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
691    QEMU_JOB_PUBLISH: 1
692
693# Prepare for GitLab pages deployment. Anything copied into the
694# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
695#
696# GitLab publishes from any branch that triggers a CI pipeline
697#
698# For the main repo we don't want to publish from 'staging'
699# since that content may not be pushed, nor do we wish to
700# publish from 'stable-NNN' branches as that content is outdated.
701# Thus we restrict to just the default branch
702#
703# For contributor forks we want to publish from any repo so
704# that users can see the results of their commits, regardless
705# of what topic branch they're currently using
706pages:
707  extends: .base_job_template
708  image: $CI_REGISTRY_IMAGE/qemu/debian:$QEMU_CI_CONTAINER_TAG
709  stage: test
710  needs:
711    - job: build-tools-and-docs-debian
712  script:
713    - mkdir -p public
714    # HTML-ised source tree
715    - make gtags
716    # We unset variables to work around a bug in some htags versions
717    # which causes it to fail when the environment is large
718    - CI_COMMIT_MESSAGE= CI_COMMIT_TAG_MESSAGE= htags
719        -anT --tree-view=filetree -m qemu_init
720        -t "Welcome to the QEMU sourcecode"
721    - mv HTML public/src
722    # Project documentation
723    - make -C build install DESTDIR=$(pwd)/temp-install
724    - mv temp-install/usr/local/share/doc/qemu/* public/
725  artifacts:
726    when: on_success
727    paths:
728      - public
729  variables:
730    QEMU_JOB_PUBLISH: 1
731