summaryrefslogtreecommitdiffstats
path: root/.gitlab-ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r--.gitlab-ci.yml477
1 files changed, 477 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..2ab6a08
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,477 @@
+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: '2022-11-07.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
+ ModemManager-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
+ pulseaudio-utils
+ openal-soft
+ readline-devel
+ 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
+
+.alpine:
+ variables:
+ # Update this tag when you want to trigger a rebuild
+ FDO_DISTRIBUTION_TAG: '2022-09-07.0'
+ FDO_DISTRIBUTION_VERSION: '3.15'
+ 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
+ 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
+ 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=[]
+ 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 "$BUILD_DIR" . --prefix="$PREFIX" "-D$MESON_OPTION=$MESON_OPTION_VALUE" -Dsession-managers=[]
+ - 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 -Dsession-managers=[]"
+ 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
+ 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 "$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 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
+
+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