mirror of
https://gitlab.freedesktop.org/pipewire/pipewire
synced 2024-11-05 16:26:16 +00:00
43db03909b
Change the shellcheck job so that we configure the build and check the preprocessed versions of the scripts, not the bare ones, which might not be syntactically valid yet.
517 lines
14 KiB
YAML
517 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-05-31.0'
|
|
FDO_DISTRIBUTION_VERSION: '37'
|
|
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
|
|
# 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
|
|
- 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
|