xref: /qemu/.gitlab-ci.yml (revision 922d42bb)
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)
4stages:
5  - containers
6  - containers-layer2
7  - build
8  - test
9
10include:
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
70build-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
83check-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
92acceptance-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
102build-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
115check-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
124acceptance-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
134build-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
147check-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
156acceptance-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
166build-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
179check-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
188acceptance-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
198build-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
223build-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
243build-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
253build-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
261build-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
271build-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.
286check-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
296build-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
314build-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.
339build-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
350check-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
360build-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
371check-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
381build-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
392check-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
402check-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
413check-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
423pages:
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
436