include: - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml' - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/ci-fairy.yml' stages: - review - prepare - code-review - build - test - analyze - deploy variables: FDO_UPSTREAM_REPO: GNOME/mutter .mutter.fedora:34@common: variables: FDO_DISTRIBUTION_VERSION: 34 BASE_TAG: '2021-09-04.1' FDO_DISTRIBUTION_PACKAGES: asciidoc clang gcovr gdm gnome-shell python3-dbusmock sassc uncrustify xorg-x11-server-Xvfb FDO_DISTRIBUTION_EXEC: | 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 && ./.gitlab-ci/install-meson-project.sh \ https://gitlab.gnome.org/GNOME/glib.git \ main . 02742ef957b532789c003eef80ec7f51c370e3d5 && ./.gitlab-ci/install-meson-project.sh \ https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas.git \ 41.alpha . && ./.gitlab-ci/install-meson-project.sh \ https://gitlab.gnome.org/GNOME/gjs.git \ 1.69.2 . && rpm -e --nodeps gnome-bluetooth-libs-devel \ mutter mutter-devel \ gnome-shell && dnf clean all 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:34@x86_64: extends: .mutter.fedora:34@common variables: FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}" .mutter.fedora:34@aarch64: extends: .mutter.fedora:34@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:34@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:34@aarch64 stage: prepare needs: - check-commit-log - check-merge-request variables: GIT_STRATEGY: none check-code-style: extends: - .fdo.distribution-image@fedora - .mutter.fedora:34@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: extends: - .fdo.distribution-image@fedora stage: build script: - meson . build -Dbuildtype=debugoptimized -Db_coverage=true -Degl_device=true -Dwayland_eglstream=true --werror --prefix /usr - meson compile -C build - meson install -C build artifacts: expire_in: 1 day paths: - build build-mutter@x86_64: extends: - .build-mutter - .mutter.fedora:34@x86_64 needs: - build-fedora-container@x86_64 build-mutter@aarch64: extends: - .build-mutter - .mutter.fedora:34@aarch64 needs: - build-fedora-container@aarch64 build-without-opengl-and-glx@x86_64: extends: - .fdo.distribution-image@fedora - .mutter.fedora:34@x86_64 stage: build needs: - build-fedora-container@x86_64 script: - meson . build -Dbuildtype=debugoptimized -Dopengl=false -Dglx=false -Degl_device=true -Dwayland_eglstream=true --werror --prefix /usr - 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:34@x86_64 stage: build needs: - build-fedora-container@x86_64 script: - meson . build -Dbuildtype=debugoptimized -Dnative_backend=false -Dudev=false -Dwayland=false -Dcore_tests=false -Dnative_tests=false --werror --prefix /usr - 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: - glib-compile-schemas $GSETTINGS_SCHEMA_DIR # Disable e.g. audio support to not dead lock screen cast tests - rm -f /usr/share/pipewire/media-session.d/with-* - mkdir -m 700 $XDG_RUNTIME_DIR - pipewire & sleep 2 .test-mutter: extends: - .fdo.distribution-image@fedora <<: *test-setup stage: test script: - dbus-run-session -- xvfb-run -a -s "$XVFB_SERVER_ARGS" catchsegv meson test -C build --no-rebuild -t 10 artifacts: expire_in: 1 day reports: junit: "build/meson-logs/testlog-catchsegv.junit.xml" name: "mutter-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" when: always paths: - build test-mutter@x86_64: extends: - .test-mutter - .mutter.fedora:34@x86_64 needs: - build-mutter@x86_64 test-mutter@aarch64: extends: - .test-mutter - .mutter.fedora:34@aarch64 needs: - build-mutter@aarch64 .test-mutter-coverage: extends: - .fdo.distribution-image@fedora stage: analyze script: - ninja -C build coverage - cat build/meson-logs/coverage.txt artifacts: paths: - build/meson-logs/coveragereport coverage: '/^TOTAL.*\s+(\d+\%)$/' test-mutter-coverage@x86_64: extends: - .test-mutter-coverage - .mutter.fedora:34@x86_64 needs: - test-mutter@x86_64 test-mutter-coverage@aarch64: extends: - .test-mutter-coverage - .mutter.fedora:34@aarch64 needs: - test-mutter@aarch64 can-build-gnome-shell@x86_64: extends: - .fdo.distribution-image@fedora - .mutter.fedora:34@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:34@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:34@x86_64 <<: *test-setup stage: deploy needs: - build-mutter@x86_64 script: - dbus-run-session -- xvfb-run -a -s "$XVFB_SERVER_ARGS" 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'