mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 21:34:09 +00:00
![Marco Trevisan (Treviño)](/assets/img/avatar_default.png)
We already test install as part of other jobs (such as can-build-gnome-shell) and in general that's wrong because we may add to the final install path artifacts that are required during tests, hiding potential issues with meson test when those files are not installed. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3016>
553 lines
14 KiB
YAML
553 lines
14 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
|
|
- docs
|
|
- deploy
|
|
|
|
variables:
|
|
FDO_UPSTREAM_REPO: GNOME/mutter
|
|
|
|
.mutter.fedora@common:
|
|
variables:
|
|
FDO_DISTRIBUTION_VERSION: 38
|
|
BASE_TAG: '2023-05-19.0'
|
|
FDO_DISTRIBUTION_PACKAGES:
|
|
asciidoc
|
|
clang
|
|
gcovr
|
|
gdm
|
|
gnome-shell
|
|
sassc
|
|
uncrustify
|
|
xorg-x11-server-Xvfb
|
|
mesa-dri-drivers
|
|
xorg-x11-proto-devel
|
|
qemu-system-x86-core
|
|
busybox
|
|
gi-docgen
|
|
python3-dbusmock
|
|
pkgconfig(libgcrypt)
|
|
pkgconfig(libnma-gtk4)
|
|
|
|
FDO_DISTRIBUTION_EXEC: |
|
|
set -e
|
|
dnf install -y 'dnf-command(builddep)'
|
|
|
|
dnf builddep -y mutter --setopt=install_weak_deps=False
|
|
dnf builddep -y gnome-shell --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
|
|
dnf builddep -y zenity --setopt=install_weak_deps=False
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
https://gitlab.gnome.org/jadahl/catch.git \
|
|
main . 29ad36e2b1d28ac9d8b2bc44af46296cb1db5d66
|
|
|
|
# Pull in fix for # https://gitlab.gnome.org/GNOME/zenity/-/issues/58
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
https://gitlab.gnome.org/GNOME/zenity.git \
|
|
master . db1ad8ee7c3db36a7cca6e998e86719293d37838
|
|
|
|
rpm -e --nodeps gnome-bluetooth-libs-devel \
|
|
mutter mutter-devel \
|
|
gnome-shell
|
|
|
|
if [[ x"$(uname -m )" = "xx86_64" ]] ; then
|
|
meson setup build -Dkvm_tests=true
|
|
ninja -C build src/tests/kvm/bzImage
|
|
mkdir -p /opt/mutter
|
|
cp build/src/tests/kvm/bzImage /opt/mutter/bzImage
|
|
|
|
dnf install -y python3-pyelftools
|
|
|
|
git clone https://github.com/arighi/virtme.git
|
|
cd virtme
|
|
git checkout aa99f43bd44c84dc95911ce99a8281cea5dfc5a1
|
|
./setup.py install --prefix=/usr
|
|
cd ..
|
|
rm -rf virtme
|
|
fi
|
|
retry:
|
|
max: 2
|
|
when:
|
|
- 'always'
|
|
|
|
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@x86_64:
|
|
extends: .mutter.fedora@common
|
|
variables:
|
|
FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}"
|
|
|
|
.mutter.fedora@aarch64:
|
|
extends: .mutter.fedora@common
|
|
variables:
|
|
FDO_DISTRIBUTION_TAG: "aarch64-${BASE_TAG}"
|
|
tags:
|
|
- aarch64
|
|
|
|
workflow:
|
|
rules:
|
|
# Allow to switch from branch pipelines to MR pipelines seamlessly
|
|
# https://docs.gitlab.com/ee/ci/jobs/job_control.html#avoid-duplicate-pipelines
|
|
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"
|
|
when: never
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
# Don't trigger a branch pipeline if there is an open MR
|
|
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
|
when: never
|
|
- if: '$CI_COMMIT_BRANCH'
|
|
- if: '$CI_COMMIT_TAG'
|
|
|
|
.pipeline-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-]+$/'
|
|
# Avoid catchall `when: manual` rule which might
|
|
# cause duplicate pipelines to be triggered.
|
|
# https://docs.gitlab.com/ee/ci/jobs/job_control.html#avoid-duplicate-pipelines
|
|
#
|
|
# Also make it so pipelines without MR need to be started
|
|
# manually, since their state will most likely be WIP
|
|
- if: '$CI_COMMIT_BRANCH'
|
|
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
|
|
rules:
|
|
- !reference [.pipeline-guard, rules]
|
|
|
|
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
|
|
rules:
|
|
- !reference [.pipeline-guard, rules]
|
|
|
|
build-fedora-container@x86_64:
|
|
extends:
|
|
- .fdo.container-build@fedora@x86_64
|
|
- .mutter.fedora@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@aarch64
|
|
stage: prepare
|
|
needs:
|
|
- check-commit-log
|
|
- check-merge-request
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
|
|
check-code-style:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora@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
|
|
-Dcatch=true
|
|
|
|
.build-mutter:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .build-mutter-base
|
|
stage: build
|
|
script:
|
|
- meson setup . 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 --dry-run -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@x86_64
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
|
|
build-mutter@aarch64:
|
|
extends:
|
|
- .build-mutter
|
|
- .mutter.fedora@aarch64
|
|
needs:
|
|
- build-fedora-container@aarch64
|
|
|
|
build-without-opengl-and-glx@x86_64:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora@x86_64
|
|
stage: build
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
script:
|
|
- meson setup . 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@x86_64
|
|
stage: build
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
script:
|
|
- meson setup . build --werror --prefix /usr
|
|
-Dbuildtype=debugoptimized
|
|
-Dnative_backend=false
|
|
-Dudev=false
|
|
-Dwayland=false
|
|
-Dxwayland=false
|
|
-Dcore_tests=false
|
|
-Dnative_tests=false
|
|
- meson compile -C build
|
|
- meson install -C build
|
|
artifacts:
|
|
paths:
|
|
- build/meson-logs
|
|
|
|
build-wayland-only@x86_64:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora@x86_64
|
|
stage: build
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
script:
|
|
- meson setup . build --werror --prefix /usr
|
|
-Dbuildtype=debugoptimized
|
|
-Dwayland=true
|
|
-Dxwayland=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"
|
|
GTK_A11Y: "none"
|
|
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
|
|
- xvfb-run -a -s "$XVFB_SERVER_ARGS"
|
|
./src/tests/meta-dbus-runner.py
|
|
--launch=wireplumber
|
|
meson test
|
|
-C build
|
|
--setup plain
|
|
--no-suite 'mutter/kvm'
|
|
--no-rebuild
|
|
--timeout-multiplier 10
|
|
artifacts:
|
|
reports:
|
|
junit: "build/meson-logs/testlog-plain.junit.xml"
|
|
|
|
test-mutter@x86_64:
|
|
extends:
|
|
- .test-mutter
|
|
- .mutter.fedora@x86_64
|
|
tags:
|
|
- asan
|
|
needs:
|
|
- build-mutter@x86_64
|
|
|
|
test-mutter-kvm@x86_64:
|
|
extends:
|
|
- .test-mutter-base
|
|
- .mutter.fedora@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@aarch64
|
|
tags:
|
|
- asan-aarch64
|
|
needs:
|
|
- build-mutter@aarch64
|
|
|
|
coverage:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora@x86_64
|
|
stage: analyze
|
|
script:
|
|
- mkdir coveragereport
|
|
- gcovr --add-tracefile 'coverage-*.json'
|
|
--html-details --print-summary --output coveragereport/index.html
|
|
- gcovr --add-tracefile 'coverage-*.json'
|
|
--xml --output coveragereport/coverage.xml
|
|
artifacts:
|
|
expose_as: 'Coverage Report'
|
|
paths:
|
|
- coveragereport
|
|
- coveragereport/index.html
|
|
reports:
|
|
coverage_report:
|
|
coverage_format: cobertura
|
|
# TODO: we may need to split this file once it will reach the
|
|
# gitlab limit size of 10M, or it will stop working:
|
|
# https://gitlab.com/gitlab-org/gitlab/-/issues/328772
|
|
path: coveragereport/coverage.xml
|
|
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@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 setup 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
|
|
- if: '$CI_COMMIT_BRANCH'
|
|
when: 'manual'
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora@x86_64
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
stage: analyze
|
|
allow_failure: true
|
|
script:
|
|
- .gitlab-ci/download-coverity-tarball.sh
|
|
- CC=clang meson setup 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@x86_64
|
|
- .build-mutter-base
|
|
<<: *test-setup
|
|
stage: deploy
|
|
needs:
|
|
- build-fedora-container@x86_64
|
|
script:
|
|
- meson setup . build --werror --prefix /usr
|
|
-Dbuildtype=debugoptimized
|
|
- glib-compile-schemas $GSETTINGS_SCHEMA_DIR
|
|
- xvfb-run -a -s "$XVFB_SERVER_ARGS"
|
|
./src/tests/meta-dbus-runner.py
|
|
--launch=wireplumber
|
|
meson 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'
|
|
|
|
reference:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora@x86_64
|
|
stage: docs
|
|
needs:
|
|
- job: build-fedora-container@x86_64
|
|
artifacts: false
|
|
script:
|
|
- meson setup . build --werror -Ddocs=true -Dtests=false
|
|
- ninja -C build
|
|
- mkdir references
|
|
- mv build/doc/reference/{cally/cally,clutter/clutter,cogl/cogl,cogl-pango/cogl-pango,meta/meta} references/
|
|
artifacts:
|
|
expire_in: 1 week
|
|
expose_as: 'Documentation'
|
|
paths:
|
|
- references/
|
|
|
|
pages:
|
|
stage: deploy
|
|
needs: ['reference']
|
|
script:
|
|
- mv references public/
|
|
artifacts:
|
|
paths:
|
|
- public
|
|
rules:
|
|
- if: ($CI_DEFAULT_BRANCH == $CI_COMMIT_BRANCH && $CI_PROJECT_NAMESPACE == "GNOME")
|