519 lines
14 KiB
YAML
519 lines
14 KiB
YAML
stages:
|
|
- container
|
|
- container_coverity
|
|
- build
|
|
- analysis
|
|
- pages
|
|
|
|
variables:
|
|
FDO_UPSTREAM_REPO: 'pipewire/pipewire'
|
|
|
|
# ci-templates as of Jan 27th 2022
|
|
.templates_sha: &templates_sha 0c312d9c7255f46e741d43bcd1930f09cd12efe7
|
|
|
|
include:
|
|
- project: 'freedesktop/ci-templates'
|
|
ref: *templates_sha
|
|
file: '/templates/fedora.yml'
|
|
- project: 'freedesktop/ci-templates'
|
|
ref: *templates_sha
|
|
file: '/templates/ubuntu.yml'
|
|
- project: 'freedesktop/ci-templates'
|
|
ref: *templates_sha
|
|
file: '/templates/alpine.yml'
|
|
|
|
.fedora:
|
|
variables:
|
|
# Update this tag when you want to trigger a rebuild
|
|
FDO_DISTRIBUTION_TAG: '2023-11-22.0'
|
|
FDO_DISTRIBUTION_VERSION: '39'
|
|
FDO_DISTRIBUTION_PACKAGES: >-
|
|
alsa-lib-devel
|
|
avahi-devel
|
|
bluez-libs-devel
|
|
clang
|
|
dbus-devel
|
|
doxygen
|
|
fdk-aac-free-devel
|
|
findutils
|
|
gcc
|
|
gcc-c++
|
|
git
|
|
glib-devel
|
|
graphviz
|
|
gstreamer1-devel
|
|
gstreamer1-plugins-base-devel
|
|
jack-audio-connection-kit-devel
|
|
libasan
|
|
libcanberra-devel
|
|
libffado-devel
|
|
libldac-devel
|
|
libmysofa-devel
|
|
libsndfile-devel
|
|
libubsan
|
|
libusb1-devel
|
|
lilv-devel
|
|
libv4l-devel
|
|
libva-devel
|
|
libX11-devel
|
|
ModemManager-devel
|
|
meson
|
|
openssl-devel
|
|
pulseaudio-libs-devel
|
|
python3-docutils
|
|
python3-pip
|
|
sbc-devel
|
|
ShellCheck
|
|
SDL2-devel
|
|
systemd-devel
|
|
vulkan-loader-devel
|
|
webrtc-audio-processing-devel
|
|
which
|
|
valgrind
|
|
ninja-build
|
|
pkgconf
|
|
pulseaudio-utils
|
|
openal-soft
|
|
readline-devel
|
|
pandoc
|
|
# Uncommenting the following two lines and disabling the meson entry above
|
|
# will re-enable use of Meson via pip but please consider using a newer distro
|
|
# image first or making the build system compatible instead! This is because
|
|
# using pip or another 3rd party repo defeats the point testing the particular
|
|
# distro for regressions.
|
|
# NOTE: If you do end up using pip3 for meson, be sure to also update the
|
|
# build_meson_prerelease and build_meson_exact_release build instructions
|
|
# to uninstall the pip3 version again and probably to not call dnf remove
|
|
# FDO_DISTRIBUTION_EXEC: >-
|
|
# pip3 install meson
|
|
|
|
.ubuntu:
|
|
variables:
|
|
# Update this tag when you want to trigger a rebuild
|
|
FDO_DISTRIBUTION_TAG: '2023-04-18.0'
|
|
FDO_DISTRIBUTION_VERSION: '22.04'
|
|
FDO_DISTRIBUTION_PACKAGES: >-
|
|
debhelper-compat
|
|
findutils
|
|
git
|
|
libasound2-dev
|
|
libavcodec-dev
|
|
libavfilter-dev
|
|
libavformat-dev
|
|
libdbus-1-dev
|
|
libbluetooth-dev
|
|
libglib2.0-dev
|
|
libgstreamer1.0-dev
|
|
libgstreamer-plugins-base1.0-dev
|
|
libsbc-dev
|
|
libsdl2-dev
|
|
libudev-dev
|
|
libva-dev
|
|
libv4l-dev
|
|
libx11-dev
|
|
meson
|
|
ninja-build
|
|
pkg-config
|
|
python3-docutils
|
|
systemd
|
|
# Uncommenting the following three lines and disabling the meson entry above
|
|
# will re-enable use of Meson via pip but please consider using a newer distro
|
|
# image first or making the build system compatible instead! This is because
|
|
# using pip or another 3rd party repo defeats the point testing the particular
|
|
# distro for regressions.
|
|
# python3-pip
|
|
# FDO_DISTRIBUTION_EXEC: >-
|
|
# pip3 install meson
|
|
|
|
.alpine:
|
|
variables:
|
|
# Update this tag when you want to trigger a rebuild
|
|
FDO_DISTRIBUTION_TAG: '2023-04-17.0'
|
|
FDO_DISTRIBUTION_VERSION: '3.17'
|
|
FDO_DISTRIBUTION_PACKAGES: >-
|
|
alsa-lib-dev
|
|
avahi-dev
|
|
bash
|
|
bluez-dev
|
|
gcc
|
|
g++
|
|
dbus-dev
|
|
doxygen
|
|
eudev-dev
|
|
fdk-aac-dev
|
|
git
|
|
glib-dev
|
|
graphviz
|
|
gst-plugins-base-dev
|
|
gstreamer-dev
|
|
jack-dev
|
|
libfreeaptx-dev
|
|
libusb-dev
|
|
libx11-dev
|
|
meson
|
|
modemmanager-dev
|
|
ncurses-dev
|
|
pulseaudio-dev
|
|
readline-dev
|
|
sbc-dev
|
|
vulkan-loader-dev
|
|
xmltoman
|
|
|
|
.coverity:
|
|
variables:
|
|
FDO_REPO_SUFFIX: 'coverity'
|
|
FDO_BASE_IMAGE: registry.freedesktop.org/$FDO_UPSTREAM_REPO/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG
|
|
FDO_DISTRIBUTION_PACKAGES: >-
|
|
curl
|
|
FDO_DISTRIBUTION_EXEC: >-
|
|
mkdir -p /opt ;
|
|
cd /opt ;
|
|
curl -o /tmp/cov-analysis-linux64.tgz https://scan.coverity.com/download/cxx/linux64
|
|
--form project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN ;
|
|
tar xf /tmp/cov-analysis-linux64.tgz ;
|
|
mv cov-analysis-linux64-* coverity ;
|
|
rm /tmp/cov-analysis-linux64.tgz
|
|
only:
|
|
variables:
|
|
- $COVERITY
|
|
|
|
.not_coverity:
|
|
except:
|
|
variables:
|
|
- $COVERITY
|
|
|
|
.build:
|
|
before_script:
|
|
# setup the environment
|
|
- export BUILD_ID="$CI_JOB_ID"
|
|
- export PREFIX="$PWD/prefix-$BUILD_ID"
|
|
- export BUILD_DIR="$PWD/build-$BUILD_ID"
|
|
- export XDG_RUNTIME_DIR="$(mktemp -p $PWD -d xdg-runtime-XXXXXX)"
|
|
- |
|
|
if [ -n "$FDO_CI_CONCURRENT" ]; then
|
|
COMPILE_ARGS="-j$FDO_CI_CONCURRENT"
|
|
export COMPILE_ARGS
|
|
fi
|
|
script:
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX" $MESON_OPTIONS
|
|
- meson compile -C "$BUILD_DIR" $COMPILE_ARGS
|
|
- meson test -C "$BUILD_DIR" --no-rebuild
|
|
- meson install -C "$BUILD_DIR" --no-rebuild
|
|
artifacts:
|
|
name: pipewire-$CI_COMMIT_SHA
|
|
when: always
|
|
paths:
|
|
- build-*/meson-logs
|
|
|
|
container_ubuntu:
|
|
extends:
|
|
- .ubuntu
|
|
- .fdo.container-build@ubuntu
|
|
stage: container
|
|
variables:
|
|
GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
|
|
|
|
container_fedora:
|
|
extends:
|
|
- .fedora
|
|
- .fdo.container-build@fedora
|
|
stage: container
|
|
variables:
|
|
GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
|
|
|
|
container_alpine:
|
|
extends:
|
|
- .alpine
|
|
- .fdo.container-build@alpine
|
|
stage: container
|
|
variables:
|
|
GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
|
|
|
|
container_coverity:
|
|
extends:
|
|
- .fedora
|
|
- .coverity
|
|
- .fdo.container-build@fedora
|
|
stage: container_coverity
|
|
variables:
|
|
GIT_STRATEGY: none
|
|
|
|
build_on_ubuntu:
|
|
extends:
|
|
- .ubuntu
|
|
- .not_coverity
|
|
- .fdo.distribution-image@ubuntu
|
|
- .build
|
|
stage: build
|
|
variables:
|
|
MESON_OPTIONS: "-Dsession-managers=[]"
|
|
|
|
.build_on_fedora:
|
|
extends:
|
|
- .fedora
|
|
- .not_coverity
|
|
- .fdo.distribution-image@fedora
|
|
- .build
|
|
stage: build
|
|
|
|
build_on_fedora:
|
|
extends:
|
|
- .build_on_fedora
|
|
variables:
|
|
MESON_OPTIONS: >-
|
|
-Ddocs=enabled
|
|
-Dinstalled_tests=enabled
|
|
-Dsystemd-system-service=enabled
|
|
-Dbluez5-backend-hsphfpd=enabled
|
|
-Daudiotestsrc=enabled
|
|
-Dtest=enabled
|
|
-Dvideotestsrc=enabled
|
|
-Dvolume=enabled
|
|
-Dvulkan=enabled
|
|
-Dsdl2=enabled
|
|
-Dsndfile=enabled
|
|
-Dsession-managers=[]
|
|
artifacts:
|
|
name: pipewire-$CI_COMMIT_SHA
|
|
when: always
|
|
paths:
|
|
- build-*/meson-logs
|
|
- prefix-*
|
|
|
|
build_on_alpine:
|
|
extends:
|
|
- .alpine
|
|
- .not_coverity
|
|
- .fdo.distribution-image@alpine
|
|
- .build
|
|
stage: build
|
|
variables:
|
|
MESON_OPTIONS: "-Dsession-managers=[]"
|
|
|
|
# build with all auto() options enabled
|
|
build_all:
|
|
extends:
|
|
- .build_on_fedora
|
|
variables:
|
|
# Fedora doesn't have libfreeaptx, lc3plus, lc3, or roc
|
|
# libcamera has no stable API, so let's not chase that target
|
|
MESON_OPTIONS: >-
|
|
-Dauto_features=enabled
|
|
-Dbluez5-codec-aptx=disabled
|
|
-Dbluez5-codec-lc3plus=disabled
|
|
-Dbluez5-codec-lc3=disabled
|
|
-Droc=disabled
|
|
-Dlibcamera=disabled
|
|
-Dsession-managers=[]
|
|
-Dc_args=['-UFASTPATH']
|
|
-Dcpp_args=['-UFASTPATH']
|
|
parallel:
|
|
matrix:
|
|
- CC: [gcc, clang]
|
|
|
|
# build with all options on auto() or their default values
|
|
build_with_no_commandline_options:
|
|
extends:
|
|
- .build_on_fedora
|
|
variables:
|
|
MESON_OPTIONS: "-Dsession-managers=[]"
|
|
parallel:
|
|
matrix:
|
|
- CC: [gcc, clang]
|
|
|
|
# build with a set of options enabled or disabled
|
|
build_with_custom_options:
|
|
extends:
|
|
- .build_on_fedora
|
|
parallel:
|
|
matrix:
|
|
- MESON_OPTION: [docs, installed_tests, systemd-system-service, bluez5-backend-hsphfpd,
|
|
audiotestsrc, test, videotestsrc, volume, vulkan, sdl2, sndfile]
|
|
MESON_OPTION_VALUE: [enabled, disabled]
|
|
script:
|
|
- echo "Building with -D$MESON_OPTION=$MESON_OPTION_VALUE"
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX" "-D$MESON_OPTION=$MESON_OPTION_VALUE" -Dsession-managers=[]
|
|
- meson compile -C "$BUILD_DIR" $COMPILE_ARGS
|
|
- meson test -C "$BUILD_DIR" --no-rebuild
|
|
|
|
build_with_asan_ubsan:
|
|
extends:
|
|
- .build_on_fedora
|
|
script:
|
|
- echo "Building with ASan and UBSan"
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX" -D debug=true -D optimization=g -D b_sanitize=address,undefined -D session-managers=[]
|
|
- meson compile -C "$BUILD_DIR" $COMPILE_ARGS
|
|
- env UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 meson test -C "$BUILD_DIR" --no-rebuild
|
|
|
|
# A release build with NDEBUG, all options on auto() but tests explicitly
|
|
# enabled. This should show issues with tests failing due to different
|
|
# optimization or relying on assert.
|
|
build_release:
|
|
extends:
|
|
- .build_on_fedora
|
|
variables:
|
|
MESON_OPTIONS: "-Dtest=enabled -Dbuildtype=release -Db_ndebug=true -Dsession-managers=[]"
|
|
parallel:
|
|
matrix:
|
|
- CC: [gcc, clang]
|
|
|
|
build_session_managers:
|
|
extends:
|
|
- .build_on_fedora
|
|
script:
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX" $MESON_OPTIONS
|
|
- meson compile -C "$BUILD_DIR" $COMPILE_ARGS
|
|
- meson install -C "$BUILD_DIR" --no-rebuild
|
|
variables:
|
|
MESON_OPTIONS: "-Dsession-managers=$SESSION_MANAGERS"
|
|
parallel:
|
|
matrix:
|
|
- SESSION_MANAGERS: ["[]", "wireplumber", "media-session", "media-session,wireplumber", "wireplumber,media-session" ]
|
|
allow_failure: true
|
|
|
|
build_meson_prerelease:
|
|
extends:
|
|
- .build_on_fedora
|
|
script:
|
|
- dnf remove --assumeyes meson
|
|
- pip3 install --upgrade --pre meson
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX" $MESON_OPTIONS
|
|
- meson compile -C "$BUILD_DIR" $COMPILE_ARGS
|
|
- meson install -C "$BUILD_DIR" --no-rebuild
|
|
variables:
|
|
MESON_OPTIONS: "-Dsession-managers=wireplumber,media-session"
|
|
allow_failure: true
|
|
|
|
build_meson_exact_release:
|
|
extends:
|
|
- .build_on_fedora
|
|
script:
|
|
- meson_version=$(head -n 5 meson.build | grep 'meson_version' | sed -e 's/.*\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/')
|
|
- echo "Requiring meson version $meson_version"
|
|
- test -n "$meson_version" || (echo "Meson version parser failed" && exit 1)
|
|
- dnf remove --assumeyes meson
|
|
# - pip3 uninstall --yes meson
|
|
- pip3 install "meson==$meson_version"
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX" $MESON_OPTIONS
|
|
- meson compile -C "$BUILD_DIR" $COMPILE_ARGS
|
|
- meson install -C "$BUILD_DIR" --no-rebuild
|
|
variables:
|
|
MESON_OPTIONS: "-Dsession-managers=[]"
|
|
|
|
valgrind:
|
|
extends:
|
|
- .build_on_fedora
|
|
script:
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX" $MESON_OPTIONS
|
|
- meson test -C "$BUILD_DIR" --setup=valgrind
|
|
variables:
|
|
MESON_OPTIONS: "-Dsession-managers=[]"
|
|
|
|
build_with_coverity:
|
|
extends:
|
|
- .fedora
|
|
- .coverity
|
|
- .fdo.suffixed-image@fedora
|
|
- .build
|
|
stage: analysis
|
|
script:
|
|
- export PATH=/opt/coverity/bin:$PATH
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX"
|
|
-Ddocs=disabled
|
|
-Dbluez5-backend-hsphfpd=enabled
|
|
-Daudiotestsrc=enabled
|
|
-Dtest=enabled
|
|
-Dvideotestsrc=enabled
|
|
-Dvolume=enabled
|
|
-Dvulkan=enabled
|
|
-Dsdl2=enabled
|
|
-Dsndfile=enabled
|
|
-Dsession-managers=[]
|
|
- cov-configure --config coverity_conf.xml
|
|
--comptype gcc --compiler cc --template
|
|
--xml-option=append_arg@C:--ppp_translator
|
|
--xml-option=append_arg@C:"replace/_sd_deprecated_\s+=/ ="
|
|
--xml-option=append_arg@C:--ppp_translator
|
|
--xml-option=append_arg@C:"replace/GLIB_(DEPRECATED|AVAILABLE)_ENUMERATOR_IN_\d_\d\d(_FOR\(\w+\)|)\s+=/ ="
|
|
--xml-option=append_arg@C:--ppp_translator
|
|
--xml-option=append_arg@C:"replace/(__has_builtin|_GLIBCXX_HAS_BUILTIN)\(\w+\)/1"
|
|
- cov-build --dir cov-int --config coverity_conf.xml meson compile -C "$BUILD_DIR" $COMPILE_ARGS
|
|
- tar czf cov-int.tar.gz cov-int
|
|
- curl https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME
|
|
--form token=$COVERITY_SCAN_TOKEN --form email=$GITLAB_USER_EMAIL
|
|
--form file=@cov-int.tar.gz --form version="`git describe --tags`"
|
|
--form description="`git describe --tags` / $CI_COMMIT_TITLE / $CI_COMMIT_REF_NAME:$CI_PIPELINE_ID "
|
|
artifacts:
|
|
name: pipewire-coverity-$CI_COMMIT_SHA
|
|
when: always
|
|
paths:
|
|
- build-*/meson-logs
|
|
- cov-int/build-log.txt
|
|
|
|
shellcheck:
|
|
extends:
|
|
- .build_on_fedora
|
|
stage: analysis
|
|
variables:
|
|
MESON_OPTIONS: >-
|
|
-Dpipewire-v4l2=enabled
|
|
-Dpipewire-jack=enabled
|
|
script:
|
|
- echo "Configuring with meson options $MESON_OPTIONS"
|
|
- meson setup "$BUILD_DIR" --prefix="$PREFIX" $MESON_OPTIONS
|
|
- shellcheck $(git ls-files '*.sh')
|
|
- shellcheck $(grep -rl "#\!/.*bin/.*sh" "$BUILD_DIR")
|
|
|
|
spellcheck:
|
|
extends:
|
|
- .build_on_fedora
|
|
stage: analysis
|
|
script:
|
|
- git ls-files | grep -v .gitlab-ci.yml | xargs -d '\n' sed -i 's/Pipewire/PipeWire/g'
|
|
- git diff --exit-code || (echo "Please fix the above spelling mistakes" && exit 1)
|
|
|
|
doccheck:
|
|
extends:
|
|
- .build_on_fedora
|
|
stage: analysis
|
|
script:
|
|
# Check that each pipewire module has a \subpage entry
|
|
- git grep -h -o -e "\\\page page_module_\w\+" | cut -f2 -d' ' > pipewire_module_pages
|
|
- cat pipewire_module_pages
|
|
- |
|
|
for page in $(cat pipewire_module_pages); do
|
|
git grep -q -e "\\\subpage $page" || (echo "\\page $page is missing \\subpage entry in doc/pipewire-modules.dox" && false)
|
|
done
|
|
|
|
check_missing_headers:
|
|
extends:
|
|
- .fedora
|
|
- .not_coverity
|
|
- .fdo.distribution-image@fedora
|
|
stage: analysis
|
|
dependencies:
|
|
- build_on_fedora
|
|
script:
|
|
- export PREFIX=`find -name prefix-*`
|
|
- ./.gitlab/ci/check_missing_headers.sh
|
|
|
|
pages:
|
|
extends:
|
|
- .not_coverity
|
|
stage: pages
|
|
dependencies:
|
|
- build_on_fedora
|
|
script:
|
|
- mkdir public
|
|
- cp -R prefix-*/share/doc/pipewire/html/* public/
|
|
artifacts:
|
|
paths:
|
|
- public
|
|
only:
|
|
- master
|