xref: /openbmc/qemu/.gitlab-ci.yml (revision acb1f3c2)
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# Only build the softmmu targets we have check-tcg tests for
251build-some-softmmu:
252  <<: *native_build_job_definition
253  variables:
254    IMAGE: debian-all-test-cross
255    CONFIGURE_ARGS: --disable-tools --enable-debug-tcg
256    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
257    MAKE_CHECK_ARGS: check-tcg
258
259# Run check-tcg against linux-user (with plugins)
260# we skip sparc64-linux-user until it has been fixed somewhat
261# we skip cris-linux-user as it doesn't use the common run loop
262build-user-plugins:
263  <<: *native_build_job_definition
264  variables:
265    IMAGE: debian-all-test-cross
266    CONFIGURE_ARGS: --disable-tools --disable-system --enable-plugins --enable-debug-tcg --target-list-exclude=sparc64-linux-user,cris-linux-user
267    MAKE_CHECK_ARGS: check-tcg
268  timeout: 1h 30m
269
270build-some-softmmu-plugins:
271  <<: *native_build_job_definition
272  variables:
273    IMAGE: debian-all-test-cross
274    CONFIGURE_ARGS: --disable-tools --disable-user --enable-plugins --enable-debug-tcg
275    TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
276    MAKE_CHECK_ARGS: check-tcg
277
278build-clang:
279  <<: *native_build_job_definition
280  variables:
281    IMAGE: fedora
282    CONFIGURE_ARGS: --cc=clang --cxx=clang++
283    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
284      ppc-softmmu s390x-softmmu arm-linux-user
285    MAKE_CHECK_ARGS: check
286
287# These targets are on the way out
288build-deprecated:
289  <<: *native_build_job_definition
290  variables:
291    IMAGE: debian-all-test-cross
292    CONFIGURE_ARGS: --disable-docs --disable-tools
293    MAKE_CHECK_ARGS: build-tcg
294    TARGETS: ppc64abi32-linux-user tilegx-linux-user lm32-softmmu
295      unicore32-softmmu
296  artifacts:
297    expire_in: 2 days
298    paths:
299      - build
300
301# We split the check-tcg step as test failures are expected but we still
302# want to catch the build breaking.
303check-deprecated:
304  <<: *native_test_job_definition
305  needs:
306    - job: build-deprecated
307      artifacts: true
308  variables:
309    IMAGE: debian-all-test-cross
310    MAKE_CHECK_ARGS: check-tcg
311  allow_failure: true
312
313build-oss-fuzz:
314  <<: *native_build_job_definition
315  variables:
316    IMAGE: fedora
317  script:
318    - mkdir build-oss-fuzz
319    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
320      ./scripts/oss-fuzz/build.sh
321    - export ASAN_OPTIONS="fast_unwind_on_malloc=0"
322    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
323                      | grep -v slirp); do
324        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
325        echo Testing ${fuzzer} ... ;
326        "${fuzzer}" -runs=1 -seed=1 || exit 1 ;
327      done
328    # Unrelated to fuzzer: run some tests with -fsanitize=address
329    - cd build-oss-fuzz && make check-qtest-i386 check-unit
330
331build-tci:
332  <<: *native_build_job_definition
333  variables:
334    IMAGE: fedora
335  script:
336    - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
337    - mkdir build
338    - cd build
339    - ../configure --enable-tcg-interpreter
340        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; }
341    - make -j"$JOBS"
342    - make run-tcg-tests-x86_64-softmmu
343    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
344    - for tg in $TARGETS ; do
345        export QTEST_QEMU_BINARY="./qemu-system-${tg}" ;
346        ./tests/qtest/boot-serial-test || exit 1 ;
347        ./tests/qtest/cdrom-test || exit 1 ;
348      done
349    - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test
350    - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
351
352# Most jobs test latest gcrypt or nettle builds
353#
354# These jobs test old gcrypt and nettle from RHEL7
355# which had some API differences.
356build-crypto-old-nettle:
357  <<: *native_build_job_definition
358  variables:
359    IMAGE: centos7
360    TARGETS: x86_64-softmmu x86_64-linux-user
361    CONFIGURE_ARGS: --disable-gcrypt --enable-nettle
362    MAKE_CHECK_ARGS: check-build
363  artifacts:
364    paths:
365      - build
366
367check-crypto-old-nettle:
368  <<: *native_test_job_definition
369  needs:
370    - job: build-crypto-old-nettle
371      artifacts: true
372  variables:
373    IMAGE: centos7
374    MAKE_CHECK_ARGS: check
375
376
377build-crypto-old-gcrypt:
378  <<: *native_build_job_definition
379  variables:
380    IMAGE: centos7
381    TARGETS: x86_64-softmmu x86_64-linux-user
382    CONFIGURE_ARGS: --disable-nettle --enable-gcrypt
383    MAKE_CHECK_ARGS: check-build
384  artifacts:
385    paths:
386      - build
387
388check-crypto-old-gcrypt:
389  <<: *native_test_job_definition
390  needs:
391    - job: build-crypto-old-gcrypt
392      artifacts: true
393  variables:
394    IMAGE: centos7
395    MAKE_CHECK_ARGS: check
396
397
398build-crypto-only-gnutls:
399  <<: *native_build_job_definition
400  variables:
401    IMAGE: centos7
402    TARGETS: x86_64-softmmu x86_64-linux-user
403    CONFIGURE_ARGS: --disable-nettle --disable-gcrypt --enable-gnutls
404    MAKE_CHECK_ARGS: check-build
405  artifacts:
406    paths:
407      - build
408
409check-crypto-only-gnutls:
410  <<: *native_test_job_definition
411  needs:
412    - job: build-crypto-only-gnutls
413      artifacts: true
414  variables:
415    IMAGE: centos7
416    MAKE_CHECK_ARGS: check
417
418# We don't need to exercise every backend with every front-end
419build-trace-multi-user:
420  <<: *native_build_job_definition
421  variables:
422    IMAGE: ubuntu2004
423    CONFIGURE_ARGS: --enable-trace-backends=log,simple,syslog --disable-system
424
425build-trace-ftrace-system:
426  <<: *native_build_job_definition
427  variables:
428    IMAGE: ubuntu2004
429    CONFIGURE_ARGS: --enable-trace-backends=ftrace --target-list=x86_64-softmmu
430
431build-trace-ust-system:
432  <<: *native_build_job_definition
433  variables:
434    IMAGE: ubuntu2004
435    CONFIGURE_ARGS: --enable-trace-backends=ust --target-list=x86_64-softmmu
436
437check-patch:
438  stage: build
439  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
440  script: .gitlab-ci.d/check-patch.py
441  except:
442    variables:
443      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
444  variables:
445    GIT_DEPTH: 1000
446  allow_failure: true
447
448check-dco:
449  stage: build
450  image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
451  script: .gitlab-ci.d/check-dco.py
452  except:
453    variables:
454      - $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
455  variables:
456    GIT_DEPTH: 1000
457
458build-libvhost-user:
459  stage: build
460  image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
461  before_script:
462    - dnf install -y meson ninja-build
463  script:
464    - mkdir subprojects/libvhost-user/build
465    - cd subprojects/libvhost-user/build
466    - meson
467    - ninja
468
469pages:
470  image: $CI_REGISTRY_IMAGE/qemu/ubuntu2004:latest
471  stage: test
472  needs:
473    - job: build-system-ubuntu
474      artifacts: true
475  script:
476    - mkdir public
477    - mv build/docs/index.html public/
478    - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done
479  artifacts:
480    paths:
481      - public
482