include: - project: 'freedesktop/ci-templates' ref: 185ede0e9b9b1924b92306ab8b882a6294e92613 file: '/templates/fedora.yml' - project: 'freedesktop/ci-templates' ref: 185ede0e9b9b1924b92306ab8b882a6294e92613 file: '/templates/debian.yml' ### # IMPORTANT # These are the version tags for the docker images the CI runs against. # If you are hacking on them or need a them to rebuild, you need to change # the appropriate version string in this file which will cause a rebuild. ### - local: '.gitlab-image-tags.yml' stages: - 'preparation' - 'build' - 'test' # Use the resulting binaries - 'integrate' variables: GIT_DEPTH: 1 # Branch to track for modules that have no ref specified in the manifest GST_UPSTREAM_BRANCH: 'main' FDO_UPSTREAM_REPO: 'gstreamer/gstreamer' MESON_COMMIT: description: "Overwrite the meson version installed on the CI images with the specified meson commit" value: "" FEDORA_AMD64_SUFFIX: 'amd64/fedora' INDENT_AMD64_SUFFIX: 'amd64/gst-indent' COMMITLINT_AMD64_SUFFIX: 'amd64/commitlint' WINDOWS_AMD64_SUFFIX: 'amd64/windows' WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" DEFAULT_MESON_ARGS: >- -Dlibnice:tests=disabled -Dlibnice:examples=disabled -Dlibnice:gupnp=disabled -Dopenh264:tests=disabled -Dpygobject:tests=false -Dpython=enabled -Dlibav=enabled -Dugly=enabled -Dbad=enabled -Ddevtools=enabled -Dges=enabled -Drtsp_server=enabled -Dvaapi=enabled -Dsharp=disabled -Drs=disabled -Dgpl=enabled -Dintrospection=enabled SIMPLE_BUILD: >- ${DEFAULT_MESON_ARGS} -Dsharp=enabled -Ddoc=disabled workflow: # https://docs.gitlab.com/ee/ci/yaml/index.html#switch-between-branch-pipelines-and-merge-request-pipelines rules: - if: $CI_PIPELINE_SOURCE == "schedule" variables: GIT_FETCH_EXTRA_FLAGS: '--no-tags' - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' variables: GIT_FETCH_EXTRA_FLAGS: '--no-tags' - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" when: never - if: '$CI_COMMIT_TAG' - if: '$CI_COMMIT_BRANCH' variables: GIT_FETCH_EXTRA_FLAGS: '--no-tags' # # Global CI policy # # This can be used to configure global behaviour our our jobs. # default: retry: max: 2 when: - 'runner_system_failure' - 'stuck_or_timeout_failure' - 'scheduler_failure' - 'api_failure' interruptible: true # This is an empty job that is used to trigger the pipeline. trigger: image: alpine:latest stage: 'preparation' variables: GIT_STRATEGY: none tags: [ 'placeholder-job' ] script: - echo "Trigger job done, now running the pipeline." rules: # If this pipeline is triggered by a schedule, run automatically - if: $CI_PIPELINE_SOURCE == "schedule" # If the MR is assigned to the Merge bot, trigger the pipeline automatically - if: '$CI_MERGE_REQUEST_ASSIGNEES == "gstreamer-merge-bot"' # Require explicit action to trigger tests post merge, but we want to # automatically trigger the integratation stage - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH && $CI_JOB_STAGE != "integrate"' when: 'manual' # When the assignee isn't the merge bot, require an explicit action to trigger the pipeline # to avoid wasting CI resources - if: '$CI_MERGE_REQUEST_ASSIGNEES != "gstreamer-merge-bot"' when: 'manual' allow_failure: false .fedora image: variables: FDO_BASE_IMAGE: 'registry.fedoraproject.org/fedora-toolbox:34' FDO_DISTRIBUTION_VERSION: '34' FDO_REPO_SUFFIX: "$FEDORA_AMD64_SUFFIX" FDO_DISTRIBUTION_TAG: "$FEDORA_TAG-$GST_UPSTREAM_BRANCH" FDO_DISTRIBUTION_EXEC: 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/fedora/prepare.sh' fedora amd64 docker: extends: - '.fedora image' - '.fdo.container-build@fedora' stage: 'preparation' needs: [] tags: - 'packet.net' .gst-indent image: tags: [ 'placeholder-job' ] variables: FDO_DISTRIBUTION_VERSION: 'bookworm' FDO_REPO_SUFFIX: "$INDENT_AMD64_SUFFIX" FDO_DISTRIBUTION_TAG: "$INDENT_TAG-$GST_UPSTREAM_BRANCH" FDO_DISTRIBUTION_PACKAGES: 'curl indent git findutils ca-certificates' FDO_DISTRIBUTION_EXEC: 'ci/docker/indent/prepare.sh' gst-indent amd64 docker: extends: - '.gst-indent image' - '.fdo.container-build@debian' stage: 'preparation' # Do not depend on the trigger, as we want to run indent always needs: [] .commitlint image: tags: [ 'placeholder-job' ] variables: FDO_DISTRIBUTION_VERSION: '37' FDO_REPO_SUFFIX: "$COMMITLINT_AMD64_SUFFIX" FDO_DISTRIBUTION_TAG: "$LINT_TAG-$GST_UPSTREAM_BRANCH" FDO_DISTRIBUTION_PACKAGES: 'python3-pip git' FDO_DISTRIBUTION_EXEC: 'ci/docker/lint/prepare.sh' commitlint docker: extends: - '.commitlint image' - '.fdo.container-build@fedora' stage: 'preparation' # Do not depend on the trigger, as we want to run indent always needs: [] windows amd64 docker: stage: "preparation" timeout: '3h' variables: # Unlike the buildah/linux jobs, this file # needs to be relative to docker/windows/ subdir # as it makes life easier in the powershell script # # We also don't need a CONTEXT_DIR var as its also # hardcoded to be docker/windows/ DOCKERFILE: "ci/docker/windows/Dockerfile" tags: - windows - shell - "2022" script: # We need to pass an array and to resolve the env vars, so we can't use a variable: - $DOCKER_BUILD_ARGS = @(` "--build-arg", "DEFAULT_BRANCH=$GST_UPSTREAM_BRANCH", ` "--build-arg", "CI_PROJECT_NAMESPACE=$CI_PROJECT_NAMESPACE", ` "--build-arg", "CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME" ` ) - ci/docker/windows/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE .macos image: image: "registry.freedesktop.org/gstreamer/gstreamer/macos-arm64/14-sonoma:2023-10-25.0" tags: - gst-mac-arm # ---- Preparation ----- # # # gst-indent!! # gst indent: extends: - '.gst-indent image' - '.fdo.suffixed-image@debian' stage: 'preparation' needs: - job: 'gst-indent amd64 docker' artifacts: false script: - ./scripts/check-format-c - ./scripts/format-csharp --check rules: - !reference [.upstream-branch-rules, rules] - if: '$CI_PROJECT_NAMESPACE != "gstreamer" || $CI_COMMIT_BRANCH != $GST_UPSTREAM_BRANCH' when: 'always' rustfmt: extends: - '.fedora image' - '.fdo.suffixed-image@fedora' stage: 'preparation' needs: - "fedora amd64 docker" script: - export RUSTUP_HOME="/usr/local/rustup" - export PATH="/usr/local/cargo/bin:$PATH" - ./scripts/format-rust --check commitlint: extends: - '.commitlint image' - '.fdo.suffixed-image@fedora' stage: 'preparation' variables: GIT_STRATEGY: fetch GIT_DEPTH: 100 needs: - job: 'commitlint docker' artifacts: false script: - echo $CI_MERGE_REQUEST_DIFF_BASE_SHA - gitlint --commits $CI_MERGE_REQUEST_DIFF_BASE_SHA..HEAD rules: # Only run on MR as we need CI_MERGE_REQUEST_DIFF_BASE_SHA to know # what commits to check - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' # # build setup templates # # Expects: # BUILD_TYPE: Proxy of meson's --default-library arg # must be 'shared' or 'static' or 'both' # BUILD_GST_DEBUG: Build with gst debug symbols or not # must be a string like this: -Dgstreamer:gst_debug=true. # GST_WERROR: make warning fatal or not # must be a string of a boolean, "true" or "false". Not yaml bool. # SUBPROJECTS_CACHE_DIR: The location in the image of the subprojects cache # HAVE_CCACHE: whether we have ccache available # must be a string of a boolean, "true" or "false". Not yaml bool. .build_template: &build - export RUSTUP_HOME="/usr/local/rustup" - export CARGO_HOME="/usr/local/cargo" - export PATH="/usr/local/cargo/bin:$PATH" - date -R - ci/scripts/handle-subprojects-cache.py --cache-dir /subprojects subprojects/ - date -R - export ARGS="${BUILD_TYPE:---default-library=both} ${BUILD_GST_DEBUG:--Dgstreamer:gst_debug=true} ${MESON_ARGS}" - echo $GST_WERROR - |- if [ "$GST_WERROR" = "true" ]; then export ARGS="$ARGS --native-file ./ci/meson/gst-werror.ini" fi - echo $ARGS - date -R - meson setup build/ $(echo ${ARGS}) - date -R - ninja -C build/ - date -R - test "x$HAVE_CCACHE" = "xtrue" && ccache --show-stats .build_ccache_vars: variables: HAVE_CCACHE: 'true' CCACHE_COMPILERCHECK: 'content' CCACHE_COMPRESS: 'true' CCACHE_BASEDIR: '/cache/gstreamer/gstreamer' CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache/' # shared across everything really CCACHE_MAXSIZE: '10G' CARGO_HOME: '/cache/gstreamer/cargo' .base_modules_changes: &modules_changes - .gitlab-ci.yml - .gitlab-image-tags.yml - gst-env.py - ci/gitlab/*.py - meson.build - subprojects/*.wrap - subprojects/gst-devtools/**/* - subprojects/gst-editing-services/**/* - subprojects/gst-integration-testsuites/**/* - subprojects/gst-libav/**/* - subprojects/gst-plugins-bad/**/* - subprojects/gst-plugins-base/**/* - subprojects/gst-plugins-good/**/* - subprojects/gst-plugins-ugly/**/* - subprojects/gst-python/**/* - subprojects/gstreamer/**/* - subprojects/gstreamer-sharp/**/* - subprojects/gst-rtsp-server/**/* .upstream-branch-rules: rules: # If this matches, it means the pipeline is running against either the main # or a stable branch, so make it manual - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' when: manual .build: stage: 'build' needs: - "trigger" # Taking into account the slowest shared runner + time needed to upload the binaries to artifacts # Also need to take into account I/O of pulling docker images and uploading artifacts timeout: '45min' variables: BUILD_GST_DEBUG: "-Dgstreamer:gst_debug=true" GST_WERROR: "true" MESON_ARGS: "${DEFAULT_MESON_ARGS}" SUBPROJECTS_CACHE_DIR: "/subprojects" script: - *build - ./gst-env.py gst-inspect-1.0 --version - ./gst-env.py gst-inspect-1.0 after_script: - mv build/meson-logs/ meson-logs artifacts: expire_in: "7 days" when: "always" paths: - 'meson-logs/' rules: - !reference [.upstream-branch-rules, rules] - changes: *modules_changes - changes: - subprojects/gstreamer-vaapi/**/* .build fedora x86_64: extends: - '.fedora image' - '.fdo.suffixed-image@fedora' - '.build' - '.build_ccache_vars' needs: - "trigger" - "fedora amd64 docker" variables: GST_WERROR: "true" MESON_ARGS: "${SIMPLE_BUILD}" SUBPROJECTS_CACHE_DIR: "/subprojects" script: - *build - ./gst-env.py gst-inspect-1.0 --version - ./gst-env.py gst-inspect-1.0 - meson install --destdir $CI_PROJECT_DIR/destdir -C build - rm -rf $CI_PROJECT_DIR/destdir build fedora gcc: extends: '.build fedora x86_64' variables: CC: 'ccache gcc' CXX: 'ccache g++' parallel: matrix: - BUILD_TYPE: [ "--default-library=shared", "--default-library=both"] BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true", "-Dgstreamer:gst_debug=false"] - BUILD_TYPE: ["--default-library=static"] BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true", "-Dgstreamer:gst_debug=false"] # Passing Dpython=enabled prohibits us from -Dgst-editing-services:python=disabled which we # currently need to statically build ges. # # subprojects/gst-editing-services/meson.build:153:4: ERROR: Problem encountered: Want to build python based modules but it is not supported while static building # https://github.com/mesonbuild/meson/issues/5214 # https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4281?commit_id=d1a687b61d8fbc5ae35b4bb62aa7fd1d091818f2#note_1875699 # # VAAPI can't be build statically yet # subprojects/gstreamer-vaapi/meson.build:8:2: ERROR: Problem encountered: GStreamer-VAAPI plugin not supported with `static` builds yet. # # Disabling gstreamer-sharp tests because they download things as part of configure with # nuget which frequently fails on the CI (possibly because we're hammering the site) MESON_ARGS: "${DEFAULT_MESON_ARGS} -Dvaapi=disabled -Dpython=auto -Dgst-editing-services:python=disabled -Dintrospection=disabled -Ddoc=disabled -Dgstreamer-sharp:tests=disabled" build fedora clang: extends: '.build fedora x86_64' variables: CC: 'ccache clang' CXX: 'ccache clang++' parallel: matrix: - BUILD_TYPE: [ "--default-library=shared", "--default-library=both"] BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true"] MESON_ARGS: >- ${SIMPLE_BUILD} --force-fallback-for=glib - BUILD_TYPE: [ "--default-library=shared", "--default-library=both"] BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=false"] # FIXME: # clang complains about the gir files when gst_debug is false: # We can merge the two parallel: matrix after # # [1352/5496] Generating subprojects/gstreamer/gst/Gst-1.0.gir with a custom command # ../subprojects/gstreamer/gst/gstchildproxy.h:57: Error: Gst: identifier not found on the first line: # * GstChildProxyInterface.get_child_by_name: # ^ MESON_ARGS: >- ${SIMPLE_BUILD} -Dintrospection=disabled -Dpython=disabled --force-fallback-for=glib - BUILD_TYPE: ["--default-library=static"] BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true", "-Dgstreamer:gst_debug=false"] # VAAPI can't be build statically yet # subprojects/gstreamer-vaapi/meson.build:8:2: ERROR: Problem encountered: GStreamer-VAAPI plugin not supported with `static` builds yet. # # Disabling gstreamer-sharp tests because they download things as part of configure with # nuget which frequently fails on the CI (possibly because we're hammering the site) MESON_ARGS: >- ${DEFAULT_MESON_ARGS} -Dvaapi=disabled -Dintrospection=disabled -Dpython=disabled -Ddoc=disabled -Dgstreamer-sharp:tests=disabled --force-fallback-for=glib .build windows: image: $WINDOWS_IMAGE stage: 'build' tags: - 'docker' - 'windows' - '2022' needs: - "trigger" - "windows amd64 docker" timeout: '90m' variables: MESON_ARGS: >- ${DEFAULT_MESON_ARGS} -Dlibav=disabled -Dvaapi=disabled -Dgst-plugins-base:pango=enabled -Dgst-plugins-good:cairo=enabled -Dgst-plugins-good:soup=enabled -Dgst-plugins-good:soup-lookup-dep=true -Dgst-plugins-bad:d3d11-wgc=enabled rules: - !reference [.upstream-branch-rules, rules] - changes: *modules_changes - changes: - subprojects/win-*/* script: # Make sure powershell exits on errors # https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6 - $ErrorActionPreference = "Stop" # Set the code page to UTF-8 - chcp 65001 # Renormalize line endings - git add --renormalize subprojects/packagefiles - $env:PYTHONUNBUFFERED = '1' - ci/scripts/handle-subprojects-cache.py --cache-dir /subprojects subprojects/ - $env:PYTHONUNBUFFERED = '' - echo $env:MESON_ARGS # We do not pick up any deps with cmake, so speed up dependency checks - $env:CMAKE = 'false' artifacts: expire_in: "7 days" when: "always" paths: - 'build/meson-logs/' build vs2022 amd64: extends: '.build windows' script: - !reference [".build windows", "script"] - meson setup --vsenv build $env:MESON_ARGS - meson compile -C build - .\gst-env.py gst-inspect-1.0.exe --version - .\gst-env.py gst-inspect-1.0.exe - mkdir destdir - meson install -C build --destdir installdir - Remove-Item -Recurse -Force build\installdir variables: # FIXME: https://github.com/mesonbuild/meson/pull/11007 PKG_CONFIG: ${CI_PROJECT_DIR}/subprojects/win-pkgconfig/pkg-config.exe .build windows cross: extends: '.build windows' script: - !reference [".build windows", "script"] # Setting up a cross build with MSVC is still non-trivial because # the --vsenv argument cannot be used to set it up - echo $env:MESON_CROSS_ARGS - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && meson setup build $env:MESON_ARGS $env:MESON_CROSS_ARGS && meson compile -C build " build vs2022 x86: extends: '.build windows cross' variables: ARCH: 'x86' # Installed python is 64 bits instead of 32 bits MESON_CROSS_ARGS: > -Dpython=disabled -Dintrospection=disabled build vs2022 arm64: extends: '.build windows cross' rules: - when: 'manual' allow_failure: true variables: ARCH: 'arm64' # pango pulls in cairo which pulls in pixman which doesn't build because of # https://github.com/mesonbuild/meson/issues/9889 # libsoup requires glib-compile-resources, which isn't available in a cross # build MESON_CROSS_ARGS: >- -Dgst-plugins-base:pango=disabled -Dgst-plugins-good:cairo=disabled -Dgst-plugins-good:soup-lookup-dep=false -Dgst-devtools:cairo=disabled -Dpython=disabled -Dintrospection=disabled --cross-file ci/meson/vs2022-paths.ini --cross-file ci/meson/vs2022-arm64-cross.ini --native-file ci/meson/vs2022-paths.ini --native-file ci/meson/vs2022-x64-native.ini build msys2: extends: '.build windows' script: - !reference [".build windows", "script"] # Replace backslashes with forward so bash doesn't complain - $env:CI_PROJECT_DIR = $env:CI_PROJECT_DIR.replace('\','/') # Windows Graphics Capture currently requires Visual Studio - $env:MESON_ARGS = $env:MESON_ARGS.replace('-Dgst-plugins-bad:d3d11-wgc=enabled','') + ' -Dpython=disabled -Dintrospection=disabled' # Configure MSYS2 to use the UCRT64 environment, start in the same directory # and inherit PATH - C:\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here -use-full-path -lc "meson setup build $env:MESON_ARGS && meson compile -C build" build macos: extends: - '.build' - '.macos image' variables: # gst-libav/ffmpeg throws Wundef errors GST_WERROR: "false" MESON_ARGS: "${DEFAULT_MESON_ARGS}" SUBPROJECTS_CACHE_DIR: "/Users/gst-ci/subprojects" rules: - !reference [.upstream-branch-rules, rules] - changes: *modules_changes - changes: - subprojects/macos-*/* parallel: matrix: - BUILD_TYPE: ["--default-library=both"] BUILD_GST_DEBUG: ["-Dgstreamer:gst_debug=true"] # FIXME: We currently don't have pkg-config required by gobject-introspection/pygobject/sharp # macos doesn't support vaapi MESON_ARGS: >- ${SIMPLE_BUILD} -Dintrospection=disabled -Dvaapi=disabled -Dsharp=disabled -Dpython=disabled -Ddoc=disabled -Dgst-plugins-base:pango=enabled -Dgst-plugins-good:cairo=enabled -Dgst-plugins-good:soup=enabled -Dgst-plugins-good:soup-lookup-dep=true # ---- Tests ----- # .test: stage: 'test' extends: - '.build_ccache_vars' needs: - "trigger" variables: GST_WERROR: "true" MESON_ARGS: "${SIMPLE_BUILD}" SUBPROJECTS_CACHE_DIR: "/subprojects" # Disable colored output to avoid weird rendering issues GST_DEBUG_NO_COLOR: "true" CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/validate-logs/" GST_VALIDATE_LAUNCHER_FORCE_COLORS: "true" TIMEOUT_FACTOR: "2" CARGO_HOME: "/cache/gstreamer/cargo" # Enable the fault handler so we get backtraces on segfaults. # any non-empty string will do PYTHONFAULTHANDLER: "enabled" rules: - changes: *modules_changes script: - *build - export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)" - echo "-> Running ${TEST_SUITE}" - > ./gst-env.py gst-validate-launcher ${TEST_SUITE} --check-bugs --dump-on-failure --mute --shuffle --no-display --meson-no-rebuild --timeout-factor "${TIMEOUT_FACTOR}" --fail-on-testlist-change -l "${CI_PROJECT_DIR}/validate-logs/" --xunit-file "${CI_PROJECT_DIR}/validate-logs/xunit.xml" ${EXTRA_VALIDATE_ARGS} after_script: - mv build/meson-logs/ meson-logs artifacts: expire_in: '14 days' when: always paths: - 'meson-logs/' - 'validate-logs' reports: junit: - "validate-logs/*.xml" .test fedora x86_64: extends: - '.fedora image' - '.fdo.suffixed-image@fedora' - '.test' needs: - "trigger" - "fedora amd64 docker" tags: ['gstreamer'] check fedora: extends: '.test fedora x86_64' variables: TEST_SUITE: "check.gst*" rules: - changes: *modules_changes - changes: - subprojects/gstreamer-vaapi/**/* integration testsuites fedora: extends: '.test fedora x86_64' parallel: 8 variables: MESON_ARGS: >- ${SIMPLE_BUILD} -Dsharp=disabled -Dvaapi=disabled -Dexamples=disabled -Dgst-examples=disabled -Dtests=disabled -Dnls=disabled -Dqt5=disabled -Dgstreamer:benchmarks=disabled -Dgst-plugins-good:gtk3=disabled -Dgst-plugins-bad:microdns=disabled -Dgst-plugins-bad:avtp=disabled -Dgst-plugins-bad:opencv=disabled -Dgst-plugins-bad:webrtc=disabled EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures --parts=${CI_NODE_TOTAL} --part-index=${CI_NODE_INDEX} --sync" TEST_SUITE: "validate ges" check video formats: stage: 'test' extends: - '.fedora image' - '.fdo.suffixed-image@fedora' - '.build_ccache_vars' needs: - "trigger" - "fedora amd64 docker" tags: ['gstreamer'] variables: MESON_ARGS: "${SIMPLE_BUILD}" VIDEO_TOKEN: "GST_VIDEO_FORMATS_ALL_STR" VIDEO_HEADER: "subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h" WL_TOKEN: "GST_WL_VIDEO_FORMATS" WL_HEADER: "subprojects/gst-plugins-bad/gst-libs/gst/wayland/gstwlvideoformat.h" script: - *build - meson devenv -C build -w . ./scripts/sort_video_formats.py ${VIDEO_TOKEN} ${VIDEO_HEADER} - meson devenv -C build -w . ./scripts/sort_video_formats.py -b ${WL_TOKEN} ${WL_HEADER} rules: - changes: - ${VIDEO_HEADER} - ${WL_HEADER} playbin3 integration: extends: 'integration testsuites fedora' variables: USE_PLAYBIN3: 1 # Let's allow failures for now until we're 100% sure everything works allow_failure: true # gstreamer-full: gstreamer-full static build: extends: '.build fedora x86_64' stage: 'build' variables: BUILD_TYPE: "--default-library=static" MESON_ARGS: >- -Ddoc=disabled SUBPROJECTS_CACHE_DIR: "/subprojects" script: - *build - meson test -C build -v test-gst-full gstreamer-full-minimal static build: extends: 'gstreamer-full static build' stage: 'build' variables: BUILD_GST_DEBUG: "-Dgstreamer:gst_debug=false" GST_WERROR: "true" BUILD_TYPE: "--default-library=static" MESON_ARGS: >- -Ddoc=disabled -Dauto_features=disabled -Dgstreamer:check=enabled -Dtests=enabled -Dgst-plugins-base:alsa=enabled -Dgst-plugins-base:typefind=enabled -Dgst-plugins-base:pbtypes=enabled -Dgst-full-elements=coreelements:filesrc,fakesink,identity,input-selector -Dgst-full-typefind-functions=typefindfunctions:wav,flv -Dgst-full-device-providers=alsa:alsadeviceprovider -Dgst-full-dynamic-types=pbtypes:video_multiview_flagset SUBPROJECTS_CACHE_DIR: "/subprojects" script: - *build - meson test -C build -v test-gst-full - meson test -C build test-gst-full-features --test-args "-e filesrc,identity,fakesink -E filesink,capsfilter -t audio/x-wav -T video/vivo -d alsadeviceprovider -D v4l2deviceprovider -l GstVideoMultiviewFlagsSet" - strip build/libgstreamer-full-1.0.so - ls -l build/libgstreamer-full-1.0.so # v4l2-stateless-decoders tests fluster v4l2-stateless on visl: extends: 'gstreamer-full static build' stage: 'test' variables: BUILD_GST_DEBUG: '-Dgstreamer:gst_debug=false' GST_WERROR: "true" BUILD_TYPE: "--default-library=static" MESON_ARGS: >- -Dvirtme_kernel_image=/opt/linux/bzImage -Dauto_features=disabled -Dgstreamer:check=enabled -Ddoc=disabled -Dtests=enabled -Dtools=enabled -Dbase=enabled -Dbad=enabled -Dugly=disabled -Dlibav=disabled -Drtsp_server=disabled -Dges=disabled -Dgst-plugins-bad:debugutils=enabled -Dgst-plugins-bad:ivfparse=enabled -Dgst-plugins-bad:v4l2codecs=enabled -Dgst-plugins-bad:videoparsers=enabled -Dgst-plugins-base:app=enabled -Dgst-plugins-base:videoconvertscale=enabled -Dgst-plugins-base:typefind=enabled -Dgst-plugins-base:playback=enabled -Dgst-plugins-good:matroska=enabled SUBPROJECTS_CACHE_DIR: "/subprojects" script: - *build - meson test -C build -v --suite v4l2-stateless-decoders artifacts: reports: junit: build/fluster-results-*.xml rules: - changes: - .gitlab-ci.yml - .gitlab-image-tags.yml - subprojects/gst-plugins-bad/sys/v4l2codecs/* - subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/* - subprojects/gst-plugins-bad/gst-libs/gst/codecs/* - subprojects/gst-plugins-bad/gst/videoparsers/* - tests/virtme/* - ci/scripts/build-linux.sh - ci/docker/fedora/* # Valgrind .valgrind fedora x86_64: extends: '.test fedora x86_64' stage: 'test' variables: EXTRA_VALIDATE_ARGS: "--valgrind" rules: - changes: *modules_changes - changes: - subprojects/gstreamer-vaapi/**/* valgrind core: extends: '.valgrind fedora x86_64' variables: TEST_SUITE: "check.gstreamer\\..*" rules: - changes: - "*" - scripts/* - ci/**/* - subprojects/gst-devtools/**/* - subprojects/gstreamer/**/* valgrind base: extends: '.valgrind fedora x86_64' variables: TEST_SUITE: "check.gst-plugins-base\\..*" rules: - changes: - "*" - scripts/* - ci//**/* - subprojects/gst-devtools/**/* - subprojects/gstreamer/**/* - subprojects/gst-plugins-base/**/* valgrind good: extends: '.valgrind fedora x86_64' variables: TEST_SUITE: "check.gst-plugins-good\\..*" # take longer time due to splitmux unit test TIMEOUT_FACTOR: "4" rules: - changes: - "*" - scripts/* - ci/**/* - subprojects/gst-devtools/**/* - subprojects/gstreamer/**/* - subprojects/gst-plugins-base/**/* - subprojects/gst-plugins-good/**/* valgrind ugly: extends: '.valgrind fedora x86_64' variables: TEST_SUITE: "check.gst-plugins-ugly\\..*" rules: - changes: - "*" - scripts/* - ci/**/* - subprojects/gst-devtools/**/* - subprojects/gstreamer/**/* - subprojects/gst-plugins-base/**/* - subprojects/gst-plugins-good/**/* - subprojects/gst-plugins-ugly/**/* valgrind bad: extends: '.valgrind fedora x86_64' variables: TEST_SUITE: "check.gst-plugins-bad\\..*" rules: - changes: - "*" - scripts/* - ci/**/* - subprojects/gst-devtools/**/* - subprojects/gstreamer/**/* - subprojects/gst-plugins-base/**/* - subprojects/gst-plugins-good/**/* - subprojects/gst-plugins-bad/**/* valgrind ges: extends: '.valgrind fedora x86_64' variables: TEST_SUITE: "check.gst-editing-services\\..*" rules: - changes: - "*" - scripts/* - ci/**/* - subprojects/gst-devtools/**/* - subprojects/gstreamer/**/* - subprojects/gst-plugins-base/**/* - subprojects/gst-plugins-good/**/* - subprojects/gst-plugins-bad/**/* - subprojects/gst-editing-services/**/* - subprojects/gst-python/**/* # valgrind ges jobs are racy across the board and simply fail too often. # Someone needs to go through job logs and figure out which jobs to mark # as flaky. Until then, just ignore failures. allow_failure: true # ---- Integration ----- # .documentation: extends: '.build fedora x86_64' variables: # Disable svthevcenc until the following MR is merged # https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5447 MESON_ARGS: >- ${SIMPLE_BUILD} -Ddoc=enabled -Drs=enabled -Dgst-docs:fatal_warnings=true -Dgst-plugins-bad:svthevcenc=disabled # Disable werror for the docs build, we don't need it GST_WERROR: 'false' SUBPROJECTS_CACHE_DIR: "/subprojects" CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/" script: - export PATH=/usr/local/cargo/bin/:/usr/local/bin/:$PATH - export RUSTUP_HOME='/usr/local/rustup' - ci/scripts/handle-subprojects-cache.py --cache-dir /subprojects subprojects/ - echo $MESON_ARGS - meson build/ $MESON_ARGS - ccache --show-stats - ninja -C build/ update_girs # Ignore modifications to wrap files made by meson - git checkout $(git ls-files 'subprojects/*.wrap') - ./ci/scripts/check-diff.py "gir files" - ./gst-env.py ninja -C build/ plugins_doc_caches # Ignore modifications to wrap files made by meson - git checkout $(git ls-files 'subprojects/*.wrap') - ./ci/scripts/check-diff.py - export GI_TYPELIB_PATH=$PWD/girs - hotdoc run --conf-file build/subprojects/gst-docs/GStreamer-doc.json - mv build/subprojects/gst-docs/GStreamer-doc/html documentation/ artifacts: when: always expire_in: "7 days" paths: - documentation/ - diffs/ # # This jobs runs in gstreamer namespace when after the merge into main branch. # The produced artifact is later used to automatically update the web page. # documentation: stage: integrate extends: - '.documentation' needs: - "fedora amd64 docker" rules: - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == "main"' # # This job is run in users namespace to validate documentation before merging # MR. # build documentation: extends: - '.documentation' stage: build needs: - "trigger" - "fedora amd64 docker" rules: # Never run post merge, we have the `documentation` always running for that - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' when: never - changes: - .gitlab-ci.yml - .gitlab-image-tags.yml - ci/gitlab/*.py - subprojects/*.wrap - subprojects/gst-docs/**/* - subprojects/gst-devtools/**/* - subprojects/gst-editing-services/**/* - subprojects/gst-libav/**/* - subprojects/gst-plugins-bad/**/* - subprojects/gst-plugins-base/**/* - subprojects/gst-plugins-good/**/* - subprojects/gst-plugins-ugly/**/* - subprojects/gstreamer/**/* - subprojects/gstreamer-vaapi/**/* - subprojects/gst-rtsp-server/**/* # FIXME: Using trigger: causes permission issues, workaround using old REST API. # https://gitlab.com/gitlab-org/gitlab/-/issues/341737 cerbero trigger: stage: build timeout: '4h' tags: - placeholder-job extends: - '.fedora image' - '.fdo.suffixed-image@fedora' needs: - "trigger" - "fedora amd64 docker" script: - ci/gitlab/trigger_cerbero_pipeline.py rules: - if: '$MESON_COMMIT' # Never run post merge - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' when: never - changes: - .gitlab-ci.yml - ci/gitlab/*.py - subprojects/gst-devtools/**/* - subprojects/gst-editing-services/**/* - subprojects/gst-libav/**/* - subprojects/gst-plugins-bad/**/* - subprojects/gst-plugins-base/**/* - subprojects/gst-plugins-good/**/* - subprojects/gst-plugins-ugly/**/* - subprojects/gst-python/**/* - subprojects/gstreamer/**/* - subprojects/gst-rtsp-server/**/* - subprojects/gst-examples/**/*