gitlab: force enable docs build in Fedora, Ubuntu, Debian
[qemu.git] / .gitlab-ci.yml
1 # Currently we have two build stages after our containers are built:
2 #  - build (for traditional build and test or first stage build)
3 #  - test (for test stages, using build artefacts from a build stage)
4 stages:
5   - containers
6   - containers-layer2
7   - build
8   - test
9
10 include:
11   - local: '/.gitlab-ci.d/edk2.yml'
12   - local: '/.gitlab-ci.d/opensbi.yml'
13   - local: '/.gitlab-ci.d/containers.yml'
14   - local: '/.gitlab-ci.d/crossbuilds.yml'
15
16 .native_build_job_template: &native_build_job_definition
17   stage: build
18   image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
19   before_script:
20     - JOBS=$(expr $(nproc) + 1)
21     - sed -i s,git.qemu.org/git,gitlab.com/qemu-project, .gitmodules
22   script:
23     - mkdir build
24     - cd build
25     - if test -n "$TARGETS";
26       then
27         ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ;
28       else
29         ../configure --enable-werror $CONFIGURE_ARGS ;
30       fi || { cat config.log meson-logs/meson-log.txt && exit 1; }
31     - make -j"$JOBS"
32     - if test -n "$MAKE_CHECK_ARGS";
33       then
34         make -j"$JOBS" $MAKE_CHECK_ARGS ;
35       fi
36
37 .native_test_job_template: &native_test_job_definition
38   stage: test
39   image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
40   script:
41     - cd build
42     - find . -type f -exec touch {} +
43     - make $MAKE_CHECK_ARGS
44
45 .acceptance_template: &acceptance_definition
46   cache:
47     key: "${CI_JOB_NAME}-cache"
48     paths:
49       - ${CI_PROJECT_DIR}/avocado-cache
50     policy: pull-push
51   artifacts:
52     paths:
53       - build/tests/results/latest/results.xml
54     reports:
55       junit: build/tests/results/latest/results.xml
56   before_script:
57     - mkdir -p ~/.config/avocado
58     - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
59     - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
60            >> ~/.config/avocado/avocado.conf
61     - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
62         du -chs ${CI_PROJECT_DIR}/avocado-cache ;
63       fi
64     - export AVOCADO_ALLOW_UNTRUSTED_CODE=1
65   after_script:
66     - cd build
67     - python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP", "CANCEL")]' | xargs cat
68     - du -chs ${CI_PROJECT_DIR}/avocado-cache
69
70 build-system-ubuntu:
71   <<: *native_build_job_definition
72   variables:
73     IMAGE: ubuntu2004
74     TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
75       moxie-softmmu microblazeel-softmmu mips64el-softmmu
76     MAKE_CHECK_ARGS: check-build
77     CONFIGURE_ARGS: --enable-docs
78   artifacts:
79     expire_in: 2 days
80     paths:
81       - build
82
83 check-system-ubuntu:
84   <<: *native_test_job_definition
85   needs:
86     - job: build-system-ubuntu
87       artifacts: true
88   variables:
89     IMAGE: ubuntu2004
90     MAKE_CHECK_ARGS: check
91
92 acceptance-system-ubuntu:
93   <<: *native_test_job_definition
94   needs:
95     - job: build-system-ubuntu
96       artifacts: true
97   variables:
98     IMAGE: ubuntu2004
99     MAKE_CHECK_ARGS: check-acceptance
100   <<: *acceptance_definition
101
102 build-system-debian:
103   <<: *native_build_job_definition
104   variables:
105     IMAGE: debian-amd64
106     TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
107       riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
108     MAKE_CHECK_ARGS: check-build
109     CONFIGURE_ARGS: --enable-docs
110   artifacts:
111     expire_in: 2 days
112     paths:
113       - build
114
115 check-system-debian:
116   <<: *native_test_job_definition
117   needs:
118     - job: build-system-debian
119       artifacts: true
120   variables:
121     IMAGE: debian-amd64
122     MAKE_CHECK_ARGS: check
123
124 acceptance-system-debian:
125   <<: *native_test_job_definition
126   needs:
127     - job: build-system-debian
128       artifacts: true
129   variables:
130     IMAGE: debian-amd64
131     MAKE_CHECK_ARGS: check-acceptance
132   <<: *acceptance_definition
133
134 build-system-fedora:
135   <<: *native_build_job_definition
136   variables:
137     IMAGE: fedora
138     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
139     TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
140       xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
141     MAKE_CHECK_ARGS: check-build
142   artifacts:
143     expire_in: 2 days
144     paths:
145       - build
146
147 check-system-fedora:
148   <<: *native_test_job_definition
149   needs:
150     - job: build-system-fedora
151       artifacts: true
152   variables:
153     IMAGE: fedora
154     MAKE_CHECK_ARGS: check
155
156 acceptance-system-fedora:
157   <<: *native_test_job_definition
158   needs:
159     - job: build-system-fedora
160       artifacts: true
161   variables:
162     IMAGE: fedora
163     MAKE_CHECK_ARGS: check-acceptance
164   <<: *acceptance_definition
165
166 build-system-centos:
167   <<: *native_build_job_definition
168   variables:
169     IMAGE: centos8
170     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
171     TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
172       x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
173     MAKE_CHECK_ARGS: check-build
174   artifacts:
175     expire_in: 2 days
176     paths:
177       - build
178
179 check-system-centos:
180   <<: *native_test_job_definition
181   needs:
182     - job: build-system-centos
183       artifacts: true
184   variables:
185     IMAGE: centos8
186     MAKE_CHECK_ARGS: check
187
188 acceptance-system-centos:
189   <<: *native_test_job_definition
190   needs:
191     - job: build-system-centos
192       artifacts: true
193   variables:
194     IMAGE: centos8
195     MAKE_CHECK_ARGS: check-acceptance
196   <<: *acceptance_definition
197
198 build-disabled:
199   <<: *native_build_job_definition
200   variables:
201     IMAGE: fedora
202     CONFIGURE_ARGS: --disable-attr --disable-avx2 --disable-bochs
203       --disable-brlapi --disable-bzip2 --disable-cap-ng --disable-capstone
204       --disable-cloop --disable-coroutine-pool --disable-curl --disable-curses
205       --disable-dmg --disable-docs --disable-glusterfs --disable-gnutls
206       --disable-gtk --disable-guest-agent --disable-iconv --disable-kvm
207       --disable-libiscsi --disable-libpmem --disable-libssh --disable-libusb
208       --disable-libxml2 --disable-linux-aio --disable-live-block-migration
209       --disable-lzo --disable-malloc-trim --disable-mpath --disable-nettle
210       --disable-numa --disable-parallels --disable-pie --disable-qcow1
211       --disable-qed --disable-qom-cast-debug --disable-rbd --disable-rdma
212       --disable-replication --disable-sdl --disable-seccomp --disable-sheepdog
213       --disable-slirp --disable-smartcard --disable-snappy --disable-spice
214       --disable-strip --disable-tpm --disable-usb-redir --disable-vdi
215       --disable-vhost-crypto --disable-vhost-net --disable-vhost-scsi
216       --disable-vhost-user --disable-vhost-vdpa --disable-vhost-vsock
217       --disable-virglrenderer --disable-vnc --disable-vte --disable-vvfat
218       --disable-xen --disable-zstd
219     TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu
220       s390x-softmmu i386-linux-user
221     MAKE_CHECK_ARGS: check-qtest SPEED=slow
222
223 build-tcg-disabled:
224   <<: *native_build_job_definition
225   variables:
226     IMAGE: centos8
227   script:
228     - mkdir build
229     - cd build
230     - ../configure --disable-tcg --audio-drv-list="" || { cat config.log meson-logs/meson-log.txt && exit 1; }
231     - make -j"$JOBS"
232     - make check-unit
233     - make check-qapi-schema
234     - cd tests/qemu-iotests/
235     - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
236             052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
237             170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
238     - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122
239             124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
240             208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
241             260 261 262 263 264 270 272 273 277 279
242
243 build-user:
244   <<: *native_build_job_definition
245   variables:
246     IMAGE: debian-all-test-cross
247     CONFIGURE_ARGS: --disable-tools --disable-system
248     MAKE_CHECK_ARGS: check-tcg
249
250 # Run check-tcg against linux-user (with plugins)
251 # we skip sparc64-linux-user until it has been fixed somewhat
252 # we skip cris-linux-user as it doesn't use the common run loop
253 build-user-plugins:
254   <<: *native_build_job_definition
255   variables:
256     IMAGE: debian-all-test-cross
257     CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
258     MAKE_CHECK_ARGS: check-tcg
259   timeout: 1h 30m
260
261 build-clang:
262   <<: *native_build_job_definition
263   variables:
264     IMAGE: fedora
265     CONFIGURE_ARGS: --cc=clang --cxx=clang++
266     TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
267       ppc-softmmu s390x-softmmu arm-linux-user
268     MAKE_CHECK_ARGS: check
269
270 # These targets are on the way out
271 build-deprecated:
272   <<: *native_build_job_definition
273   variables:
274     IMAGE: debian-all-test-cross
275     CONFIGURE_ARGS: --disable-docs --disable-tools
276     MAKE_CHECK_ARGS: build-tcg
277     TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
278       unicore32-softmmu
279   artifacts:
280     expire_in: 2 days
281     paths:
282       - build
283
284 # We split the check-tcg step as test failures are expected but we still
285 # want to catch the build breaking.
286 check-deprecated:
287   <<: *native_test_job_definition
288   needs:
289     - job: build-deprecated
290       artifacts: true
291   variables:
292     IMAGE: debian-all-test-cross
293     MAKE_CHECK_ARGS: check-tcg
294   allow_failure: true
295
296 build-oss-fuzz:
297   <<: *native_build_job_definition
298   variables:
299     IMAGE: fedora
300   script:
301     - mkdir build-oss-fuzz
302     - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
303       ./scripts/oss-fuzz/build.sh
304     - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
305     - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
306                       | grep -v slirp); do
307         grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
308         echo Testing ${fuzzer} ... ;
309         "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
310       done
311     # Unrelated to fuzzer: run some tests with -fsanitize=address
312     - cd build-oss-fuzz && make check-qtest-i386 check-unit
313
314 build-tci:
315   <<: *native_build_job_definition
316   variables:
317     IMAGE: fedora
318   script:
319     - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
320     - mkdir build
321     - cd build
322     - ../configure --enable-tcg-interpreter
323         --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
324     - make -j"$JOBS"
325     - make run-tcg-tests-x86_64-softmmu
326     - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
327     - for tg in $TARGETS ; do
328         export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
329         ./tests/qtest/boot-serial-test || exit 1 ;
330         ./tests/qtest/cdrom-test || exit 1 ;
331       done
332     - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
333     - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
334
335 # Most jobs test latest gcrypt or nettle builds
336 #
337 # These jobs test old gcrypt and nettle from RHEL7
338 # which had some API differences.
339 build-crypto-old-nettle:
340   <<: *native_build_job_definition
341   variables:
342     IMAGE: centos7
343     TARGETS: x86_64-softmmu x86_64-linux-user
344     CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
345     MAKE_CHECK_ARGS: check-build
346   artifacts:
347     paths:
348       - build
349
350 check-crypto-old-nettle:
351   <<: *native_test_job_definition
352   needs:
353     - job: build-crypto-old-nettle
354       artifacts: true
355   variables:
356     IMAGE: centos7
357     MAKE_CHECK_ARGS: check
358
359
360 build-crypto-old-gcrypt:
361   <<: *native_build_job_definition
362   variables:
363     IMAGE: centos7
364     TARGETS: x86_64-softmmu x86_64-linux-user
365     CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
366     MAKE_CHECK_ARGS: check-build
367   artifacts:
368     paths:
369       - build
370
371 check-crypto-old-gcrypt:
372   <<: *native_test_job_definition
373   needs:
374     - job: build-crypto-old-gcrypt
375       artifacts: true
376   variables:
377     IMAGE: centos7
378     MAKE_CHECK_ARGS: check
379
380
381 build-crypto-only-gnutls:
382   <<: *native_build_job_definition
383   variables:
384     IMAGE: centos7
385     TARGETS: x86_64-softmmu x86_64-linux-user
386     CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
387     MAKE_CHECK_ARGS: check-build
388   artifacts:
389     paths:
390       - build
391
392 check-crypto-only-gnutls:
393   <<: *native_test_job_definition
394   needs:
395     - job: build-crypto-only-gnutls
396       artifacts: true
397   variables:
398     IMAGE: centos7
399     MAKE_CHECK_ARGS: check
400
401
402 check-patch:
403   stage: build
404   image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
405   script: .gitlab-ci.d/check-patch.py
406   except:
407     variables:
408       - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
409   variables:
410     GIT_DEPTH: 1000
411   allow_failure: true
412
413 check-dco:
414   stage: build
415   image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
416   script: .gitlab-ci.d/check-dco.py
417   except:
418     variables:
419       - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
420   variables:
421     GIT_DEPTH: 1000
422
423 pages:
424   image: $CI_REGISTRY_IMAGE/qemu/ubuntu2004:latest
425   stage: test
426   needs:
427     - job: build-system-ubuntu
428       artifacts: true
429   script:
430     - mkdir public
431     - mv build/docs/index.html public/
432     - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done
433   artifacts:
434     paths:
435       - public