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