diff options
Diffstat (limited to '')
-rw-r--r-- | .gitlab-ci.yml | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..ae37234 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,266 @@ +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: [$(pwd)] + 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 + tags: ['crun'] + 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 + tags: ['crun'] + 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 + tags: ['crun'] + 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 + tags: ['crun'] + 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 .. + |