mirror of
https://gitlab.freedesktop.org/pipewire/pipewire
synced 2024-09-20 16:31:34 +00:00
6bd1bec2a4
This should catch any potential issues with conflicting options, missing libraries, etc. We need to disable aptx and roc because Fedora doesn't ship those libraries, and we disable libcamera because it's a moving target and shouldn't hold up the pipeline.
395 lines
11 KiB
YAML
395 lines
11 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'
|
|
|
|
.fedora:
|
|
variables:
|
|
# Update this tag when you want to trigger a rebuild
|
|
FDO_DISTRIBUTION_TAG: '2022-01-28.0'
|
|
FDO_DISTRIBUTION_VERSION: '35'
|
|
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
|
|
libcanberra-devel
|
|
libldac-devel
|
|
libsndfile-devel
|
|
libusb-devel
|
|
lilv-devel
|
|
libv4l-devel
|
|
libva-devel
|
|
libX11-devel
|
|
openssl-devel
|
|
pulseaudio-libs-devel
|
|
python3-docutils
|
|
sbc-devel
|
|
ShellCheck
|
|
SDL2-devel
|
|
systemd-devel
|
|
vulkan-loader-devel
|
|
webrtc-audio-processing-devel
|
|
which
|
|
valgrind
|
|
ninja-build
|
|
pkgconf
|
|
python3-pip
|
|
FDO_DISTRIBUTION_EXEC: >-
|
|
pip3 install meson
|
|
|
|
.ubuntu:
|
|
variables:
|
|
# Update this tag when you want to trigger a rebuild
|
|
FDO_DISTRIBUTION_TAG: '2022-01-27.0'
|
|
FDO_DISTRIBUTION_VERSION: '20.04'
|
|
FDO_DISTRIBUTION_PACKAGES: >-
|
|
debhelper-compat
|
|
findutils
|
|
git
|
|
libasound2-dev
|
|
libavcodec-dev
|
|
libavfilter-dev
|
|
libavformat-dev
|
|
libdbus-1-dev
|
|
libglib2.0-dev
|
|
libgstreamer1.0-dev
|
|
libgstreamer-plugins-base1.0-dev
|
|
libsbc-dev
|
|
libsdl2-dev
|
|
libudev-dev
|
|
libva-dev
|
|
libv4l-dev
|
|
libx11-dev
|
|
ninja-build
|
|
pkg-config
|
|
python3-docutils
|
|
systemd
|
|
python3-pip
|
|
FDO_DISTRIBUTION_EXEC: >-
|
|
pip3 install meson
|
|
|
|
.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/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
|
|
NINJA_ARGS="-j$FDO_CI_CONCURRENT $NINJA_ARGS"
|
|
export NINJA_ARGS
|
|
fi
|
|
script:
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson "$BUILD_DIR" . --prefix="$PREFIX" $MESON_OPTIONS
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR"
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR" test
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR" install
|
|
- ./check_missing_headers.sh
|
|
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_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
|
|
|
|
.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
|
|
artifacts:
|
|
name: pipewire-$CI_COMMIT_SHA
|
|
when: always
|
|
paths:
|
|
- build-*/meson-logs
|
|
- prefix-*
|
|
|
|
# build with all auto() options enabled
|
|
build_all:
|
|
extends:
|
|
- .build_on_fedora
|
|
variables:
|
|
# Fedora doesn't have libfreeaptx or roc
|
|
# libcamera has no stable API, so let's not chase that target
|
|
MESON_OPTIONS: "-Dauto_features=enabled -Dbluez5-codec-aptx=disabled -Droc=disabled -Dlibcamera=disabled"
|
|
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: ""
|
|
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 "$BUILD_DIR" . --prefix="$PREFIX" "-D$MESON_OPTION=$MESON_OPTION_VALUE"
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR"
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR" test
|
|
|
|
# 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"
|
|
parallel:
|
|
matrix:
|
|
- CC: [gcc, clang]
|
|
|
|
build_session_managers:
|
|
extends:
|
|
- .build_on_fedora
|
|
script:
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson "$BUILD_DIR" . --prefix="$PREFIX" $MESON_OPTIONS
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR"
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR" install
|
|
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:
|
|
- pip3 install --upgrade --pre meson
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson "$BUILD_DIR" . --prefix="$PREFIX" $MESON_OPTIONS
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR"
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR" install
|
|
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)
|
|
- pip3 uninstall --yes meson
|
|
- pip3 install "meson==$meson_version"
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson "$BUILD_DIR" . --prefix="$PREFIX" $MESON_OPTIONS
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR"
|
|
- ninja $NINJA_ARGS -C "$BUILD_DIR" install
|
|
variables:
|
|
MESON_OPTIONS: "-Dsession-managers=[]"
|
|
|
|
valgrind:
|
|
extends:
|
|
- .build_on_fedora
|
|
script:
|
|
- echo "Building with meson options $MESON_OPTIONS"
|
|
- meson "$BUILD_DIR" . --prefix="$PREFIX" $MESON_OPTIONS
|
|
- meson test -C "$BUILD_DIR" --setup=valgrind
|
|
|
|
build_with_coverity:
|
|
extends:
|
|
- .fedora
|
|
- .coverity
|
|
- .fdo.suffixed-image@fedora
|
|
- .build
|
|
stage: analysis
|
|
script:
|
|
- export PATH=/opt/coverity/bin:$PATH
|
|
- meson "$BUILD_DIR" . --prefix="$PREFIX"
|
|
-Ddocs=disabled
|
|
-Dbluez5-backend-hsphfpd=enabled
|
|
-Daudiotestsrc=enabled
|
|
-Dtest=enabled
|
|
-Dvideotestsrc=enabled
|
|
-Dvolume=enabled
|
|
-Dvulkan=enabled
|
|
-Dsdl2=enabled
|
|
-Dsndfile=enabled
|
|
- 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 ninja $NINJA_ARGS -C "$BUILD_DIR"
|
|
- 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
|
|
script:
|
|
- shellcheck $(git grep -l "#\!/.*bin/.*sh")
|
|
|
|
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
|
|
|
|
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
|