include:
  - project: 'Infrastructure/freedesktop-ci-templates'
    file: 'templates/fedora.yml'
    ref: '145b1bc7ef1702d2bd71584010d7113c6786a506'
  - project: 'Infrastructure/freedesktop-ci-templates'
    file: 'templates/ci-fairy.yml'
    ref: 'aec7a6ce7bb38902c70641526f6611e27141784a'
  - component: gitlab.gnome.org/GNOME/citemplates/release-service@master
    inputs:
      job-stage: deploy
      dist-job-name: "dist-mutter-tarball"
      tarball-artifact-path: $TARBALL_ARTIFACT_PATH
  - component: "gitlab.gnome.org/GNOME/citemplates/gnomeos-build-sysext@25.5"
    inputs:
      meson-options:
        -Dxwayland_initfd=enabled
        -Dprofiler=true
        -Dbash_completion=false

build-sysext:
  allow_failure: true
  before_script:
    - .gitlab-ci/install-gnomeos-sysext-dependencies.sh $CI_PROJECT_DIR/extension
  # x86_64_v2 runners hang on pulling the docker image. This should be removed
  # when the runners are all updated.
  # https://gitlab.gnome.org/Infrastructure/Infrastructure/-/issues/1665
  tags:
    - x86_64_v3

stages:
 - review
 - prepare
 - code-review
 - build
 - test
 - analyze
 - docs
 - deploy

variables:
  FDO_UPSTREAM_REPO: GNOME/mutter
  TARBALL_ARTIFACT_PATH: build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz

.skip-git-clone:
  variables:
    GIT_STRATEGY: none

.mutter.git-clone:
  extends:
    - .skip-git-clone
  variables:
    MUTTER_CLONE_PATH: $CI_BUILDS_DIR/$CI_PROJECT_PATH
    MUTTER_CLONE_DEPTH: 1
  before_script: |
    if [ -n "$MUTTER_CLONE_PATH" ]; then
      set -x
      uri="$CI_REPOSITORY_URL"
      if [ -n "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" ]; then
        uri="$CI_MERGE_REQUEST_SOURCE_PROJECT_URL.git"
        branch="$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"
      elif [ -n "$CI_COMMIT_TAG" ]; then
        branch="$CI_COMMIT_TAG"
      elif [ -n "$CI_COMMIT_BRANCH" ]; then
        branch="$CI_COMMIT_BRANCH"
      else
        branch="$CI_DEFAULT_BRANCH"
      fi
      if [ ! -d "$MUTTER_CLONE_PATH" ] || [ -z "$(ls -A "$MUTTER_CLONE_PATH")" ]; then
        git clone --depth $MUTTER_CLONE_DEPTH "$uri" "$MUTTER_CLONE_PATH" -b "$branch"
      elif [ ! -d "$MUTTER_CLONE_PATH/.git" ]; then
        git clone --bare --depth $MUTTER_CLONE_DEPTH "$uri" "$MUTTER_CLONE_PATH/.git" -b "$branch"
        if git -C "$MUTTER_CLONE_PATH" config --unset core.bare; then
          git -C "$MUTTER_CLONE_PATH" checkout
        else
          # For some weird reasons sometimes the fast-path could fail with
          # "fatal: not in a git directory" error, so handle it manually
          tmpdir=$(mktemp --directory --tmpdir mutter-XXXXXX)
          mkdir "$tmpdir/repo"
          mv "$MUTTER_CLONE_PATH/.git" "$tmpdir/repo/"
          git clone "$tmpdir/repo" "$tmpdir/src"
          mv "$tmpdir"/src/* "$tmpdir"/src/.* "$MUTTER_CLONE_PATH"
          rm -r "$tmpdir/repo"
          rm -rv "$tmpdir"
        fi
      fi
      set +x
    fi

.mutter.skip-git-clone:
  extends:
    - .skip-git-clone
  variables:
    MUTTER_CLONE_PATH: ''

.mutter.run-as-user:
  image:
    name: ${FDO_DISTRIBUTION_IMAGE}
    entrypoint:
      - 'runuser'
      - '-u'
      - !reference [.mutter.fedora@common, variables, MUTTER_USER]
      - '--'

.mutter.distribution-image:
  extends:
    - .fdo.distribution-image@fedora
    - .mutter.run-as-user

.mutter.fedora@common:
  extends:
    - .skip-git-clone
  variables:
    FDO_DISTRIBUTION_VERSION: 43
    BASE_TAG: '2025-10-04.0'
    MUTTER_USER: 'meta-user'
    FDO_DISTRIBUTION_PACKAGES:
      accountsservice-devel
      clang
      egl-wayland-devel
      gcovr
      gnome-shell
      itstool
      python3-docutils
      sassc
      uncrustify
      xorg-x11-server-Xvfb
      mesa-dri-drivers
      mesa-vulkan-drivers
      xorg-x11-proto-devel
      qemu-system-x86-core
      busybox
      zenity
      gnome-desktop-testing
      ruff
      mypy
      umockdev-devel
      libheif-devel
      libjxl-devel
      lcms2-devel
      libseccomp-devel
      'pkgconfig(x11-xcb)'
      'pkgconfig(xcomposite)'
      'pkgconfig(xcursor)'
      'pkgconfig(xdamage)'
      'pkgconfig(xext)'
      'pkgconfig(xfixes)'
      'pkgconfig(xi)'
      'pkgconfig(xkbcommon-x11)'
      'pkgconfig(xkbfile)'
      'pkgconfig(xkeyboard-config)'
      'pkgconfig(xrandr)'
      'pkgconfig(xrender)'
      'pkgconfig(xtst)'


    FDO_DISTRIBUTION_EXEC: |
      set -e

      # Create $MUTTER_USER
      useradd -u 9999 -b /opt/mutter -ms /bin/bash $MUTTER_USER

      # Enable sudo for $MUTTER_USER
      echo "%$MUTTER_USER ALL = (ALL) NOPASSWD: ALL" > /etc/sudoers.d/99_mutter-user

      # Drop problematic vulkan driver that interferes with CI;
      # see https://gitlab.gnome.org/GNOME/gtk/-/commit/7814d1fd75911
      rm /usr/share/vulkan/icd.d/powervr_mesa_icd.x86_64.json

      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 kernel --setopt=install_weak_deps=False
      dnf builddep -y gi-docgen --setopt=install_weak_deps=False
      dnf builddep -y wayland --setopt=install_weak_deps=False

      if [[ x"$(uname -m )" = "xx86_64" ]] ; then
        # deprecated header no longer included in openssl-devel
        dnf install -y virtme-ng openssl-devel-engine
      fi

      rpm -e --nodeps gnome-bluetooth-libs-devel \
                      mutter mutter-devel \
                      gnome-shell \
                      $NULL

      ./.gitlab-ci/install-meson-project.sh \
        --commit 8e69aef1e4bbb79b5806692ea9f0280aae0fda06 \
        https://gitlab.gnome.org/jadahl/catch.git \
        main

      ./.gitlab-ci/install-meson-project.sh \
        -Dglycin=disabled \
        https://gitlab.gnome.org/GNOME/gdk-pixbuf.git \
        2.44.3

      ./.gitlab-ci/install-meson-project.sh \
        https://gitlab.gnome.org/GNOME/gi-docgen.git \
        main

      ./.gitlab-ci/install-meson-project.sh \
        --commit ed36f4c6427fb1b0db03aaeb81d42f348f79690c \
        https://gitlab.gnome.org/GNOME/glib.git \
        main

      ./.gitlab-ci/install-common-dependencies.sh

      # Work-around for podman-push aborting on permission issue
      # https://gitlab.gnome.org/Infrastructure/Infrastructure/-/issues/1247
      rm -rf /etc/pki/pesign/
      chmod -R a+rX /opt/mutter/$MUTTER_USER

      # Ensure that we mark the project clone dir as safe directory
      git config --system --add safe.directory "$CI_PROJECT_DIR"

      if [[ x"$(uname -m )" = "xx86_64" ]] ; then
        if [ -n "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" ]; then
          git clone --depth $MUTTER_CLONE_DEPTH \
            $CI_MERGE_REQUEST_SOURCE_PROJECT_URL.git mutter-src \
            -b "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"
        elif [ -n "$CI_COMMIT_BRANCH" ]; then
          git clone --depth $MUTTER_CLONE_DEPTH \
            $CI_REPOSITORY_URL mutter-src -b "$CI_COMMIT_BRANCH"
        else
          git clone --depth $MUTTER_CLONE_DEPTH $CI_REPOSITORY_URL mutter-src
        fi
        meson setup build mutter-src -Dkvm_tests=true
        ninja -C build src/tests/kvm/bzImage
        mkdir -p /opt/mutter
        cp build/src/tests/kvm/bzImage /opt/mutter/bzImage
      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
    - .mutter.git-clone
  variables:
    FDO_DISTRIBUTION_TAG: "x86_64-${BASE_TAG}"

.mutter.fedora@aarch64:
  extends:
    - .mutter.fedora@common
    - .mutter.git-clone
  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'

.only-merge-requests:
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^$/'
      when: never
    - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
      when: on_success

repo-sanity:
  extends:
    - .fdo.ci-fairy
  stage: review
  variables:
    GIT_DEPTH: "1"
  script:
    - >
      if [[ -z "$CI_REGISTRY_IMAGE" ]] ;
      then
        .gitlab-ci/simple-junit-report.sh check-junit-report.xml \
          repo-sanity "The container registry should be enabled in the project general settings panel at $CI_PROJECT_URL/edit" ;
        exit 1 ;
      fi
  artifacts:
    expire_in: 1 week
    paths:
      - check-junit-report.xml
    reports:
      junit: check-junit-report.xml
  rules:
    - !reference [.only-merge-requests, rules]

check-commit-log:
  extends:
    - .fdo.ci-fairy
  stage: review
  variables:
    GIT_DEPTH: "100"
  script:
    ci-fairy check-commits --junit-xml=commit-message-junit-report.xml
  artifacts:
    expire_in: 1 week
    paths:
      - commit-message-junit-report.xml
    reports:
      junit: commit-message-junit-report.xml
  rules:
    - !reference [.only-merge-requests, rules]

build-fedora-container@x86_64:
  extends:
    - .fdo.container-build@fedora@x86_64
    - .mutter.fedora@x86_64
    - .mutter.skip-git-clone
  stage: prepare
  rules:
    - !reference [.pipeline-guard, rules]

build-fedora-container@aarch64:
  extends:
    - .fdo.container-build@fedora@aarch64
    - .mutter.fedora@aarch64
    - .mutter.skip-git-clone
  stage: prepare
  rules:
    - !reference [.pipeline-guard, rules]
  when: manual

check-c-code-style:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  variables:
    MUTTER_CLONE_DEPTH: 200
  stage: code-review
  needs:
    - job: build-fedora-container@x86_64
      artifacts: false
  script:
      git config --global --add safe.directory $CI_PROJECT_DIR ;
      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 ;
  allow_failure: true
  rules:
    - !reference [.only-merge-requests, rules]

check-python-code-style:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  variables:
    PYTHON_FILES:
      tools/gdctl
      clutter/clutter/gen-keyname-table.py
      clutter/clutter/clutter-keysyms-update.py
  stage: code-review
  needs:
    - job: build-fedora-container@x86_64
      artifacts: false
  script:
    - ruff format --line-length 80 --check $PYTHON_FILES
    - ruff check $PYTHON_FILES
    - mypy $PYTHON_FILES
  rules:
    - !reference [.only-merge-requests, rules]

.build-mutter-base:
  variables:
    # Add x11 here to keep the existing test matrix
    # We already have wayland-only build tests
    # so adding x11 true is simpler than swapping
    # all the existing jobs for x11-only
    # This is temporary anyway as x11 should be going
    # to live in a farm soon anyway
    BASE_MESON_OPTIONS:
      -Degl_device=true
      -Dwayland_eglstream=true
      -Dcatch=true
      -Dx11=true

.build-mutter:
  extends:
    - .mutter.distribution-image
    - .build-mutter-base
  stage: build
  script:
    - meson setup . build
        --prefix /usr
        --werror
        --fatal-meson-warnings
        --warnlevel 2
        --wrap-mode nofallback
        -Dbuildtype=debugoptimized
        -Db_coverage=true
        -Ddocs=true
        $BASE_MESON_OPTIONS
        $EXTRA_MESON_OPTIONS
    - meson compile -C build
    - sudo 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:
    - job: build-fedora-container@x86_64
      artifacts: false

build-mutter@aarch64:
  extends:
    - .build-mutter
    - .mutter.fedora@aarch64
  needs:
    - job: build-fedora-container@aarch64
      artifacts: false
  when: manual

build-without-opengl-and-glx@x86_64:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  stage: build
  needs:
    - job: build-fedora-container@x86_64
      artifacts: false
  script:
    - meson setup . build
        --prefix /usr
        --werror
        --wrap-mode nofallback
        -Dbuildtype=debugoptimized
        -Dopengl=false
        -Dglx=false
        -Degl_device=true
        -Dwayland_eglstream=true
        -Dintrospection=false
    - meson compile -C build
    - sudo meson install --no-rebuild -C build
  artifacts:
    paths:
      - build/meson-logs

build-without-native-backend-and-wayland@x86_64:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  stage: build
  needs:
    - job: build-fedora-container@x86_64
      artifacts: false
  script:
    - meson setup . build
        --prefix /usr
        --werror
        --wrap-mode nofallback
        -Dbuildtype=debugoptimized
        -Dx11=true
        -Dnative_backend=false
        -Dudev=false
        -Dwayland=false
        -Dxwayland=false
        -Dtests=disabled
        -Dintrospection=false
    - meson compile -C build
    - sudo meson install --no-rebuild -C build
  artifacts:
    paths:
      - build/meson-logs

build-wayland-xwayland@x86_64:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  stage: build
  needs:
    - job: build-fedora-container@x86_64
      artifacts: false
  script:
    - meson setup . build
        --prefix /usr
        --werror
        --wrap-mode nofallback
        -Dbuildtype=debugoptimized
        -Dwayland=true
        -Dxwayland=true
        -Dx11=false
        -Dtests=disabled
        -Dintrospection=false
    - meson compile -C build
    - sudo meson install --no-rebuild -C build
  artifacts:
    paths:
      - build/meson-logs

build-wayland-only@x86_64:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  stage: build
  needs:
    - job: build-fedora-container@x86_64
      artifacts: false
  script:
    - meson setup . build
        --prefix /usr
        --werror
        --wrap-mode nofallback
        -Dbuildtype=debugoptimized
        -Dwayland=true
        -Dxwayland=false
        -Dx11=false
        -Dtests=disabled
        -Dintrospection=false
    - meson compile -C build
    - sudo meson install --no-rebuild -C build
  artifacts:
    paths:
      - build/meson-logs

.test-setup:
  variables:
    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:
    - !reference [.mutter.git-clone, before_script]

.test-mutter-base:
  extends:
    - .mutter.distribution-image
    - .test-setup
  stage: test
  after_script:
    - pushd build
    - gcovr --root=..
        --filter='\.\./src/'
        --filter='\.\./clutter/'
        --filter='\.\./cogl/'
        --filter='\.\./mtk/'
        --gcov-ignore-errors=no_working_dir_found
        --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:
    - .mutter.distribution-image
    - .test-mutter-base
  script:
    - glib-compile-schemas $GSETTINGS_SCHEMA_DIR
    - mkdir -m 1777 /tmp/.X11-unix
    - ./src/tests/meta-dbus-runner.py
        --
        meson test
          -C build
          --setup plain
          --no-suite 'mutter/kvm'
          --no-suite 'gvdb'
          --no-rebuild
          --timeout-multiplier 10
          --print-errorlogs
  artifacts:
    reports:
      junit: "build/meson-logs/testlog-plain.junit.xml"

test-mutter@x86_64:
  extends:
    - .mutter.fedora@x86_64
    - .test-mutter
  tags:
    - asan
  needs:
    - build-mutter@x86_64

test-mutter-kvm@x86_64:
  extends:
    - .mutter.fedora@x86_64
    - .test-mutter-base
  tags:
    - kvm
  script:
    - meson test -C build
        --no-rebuild
        --timeout-multiplier 10
        --setup plain
        --suite 'mutter/kvm'
        --print-errorlogs
  needs:
    - build-mutter@x86_64
  artifacts:
    reports:
      junit: "build/meson-logs/testlog-plain.junit.xml"

test-mutter@aarch64:
  extends:
    - .mutter.fedora@aarch64
    - .test-mutter
  tags:
    - asan-aarch64
  needs:
    - build-mutter@aarch64
  when: manual

coverage:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  stage: analyze
  script:
    - compgen -G "coverage-*.json" > /dev/null || exit 0
    - mkdir coveragereport
    - gcovr --add-tracefile 'coverage-*.json'
        --html-details
        --html-theme github.blue
        --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-run-gnome-shell@x86_64:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
    - .test-setup
  stage: test
  needs:
    - build-mutter@x86_64
  before_script:
    - !reference [.mutter.fedora@x86_64, before_script]
    - sudo meson install --no-rebuild -C build
  script:
    - .gitlab-ci/checkout-gnome-shell.sh
    - meson setup gnome-shell gnome-shell/build --prefix /usr -Dbuildtype=debugoptimized -Dman=false --werror --fatal-meson-warnings
    - sudo meson install -C gnome-shell/build
    - mkdir -m 1777 /tmp/.X11-unix
    - dbus-run-session -- meson test -C gnome-shell/build --timeout-multiplier 5
  artifacts:
    expire_in: 7 day
    name: "mutter-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: on_failure
    paths:
      - gnome-shell/build/meson-logs

test-mutter-coverity:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule" && $MUTTER_SCHEDULED_JOB == "coverity"'
      when: on_success
    - if: '$CI_COMMIT_BRANCH'
      when: 'manual'
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  needs:
    - job: build-fedora-container@x86_64
      artifacts: false
  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="$(cat "${COVERITY_TOKEN_FILE}")"
      --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:
    - job: build-fedora-container@x86_64
      artifacts: false
  script:
    - meson setup . build
        --prefix /usr
        --werror
        --wrap-mode nofallback
        -Dbuildtype=debugoptimized
    - glib-compile-schemas $GSETTINGS_SCHEMA_DIR
    - mkdir -m 1777 /tmp/.X11-unix
    - ./src/tests/meta-dbus-runner.py
        --
        meson dist -C build --include-subprojects
  artifacts:
    expire_in: 7 day
    name: "mutter-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - build/meson-private/dist-build/meson-logs
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: on_success
    - if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
      when: on_success
    - if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
      when: manual
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      changes:
        - "**/meson.build"
        - meson/*
      when: on_success
    - if: '$GITLAB_USER_LOGIN == "marge-bot"'
      when: on_success
    - if: '$CI_MERGE_REQUEST_ASSIGNEES == "marge-bot"'
      when: on_success

installed-tests-mutter@x86_64:
  extends:
    - .fdo.distribution-image@fedora
    - .mutter.fedora@x86_64
    - .build-mutter-base
    - .test-setup
  stage: deploy
  needs:
    - build-mutter@x86_64
  script:
    - meson install -C build --no-rebuild
    - mkdir -m 1777 /tmp/.X11-unix
    - mkdir installed-tests-logs
    - catch gnome-desktop-testing-runner -L installed-tests-logs mutter
  artifacts:
    expire_in: 7 day
    name: "mutter-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - installed-tests-logs
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: on_success
    - if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
      when: on_success
    - if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /.*installed-tests.*/'
      when: on_success
    - if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
      when: manual
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      changes:
        - "**/meson.build"
        - meson/*
      when: on_success
    - if: '$GITLAB_USER_LOGIN == "marge-bot"'
      when: on_success
    - if: '$CI_MERGE_REQUEST_ASSIGNEES == "marge-bot"'
      when: on_success

dist-mutter-tarball:
  extends: dist-mutter
  artifacts:
    expose_as: 'Get tarball here'
    name: "${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - $TARBALL_ARTIFACT_PATH
  rules:
    - if: '$CI_COMMIT_TAG'

reference:
  extends:
    - .mutter.distribution-image
    - .mutter.fedora@x86_64
  stage: docs
  needs:
    - build-mutter@x86_64
  script:
    - mkdir references
    - cp -r doc/website/* ./references
    - mv build/doc/reference/{clutter/clutter,cogl/cogl,meta/meta,mtk/mtk} references/
  artifacts:
    expire_in: 1 week
    expose_as: 'Documentation'
    paths:
      - references/

pages:
  stage: deploy
  needs: ['reference']
  extends:
    - .skip-git-clone
  script:
    - mv references public/
  artifacts:
    paths:
      - public
  rules:
    - if: ($CI_DEFAULT_BRANCH == $CI_COMMIT_BRANCH && $CI_PROJECT_NAMESPACE == "GNOME")
