gstreamer/.gitlab-ci.yml
Jordan Petridis d448639b6d ci: Allow to run scheduled pipelines
While everything that's merged needs to have passed CI, the
testsuite result are not as consistent as we'd like and sometimes
regress.

It's nice to have have a pipeline hitory of the tests results
to make it easier to spot regressions that might have caused
racy/flaky tests.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5588>
2023-11-03 20:27:33 +00:00

1049 lines
32 KiB
YAML

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/**/*