libvirt/ci/integration-template.yml
Andrea Bolognani 10042f0253 ci: Do more as part of .qemu-build-template
Entering $SCRATCH_DIR, going back to the original directory and
setting SELinux labels for the newly-installed QEMU binaries
are all steps that logically belong to this template rather
than its callers.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2024-01-12 14:28:43 +01:00

100 lines
3.0 KiB
YAML

.qemu-build-template: &qemu-build-template
- pushd "$SCRATCH_DIR"
- git clone --depth 1 https://gitlab.com/qemu-project/qemu.git
- cd qemu
#
# inspired by upstream QEMU's buildtest-template.yml
- export JOBS="$(expr $(nproc) + 1)"
- mkdir build
- cd build
- ../configure --prefix=/usr
--enable-werror
--disable-tcg
--disable-docs
--target-list=x86_64-softmmu || (cat config.log meson-logs/meson-log.txt && exit 1)
- make -j"$JOBS"
- if test -n "$MAKE_CHECK_ARGS";
then
make -j"$JOBS" check-build;
fi
# we need the following since the fix for CVE-2022-24765 now causes a fatal
# error if a user issues a git command from within a directory owned by some
# other user
- sudo git config --global --add safe.directory "$SCRATCH_DIR/qemu"
- sudo make install
- sudo restorecon -R /usr
- popd
.collect-logs: &collect-logs
- set +e
- shopt -s nullglob
- mkdir logs
- test -d "$SCRATCH_DIR"/avocado && mkdir logs/avocado
- sudo coredumpctl &>/dev/null && sudo coredumpctl info --no-pager > logs/coredumpctl.txt
- sudo mv /var/log/libvirt logs/libvirt
# filter only the failed tests, omitting successful job logs
- for test_log in "$SCRATCH_DIR"/avocado/latest/test-results/by-status/{ERROR,FAIL}/*;
do
sudo mv "$(realpath $test_log)" logs/avocado;
done;
- sudo chown -R $(whoami):$(whoami) logs
# rename all Avocado stderr/stdout logs to *.log so that GitLab's web UI doesn't mangle the MIME type
- find logs/avocado/ -type f ! -name "*.log" -exec
sh -c 'DIR=$(dirname {}); NAME=$(basename {}); mv $DIR/$NAME{,.log}' \;
.integration_tests:
stage: integration_tests
before_script:
- mkdir "$SCRATCH_DIR"
- sudo dnf install -y libvirt-rpms/* libvirt-perl-rpms/* libvirt-python-rpms/*
script:
- source ci/jobs.sh
- run_integration
after_script:
- test "$CI_JOB_STATUS" = "success" && exit 0;
- *collect-logs
variables:
SCRATCH_DIR: "/tmp/scratch"
artifacts:
name: logs
expire_in: 1 day
paths:
- logs
when: on_failure
.integration_tests_prebuilt_env:
extends: .integration_tests
rules:
- if: '$LIBVIRT_CI_INTEGRATION == null'
when: never
- !reference [.gitlab_native_build_job_prebuilt_env, rules]
.integration_tests_local_env:
extends: .integration_tests
rules:
- if: '$LIBVIRT_CI_INTEGRATION == null'
when: never
- !reference [.gitlab_native_build_job_local_env, rules]
# YAML anchors don't work with Shell conditions so we can't use a variable
# to conditionally build+install QEMU from source.
# Instead, create a new test job template for this scenario.
.integration_tests_upstream_qemu:
before_script:
- !reference [.integration_tests, before_script]
- *qemu-build-template
.integration_tests_upstream_qemu_prebuilt_env:
extends:
- .integration_tests_prebuilt_env
- .integration_tests_upstream_qemu
.integration_tests_upstream_qemu_local_env:
extends:
- .integration_tests_local_env
- .integration_tests_upstream_qemu