power-profiles-daemon/.gitlab-ci.yml
2024-04-03 19:30:18 +00:00

235 lines
6.1 KiB
YAML

image: fedora:rawhide
variables:
DEPENDENCIES: gcc
pkgconfig(udev)
pkgconfig(systemd)
pkgconfig(gio-2.0)
pkgconfig(gudev-1.0)
pkgconfig(upower-glib)
pkgconfig(polkit-gobject-1)
systemd
meson
git
python3-packaging
TEST_DEPENDENCIES: e2fsprogs
python3-dbusmock
python3-gobject
python3-pylint
umockdev
TEST_DEBUG_DEPENDENCIES: glib2
glibc
libgudev
upower
polkit-libs
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_PIPELINE_SOURCE == 'push'
.install-deps:
variables:
TMPDIR: $CI_BUILDS_DIR/tmpdir
before_script:
- echo 8096000 > /proc/sys/fs/inotify/max_user_instances
- mkdir -m 700 $TMPDIR -p
- if command -v dnf5 &>/dev/null; then ln -sfv $(command -v dnf5) /usr/local/bin/dnf; fi
- dnf update -y
- dnf install -y $DEPENDENCIES $JOB_DEPS
# dnf5 does not include debuginfo-install yet, so let's use dnf4 instead.
- if [ -n "$JOB_DEBUG_DEPS" ]; then
if ! command -v dnf4 &>/dev/null; then
dnf install -y dnf4;
dnf4 update -y;
fi;
dnf4 install -y "dnf-command(debuginfo-install)";
dnf4 debuginfo-install -y $JOB_DEBUG_DEPS;
fi
pre_commit:
variables:
DEPENDENCIES: {}
JOB_DEPS: pre-commit
git
extends:
- .install-deps
script:
- pre-commit run --all-files
build_and_test:
variables:
JOB_DEPS: $TEST_DEPENDENCIES
gcovr
python3-coverage
JOB_DEBUG_DEPS: $TEST_DEBUG_DEPENDENCIES
extends:
- .install-deps
script:
- meson setup
--werror
--fatal-meson-warnings
--warnlevel 2
-Dpylint=enabled
-Db_coverage=true
_build
- meson test -C _build --print-errorlogs
- .ci/fail_skipped_tests.py _build/meson-logs/testlog.junit.xml
- ninja -C _build coverage
- python_coverage_data=_build/meson-logs/python.coverage
- coverage3 combine --data-file=$python_coverage_data
_build/python-coverage/*
- coverage3 xml --data-file=$python_coverage_data
-o $python_coverage_data.xml
- sed "s,_build/src/,src/,g" -i $python_coverage_data.xml
- coverage3 report --data-file=$python_coverage_data
- coverage3 html --data-file=$python_coverage_data
-d _build/meson-logs/python-coverage-html
- cat _build/meson-logs/coverage.txt || true
artifacts:
when: always
paths:
- _build/meson-logs/*.txt
- _build/meson-logs/*.xml
- _build/meson-dist/*
- _build/meson-logs/coveragereport/*
- _build/meson-logs/python-coverage-html/*
reports:
junit:
- _build/meson-logs/testlog.junit.xml
coverage_report:
coverage_format: cobertura
path: _build/meson-logs/*coverage.xml
coverage: '/^TOTAL.*\s+(\d+\%)$/'
dist_install:
variables:
JOB_DEPS: argparse-manpage
bash-completion-devel
python3-gobject
python3-shtab
extends:
- .install-deps
script:
- meson setup
--werror
--fatal-meson-warnings
--warnlevel 2
-Dmanpage=enabled
-Dbashcomp=enabled
-Dzshcomp=enabled
-Dtests=false
_build
- meson install -C _build
- ninja -C _build uninstall -v
- meson dist -C _build
artifacts:
when: always
paths:
- _build/meson-logs/*.txt
rules:
- if: ($CI_PIPELINE_SOURCE == "merge_request_event" ||
$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH)
address_sanitizer:
variables:
JOB_DEPS: $TEST_DEPENDENCIES
libasan
libubsan
JOB_DEBUG_DEPS: $TEST_DEBUG_DEPENDENCIES
extends:
- .install-deps
script:
- meson setup
--werror
--buildtype=debug
_build
-Db_sanitize=address,undefined
- meson test -C _build --print-errorlogs -t 3
artifacts:
when: on_failure
paths:
- _build/meson-logs/*.txt
valgrind:
variables:
JOB_DEPS: $TEST_DEPENDENCIES
valgrind
JOB_DEBUG_DEPS: $TEST_DEBUG_DEPENDENCIES
extends:
- .install-deps
script:
- meson setup
--werror
--buildtype=debug
_build
- meson test -C _build --print-errorlogs --setup=valgrind
artifacts:
when: on_failure
paths:
- _build/meson-logs/*.txt
scan_build:
variables:
JOB_DEPS: clang-analyzer
which
extends:
- .install-deps
script:
- meson setup _build -Dtests=false
- env SCANBUILD=$(which scan-build) ninja -C _build scan-build
artifacts:
when: on_failure
paths:
- _build/meson-logs
docs:
variables:
JOB_DEPS: gtk-doc
extends:
- .install-deps
script:
- meson setup
-Dgtk_doc=true
-Dtests=false
_build-docs
- ninja -C _build-docs power-profiles-daemon-doc
artifacts:
expose_as: "HTML Documentation"
paths:
- _build-docs/docs/html
- _build-docs/docs/html/index.html
expire_in: 1 week
rules:
- if: ($CI_PIPELINE_SOURCE == "merge_request_event" ||
$CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH)
pages:
image: alpine:latest
stage: deploy
needs:
- job: build_and_test
artifacts: true
- job: docs
artifacts: true
script:
- mv _build-docs/docs/html public
- mkdir public/coverage
- mv _build/meson-logs/coveragereport public/coverage/daemon
- mv _build/meson-logs/python-coverage-html public/coverage/tool
- echo '
<html>
<head><title>Power Profiles Daemon Coverage</title></head>
<body>
<ul>
<li><a href="daemon">Daemon</a></li>
<li><a href="tool"><code>powerprofilesctl</code> tool</a></li>
</ul>
</body>
</html>' > public/coverage/index.html
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH