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