mirror of
https://github.com/brl/mutter.git
synced 2024-12-25 12:32:05 +00:00
a4e71361b6
The image build step is prone to race conditions, e.g. token changes. It also tends to hit sporadic connection errors to FDO's gitlab. To minimize the risk of these types of issues block pipelines, always retry the image building step if it failed. This has the unwanted consequence that changes to the image building that results in the script actually failing, but right now there doesn't appear to be a way to distinguish between actual build errors, and the mentioned race conditions, as both cause the script to fail. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2564>
532 lines
14 KiB
YAML
532 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:35@common:
|
|
variables:
|
|
FDO_DISTRIBUTION_VERSION: 35
|
|
BASE_TAG: '2022-08-02.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
|
|
gi-docgen
|
|
pkgconfig(libgcrypt)
|
|
|
|
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_eglstream=true \
|
|
-Dxvfb=false \
|
|
-Dvendor_name="Mutter CI" \
|
|
-Dxdmcp=false \
|
|
-Dxcsecurity=true \
|
|
-Dglamor=true \
|
|
-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.73.1 . &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
-Dvapi=false \
|
|
-Dgtk3=false \
|
|
-Dgtk4=false \
|
|
-Dgtk_doc=false \
|
|
-Dssh_agent=false \
|
|
-Dsystemd=disabled \
|
|
https://gitlab.gnome.org/GNOME/gcr.git \
|
|
3.90.0 . &&
|
|
|
|
./.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.21.0 . &&
|
|
|
|
./.gitlab-ci/install-meson-project.sh \
|
|
https://gitlab.freedesktop.org/wayland/wayland-protocols.git \
|
|
1.26 . &&
|
|
|
|
./.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
|
|
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: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'
|
|
|
|
reference:
|
|
extends:
|
|
- .fdo.distribution-image@fedora
|
|
- .mutter.fedora:35@x86_64
|
|
stage: docs
|
|
needs:
|
|
- job: build-fedora-container@x86_64
|
|
artifacts: false
|
|
script:
|
|
- meson . 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
|
|
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")
|