gnome-control-center/.gitlab-ci.yml
Felipe Borges b7b75fb0a8 ci: Build gnome-online-accounts into container
For the changes in gnome-online-accounts!253.

This can be reverted when gnome-online-accounts.47.alpha is out.
2024-06-27 10:21:55 +02:00

387 lines
9.9 KiB
YAML

include:
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/145b1bc7ef1702d2bd71584010d7113c6786a506/templates/fedora.yml'
variables:
FDO_UPSTREAM_REPO: gnome/gnome-control-center
stages:
- prepare
- build
- test
- manual
- deploy
.Build Logs: &build_logs
name: build_logs
when: always
paths:
- ./*.log
- _build/meson-logs/
.Build Output: &build_output
artifacts:
name: build_output
when: always
paths:
- ./*.log
- _build/
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 ==" &&
meson setup _build ${BUILD_OPTS} -Dprofile=development &&
meson compile -C _build 2>&1 | tee compilation.log
.Run Tests: &run_tests
export GSK_RENDERER=ngl &&
echo "== Testing ==" &&
meson test -C _build --verbose --no-stdsplit --no-rebuild
.fedora.container.common:
variables:
# When branching a stable release, change 'main' to the
# release branch name to ensure that a new image will
# be created, tailored for the stable branch.
# Should probably also switch away from 'rawhide',
# to stable fedora branch as well.
BRANCH_NAME: 'main'
CONTAINER_TAG: '2024-06-27.0'
FEDORA_VERSION: rawhide
# Derive FDO variables from this automatically.
# DO NOT edit, instead change the variables above
FDO_REPO_SUFFIX: '${BRANCH_NAME}'
FDO_DISTRIBUTION_TAG: '${CONTAINER_TAG}-fedora-${FEDORA_VERSION}'
FDO_DISTRIBUTION_VERSION: '${FEDORA_VERSION}'
#############################################
# Create CI Docker Images #
#############################################
# See also https://gitlab.freedesktop.org/freedesktop/ci-templates
build.container.fedora@x86_64:
extends:
- '.fdo.container-build@fedora'
- '.fedora.container.common'
stage: 'prepare'
variables:
# no need to pull the whole tree for rebuilding the image
GIT_STRATEGY: none
# Expiry sets fdo.expires on the image
FDO_EXPIRES_AFTER: 8w
# NOTES:
# - most packages are needed for testing
# - glibc-langpack-en is needed for sorting in run-style-check-diff.sh
# - libsass-devel, sassc are often needed for building libadwaita, gtk, etc.
FDO_DISTRIBUTION_PACKAGES: >-
dnf5-plugins
git
llvm clang libasan libtsan libubsan compiler-rt gcovr
meson
clang-tools-extra
glibc-langpack-en
python3-dbusmock
xorg-x11-server-Xvfb
mesa-dri-drivers
libsass-devel sassc
FDO_DISTRIBUTION_EXEC: |-
dnf builddep -y gnome-control-center && \
dnf builddep -y gsettings-desktop-schemas && \
git clone --depth 1 https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas.git && \
cd gsettings-desktop-schemas && \
meson setup _build --prefix=/usr && \
meson compile -C _build && \
meson install -C _build && \
cd .. && \
dnf builddep -y gnome-settings-daemon && \
git clone --depth 1 https://gitlab.gnome.org/GNOME/gnome-settings-daemon.git && \
cd gnome-settings-daemon && \
meson setup _build --prefix=/usr && \
meson compile -C _build && \
meson install -C _build && \
cd .. && \
dnf builddep -y gtk4 && \
git clone --depth 1 https://gitlab.gnome.org/GNOME/gtk.git && \
cd gtk && \
meson setup _build --prefix=/usr && \
meson compile -C _build && \
meson install -C _build && \
cd .. && \
dnf builddep -y libadwaita && \
git clone --depth 1 https://gitlab.gnome.org/GNOME/libadwaita.git && \
cd libadwaita && \
meson setup _build --prefix=/usr -Dtests=false -Dexamples=false && \
meson compile -C _build && \
meson install -C _build && \
cd .. && \
git clone --depth 1 https://gitlab.gnome.org/GNOME/gnome-online-accounts.git && \
cd gnome-online-accounts && \
meson setup _build --prefix=/usr -Dfedora=true && \
meson compile -C _build && \
meson install -C _build && \
cd .. && \
dnf remove -y systemtap-runtime
##
# Stage: Build
#
# Checks if GNOME Control Center 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:
extends:
- '.fdo.suffixed-image@fedora'
- '.fedora.container.common'
stage: build
script:
- *environment_information
- *build_procedure
- echo "== Installing =="
- meson install -C _build
- echo "== Report =="
- build-aux/ci/ci-helper.sh "WARNINGS"
<<: *build_output
except:
variables:
- $CI_PIPELINE_SOURCE == "schedule"
# Same as build but with various off-by-default options enabled
conditional builds:
extends:
- build
artifacts:
# Only save build logs for these
<<: *build_logs
parallel:
matrix:
- BUILD_OPTS: '-Dmalcontent=true'
- BUILD_OPTS: '-Ddocumentation=true'
##
# Stage: Test
#
# Runs static checks.
# Runs the unit tests.
##
style-check-diff:
extends:
- '.fdo.suffixed-image@fedora'
- '.fedora.container.common'
needs:
- build.container.fedora@x86_64
stage: test
when: always
allow_failure: true
script:
- .gitlab-ci/run-style-check-diff.sh
check-potfiles:
extends:
- '.fdo.suffixed-image@fedora'
- '.fedora.container.common'
needs:
- build.container.fedora@x86_64
stage: test
when: always
variables:
GIT_SUBMODULE_STRATEGY: normal
script:
- .gitlab-ci/check-potfiles.sh
test:
extends:
- '.fdo.suffixed-image@fedora'
- '.fedora.container.common'
stage: test
needs:
- build
script:
- *environment_information
- *run_tests
- |
if [[ -n "${CI_COMMIT_TAG}" ]]; then
echo "== Distro Test =="
meson dist -C _build
fi
artifacts:
<<: *build_logs
reports:
junit: '_build/meson-logs/testlog.junit.xml'
except:
variables:
- $CI_PIPELINE_SOURCE == "schedule"
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
# Runs the coverage test.
coverage:
extends:
- '.fdo.suffixed-image@fedora'
- '.fedora.container.common'
dependencies:
- build.container.fedora@x86_64
stage: test
variables:
BUILD_OPTS: "-Db_coverage=true"
coverage: '/^Lines:.\d+.\d+.(\d+\.\d+\%)/'
only:
- main@GNOME/gnome-control-center
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
artifacts:
<<: *build_logs
except:
variables:
- $CI_PIPELINE_SOURCE == "schedule"
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
##
# Stage: Deploy
#
# Publishes the Coverage Report generated above
##
pages:
extends:
- '.fdo.suffixed-image@fedora'
- '.fedora.container.common'
stage: deploy
dependencies:
- coverage
script:
- mv _build/meson-logs/coveragereport/ public/
artifacts:
paths:
- public
only:
- main@GNOME/gnome-control-center
except:
variables:
- $CRON_TASK == "BUILD_CI_IMAGES"
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
##
# Stage: Manual
#
# Creates a flatpak
##
flatpak:
stage: manual
image: quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master
artifacts:
name: package
paths:
- $(pwd)/*.flatpak
expire_in: 7 days
variables:
OLD_APPID: "org.gnome.Settings"
APPID: "org.gnome.Settings.Devel"
BUNDLE: "org.gnome.Settings.Devel.flatpak"
MANIFEST_PATH: "build-aux/flatpak/org.gnome.Settings.Devel.json"
PROJECT_ID: "org.gnome.Settings"
PROJECT_NAME: "gnome-control-center.git"
RUNTIME_REPO: "https://sdk.gnome.org/gnome-nightly.flatpakrepo"
script:
- echo "== Flatpak packaging =="
# Make it a develoment manifest
- sed -i -n "p; s/$PROJECT_NAME//p" ${MANIFEST_PATH}
- >
sed -i "s,\"app-id\" : \"$PROJECT_ID\",\"app-id\" : \"<<ID>>\",g" ${MANIFEST_PATH}
- >
sed -i "s,\"url\" : \"https://gitlab.gnome.org/GNOME/$PROJECT_NAME\",\"branch\" : \"<<current>>\"\,,g" ${MANIFEST_PATH}
- >
sed -i "s,\"url\" : \"https://gitlab.gnome.org/GNOME/\",\"path\" : \".\",g" ${MANIFEST_PATH}
# Adjust the manifest to HEAD
- sed -i "s,<<ID>>,$APPID,g" ${MANIFEST_PATH}
- sed -i "s,<<current>>,origin/$CI_COMMIT_REF_NAME,g" ${MANIFEST_PATH}
# Update the icon name
- mv data/icons/hicolor/scalable/apps/$OLD_APPID.svg data/icons/hicolor/scalable/apps/$APPID.svg
- mv data/icons/hicolor/symbolic/apps/$OLD_APPID-symbolic.svg data/icons/hicolor/symbolic/apps/$APPID-symbolic.svg
- flatpak-builder --bundle-sources --disable-rofiles-fuse --repo=devel build ${MANIFEST_PATH}
- flatpak build-bundle devel ${BUNDLE} --runtime-repo=${RUNTIME_REPO} ${APPID}
cache:
paths:
- .flatpak-builder/cache
when: manual
except:
- tags
- gnome-3-.*
- main@GNOME/gnome-control-center
# Runs the sanitizers [address, thread, undefined, and memory].
.sanitizer: &sanitizer
extends:
- '.fdo.suffixed-image@fedora'
- '.fedora.container.common'
dependencies:
- build.container.fedora@x86_64
stage: manual
when: manual
script:
- *environment_information
- *build_procedure
- *run_tests
artifacts:
<<: *build_logs
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"
LSAN_OPTIONS: "suppressions=${CI_PROJECT_DIR}/build-aux/ci/lsan.supp"
tsan:
<<: *sanitizer
variables:
BUILD_OPTS: "-Db_sanitize=thread"
ubsan:
<<: *sanitizer
variables:
BUILD_OPTS: "-Db_sanitize=undefined"
msan:
<<: *sanitizer
variables:
BUILD_OPTS: "-Db_sanitize=memory"
CC: "clang"