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