5c5e30638d
This commit makes the KVM tests run in special VM runners tagged with the 'kvm' tag. In order to avoid building the kernel image used for running the tests each pipeline, it's built as part of the CI image building. For now, KVM tests are only run on the x86_64 architecture. The reasons for this are two that the kernel image building script doesn't yet handle any other architecture than x86_64 due to differences in how the image is built and handled, as well as the fact that there only exists a kvm tagged runner for x86_64. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2152>
487 lines
13 KiB
YAML
487 lines
13 KiB
YAML
include:
|
|
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/34f4ade99434043f88e164933f570301fd18b125/templates/fedora.yml'
|
|
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/34f4ade99434043f88e164933f570301fd18b125/templates/ci-fairy.yml'
|
|
|
|
stages:
|
|
- review
|
|
- prepare
|
|
- code-review
|
|
- build
|
|
- test
|
|
- analyze
|
|
- deploy
|
|
|
|
variables:
|
|
FDO_UPSTREAM_REPO: GNOME/mutter
|
|
|
|
.mutter.fedora:35@common:
|
|
variables:
|
|
FDO_DISTRIBUTION_VERSION: 35
|
|
BASE_TAG: '2022-03-05.0'
|
|
FDO_DISTRIBUTION_PACKAGES:
|
|
asciidoc
|
|
clang
|
|
gcovr
|
|
gdm
|
|
gnome-shell
|
|
mozjs91-devel
|
|
python3-dbusmock
|
|
sassc
|
|
uncrustify
|
|
xorg-x11-server-Xvfb
|
|
mesa-dri-drivers
|
|
xorg-x11-proto-devel
|
|
qemu-system-x86-core
|
|
busybox
|
|
|
|
FDO_DISTRIBUTION_EXEC: |
|
|
dnf install -y 'dnf-command(builddep)' &&
|
|
|
|
dnf builddep -y gsettings-desktop-schemas --setopt=install_weak_deps=False &&
|
|
dnf builddep -y mutter --setopt=install_weak_deps=False &&
|
|
dnf builddep -y gnome-shell --setopt=install_weak_deps=False &&
|
|
dnf builddep -y libinput --setopt=install_weak_deps=False &&
|
|
dnf builddep -y wayland --setopt=install_weak_deps=False &&
|
|
dnf builddep -y wayland-protocols --setopt=install_weak_deps=False &&
|
|
dnf builddep -y kernel --setopt=install_weak_deps=False &&
|
|
|
|
# For Xwayland
|
|
dnf builddep -y xorg-x11-server-Xwayland --setopt=install_weak_deps=False &&
|
|
dnf install -y 'pkgconfig(fontutil)' &&
|
|
dnf install -y 'pkgconfig(libxcvt)' &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
-Dxwayland=true \
|
|
-Dxwayland_eglstream=true \
|
|
-D{xorg,xnest,xvfb}=false \
|
|
-Dvendor_name="Mutter CI" \
|
|
-D{xdmcp,udev,udev_kms}=false \
|
|
-Dxcsecurity=true \
|
|
-Dglamor=true \
|
|
-D{dri1,dri2}=false \
|
|
-Ddri3=true \
|
|
https://gitlab.freedesktop.org/xorg/xserver.git \
|
|
xwayland-22.1.0 \
|
|
. &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
https://gitlab.gnome.org/GNOME/gjs.git \
|
|
1.71.1 . &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas.git \
|
|
42.beta . &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
https://gitlab.freedesktop.org/wayland/wayland.git \
|
|
1.20.0 . &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
https://gitlab.freedesktop.org/wayland/wayland-protocols.git \
|
|
1.25 . &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
-Dgtk_doc=false \
|
|
https://gitlab.gnome.org/GNOME/libgweather.git \
|
|
main . 1f687f6375a3f3f006600119f7eee7df7348ade5 &&
|
|
|
|
rpm -e --nodeps gnome-bluetooth-libs-devel \
|
|
mutter mutter-devel \
|
|
gnome-shell &&
|
|
|
|
dnf clean all &&
|
|
|
|
if [[ x"$(uname -m )" = "xx86_64" ]] ; then
|
|
meson build -Dkvm_tests=true &&
|
|
ninja -C build src/tests/kvm/bzImage &&
|
|
mkdir -p /opt/mutter &&
|
|
cp build/src/tests/kvm/bzImage /opt/mutter/bzImage &&
|
|
|
|
git clone https://github.com/jadahl/virtme.git &&
|
|
cd virtme &&
|
|
git checkout e7ee481efa10098ed0d62c9e033d61b2379b9b95 &&
|
|
./setup.py install --prefix=/usr &&
|
|
cd .. &&
|
|
rm -rf virtme
|
|
fi
|
|
|
|
default:
|
|
# Cancel jobs if newer commits are pushed to the branch
|
|
interruptible: true
|
|
# Auto-retry jobs in case of infra failures
|
|
retry:
|
|
max: 1
|
|
when:
|
|
- 'runner_system_failure'
|
|
- 'stuck_or_timeout_failure'
|
|
- 'scheduler_failure'
|
|
- 'api_failure'
|
|
|
|
.mutter.fedora:35@x86_64:
|
|
extends: .mutter.fedora:35@common
|
|
variables:
|
|
FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}"
|
|
|
|
.mutter.fedora:35@aarch64:
|
|
extends: .mutter.fedora:35@common
|
|
variables:
|
|
FDO_DISTRIBUTION_TAG: "aarch64-${BASE_TAG}"
|
|
tags:
|
|
- aarch64
|
|
|
|
workflow:
|
|
rules:
|
|
- if: '$CI_MERGE_REQUEST_IID'
|
|
- if: '$CI_COMMIT_TAG'
|
|
- if: '$CI_COMMIT_BRANCH'
|
|
|
|
.pipline-guard: &pipline-guard
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
- if: '$CI_COMMIT_TAG'
|
|
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
|
|
- when: 'manual'
|
|
|
|
check-commit-log:
|
|
extends:
|
|
- .fdo.ci-fairy
|
|
stage: review
|
|
variables:
|
|
GIT_DEPTH: "100"
|
|
script:
|
|
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
|
then
|
|
ci-fairy check-commits --junit-xml=commit-message-junit-report.xml ;
|
|
else
|
|
echo "Not a merge request" ;
|
|
fi
|
|
artifacts:
|
|
expire_in: 1 week
|
|
paths:
|
|
- commit-message-junit-report.xml
|
|
reports:
|
|
junit: commit-message-junit-report.xml
|
|
<<: *pipline-guard
|
|
|
|
check-merge-request:
|
|
extends:
|
|
- .fdo.ci-fairy
|
|
stage: review
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
script:
|
|
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
|
then
|
|
ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request-report.xml ;
|
|
else
|
|
echo "Not a merge request" ;
|
|
fi
|
|
artifacts:
|
|
expire_in: 1 week
|
|
paths:
|
|
- check-merge-request-report.xml
|
|
reports:
|
|
junit: check-merge-request-report.xml
|
|
<<: *pipline-guard
|
|
|
|
build-fedora-container@x86_64:
|
|
extends:
|
|
- .fdo.container-build@fedora@x86_64
|
|
- .mutter.fedora:35@x86_64
|
|
stage: prepare
|
|
needs:
|
|
- check-commit-log
|
|
- check-merge-request
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
|
|
build-fedora-container@aarch64:
|
|
extends:
|
|
- .fdo.container-build@fedora@aarch64
|
|
- .mutter.fedora:35@aarch64
|
|
stage: prepare
|
|
needs:
|
|
- check-commit-log
|
|
- check-merge-request
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
|
|
check-code-style:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora:35@x86_64
|
|
stage: code-review
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
script:
|
|
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
|
then
|
|
git remote add target $CI_MERGE_REQUEST_PROJECT_URL.git ;
|
|
git fetch target $CI_MERGE_REQUEST_TARGET_BRANCH_NAME ;
|
|
export common_parent_sha=$(diff --old-line-format='' --new-line-format='' <(git rev-list --first-parent "target/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") <(git rev-list --first-parent HEAD) | head -1) ;
|
|
python3 -u ./check-style.py --dry-run --sha $common_parent_sha ;
|
|
else
|
|
echo "Not a merge request" ;
|
|
fi
|
|
allow_failure: true
|
|
|
|
.build-mutter-base:
|
|
variables:
|
|
BASE_MESON_OPTIONS:
|
|
-Degl_device=true
|
|
-Dwayland_eglstream=true
|
|
|
|
.build-mutter:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .build-mutter-base
|
|
stage: build
|
|
script:
|
|
- meson . build
|
|
--prefix /usr
|
|
--werror
|
|
--fatal-meson-warnings
|
|
--warnlevel 2
|
|
-Dbuildtype=debugoptimized
|
|
-Db_coverage=true
|
|
$BASE_MESON_OPTIONS
|
|
$EXTRA_MESON_OPTIONS
|
|
- meson compile -C build
|
|
- meson install -C build
|
|
artifacts:
|
|
expire_in: 1 day
|
|
paths:
|
|
- build
|
|
|
|
build-mutter@x86_64:
|
|
variables:
|
|
EXTRA_MESON_OPTIONS:
|
|
-Dkvm_tests=true
|
|
-Dkvm_kernel_image=/opt/mutter/bzImage
|
|
extends:
|
|
- .build-mutter
|
|
- .mutter.fedora:35@x86_64
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
|
|
build-mutter@aarch64:
|
|
extends:
|
|
- .build-mutter
|
|
- .mutter.fedora:35@aarch64
|
|
needs:
|
|
- build-fedora-container@aarch64
|
|
|
|
build-without-opengl-and-glx@x86_64:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora:35@x86_64
|
|
stage: build
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
script:
|
|
- meson . build --werror --prefix /usr
|
|
-Dbuildtype=debugoptimized
|
|
-Dopengl=false
|
|
-Dglx=false
|
|
-Degl_device=true
|
|
-Dwayland_eglstream=true
|
|
- meson compile -C build
|
|
- meson install -C build
|
|
artifacts:
|
|
paths:
|
|
- build/meson-logs
|
|
|
|
build-without-native-backend-and-wayland@x86_64:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora:35@x86_64
|
|
stage: build
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
script:
|
|
- meson . build --werror --prefix /usr
|
|
-Dbuildtype=debugoptimized
|
|
-Dnative_backend=false
|
|
-Dudev=false
|
|
-Dwayland=false
|
|
-Dcore_tests=false
|
|
-Dnative_tests=false
|
|
- meson compile -C build
|
|
- meson install -C build
|
|
artifacts:
|
|
paths:
|
|
- build/meson-logs
|
|
|
|
.test-setup: &test-setup
|
|
variables:
|
|
XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir"
|
|
GSETTINGS_SCHEMA_DIR: "$CI_PROJECT_DIR/build/data"
|
|
MUTTER_DEBUG_DUMMY_MODE_SPECS: "800x600@10.0"
|
|
PIPEWIRE_DEBUG: 2
|
|
PIPEWIRE_LOG: "$CI_PROJECT_DIR/build/meson-logs/pipewire.log"
|
|
XVFB_SERVER_ARGS: "+iglx -noreset"
|
|
G_SLICE: "always-malloc"
|
|
MALLOC_CHECK_: "3"
|
|
NO_AT_BRIDGE: "1"
|
|
before_script:
|
|
# Disable e.g. audio support to not dead lock screen cast tests
|
|
- mkdir -m 700 $XDG_RUNTIME_DIR
|
|
- pipewire & sleep 2
|
|
|
|
.test-mutter-base:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
<<: *test-setup
|
|
stage: test
|
|
after_script:
|
|
- pushd build
|
|
- gcovr --root=..
|
|
--filter='\.\./src/' --filter='\.\./clutter/' --filter='\.\./cogl/'
|
|
--exclude='\.\./build/.*\.[ch]$' --exclude='.*/tests/.*\.[ch]$'
|
|
--json --output=../coverage-${CI_JOB_NAME}.json
|
|
- popd
|
|
artifacts:
|
|
expire_in: 1 day
|
|
name: "mutter-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
|
when: always
|
|
paths:
|
|
- build
|
|
- coverage-*.json
|
|
|
|
.test-mutter:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .test-mutter-base
|
|
script:
|
|
- glib-compile-schemas $GSETTINGS_SCHEMA_DIR
|
|
- dbus-run-session -- xvfb-run -a -s "$XVFB_SERVER_ARGS"
|
|
./.gitlab-ci/run-meson.sh test -C build
|
|
--no-suite 'mutter/kvm'
|
|
--no-rebuild
|
|
--timeout-multiplier 10
|
|
artifacts:
|
|
reports:
|
|
junit: "build/meson-logs/testlog.junit.xml"
|
|
|
|
test-mutter@x86_64:
|
|
extends:
|
|
- .test-mutter
|
|
- .mutter.fedora:35@x86_64
|
|
needs:
|
|
- build-mutter@x86_64
|
|
|
|
test-mutter-kvm@x86_64:
|
|
extends:
|
|
- .test-mutter-base
|
|
- .mutter.fedora:35@x86_64
|
|
tags:
|
|
- kvm
|
|
script:
|
|
meson test -C build
|
|
--no-rebuild
|
|
--timeout-multiplier 10
|
|
--setup plain
|
|
--suite 'mutter/kvm'
|
|
needs:
|
|
- build-mutter@x86_64
|
|
artifacts:
|
|
reports:
|
|
junit: "build/meson-logs/testlog-plain.junit.xml"
|
|
|
|
test-mutter@aarch64:
|
|
extends:
|
|
- .test-mutter
|
|
- .mutter.fedora:35@aarch64
|
|
needs:
|
|
- build-mutter@aarch64
|
|
|
|
coverage:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora:35@x86_64
|
|
stage: analyze
|
|
script:
|
|
- mkdir coveragereport
|
|
- gcovr --add-tracefile 'coverage-*.json'
|
|
--html-details --print-summary --output coveragereport/index.html
|
|
artifacts:
|
|
paths:
|
|
- coveragereport
|
|
coverage: '/^lines: (\d+\.\d+\%)/'
|
|
needs:
|
|
- test-mutter@x86_64
|
|
- test-mutter@aarch64
|
|
- test-mutter-kvm@x86_64
|
|
|
|
can-build-gnome-shell@x86_64:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora:35@x86_64
|
|
stage: test
|
|
needs:
|
|
- build-mutter@x86_64
|
|
before_script:
|
|
- meson install --no-rebuild -C build
|
|
script:
|
|
- .gitlab-ci/checkout-gnome-shell.sh
|
|
- meson gnome-shell gnome-shell/build --prefix /usr -Dman=false
|
|
- meson install -C gnome-shell/build
|
|
|
|
test-mutter-coverity:
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "schedule" && $MUTTER_SCHEDULED_JOB == "coverity"'
|
|
when: always
|
|
- when: manual
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora:35@x86_64
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
stage: analyze
|
|
allow_failure: true
|
|
script:
|
|
- .gitlab-ci/download-coverity-tarball.sh
|
|
- CC=clang meson coverity-build -Dprofiler=false
|
|
- ./coverity/cov-analysis-linux64-*/bin/cov-build --dir cov-int meson compile -C coverity-build
|
|
- tar czf cov-int.tar.gz cov-int
|
|
- curl https://scan.coverity.com/builds?project=mutter
|
|
--form token=$COVERITY_TOKEN --form email=carlosg@gnome.org
|
|
--form file=@cov-int.tar.gz --form version="`git describe --tags`"
|
|
--form description="GitLab CI build"
|
|
cache:
|
|
key: coverity-tarball
|
|
paths:
|
|
- coverity
|
|
|
|
dist-mutter:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora:35@x86_64
|
|
- .build-mutter-base
|
|
<<: *test-setup
|
|
stage: deploy
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
script:
|
|
- meson . build --werror --prefix /usr
|
|
-Dbuildtype=debugoptimized
|
|
$BASE_MESON_OPTIONS
|
|
-Dkvm_tests=false
|
|
- glib-compile-schemas $GSETTINGS_SCHEMA_DIR
|
|
- dbus-run-session -- xvfb-run -a -s "$XVFB_SERVER_ARGS"
|
|
./.gitlab-ci/run-meson.sh dist -C build
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
changes:
|
|
- "**/meson.build"
|
|
- meson/*
|
|
|
|
dist-mutter-tarball:
|
|
extends: dist-mutter
|
|
artifacts:
|
|
expose_as: 'Get tarball here'
|
|
paths:
|
|
- build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG'
|