426 lines
11 KiB
YAML
426 lines
11 KiB
YAML
include:
|
|
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/34f4ade99434043f88e164933f570301fd18b125/templates/fedora.yml'
|
|
|
|
variables:
|
|
FDO_UPSTREAM_REPO: gnome/gnome-control-center
|
|
|
|
stages:
|
|
- prepare
|
|
- build
|
|
- test
|
|
- manual
|
|
- deploy
|
|
|
|
.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
|
|
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 ==" &&
|
|
dnf install -y dnf5-plugins &&
|
|
git clone --depth 1 --branch 4.12.5 https://gitlab.gnome.org/GNOME/gtk.git &&
|
|
cd gtk &&
|
|
dnf5 builddep -y gtk4 &&
|
|
meson setup . _build -Dprefix=/usr -Dlibdir=lib64 &&
|
|
ninja -C _build install &&
|
|
cd .. &&
|
|
rm -rf _build/ &&
|
|
meson . _build ${BUILD_OPTS} -Dprofile=development &&
|
|
ninja -C _build 2>&1 | tee compilation.log
|
|
|
|
.Run Tests: &run_tests
|
|
echo "== Testing ==" &&
|
|
meson test -C _build --verbose --no-stdsplit
|
|
|
|
.fedora.container.common:
|
|
# As of 2022-03-07 runners not tagged with "crun" have broken seccomp rules
|
|
# affecting the close_range syscall and breaking g_spawn
|
|
# Note that "asan" tests are disabled for the same reason, see below.
|
|
# https://gitlab.gnome.org/Infrastructure/GitLab/-/issues/545
|
|
tags: [ crun ]
|
|
variables:
|
|
# When branching a stable release, change 'main'
|
|
# to the release number/branch to ensure that
|
|
# a new image will be created, tailored for the
|
|
# stable branch.
|
|
# Could probably also switch away from rawhide,
|
|
# to stable fedora branch as well.
|
|
FDO_DISTRIBUTION_TAG: '2024-04-16.0-main'
|
|
FDO_DISTRIBUTION_VERSION: 39
|
|
|
|
#############################################
|
|
# 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:
|
|
# - gobject-introspection-devel is needed for gsettings-desktop-schemas
|
|
FDO_DISTRIBUTION_PACKAGES: >-
|
|
@c-development @development-tools
|
|
git
|
|
llvm clang libasan libtsan libubsan gcovr
|
|
meson
|
|
accountsservice-devel
|
|
cheese-libs-devel
|
|
chrpath
|
|
colord-devel colord-gtk-devel
|
|
cups-devel
|
|
desktop-file-utils
|
|
docbook-style-xsl
|
|
flatpak-devel
|
|
gdk-pixbuf2-devel
|
|
gettext
|
|
glib2-devel
|
|
gobject-introspection-devel
|
|
gnome-bluetooth-libs-devel
|
|
gnome-desktop3-devel
|
|
gnome-online-accounts-devel
|
|
grilo-devel
|
|
gsettings-desktop-schemas-devel
|
|
gsound-devel
|
|
gtk3-devel ibus-devel
|
|
gtk4-devel
|
|
intltool
|
|
appstream-devel
|
|
sassc
|
|
libadwaita-devel
|
|
libcanberra-devel
|
|
libgtop2-devel
|
|
libgudev-devel
|
|
libnma-devel
|
|
libnotify-devel
|
|
libpwquality-devel
|
|
libsmbclient-devel
|
|
libsoup3-devel
|
|
libudisks2-devel
|
|
libwacom-devel
|
|
libX11-devel
|
|
libXi-devel
|
|
libxml2-devel
|
|
libxslt
|
|
ModemManager-glib-devel
|
|
NetworkManager-libnm-devel
|
|
polkit-devel
|
|
pulseaudio-libs-devel
|
|
upower-devel
|
|
python3-dbusmock
|
|
xorg-x11-server-Xvfb
|
|
mesa-dri-drivers
|
|
libsecret-devel
|
|
libgweather4-devel
|
|
geocode-glib2-devel
|
|
lcms2-devel
|
|
geoclue2-devel
|
|
libnotify-devel
|
|
alsa-lib-devel
|
|
nss-devel
|
|
gcr3-devel
|
|
gcr-devel
|
|
setxkbmap
|
|
appstream-devel
|
|
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 .. && \
|
|
git clone https://gitlab.gnome.org/GNOME/gnome-desktop.git && \
|
|
cd gnome-desktop && \
|
|
meson . _build --prefix=/usr -Ddesktop_docs=false && \
|
|
ninja -C _build && \
|
|
ninja -C _build install && \
|
|
cd .. && \
|
|
git clone https://gitlab.gnome.org/GNOME/gnome-bluetooth.git && \
|
|
cd gnome-bluetooth && \
|
|
meson . _build --prefix=/usr -Dsendto=false && \
|
|
ninja -C _build && \
|
|
ninja -C _build install && \
|
|
cd .. && \
|
|
git clone https://gitlab.gnome.org/GNOME/libnma.git && \
|
|
cd libnma && \
|
|
meson . _build --prefix=/usr -Dlibnma_gtk4=true -Dmobile_broadband_provider_info=false -Dgcr=false -Dgtk_doc=false && \
|
|
ninja -C _build && \
|
|
ninja -C _build install && \
|
|
cd .. && \
|
|
git clone https://github.com/hughsie/colord-gtk.git && \
|
|
cd colord-gtk && \
|
|
meson . _build --prefix=/usr -Dgtk4=true -Ddocs=false -Dtests=false -Dman=false && \
|
|
ninja -C _build && \
|
|
ninja -C _build install && \
|
|
cd .. && \
|
|
git clone https://gitlab.gnome.org/GNOME/libgweather.git && \
|
|
cd libgweather && \
|
|
meson . _build --prefix=/usr -Denable_vala=false -Dgtk_doc=false -Dintrospection=false && \
|
|
ninja -C _build && \
|
|
ninja -C _build install && \
|
|
cd .. && \
|
|
git clone https://gitlab.gnome.org/GNOME/gnome-settings-daemon.git && \
|
|
cd gnome-settings-daemon && \
|
|
meson . _build --prefix=/usr && \
|
|
ninja -C _build && \
|
|
ninja -C _build install && \
|
|
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.distribution-image@fedora'
|
|
- '.fedora.container.common'
|
|
|
|
<<: *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:
|
|
extends:
|
|
- '.fdo.distribution-image@fedora'
|
|
- '.fedora.container.common'
|
|
<<: *save_build_logs
|
|
stage: test
|
|
|
|
dependencies:
|
|
- build
|
|
|
|
script:
|
|
- *environment_information
|
|
- *build_procedure
|
|
- *run_tests
|
|
|
|
- |
|
|
if [[ -n "${CI_COMMIT_TAG}" ]]; then
|
|
echo "== Distro Test =="
|
|
ninja dist -C _build
|
|
fi
|
|
|
|
artifacts:
|
|
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.distribution-image@fedora'
|
|
- '.fedora.container.common'
|
|
<<: *save_build_logs
|
|
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
|
|
|
|
except:
|
|
variables:
|
|
- $CI_PIPELINE_SOURCE == "schedule"
|
|
- $CI_COMMIT_TITLE =~ /^Update.*translation$/
|
|
|
|
# Runs the address sanitizer.
|
|
# - below, at the "sanitizers section"
|
|
|
|
##
|
|
# Stage: Deploy
|
|
#
|
|
# Publishes the Coverage Report generated above
|
|
##
|
|
pages:
|
|
extends:
|
|
- '.fdo.distribution-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.SettingsDevel"
|
|
BUNDLE: "org.gnome.SettingsDevel.flatpak"
|
|
MANIFEST_PATH: "build-aux/flatpak/org.gnome.Settings.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.distribution-image@fedora'
|
|
- '.fedora.container.common'
|
|
<<: *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$/
|
|
|
|
# Disabled because we currently need "crun" tagged runners, see above
|
|
#asan:
|
|
# extends:
|
|
# - '.fdo.distribution-image@fedora'
|
|
# - '.fedora.container.common'
|
|
# <<: *sanitizer
|
|
# # ASAN requires debugging capabilities
|
|
# tags: [ asan ]
|
|
# stage: manual
|
|
# when: manual
|
|
# variables:
|
|
# BUILD_OPTS: "-Db_sanitize=address"
|
|
# LSAN_OPTIONS: "suppressions=${CI_PROJECT_DIR}/build-aux/ci/lsan.supp"
|
|
|
|
tsan:
|
|
extends:
|
|
- '.fdo.distribution-image@fedora'
|
|
- '.fedora.container.common'
|
|
<<: *sanitizer
|
|
variables:
|
|
BUILD_OPTS: "-Db_sanitize=thread"
|
|
|
|
ubsan:
|
|
extends:
|
|
- '.fdo.distribution-image@fedora'
|
|
- '.fedora.container.common'
|
|
<<: *sanitizer
|
|
variables:
|
|
BUILD_OPTS: "-Db_sanitize=undefined"
|
|
|
|
msan:
|
|
extends:
|
|
- '.fdo.distribution-image@fedora'
|
|
- '.fedora.container.common'
|
|
<<: *sanitizer
|
|
variables:
|
|
BUILD_OPTS: "-Db_sanitize=memory"
|
|
CC: "clang"
|