qemu/.gitlab-ci.yml
<<
>>
Prefs
   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
 458pages:
 459  image: $CI_REGISTRY_IMAGE/qemu/ubuntu2004:latest
 460  stage: test
 461  needs:
 462    - job: build-system-ubuntu
 463      artifacts: true
 464  script:
 465    - mkdir public
 466    - mv build/docs/index.html public/
 467    - for i in devel interop specs system tools user ; do mv build/docs/$i public/ ; done
 468  artifacts:
 469    paths:
 470      - public
 471