1include: 2 - local: '/.gitlab-ci.d/buildtest-template.yml' 3 4build-system-alpine: 5 extends: .native_build_job_template 6 needs: 7 - job: amd64-alpine-container 8 variables: 9 IMAGE: alpine 10 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu 11 microblazeel-softmmu mips64el-softmmu 12 MAKE_CHECK_ARGS: check-build 13 CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog 14 artifacts: 15 expire_in: 2 days 16 paths: 17 - .git-submodule-status 18 - build 19 20check-system-alpine: 21 extends: .native_test_job_template 22 needs: 23 - job: build-system-alpine 24 artifacts: true 25 variables: 26 IMAGE: alpine 27 MAKE_CHECK_ARGS: check 28 29acceptance-system-alpine: 30 extends: .acceptance_test_job_template 31 needs: 32 - job: build-system-alpine 33 artifacts: true 34 variables: 35 IMAGE: alpine 36 MAKE_CHECK_ARGS: check-acceptance 37 38build-system-ubuntu: 39 extends: .native_build_job_template 40 needs: 41 job: amd64-ubuntu2004-container 42 variables: 43 IMAGE: ubuntu2004 44 CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-slirp=system 45 TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu 46 microblazeel-softmmu mips64el-softmmu 47 MAKE_CHECK_ARGS: check-build 48 artifacts: 49 expire_in: 2 days 50 paths: 51 - build 52 53check-system-ubuntu: 54 extends: .native_test_job_template 55 needs: 56 - job: build-system-ubuntu 57 artifacts: true 58 variables: 59 IMAGE: ubuntu2004 60 MAKE_CHECK_ARGS: check 61 62acceptance-system-ubuntu: 63 extends: .acceptance_test_job_template 64 needs: 65 - job: build-system-ubuntu 66 artifacts: true 67 variables: 68 IMAGE: ubuntu2004 69 MAKE_CHECK_ARGS: check-acceptance 70 71build-system-debian: 72 extends: .native_build_job_template 73 needs: 74 job: amd64-debian-container 75 variables: 76 IMAGE: debian-amd64 77 CONFIGURE_ARGS: --enable-fdt=system 78 TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu 79 riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu 80 MAKE_CHECK_ARGS: check-build 81 artifacts: 82 expire_in: 2 days 83 paths: 84 - build 85 86check-system-debian: 87 extends: .native_test_job_template 88 needs: 89 - job: build-system-debian 90 artifacts: true 91 variables: 92 IMAGE: debian-amd64 93 MAKE_CHECK_ARGS: check 94 95acceptance-system-debian: 96 extends: .acceptance_test_job_template 97 needs: 98 - job: build-system-debian 99 artifacts: true 100 variables: 101 IMAGE: debian-amd64 102 MAKE_CHECK_ARGS: check-acceptance 103 104build-system-fedora: 105 extends: .native_build_job_template 106 needs: 107 job: amd64-fedora-container 108 variables: 109 IMAGE: fedora 110 CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs 111 --enable-fdt=system --enable-slirp=system --enable-capstone=system 112 TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu 113 xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu 114 MAKE_CHECK_ARGS: check-build 115 artifacts: 116 expire_in: 2 days 117 paths: 118 - build 119 120check-system-fedora: 121 extends: .native_test_job_template 122 needs: 123 - job: build-system-fedora 124 artifacts: true 125 variables: 126 IMAGE: fedora 127 MAKE_CHECK_ARGS: check 128 129acceptance-system-fedora: 130 extends: .acceptance_test_job_template 131 needs: 132 - job: build-system-fedora 133 artifacts: true 134 variables: 135 IMAGE: fedora 136 MAKE_CHECK_ARGS: check-acceptance 137 138build-system-centos: 139 extends: .native_build_job_template 140 needs: 141 job: amd64-centos8-container 142 variables: 143 IMAGE: centos8 144 CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system 145 --enable-modules --enable-trace-backends=dtrace 146 TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu 147 x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu 148 MAKE_CHECK_ARGS: check-build 149 artifacts: 150 expire_in: 2 days 151 paths: 152 - build 153 154check-system-centos: 155 extends: .native_test_job_template 156 needs: 157 - job: build-system-centos 158 artifacts: true 159 variables: 160 IMAGE: centos8 161 MAKE_CHECK_ARGS: check 162 163acceptance-system-centos: 164 extends: .acceptance_test_job_template 165 needs: 166 - job: build-system-centos 167 artifacts: true 168 variables: 169 IMAGE: centos8 170 MAKE_CHECK_ARGS: check-acceptance 171 172build-system-opensuse: 173 extends: .native_build_job_template 174 needs: 175 job: amd64-opensuse-leap-container 176 variables: 177 IMAGE: opensuse-leap 178 CONFIGURE_ARGS: --enable-fdt=system 179 TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu 180 MAKE_CHECK_ARGS: check-build 181 artifacts: 182 expire_in: 2 days 183 paths: 184 - build 185 186check-system-opensuse: 187 extends: .native_test_job_template 188 needs: 189 - job: build-system-opensuse 190 artifacts: true 191 variables: 192 IMAGE: opensuse-leap 193 MAKE_CHECK_ARGS: check 194 195acceptance-system-opensuse: 196 extends: .acceptance_test_job_template 197 needs: 198 - job: build-system-opensuse 199 artifacts: true 200 variables: 201 IMAGE: opensuse-leap 202 MAKE_CHECK_ARGS: check-acceptance 203 204 205build-disabled: 206 extends: .native_build_job_template 207 needs: 208 job: amd64-fedora-container 209 variables: 210 IMAGE: fedora 211 CONFIGURE_ARGS: 212 --disable-attr 213 --disable-auth-pam 214 --disable-avx2 215 --disable-bochs 216 --disable-brlapi 217 --disable-bzip2 218 --disable-cap-ng 219 --disable-capstone 220 --disable-cloop 221 --disable-coroutine-pool 222 --disable-curl 223 --disable-curses 224 --disable-dmg 225 --disable-docs 226 --disable-gcrypt 227 --disable-glusterfs 228 --disable-gnutls 229 --disable-gtk 230 --disable-guest-agent 231 --disable-iconv 232 --disable-keyring 233 --disable-kvm 234 --disable-libiscsi 235 --disable-libpmem 236 --disable-libssh 237 --disable-libudev 238 --disable-libusb 239 --disable-libxml2 240 --disable-linux-aio 241 --disable-live-block-migration 242 --disable-lzo 243 --disable-malloc-trim 244 --disable-mpath 245 --disable-nettle 246 --disable-numa 247 --disable-opengl 248 --disable-parallels 249 --disable-pie 250 --disable-qcow1 251 --disable-qed 252 --disable-qom-cast-debug 253 --disable-rbd 254 --disable-rdma 255 --disable-replication 256 --disable-sdl 257 --disable-seccomp 258 --disable-slirp 259 --disable-smartcard 260 --disable-snappy 261 --disable-sparse 262 --disable-spice 263 --disable-strip 264 --disable-tpm 265 --disable-usb-redir 266 --disable-vdi 267 --disable-vhost-crypto 268 --disable-vhost-net 269 --disable-vhost-scsi 270 --disable-vhost-kernel 271 --disable-vhost-user 272 --disable-vhost-vdpa 273 --disable-vhost-vsock 274 --disable-virglrenderer 275 --disable-vnc 276 --disable-vte 277 --disable-vvfat 278 --disable-xen 279 --disable-zstd 280 TARGETS: arm-softmmu i386-softmmu ppc64-softmmu mips64-softmmu 281 s390x-softmmu i386-linux-user 282 MAKE_CHECK_ARGS: check-qtest SPEED=slow 283 284# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by 285# the configure script. The container doesn't contain Xen headers so 286# Xen accelerator is not detected / selected. As result it build the 287# i386-softmmu and x86_64-softmmu with KVM being the single accelerator 288# available. 289# Also use a different coroutine implementation (which is only really of 290# interest to KVM users, i.e. with TCG disabled) 291build-tcg-disabled: 292 extends: .native_build_job_template 293 needs: 294 job: amd64-centos8-container 295 variables: 296 IMAGE: centos8 297 script: 298 - mkdir build 299 - cd build 300 - ../configure --disable-tcg --audio-drv-list="" --with-coroutine=ucontext 301 || { cat config.log meson-logs/meson-log.txt && exit 1; } 302 - make -j"$JOBS" 303 - make check-unit 304 - make check-qapi-schema 305 - cd tests/qemu-iotests/ 306 - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048 307 052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163 308 170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277 309 - ./check -qcow2 028 051 056 057 058 065 068 082 085 091 095 096 102 122 310 124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202 311 208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258 312 260 261 262 263 264 270 272 273 277 279 313 314build-user: 315 extends: .native_build_job_template 316 needs: 317 job: amd64-debian-user-cross-container 318 variables: 319 IMAGE: debian-all-test-cross 320 CONFIGURE_ARGS: --disable-tools --disable-system 321 MAKE_CHECK_ARGS: check-tcg 322 323build-user-static: 324 extends: .native_build_job_template 325 needs: 326 job: amd64-debian-user-cross-container 327 variables: 328 IMAGE: debian-all-test-cross 329 CONFIGURE_ARGS: --disable-tools --disable-system --static 330 MAKE_CHECK_ARGS: check-tcg 331 332# Because the hexagon cross-compiler takes so long to build we don't rely 333# on the CI system to build it and hence this job has an optional dependency 334# declared. The image is manually uploaded. 335build-user-hexagon: 336 extends: .native_build_job_template 337 needs: 338 job: hexagon-cross-container 339 optional: true 340 variables: 341 IMAGE: debian-hexagon-cross 342 TARGETS: hexagon-linux-user 343 CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg 344 MAKE_CHECK_ARGS: check-tcg 345 346# Only build the softmmu targets we have check-tcg tests for 347build-some-softmmu: 348 extends: .native_build_job_template 349 needs: 350 job: amd64-debian-user-cross-container 351 variables: 352 IMAGE: debian-all-test-cross 353 CONFIGURE_ARGS: --disable-tools --enable-debug 354 TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu 355 MAKE_CHECK_ARGS: check-tcg 356 357# We build tricore in a very minimal tricore only container 358build-tricore-softmmu: 359 extends: .native_build_job_template 360 needs: 361 job: tricore-debian-cross-container 362 variables: 363 IMAGE: debian-tricore-cross 364 CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug 365 TARGETS: tricore-softmmu 366 MAKE_CHECK_ARGS: check-tcg 367 368clang-system: 369 extends: .native_build_job_template 370 needs: 371 job: amd64-fedora-container 372 variables: 373 IMAGE: fedora 374 CONFIGURE_ARGS: --cc=clang --cxx=clang++ 375 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 376 TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu 377 ppc-softmmu s390x-softmmu 378 MAKE_CHECK_ARGS: check-qtest check-tcg 379 380clang-user: 381 extends: .native_build_job_template 382 needs: 383 job: amd64-debian-user-cross-container 384 variables: 385 IMAGE: debian-all-test-cross 386 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system 387 --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user 388 --extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined 389 MAKE_CHECK_ARGS: check-unit check-tcg 390 391# Set LD_JOBS=1 because this requires LTO and ld consumes a large amount of memory. 392# On gitlab runners, default value sometimes end up calling 2 lds concurrently and 393# triggers an Out-Of-Memory error 394# 395# Since slirp callbacks are used in QEMU Timers, slirp needs to be compiled together 396# with QEMU and linked as a static library to avoid false positives in CFI checks. 397# This can be accomplished by using -enable-slirp=git, which avoids the use of 398# a system-wide version of the library 399# 400# Split in three sets of build/check/acceptance to limit the execution time of each 401# job 402build-cfi-aarch64: 403 extends: .native_build_job_template 404 needs: 405 - job: amd64-fedora-container 406 variables: 407 LD_JOBS: 1 408 AR: llvm-ar 409 IMAGE: fedora 410 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 411 --enable-safe-stack --enable-slirp=git 412 TARGETS: aarch64-softmmu 413 MAKE_CHECK_ARGS: check-build 414 timeout: 70m 415 artifacts: 416 expire_in: 2 days 417 paths: 418 - build 419 420check-cfi-aarch64: 421 extends: .native_test_job_template 422 needs: 423 - job: build-cfi-aarch64 424 artifacts: true 425 variables: 426 IMAGE: fedora 427 MAKE_CHECK_ARGS: check 428 429acceptance-cfi-aarch64: 430 extends: .acceptance_test_job_template 431 needs: 432 - job: build-cfi-aarch64 433 artifacts: true 434 variables: 435 IMAGE: fedora 436 MAKE_CHECK_ARGS: check-acceptance 437 438build-cfi-ppc64-s390x: 439 extends: .native_build_job_template 440 needs: 441 - job: amd64-fedora-container 442 variables: 443 LD_JOBS: 1 444 AR: llvm-ar 445 IMAGE: fedora 446 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 447 --enable-safe-stack --enable-slirp=git 448 TARGETS: ppc64-softmmu s390x-softmmu 449 MAKE_CHECK_ARGS: check-build 450 timeout: 70m 451 artifacts: 452 expire_in: 2 days 453 paths: 454 - build 455 456check-cfi-ppc64-s390x: 457 extends: .native_test_job_template 458 needs: 459 - job: build-cfi-ppc64-s390x 460 artifacts: true 461 variables: 462 IMAGE: fedora 463 MAKE_CHECK_ARGS: check 464 465acceptance-cfi-ppc64-s390x: 466 extends: .acceptance_test_job_template 467 needs: 468 - job: build-cfi-ppc64-s390x 469 artifacts: true 470 variables: 471 IMAGE: fedora 472 MAKE_CHECK_ARGS: check-acceptance 473 474build-cfi-x86_64: 475 extends: .native_build_job_template 476 needs: 477 - job: amd64-fedora-container 478 variables: 479 LD_JOBS: 1 480 AR: llvm-ar 481 IMAGE: fedora 482 CONFIGURE_ARGS: --cc=clang --cxx=clang++ --enable-cfi --enable-cfi-debug 483 --enable-safe-stack --enable-slirp=git 484 TARGETS: x86_64-softmmu 485 MAKE_CHECK_ARGS: check-build 486 timeout: 70m 487 artifacts: 488 expire_in: 2 days 489 paths: 490 - build 491 492check-cfi-x86_64: 493 extends: .native_test_job_template 494 needs: 495 - job: build-cfi-x86_64 496 artifacts: true 497 variables: 498 IMAGE: fedora 499 MAKE_CHECK_ARGS: check 500 501acceptance-cfi-x86_64: 502 extends: .acceptance_test_job_template 503 needs: 504 - job: build-cfi-x86_64 505 artifacts: true 506 variables: 507 IMAGE: fedora 508 MAKE_CHECK_ARGS: check-acceptance 509 510tsan-build: 511 extends: .native_build_job_template 512 needs: 513 job: amd64-ubuntu2004-container 514 variables: 515 IMAGE: ubuntu2004 516 CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10 517 --enable-trace-backends=ust --enable-fdt=system --enable-slirp=system 518 TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user 519 MAKE_CHECK_ARGS: bench V=1 520 521# These targets are on the way out 522build-deprecated: 523 extends: .native_build_job_template 524 needs: 525 job: amd64-debian-user-cross-container 526 variables: 527 IMAGE: debian-all-test-cross 528 CONFIGURE_ARGS: --disable-tools 529 MAKE_CHECK_ARGS: build-tcg 530 TARGETS: ppc64abi32-linux-user 531 artifacts: 532 expire_in: 2 days 533 paths: 534 - build 535 536# We split the check-tcg step as test failures are expected but we still 537# want to catch the build breaking. 538check-deprecated: 539 extends: .native_test_job_template 540 needs: 541 - job: build-deprecated 542 artifacts: true 543 variables: 544 IMAGE: debian-all-test-cross 545 MAKE_CHECK_ARGS: check-tcg 546 allow_failure: true 547 548# gprof/gcov are GCC features 549build-gprof-gcov: 550 extends: .native_build_job_template 551 needs: 552 job: amd64-ubuntu2004-container 553 variables: 554 IMAGE: ubuntu2004 555 CONFIGURE_ARGS: --enable-gprof --enable-gcov 556 TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu 557 artifacts: 558 expire_in: 1 days 559 paths: 560 - build 561 562check-gprof-gcov: 563 extends: .native_test_job_template 564 needs: 565 - job: build-gprof-gcov 566 artifacts: true 567 variables: 568 IMAGE: ubuntu2004 569 MAKE_CHECK_ARGS: check 570 after_script: 571 - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh 572 573build-oss-fuzz: 574 extends: .native_build_job_template 575 needs: 576 job: amd64-fedora-container 577 variables: 578 IMAGE: fedora 579 script: 580 - mkdir build-oss-fuzz 581 - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address" 582 ./scripts/oss-fuzz/build.sh 583 - export ASAN_OPTIONS="fast_unwind_on_malloc=0" 584 - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f 585 | grep -v slirp); do 586 grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ; 587 echo Testing ${fuzzer} ... ; 588 "${fuzzer}" -runs=1 -seed=1 || exit 1 ; 589 done 590 # Unrelated to fuzzer: run some tests with -fsanitize=address 591 - cd build-oss-fuzz && make check-qtest-i386 check-unit 592 593build-tci: 594 extends: .native_build_job_template 595 needs: 596 job: amd64-debian-user-cross-container 597 variables: 598 IMAGE: debian-all-test-cross 599 script: 600 - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64" 601 - mkdir build 602 - cd build 603 - ../configure --enable-tcg-interpreter 604 --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)" || { cat config.log meson-logs/meson-log.txt && exit 1; } 605 - make -j"$JOBS" 606 - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test 607 - for tg in $TARGETS ; do 608 export QTEST_QEMU_BINARY="./qemu-system-${tg}" ; 609 ./tests/qtest/boot-serial-test || exit 1 ; 610 ./tests/qtest/cdrom-test || exit 1 ; 611 done 612 - QTEST_QEMU_BINARY="./qemu-system-x86_64" ./tests/qtest/pxe-test 613 - QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow 614 - make check-tcg 615 616# Alternate coroutines implementations are only really of interest to KVM users 617# However we can't test against KVM on Gitlab-CI so we can only run unit tests 618build-coroutine-sigaltstack: 619 extends: .native_build_job_template 620 needs: 621 job: amd64-ubuntu2004-container 622 variables: 623 IMAGE: ubuntu2004 624 CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg 625 --enable-trace-backends=ftrace 626 MAKE_CHECK_ARGS: check-unit 627 628# Check our reduced build configurations 629build-without-default-devices: 630 extends: .native_build_job_template 631 needs: 632 job: amd64-centos8-container 633 variables: 634 IMAGE: centos8 635 CONFIGURE_ARGS: --without-default-devices --disable-user 636 637build-without-default-features: 638 extends: .native_build_job_template 639 needs: 640 job: amd64-debian-container 641 variables: 642 IMAGE: debian-amd64 643 CONFIGURE_ARGS: --without-default-features --disable-user 644 --target-list-exclude=arm-softmmu,i386-softmmu,mipsel-softmmu,mips64-softmmu,ppc-softmmu 645 MAKE_CHECK_ARGS: check-unit 646 647build-libvhost-user: 648 stage: build 649 image: $CI_REGISTRY_IMAGE/qemu/fedora:latest 650 needs: 651 job: amd64-fedora-container 652 before_script: 653 - dnf install -y meson ninja-build 654 script: 655 - mkdir subprojects/libvhost-user/build 656 - cd subprojects/libvhost-user/build 657 - meson 658 - ninja 659 660# No targets are built here, just tools, docs, and unit tests. This 661# also feeds into the eventual documentation deployment steps later 662build-tools-and-docs-debian: 663 extends: .native_build_job_template 664 needs: 665 job: amd64-debian-container 666 variables: 667 IMAGE: debian-amd64 668 MAKE_CHECK_ARGS: check-unit check-softfloat ctags TAGS cscope 669 CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools 670 artifacts: 671 expire_in: 2 days 672 paths: 673 - build 674 675# Prepare for GitLab pages deployment. Anything copied into the 676# "public" directory will be deployed to $USER.gitlab.io/$PROJECT 677# 678# GitLab publishes from any branch that triggers a CI pipeline 679# 680# For the main repo we don't want to publish from 'staging' 681# since that content may not be pushed, nor do we wish to 682# publish from 'stable-NNN' branches as that content is outdated. 683# Thus we restrict to just the default branch 684# 685# For contributor forks we want to publish from any repo so 686# that users can see the results of their commits, regardless 687# of what topic branch they're currently using 688pages: 689 image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest 690 stage: test 691 needs: 692 - job: build-tools-and-docs-debian 693 script: 694 - mkdir -p public 695 # HTML-ised source tree 696 - make gtags 697 - htags -anT --tree-view=filetree -m qemu_init 698 -t "Welcome to the QEMU sourcecode" 699 - mv HTML public/src 700 # Project documentation 701 - make -C build install DESTDIR=$(pwd)/temp-install 702 - mv temp-install/usr/local/share/doc/qemu/* public/ 703 artifacts: 704 paths: 705 - public 706 rules: 707 - if: '$CI_PROJECT_NAMESPACE == "qemu-project" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' 708 when: on_success 709 - if: '$CI_PROJECT_NAMESPACE == "qemu-project"' 710 when: never 711 - if: '$CI_PROJECT_NAMESPACE != "qemu-project"' 712 when: on_success 713