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