diff options
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r-- | .gitlab-ci.yml | 477 |
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 |