- local: '/.gitlab-ci.d/buildtest-template.yml'
build-system-alpine:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
- job: amd64-alpine-container
variables:
IMAGE: alpine
- TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
- microblazeel-softmmu mips64el-softmmu
+ TARGETS: avr-softmmu loongarch64-softmmu mips64-softmmu mipsel-softmmu
MAKE_CHECK_ARGS: check-build
CONFIGURE_ARGS: --enable-docs --enable-trace-backends=log,simple,syslog
- artifacts:
- expire_in: 2 days
- paths:
- - .git-submodule-status
- - build
check-system-alpine:
extends: .native_test_job_template
variables:
IMAGE: alpine
MAKE_CHECK_ARGS: check-avocado
+ AVOCADO_TAGS: arch:avr arch:loongarch64 arch:mips64 arch:mipsel
build-system-ubuntu:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
- job: amd64-ubuntu2004-container
+ job: amd64-ubuntu2204-container
variables:
- IMAGE: ubuntu2004
- CONFIGURE_ARGS: --enable-docs --enable-fdt=system --enable-capstone
- TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
- microblazeel-softmmu mips64el-softmmu
+ IMAGE: ubuntu2204
+ CONFIGURE_ARGS: --enable-docs
+ TARGETS: alpha-softmmu microblazeel-softmmu mips64el-softmmu
MAKE_CHECK_ARGS: check-build
- artifacts:
- expire_in: 2 days
- paths:
- - build
check-system-ubuntu:
extends: .native_test_job_template
- job: build-system-ubuntu
artifacts: true
variables:
- IMAGE: ubuntu2004
+ IMAGE: ubuntu2204
MAKE_CHECK_ARGS: check
avocado-system-ubuntu:
- job: build-system-ubuntu
artifacts: true
variables:
- IMAGE: ubuntu2004
+ IMAGE: ubuntu2204
MAKE_CHECK_ARGS: check-avocado
+ AVOCADO_TAGS: arch:alpha arch:microblazeel arch:mips64el
build-system-debian:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
job: amd64-debian-container
variables:
- IMAGE: debian-amd64
- TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
- riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
+ IMAGE: debian
+ CONFIGURE_ARGS: --with-coroutine=sigaltstack
+ TARGETS: arm-softmmu i386-softmmu riscv64-softmmu sh4eb-softmmu
+ sparc-softmmu xtensa-softmmu
MAKE_CHECK_ARGS: check-build
- artifacts:
- expire_in: 2 days
- paths:
- - build
check-system-debian:
extends: .native_test_job_template
- job: build-system-debian
artifacts: true
variables:
- IMAGE: debian-amd64
+ IMAGE: debian
MAKE_CHECK_ARGS: check
avocado-system-debian:
- job: build-system-debian
artifacts: true
variables:
- IMAGE: debian-amd64
+ IMAGE: debian
MAKE_CHECK_ARGS: check-avocado
+ AVOCADO_TAGS: arch:arm arch:i386 arch:riscv64 arch:sh4 arch:sparc arch:xtensa
crash-test-debian:
extends: .native_test_job_template
- job: build-system-debian
artifacts: true
variables:
- IMAGE: debian-amd64
+ IMAGE: debian
script:
- cd build
- - make check-venv
- - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-i386
+ - make NINJA=":" check-venv
+ - pyvenv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
build-system-fedora:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
job: amd64-fedora-container
variables:
IMAGE: fedora
CONFIGURE_ARGS: --disable-gcrypt --enable-nettle --enable-docs
- --enable-fdt=system --enable-slirp --enable-capstone
- TARGETS: tricore-softmmu microblaze-softmmu mips-softmmu
+ TARGETS: microblaze-softmmu mips-softmmu
xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
MAKE_CHECK_ARGS: check-build
- artifacts:
- expire_in: 2 days
- paths:
- - build
check-system-fedora:
extends: .native_test_job_template
variables:
IMAGE: fedora
MAKE_CHECK_ARGS: check-avocado
+ AVOCADO_TAGS: arch:microblaze arch:mips arch:xtensa arch:m68k
+ arch:riscv32 arch:ppc arch:sparc64
crash-test-fedora:
extends: .native_test_job_template
IMAGE: fedora
script:
- cd build
- - make check-venv
- - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
- - tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
+ - make NINJA=":" check-venv
+ - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
+ - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
build-system-centos:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
job: amd64-centos8-container
variables:
IMAGE: centos8
- CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-fdt=system
+ CONFIGURE_ARGS: --disable-nettle --enable-gcrypt --enable-vfio-user-server
--enable-modules --enable-trace-backends=dtrace --enable-docs
- --enable-vfio-user-server
TARGETS: ppc64-softmmu or1k-softmmu s390x-softmmu
x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
MAKE_CHECK_ARGS: check-build
+
+# Previous QEMU release. Used for cross-version migration tests.
+build-previous-qemu:
+ extends: .native_build_job_template
artifacts:
+ when: on_success
expire_in: 2 days
paths:
- - build
+ - build-previous
+ exclude:
+ - build-previous/**/*.p
+ - build-previous/**/*.a.p
+ - build-previous/**/*.fa.p
+ - build-previous/**/*.c.o
+ - build-previous/**/*.c.o.d
+ - build-previous/**/*.fa
+ needs:
+ job: amd64-opensuse-leap-container
+ variables:
+ IMAGE: opensuse-leap
+ TARGETS: x86_64-softmmu aarch64-softmmu
+ before_script:
+ - export QEMU_PREV_VERSION="$(sed 's/\([0-9.]*\)\.[0-9]*/v\1.0/' VERSION)"
+ - git checkout $QEMU_PREV_VERSION
+ after_script:
+ - mv build build-previous
+
+.migration-compat-common:
+ extends: .common_test_job_template
+ needs:
+ - job: build-previous-qemu
+ - job: build-system-opensuse
+ # The old QEMU could have bugs unrelated to migration that are
+ # already fixed in the current development branch, so this test
+ # might fail.
+ allow_failure: true
+ variables:
+ IMAGE: opensuse-leap
+ MAKE_CHECK_ARGS: check-build
+ script:
+ # Use the migration-tests from the older QEMU tree. This avoids
+ # testing an old QEMU against new features/tests that it is not
+ # compatible with.
+ - cd build-previous
+ # old to new
+ - QTEST_QEMU_BINARY_SRC=./qemu-system-${TARGET}
+ QTEST_QEMU_BINARY=../build/qemu-system-${TARGET} ./tests/qtest/migration-test
+ # new to old
+ - QTEST_QEMU_BINARY_DST=./qemu-system-${TARGET}
+ QTEST_QEMU_BINARY=../build/qemu-system-${TARGET} ./tests/qtest/migration-test
+
+# This job is disabled until we release 9.0. The existing
+# migration-test in 8.2 is broken on aarch64. The fix was already
+# commited, but it will only take effect once 9.0 is out.
+migration-compat-aarch64:
+ extends: .migration-compat-common
+ variables:
+ TARGET: aarch64
+ QEMU_JOB_SKIPPED: 1
+
+migration-compat-x86_64:
+ extends: .migration-compat-common
+ variables:
+ TARGET: x86_64
check-system-centos:
extends: .native_test_job_template
variables:
IMAGE: centos8
MAKE_CHECK_ARGS: check-avocado
+ AVOCADO_TAGS: arch:ppc64 arch:or1k arch:s390x arch:x86_64 arch:rx
+ arch:sh4 arch:nios2
build-system-opensuse:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
job: amd64-opensuse-leap-container
variables:
IMAGE: opensuse-leap
- CONFIGURE_ARGS: --enable-fdt=system
TARGETS: s390x-softmmu x86_64-softmmu aarch64-softmmu
MAKE_CHECK_ARGS: check-build
- artifacts:
- expire_in: 2 days
- paths:
- - build
check-system-opensuse:
extends: .native_test_job_template
variables:
IMAGE: opensuse-leap
MAKE_CHECK_ARGS: check-avocado
+ AVOCADO_TAGS: arch:s390x arch:x86_64 arch:aarch64
+#
+# Flaky tests. We don't run these by default and they are allow fail
+# but often the CI system is the only way to trigger the failures.
+#
+
+build-system-flaky:
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
+ needs:
+ job: amd64-debian-container
+ variables:
+ IMAGE: debian
+ QEMU_JOB_OPTIONAL: 1
+ TARGETS: aarch64-softmmu arm-softmmu mips64el-softmmu
+ ppc64-softmmu rx-softmmu s390x-softmmu sh4-softmmu x86_64-softmmu
+ MAKE_CHECK_ARGS: check-build
+
+avocado-system-flaky:
+ extends: .avocado_test_job_template
+ needs:
+ - job: build-system-flaky
+ artifacts: true
+ allow_failure: true
+ variables:
+ IMAGE: debian
+ MAKE_CHECK_ARGS: check-avocado
+ QEMU_JOB_OPTIONAL: 1
+ QEMU_TEST_FLAKY_TESTS: 1
+ AVOCADO_TAGS: flaky
# This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
# the configure script. The container doesn't contain Xen headers so
variables:
IMAGE: debian-all-test-cross
CONFIGURE_ARGS: --disable-tools --disable-system
+ --target-list-exclude=alpha-linux-user,sh4-linux-user
MAKE_CHECK_ARGS: check-tcg
build-user-static:
variables:
IMAGE: debian-all-test-cross
CONFIGURE_ARGS: --disable-tools --disable-system --static
+ --target-list-exclude=alpha-linux-user,sh4-linux-user
+ MAKE_CHECK_ARGS: check-tcg
+
+# targets stuck on older compilers
+build-legacy:
+ extends: .native_build_job_template
+ needs:
+ job: amd64-debian-legacy-cross-container
+ variables:
+ IMAGE: debian-legacy-test-cross
+ TARGETS: alpha-linux-user alpha-softmmu sh4-linux-user
+ CONFIGURE_ARGS: --disable-tools
MAKE_CHECK_ARGS: check-tcg
build-user-hexagon:
CONFIGURE_ARGS: --disable-tools --disable-docs --enable-debug-tcg
MAKE_CHECK_ARGS: check-tcg
-# Only build the softmmu targets we have check-tcg tests for
+# Build the softmmu targets we have check-tcg tests and compilers in
+# our omnibus all-test-cross container. Those targets that haven't got
+# Debian cross compiler support need to use special containers.
build-some-softmmu:
extends: .native_build_job_template
needs:
variables:
IMAGE: debian-all-test-cross
CONFIGURE_ARGS: --disable-tools --enable-debug
- TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
+ TARGETS: arm-softmmu aarch64-softmmu i386-softmmu riscv64-softmmu
+ s390x-softmmu x86_64-softmmu
+ MAKE_CHECK_ARGS: check-tcg
+
+build-loongarch64:
+ extends: .native_build_job_template
+ needs:
+ job: loongarch-debian-cross-container
+ variables:
+ IMAGE: debian-loongarch-cross
+ CONFIGURE_ARGS: --disable-tools --enable-debug
+ TARGETS: loongarch64-linux-user loongarch64-softmmu
MAKE_CHECK_ARGS: check-tcg
# We build tricore in a very minimal tricore only container
variables:
IMAGE: debian-all-test-cross
CONFIGURE_ARGS: --cc=clang --cxx=clang++ --disable-system
- --target-list-exclude=microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
+ --target-list-exclude=alpha-linux-user,microblazeel-linux-user,aarch64_be-linux-user,i386-linux-user,m68k-linux-user,mipsn32el-linux-user,xtensaeb-linux-user
--extra-cflags=-fsanitize=undefined --extra-cflags=-fno-sanitize-recover=undefined
MAKE_CHECK_ARGS: check-unit check-tcg
# Split in three sets of build/check/avocado to limit the execution time of each
# job
build-cfi-aarch64:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
- job: amd64-fedora-container
variables:
# skipped until the situation has been solved.
QEMU_JOB_SKIPPED: 1
timeout: 90m
- artifacts:
- expire_in: 2 days
- paths:
- - build
check-cfi-aarch64:
extends: .native_test_job_template
MAKE_CHECK_ARGS: check-avocado
build-cfi-ppc64-s390x:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
- job: amd64-fedora-container
variables:
# skipped until the situation has been solved.
QEMU_JOB_SKIPPED: 1
timeout: 80m
- artifacts:
- expire_in: 2 days
- paths:
- - build
check-cfi-ppc64-s390x:
extends: .native_test_job_template
MAKE_CHECK_ARGS: check-avocado
build-cfi-x86_64:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
- job: amd64-fedora-container
variables:
TARGETS: x86_64-softmmu
MAKE_CHECK_ARGS: check-build
timeout: 70m
- artifacts:
- expire_in: 2 days
- paths:
- - build
check-cfi-x86_64:
extends: .native_test_job_template
tsan-build:
extends: .native_build_job_template
needs:
- job: amd64-ubuntu2004-container
+ job: amd64-ubuntu2204-container
variables:
- IMAGE: ubuntu2004
- CONFIGURE_ARGS: --enable-tsan --cc=clang-10 --cxx=clang++-10
- --enable-trace-backends=ust --enable-fdt=system --disable-slirp
+ IMAGE: ubuntu2204
+ CONFIGURE_ARGS: --enable-tsan --cc=clang --cxx=clang++
+ --enable-trace-backends=ust --disable-slirp
TARGETS: x86_64-softmmu ppc64-softmmu riscv64-softmmu x86_64-linux-user
- MAKE_CHECK_ARGS: bench V=1
-# gprof/gcov are GCC features
-build-gprof-gcov:
+# gcov is a GCC features
+gcov:
extends: .native_build_job_template
needs:
- job: amd64-ubuntu2004-container
+ job: amd64-ubuntu2204-container
+ timeout: 80m
variables:
- IMAGE: ubuntu2004
- CONFIGURE_ARGS: --enable-gprof --enable-gcov
+ IMAGE: ubuntu2204
+ CONFIGURE_ARGS: --enable-gcov
TARGETS: aarch64-softmmu ppc64-softmmu s390x-softmmu x86_64-softmmu
- artifacts:
- expire_in: 1 days
- paths:
- - build
-
-check-gprof-gcov:
- extends: .native_test_job_template
- needs:
- - job: build-gprof-gcov
- artifacts: true
- variables:
- IMAGE: ubuntu2004
- MAKE_CHECK_ARGS: check
+ MAKE_CHECK_ARGS: check-unit check-softfloat
after_script:
- cd build
- gcovr --xml-pretty --exclude-unreachable-branches --print-summary
coverage: /^\s*lines:\s*\d+.\d+\%/
artifacts:
name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
+ when: always
expire_in: 2 days
+ paths:
+ - build/meson-logs/testlog.txt
reports:
+ junit: build/meson-logs/testlog.junit.xml
coverage_report:
coverage_format: cobertura
path: build/coverage.xml
variables:
IMAGE: debian-all-test-cross
script:
- - TARGETS="aarch64 alpha arm hppa m68k microblaze ppc64 s390x x86_64"
+ - TARGETS="aarch64 arm hppa m68k microblaze ppc64 s390x x86_64"
- mkdir build
- cd build
- ../configure --enable-tcg-interpreter --disable-docs --disable-gtk --disable-vnc
- QTEST_QEMU_BINARY="./qemu-system-s390x" ./tests/qtest/pxe-test -m slow
- make check-tcg
-# Alternate coroutines implementations are only really of interest to KVM users
-# However we can't test against KVM on Gitlab-CI so we can only run unit tests
-build-coroutine-sigaltstack:
- extends: .native_build_job_template
- needs:
- job: amd64-ubuntu2004-container
- variables:
- IMAGE: ubuntu2004
- CONFIGURE_ARGS: --with-coroutine=sigaltstack --disable-tcg
- --enable-trace-backends=ftrace
- MAKE_CHECK_ARGS: check-unit
-
# Check our reduced build configurations
build-without-defaults:
extends: .native_build_job_template
--disable-strip
TARGETS: avr-softmmu mips64-softmmu s390x-softmmu sh4-softmmu
sparc64-softmmu hexagon-linux-user i386-linux-user s390x-linux-user
- MAKE_CHECK_ARGS: check-unit check-qtest-avr check-qtest-mips64
+ MAKE_CHECK_ARGS: check
build-libvhost-user:
extends: .base_job_template
stage: build
- image: $CI_REGISTRY_IMAGE/qemu/fedora:latest
+ image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
needs:
job: amd64-fedora-container
script:
# No targets are built here, just tools, docs, and unit tests. This
# also feeds into the eventual documentation deployment steps later
build-tools-and-docs-debian:
- extends: .native_build_job_template
+ extends:
+ - .native_build_job_template
+ - .native_build_artifact_template
needs:
job: amd64-debian-container
# when running on 'master' we use pre-existing container
optional: true
variables:
- IMAGE: debian-amd64
+ IMAGE: debian
MAKE_CHECK_ARGS: check-unit ctags TAGS cscope
CONFIGURE_ARGS: --disable-system --disable-user --enable-docs --enable-tools
QEMU_JOB_PUBLISH: 1
- artifacts:
- expire_in: 2 days
- paths:
- - build
# Prepare for GitLab pages deployment. Anything copied into the
# "public" directory will be deployed to $USER.gitlab.io/$PROJECT
# of what topic branch they're currently using
pages:
extends: .base_job_template
- image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest
+ image: $CI_REGISTRY_IMAGE/qemu/debian:$QEMU_CI_CONTAINER_TAG
stage: test
needs:
- job: build-tools-and-docs-debian
- mkdir -p public
# HTML-ised source tree
- make gtags
- - htags -anT --tree-view=filetree -m qemu_init
+ # We unset variables to work around a bug in some htags versions
+ # which causes it to fail when the environment is large
+ - CI_COMMIT_MESSAGE= CI_COMMIT_TAG_MESSAGE= htags
+ -anT --tree-view=filetree -m qemu_init
-t "Welcome to the QEMU sourcecode"
- mv HTML public/src
# Project documentation
- make -C build install DESTDIR=$(pwd)/temp-install
- mv temp-install/usr/local/share/doc/qemu/* public/
artifacts:
+ when: on_success
paths:
- public
variables: