Codebase list gnome-settings-daemon / HEAD .gitlab-ci.yml
HEAD

Tree @HEAD (Download .tar.gz)

.gitlab-ci.yml @HEADraw · history · blame

include:
 - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/80f87b3058efb75a1faae11826211375fba77e7f/templates/fedora.yml'

variables:
  FDO_DISTRIBUTION_TAG: latest
  FDO_DISTRIBUTION_VERSION: 36
  FDO_UPSTREAM_REPO: gnome/gnome-settings-daemon
  # Expiry sets fdo.expires on the image
  FEDORA_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG"
  FDO_EXPIRES_AFTER: 8w
  FEDORA_DEPENDENCIES: >
    @c-development
    alsa-lib-devel
    colord-devel
    compiler-rt
    cups-devel
    fontconfig-devel
    gcr-devel
    geoclue2-devel geocode-glib-devel
    gettext
    git
    glib2-devel
    gnome-desktop3-devel
    gnome-session
    gobject-introspection
    gobject-introspection-devel
    gsettings-desktop-schemas-devel
    gtk3-devel
    lcms2-devel
    lcov gcovr clang libasan libubsan libtsan
    libcanberra-devel
    libgtop2-devel
    libgudev-devel
    libgweather4-devel
    libnotify-devel
    librsvg2-devel
    libwacom-devel
    libX11-devel
    libXi-devel
    libXtst-devel
    libXfixes-devel
    llvm
    mesa-dri-drivers
    meson
    ModemManager-glib-devel
    NetworkManager-libnm-devel
    nss-devel
    perl-interpreter
    polkit-devel
    pulseaudio-libs-devel
    python3-gobject python3-dbusmock
    umockdev
    upower-devel
    wayland-devel
    which
    xorg-x11-drv-wacom-devel
    xorg-x11-server-Xvfb
    mutter

image: "$FEDORA_IMAGE"

stages:
  - build
  - test
  - manual
  - delivery

.Log files: &log_files  [./*.log, _build/meson-logs/]

.Build logs: &save_build_logs
  artifacts:
    name: log
    when: always
    paths: *log_files

.Git Untracked files: &save_untracked_files
  artifacts:
    name: untracked
    when: always
    paths:
      - ./*
    expire_in: 3h30min

.Show Info: &environment_information
  build-aux/ci/ci-helper.sh "INFO" &&
  build-aux/ci/ci-helper.sh "GIT_INFO"

.Build procedure: &build_procedure
  echo "== Building ==" &&
  rm -rf _build/ &&
  meson . _build ${BUILD_OPTS} -Dgcr3=true &&
  ninja -C _build 2>&1 | tee compilation.log

.Run Tests: &run_tests
  echo "== Testing ==" &&
  meson test -C _build --verbose --no-stdsplit

##
# Stage: Build
#
# Checks if GNOME Settings Daemon is properly building and installing. This is the
# most important stage of the CI, and no MR should ever be merged if it breaks
# any of them.
##
build:
  <<: *save_untracked_files
  stage: build

  script:
    - *environment_information
    - *build_procedure

    - echo "== Installing =="
    - ninja -C _build install

    - echo "== Report =="
    - build-aux/ci/ci-helper.sh "WARNINGS"

    # Save all but git-related files
    - rm -rf .git .gitignore .gitmodules

  except:
    variables:
      - $CI_PIPELINE_SOURCE == "schedule"

##
# Stage: Test
#
# Runs the unit tests.
##
test:
  <<: *save_build_logs
  stage: test

  dependencies:
    - build

  script:
    - *environment_information

    - |
      if [[ -n "${CI_COMMIT_TAG}" ]]; then
        *run_tests

        echo "== Distro Test =="
        ninja dist -C _build
      else
        echo "== Testing =="
        meson test -C _build --verbose --no-stdsplit
      fi

  except:
    variables:
      - $CI_PIPELINE_SOURCE == "schedule"
      - $CI_COMMIT_TITLE =~ /^Update.*translation$/

# Runs the coverage test.
coverage:
  <<: *save_build_logs
  stage: test
  # Appears to be broken on Fedora Rawhide as of 2018-02-05
  allow_failure: true
  variables:
    BUILD_OPTS: "-Db_coverage=true"
    coverage: '/^Lines:.\d+.\d+.(\d+\.\d+\%)/'
  only:
    - master@GNOME/gnome-settings-daemon

  script:
    - *environment_information
    - *build_procedure
    - *run_tests

    - ninja -C _build coverage-html

    # Parse the report to get the coverage result
    - |
      echo == Coverage ==
      sed -e 's/<[^>]*>//g' _build/meson-logs/coveragereport/index.html | tr -d ' \t' | grep -A3 -P '^Lines:$'  | tr '\n' ' '; echo

##
# Stage: Delivery
#
# Publishes the Coverage Report generated above
##
pages:
  stage: delivery
  # Don't error in case coverage failed
  allow_failure: true
  dependencies:
    - coverage
  script:
    - mv _build/meson-logs/coveragereport/ public/
  artifacts:
    paths:
      - public
  only:
    - master@GNOME/gnome-settings-daemon

##
# Stage: Manual
#
# Runs the sanitizers [address, thread, undefined, and memory].
##
.sanitizer: &sanitizer
  <<: *save_build_logs
  stage: manual
  when: manual
  script:
    - *environment_information
    - *build_procedure
    - *run_tests

  except:
    variables:
      - $CI_PIPELINE_SOURCE == "schedule"
      - $CI_COMMIT_TITLE =~ /^Update.*translation$/

asan:
  <<: *sanitizer
  # ASAN requires debugging capabilities
  tags: [ asan ]
  variables:
    BUILD_OPTS: "-Db_sanitize=address"

tsan:
  <<: *sanitizer
  variables:
    BUILD_OPTS: "-Db_sanitize=thread"

ubsan:
  <<: *sanitizer
  variables:
    BUILD_OPTS: "-Db_sanitize=undefined"

msan:
  <<: *sanitizer
  variables:
    BUILD_OPTS: "-Db_sanitize=memory -Db_lundef=false"
    CC: "clang"

#############################################
#          Create CI Docker Images          #
#############################################

# See also https://gitlab.freedesktop.org/freedesktop/ci-templates
container_fedora_build:
  extends: .fdo.container-build@fedora
  only:
    variables:
      - $CI_PIPELINE_SOURCE == "schedule" && $CRON_TASK == "BUILD_CI_IMAGES"
  variables:
    GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
    FDO_FORCE_REBUILD: 1 # Force rebuilding the image
    FDO_DISTRIBUTION_PACKAGES: $FEDORA_DEPENDENCIES
    FDO_DISTRIBUTION_EXEC: |
      git clone https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas.git && \
        cd gsettings-desktop-schemas && \
        meson . _build --prefix=/usr && \
        ninja -C _build && \
        ninja -C _build install && \
        cd ..