2020-10-24 17:56:22 +00:00
include :
2022-09-22 12:31:10 +00:00
- project : 'freedesktop/ci-templates'
2023-03-16 15:43:19 +00:00
ref : 9f0eb526291fe74651fe1430cbd2397f4c0a819b
2022-09-22 12:31:10 +00:00
file : '/templates/fedora.yml'
- project : 'freedesktop/ci-templates'
2023-03-16 15:43:19 +00:00
ref : 9f0eb526291fe74651fe1430cbd2397f4c0a819b
2022-09-22 12:31:10 +00:00
file : '/templates/debian.yml'
2022-09-22 12:22:42 +00:00
###
# 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'
2020-10-24 17:56:22 +00:00
stages :
- 'preparation'
- 'build'
- 'test'
# Use the resulting binaries
- 'integrate'
variables :
2021-11-30 14:29:18 +00:00
GIT_DEPTH : 1
2020-10-24 17:56:22 +00:00
# Branch to track for modules that have no ref specified in the manifest
2021-09-27 06:41:10 +00:00
GST_UPSTREAM_BRANCH : 'main'
2020-10-24 17:56:22 +00:00
2022-09-22 19:38:49 +00:00
FDO_UPSTREAM_REPO : 'gstreamer/gstreamer'
2022-12-25 10:08:22 +00:00
MESON_COMMIT :
description : "Overwrite the meson version installed on the CI images with the specified meson commit"
value : ""
2022-09-22 19:38:49 +00:00
FEDORA_AMD64_SUFFIX : 'amd64/fedora'
INDENT_AMD64_SUFFIX : 'amd64/gst-indent'
2023-02-16 03:30:15 +00:00
COMMITLINT_AMD64_SUFFIX : 'amd64/commitlint'
2022-09-22 19:38:49 +00:00
WINDOWS_AMD64_SUFFIX : 'amd64/windows'
WINDOWS_IMAGE : "$CI_REGISTRY_IMAGE/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH"
2022-10-24 18:06:14 +00:00
WINDOWS_UPSTREAM_IMAGE : "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH"
2022-09-22 19:38:49 +00:00
2020-10-24 17:56:22 +00:00
DEFAULT_MESON_ARGS : >
-Dlibnice:tests=disabled
-Dlibnice:examples=disabled
2023-05-18 12:48:03 +00:00
-Dlibnice:gupnp=disabled
2020-10-24 17:56:22 +00:00
-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
2023-04-03 15:36:37 +00:00
-Drs=disabled
2021-09-18 23:55:34 +00:00
-Dgpl=enabled
2020-10-24 17:56:22 +00:00
2023-03-27 13:34:35 +00:00
SIMPLE_BUILD : >
${DEFAULT_MESON_ARGS}
-Dsharp=enabled
-Domx=enabled
-Dgst-omx:target=generic
-Ddoc=disabled
2020-10-24 17:56:22 +00:00
workflow :
2021-09-29 12:15:03 +00:00
# https://docs.gitlab.com/ee/ci/yaml/index.html#switch-between-branch-pipelines-and-merge-request-pipelines
2020-10-24 17:56:22 +00:00
rules :
2021-09-29 12:15:03 +00:00
- if : '$CI_PIPELINE_SOURCE == "merge_request_event"'
2021-11-30 14:45:07 +00:00
variables :
GIT_FETCH_EXTRA_FLAGS : '--no-tags'
2021-09-29 12:15:03 +00:00
- if : $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"
when : never
2021-11-30 14:58:59 +00:00
- if : '$CI_COMMIT_TAG'
2021-09-29 12:15:03 +00:00
- if : '$CI_COMMIT_BRANCH'
2021-11-30 14:45:07 +00:00
variables :
GIT_FETCH_EXTRA_FLAGS : '--no-tags'
2020-10-24 17:56:22 +00:00
#
# 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
2021-10-05 13:27:50 +00:00
# This is an empty job that is used to trigger the pipeline.
trigger :
image : alpine:latest
2022-10-24 18:38:13 +00:00
stage : 'preparation'
2021-11-02 20:09:52 +00:00
variables :
GIT_STRATEGY : none
2023-05-24 10:02:55 +00:00
tags : [ 'placeholder-job' ]
2021-10-05 13:27:50 +00:00
script :
- echo "Trigger job done, now running the pipeline."
rules :
# If the MR is assigned to the Merge bot, trigger the pipeline automatically
- if : '$CI_MERGE_REQUEST_ASSIGNEES == "gstreamer-merge-bot"'
2022-10-07 09:52:36 +00:00
# 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"'
2022-03-29 17:57:21 +00:00
when : 'manual'
2021-10-05 13:27:50 +00:00
# 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
2021-09-27 06:41:10 +00:00
.fedora image :
2020-10-24 17:56:22 +00:00
variables :
2021-09-27 06:41:10 +00:00
FDO_DISTRIBUTION_VERSION : '31'
FDO_REPO_SUFFIX : "$FEDORA_AMD64_SUFFIX"
FDO_DISTRIBUTION_TAG : "$FEDORA_TAG-$GST_UPSTREAM_BRANCH"
2021-12-02 22:57:09 +00:00
FDO_DISTRIBUTION_EXEC : 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/fedora/prepare.sh'
2020-10-24 17:56:22 +00:00
fedora amd64 docker :
2021-09-27 06:41:10 +00:00
extends :
- '.fedora image'
- '.fdo.container-build@fedora'
2022-10-24 18:38:13 +00:00
stage : 'preparation'
2022-10-24 18:58:52 +00:00
needs : [ ]
2021-12-06 14:02:00 +00:00
tags :
- 'packet.net'
2020-10-24 17:56:22 +00:00
2021-09-27 06:41:10 +00:00
.gst-indent image :
2023-05-24 10:02:55 +00:00
tags : [ 'placeholder-job' ]
2021-09-27 06:41:10 +00:00
variables :
2023-03-15 19:01:47 +00:00
FDO_DISTRIBUTION_VERSION : 'bookworm'
2021-09-27 06:41:10 +00:00
FDO_REPO_SUFFIX : "$INDENT_AMD64_SUFFIX"
FDO_DISTRIBUTION_TAG : "$INDENT_TAG-$GST_UPSTREAM_BRANCH"
FDO_DISTRIBUTION_PACKAGES : 'curl indent git findutils'
2021-09-30 11:01:26 +00:00
FDO_DISTRIBUTION_EXEC : 'ci/docker/indent/prepare.sh'
2020-10-24 17:56:22 +00:00
gst-indent amd64 docker :
2021-09-27 06:41:10 +00:00
extends :
- '.gst-indent image'
- '.fdo.container-build@debian'
2022-10-24 18:38:13 +00:00
stage : 'preparation'
2021-10-05 13:27:50 +00:00
# Do not depend on the trigger, as we want to run indent always
needs : [ ]
2020-10-24 17:56:22 +00:00
2023-02-16 03:30:15 +00:00
.commitlint image :
2023-05-24 10:02:55 +00:00
tags : [ 'placeholder-job' ]
2023-02-16 03:30:15 +00:00
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 : [ ]
2022-03-01 19:12:02 +00:00
windows amd64 docker :
2022-10-24 18:38:13 +00:00
stage : "preparation"
2022-03-11 10:27:15 +00:00
timeout : '3h'
2020-10-24 17:56:22 +00:00
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-03-22 10:17:33 +00:00
- "2022"
2020-10-24 17:56:22 +00:00
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")
- "& ci/docker/windows/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE"
- |
if (!($?)) {
echo "Failed to build the image"
Exit 1
}
# ---- Preparation ----- #
#
# gst-indent!!
#
gst indent :
2021-09-27 06:41:10 +00:00
extends :
- '.gst-indent image'
- '.fdo.suffixed-image@debian'
2020-10-24 17:56:22 +00:00
stage : 'preparation'
2021-10-05 13:27:50 +00:00
needs :
- job : 'gst-indent amd64 docker'
artifacts : false
2020-10-24 17:56:22 +00:00
script :
2021-09-30 11:01:26 +00:00
- ./scripts/check-format-c
- ./scripts/format-csharp --check
2022-03-29 18:26:34 +00:00
rules :
# Don't check indentation on post merge pipelines
- if : '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
when : 'manual'
- if : '$CI_PROJECT_NAMESPACE != "gstreamer" || $CI_COMMIT_BRANCH != $GST_UPSTREAM_BRANCH'
when : 'always'
2020-10-24 17:56:22 +00:00
2023-02-16 03:30:15 +00:00
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"'
2020-10-24 17:56:22 +00:00
#
# build setup templates
#
2020-09-30 08:51:10 +00:00
# Expects:
# BUILD_TYPE: Dynamic or shared library
# must be 'shared' or 'static' or 'both'
# corresponds to --default-library meson arg
# BUILD_GST_DEBUG: Build with gst debug symbols or not
# must be a string of a boolean, "true" or "false". Not yaml bool.
# corresponds to -Dgstreamer:gst_debug meson arg
# GST_WERROR: make warning fatal or not
# must be a string of a boolean, "true" or "false". Not yaml bool.
#
2020-10-24 17:56:22 +00:00
.build_template : &build
2023-04-03 15:36:37 +00:00
- export RUSTUP_HOME="/usr/local/rustup"
- export CARGO_HOME="/usr/local/cargo"
- export PATH="/usr/local/cargo/bin:$PATH"
2022-11-07 18:38:07 +00:00
- date -R
2021-12-02 22:57:09 +00:00
- ci/scripts/handle-subprojects-cache.py subprojects/
2022-11-07 18:38:07 +00:00
- date -R
2023-03-27 13:34:35 +00:00
- export ARGS="--default-library=${BUILD_TYPE:-both} -Dgstreamer:gst_debug=${BUILD_GST_DEBUG:-true} ${MESON_ARGS}"
2020-09-07 15:33:13 +00:00
- |-
if [ $GST_WERROR == "true" ]; then
2023-03-27 13:48:43 +00:00
export ARGS="$ARGS --native-file ./ci/meson/gst-werror.ini"
2020-09-07 15:33:13 +00:00
fi
- echo $ARGS
2022-11-07 18:38:07 +00:00
- date -R
2020-09-07 15:33:13 +00:00
- meson build/ $ARGS
2022-11-07 18:38:07 +00:00
- date -R
2020-10-24 17:56:22 +00:00
- ninja -C build/
2022-11-07 18:38:07 +00:00
- date -R
2020-10-24 17:56:22 +00:00
- ccache --show-stats
.build_ccache_vars :
variables :
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
2023-04-05 12:20:56 +00:00
- .gitlab-image-tags.yml
2022-05-11 06:15:46 +00:00
- gst-env.py
2022-02-05 03:46:49 +00:00
- ci/gitlab/*.py
2020-10-24 17:56:22 +00:00
- meson.build
- subprojects/*.wrap
- subprojects/gst-devtools/**/*
- subprojects/gst-editing-services/**/*
- subprojects/gst-integration-testsuites/**/*
- subprojects/gst-libav/**/*
- subprojects/gst-omx/**/*
- 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/gstreamer-vaapi/**/*
- subprojects/gst-rtsp-server/**/*
.build :
stage : 'build'
extends :
- '.build_ccache_vars'
2021-09-27 06:42:18 +00:00
needs :
- "trigger"
2020-10-24 17:56:22 +00:00
# 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 :
2020-09-30 08:45:40 +00:00
BUILD_GST_DEBUG : "true"
2020-09-07 15:33:13 +00:00
GST_WERROR : "true"
2023-03-27 13:34:35 +00:00
MESON_ARGS : "${DEFAULT_MESON_ARGS}"
2020-10-24 17:56:22 +00:00
script :
2022-05-07 01:45:09 +00:00
- *build
- ./gst-env.py gst-inspect-1.0 --version
- ./gst-env.py gst-inspect-1.0
2020-10-24 17:56:22 +00:00
after_script :
- mv build/meson-logs/ meson-logs
artifacts :
expire_in : "7 days"
when : "always"
paths :
- 'meson-logs/'
2021-10-13 21:10:40 +00:00
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
- changes :
*modules_changes
2020-10-24 17:56:22 +00:00
.build fedora x86_64 :
2021-09-27 06:41:10 +00:00
extends :
- '.fedora image'
- '.fdo.suffixed-image@fedora'
- '.build'
2021-10-05 13:27:50 +00:00
needs :
2022-10-24 18:51:53 +00:00
- "trigger"
2021-10-05 13:27:50 +00:00
- "fedora amd64 docker"
2020-10-24 17:56:22 +00:00
variables :
2020-09-07 15:33:13 +00:00
GST_WERROR : "true"
2023-03-27 13:34:35 +00:00
MESON_ARGS : "${SIMPLE_BUILD}"
2020-10-24 17:56:22 +00:00
2022-05-19 13:18:52 +00:00
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
2020-09-30 08:51:10 +00:00
build fedora gcc :
extends : '.build fedora x86_64'
2020-10-24 17:56:22 +00:00
variables :
2020-09-30 08:51:10 +00:00
CC : 'ccache gcc'
CXX : 'ccache g++'
parallel :
matrix :
- BUILD_TYPE : [ 'shared' , 'both' ]
BUILD_GST_DEBUG : [ "true" , "false" , ]
- BUILD_TYPE : [ 'static' ]
BUILD_GST_DEBUG : [ "true" , "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.
MESON_ARGS : "${DEFAULT_MESON_ARGS} -Dvaapi=disabled -Dpython=auto -Dgst-editing-services:python=disabled -Dintrospection=disabled -Ddoc=disabled"
build fedora clang :
2020-10-24 17:56:22 +00:00
extends : '.build fedora x86_64'
variables :
CC : 'ccache clang'
CXX : 'ccache clang++'
2020-09-30 08:51:10 +00:00
parallel :
matrix :
- BUILD_TYPE : [ 'shared' , 'both' ]
BUILD_GST_DEBUG : [ "true" ]
- BUILD_TYPE : [ 'shared' , 'both' ]
BUILD_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"
- BUILD_TYPE : [ 'static' ]
BUILD_GST_DEBUG : [ "true" , "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.
MESON_ARGS : "${DEFAULT_MESON_ARGS} -Dvaapi=disabled -Dpython=auto -Dgst-editing-services:python=disabled -Dintrospection=disabled -Ddoc=disabled"
2020-10-24 17:56:22 +00:00
.build windows :
image : $WINDOWS_IMAGE
stage : 'build'
tags :
- 'docker'
- 'windows'
2022-03-22 10:17:33 +00:00
- '2022'
2020-10-24 17:56:22 +00:00
needs :
2022-10-24 18:51:53 +00:00
- "trigger"
2021-10-05 13:27:50 +00:00
- "windows amd64 docker"
2020-10-24 17:56:22 +00:00
timeout : '45min'
variables :
MESON_ARGS : >
${DEFAULT_MESON_ARGS}
-Dpython=disabled
-Dlibav=disabled
-Dvaapi=disabled
-Dgst-plugins-base:pango=enabled
-Dgst-plugins-good:cairo=enabled
2022-01-27 05:55:53 +00:00
# Needs to not be empty otherwise the newline -> space replace command in
# `script:` will fail
MESON_CROSS_ARGS : ' '
2020-10-24 17:56:22 +00:00
rules :
2021-10-13 01:35:38 +00:00
# If this matches, it means the pipeline is running against either the main
# or a stable branch, so make it manual
2021-10-13 21:10:40 +00:00
- if : '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
2021-10-13 01:35:38 +00:00
when : manual
2021-10-13 21:00:13 +00:00
- changes :
*modules_changes
2022-10-17 20:54:48 +00:00
- changes :
- subprojects/win-*/*
2020-10-24 17:56:22 +00:00
script :
2022-05-11 06:40:15 +00:00
# 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
2021-12-02 22:57:09 +00:00
- ci/scripts/handle-subprojects-cache.py subprojects/
2020-10-24 17:56:22 +00:00
# For some reason, options are separated by newline instead of space, so we
# have to replace them first.
- $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
2022-01-27 05:55:53 +00:00
- $env:MESON_CROSS_ARGS = $env:MESON_CROSS_ARGS.replace("`n"," ")
2020-10-24 17:56:22 +00:00
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
2022-01-27 05:55:53 +00:00
meson build $env:MESON_ARGS $env:MESON_CROSS_ARGS &&
2022-05-19 13:18:52 +00:00
meson compile -C build"
2022-05-09 05:29:16 +00:00
artifacts :
expire_in : "7 days"
when : "always"
paths :
- 'build/meson-logs/'
2020-10-24 17:56:22 +00:00
2022-03-01 19:12:02 +00:00
build vs2019 amd64 :
2020-10-24 17:56:22 +00:00
extends : '.build windows'
variables :
ARCH : 'amd64'
2022-05-19 13:18:52 +00:00
script :
- !reference [".build windows", "script",]
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
2022-05-07 01:45:09 +00:00
.\gst-env.py gst-inspect-1.0.exe --version &&
.\gst-env.py gst-inspect-1.0.exe &&
2022-05-19 13:18:52 +00:00
mkdir .\destdir &&
meson install --destdir=$env:CI_PROJECT_DIR\destdir -C build &&
rmdir /s /q $env:CI_PROJECT_DIR\destdir"
2020-10-24 17:56:22 +00:00
2022-03-01 19:12:02 +00:00
build vs2019 x86 :
2020-10-24 17:56:22 +00:00
extends : '.build windows'
variables :
ARCH : 'x86'
2022-03-01 19:12:02 +00:00
build vs2019 arm64 uwp :
2022-01-27 05:55:53 +00:00
extends : '.build windows'
variables :
ARCH : 'arm64'
# pango pulls in cairo which pulls in pixman which doesn't build because of
# https://github.com/mesonbuild/meson/issues/9889
MESON_CROSS_ARGS : >
-Dgst-plugins-base:pango=disabled
-Dgst-plugins-good:cairo=disabled
-Dgst-devtools:cairo=disabled
--cross-file ci/meson/vs2019-arm64-cross-file.txt
--native-file ci/meson/vs2019-x64-native-file.txt
2022-03-01 19:12:02 +00:00
build msys2 :
2020-10-24 17:56:22 +00:00
extends : '.build windows'
timeout : '60min'
rules :
- changes :
*modules_changes
allow_failure : true
when : 'manual'
script :
2021-11-22 08:46:15 +00:00
# Make sure powershell exits on errors
2020-10-24 17:56:22 +00:00
# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6
- $ErrorActionPreference = "Stop"
2022-05-11 06:40:15 +00:00
# Set the code page to UTF-8
- chcp 65001
2021-10-12 21:13:44 +00:00
# Configure MSYS2 to use the UCRT64 environment, start in the same directory
# and inherit PATH
- $env:MSYSTEM = "UCRT64"
- $env:CHERE_INVOKING = "1"
- $env:MSYS2_PATH_TYPE = "inherit"
2020-10-24 17:56:22 +00:00
# For some reason, options are separated by newline instead of space, so we
# have to replace them first.
- $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
# Replace forward slashes with backwards so bash doesn't complain
- $env:_PROJECT_DIR = $env:CI_PROJECT_DIR.replace('\','/')
2021-10-12 21:13:44 +00:00
- C:\msys64\usr\bin\bash -lc "meson build $env:MESON_ARGS && ninja -C build"
2020-10-24 17:56:22 +00:00
# ---- Tests ----- #
.test :
stage : 'test'
extends :
- '.build_ccache_vars'
needs :
2021-10-05 13:27:50 +00:00
- "trigger"
2020-10-24 17:56:22 +00:00
variables :
2020-09-07 15:33:13 +00:00
GST_WERROR : "true"
2023-03-27 13:34:35 +00:00
MESON_ARGS : "${SIMPLE_BUILD}"
2020-10-24 17:56:22 +00:00
# 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
2023-05-24 10:57:48 +00:00
- export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
2020-10-24 17:56:22 +00:00
- echo "-> Running ${TEST_SUITE}"
- >
./gst-env.py
gst-validate-launcher ${TEST_SUITE}
2021-10-12 20:19:46 +00:00
--check-bugs
2020-10-24 17:56:22 +00:00
--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 :
2021-09-27 06:41:10 +00:00
extends :
- '.fedora image'
- '.fdo.suffixed-image@fedora'
- '.test'
2021-10-05 13:27:50 +00:00
needs :
2022-10-24 18:51:53 +00:00
- "trigger"
2021-10-05 13:27:50 +00:00
- "fedora amd64 docker"
2020-10-24 17:56:22 +00:00
tags : [ 'gstreamer' ]
check fedora :
extends : '.test fedora x86_64'
variables :
TEST_SUITE : "check.gst*"
integration testsuites fedora :
extends : '.test fedora x86_64'
2022-11-07 18:29:52 +00:00
parallel : 8
2020-10-24 17:56:22 +00:00
variables :
2023-03-27 13:34:35 +00:00
MESON_ARGS : >
${SIMPLE_BUILD}
2022-11-26 10:02:17 +00:00
-Domx=disabled
-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
2021-10-12 20:19:46 +00:00
EXTRA_VALIDATE_ARGS : "--timeout-factor=2 --retry-on-failures --parts=${CI_NODE_TOTAL} --part-index=${CI_NODE_INDEX} --sync"
2020-10-24 17:56:22 +00:00
TEST_SUITE : "validate ges"
2023-02-20 10:38:28 +00:00
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
2023-03-19 18:35:29 +00:00
2020-10-24 17:56:22 +00:00
# gstreamer-full:
2021-10-20 15:56:49 +00:00
gstreamer-full static build :
extends : '.build fedora x86_64'
stage : 'build'
2020-10-24 17:56:22 +00:00
variables :
2020-09-30 08:40:18 +00:00
BUILD_TYPE : "static"
2020-10-24 17:56:22 +00:00
MESON_ARGS : >
2021-10-13 02:28:57 +00:00
-Ddoc=disabled
2020-10-24 17:56:22 +00:00
script :
- *build
- meson test -C build -v test-gst-full
2021-10-20 15:56:49 +00:00
gstreamer-full-minimal static build :
extends : 'gstreamer-full static build'
stage : 'build'
2020-10-24 17:56:22 +00:00
variables :
2020-09-30 08:45:40 +00:00
BUILD_GST_DEBUG : 'false'
2020-09-07 15:33:13 +00:00
GST_WERROR : "true"
2020-09-30 08:40:18 +00:00
BUILD_TYPE : "static"
2020-10-24 17:56:22 +00:00
MESON_ARGS : >
2021-10-20 15:56:49 +00:00
-Ddoc=disabled
2020-10-24 17:56:22 +00:00
-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
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
# Valgrind
.valgrind fedora x86_64 :
extends : '.test fedora x86_64'
stage : 'test'
variables :
EXTRA_VALIDATE_ARGS : "--valgrind"
valgrind core :
extends : '.valgrind fedora x86_64'
variables :
TEST_SUITE : "check.gstreamer\\..*"
rules :
- changes :
- "*"
- scripts/*
2021-10-06 10:23:50 +00:00
- ci/**/*
2020-10-24 17:56:22 +00:00
- subprojects/gst-devtools/**/*
- subprojects/gstreamer/**/*
valgrind base :
extends : '.valgrind fedora x86_64'
variables :
TEST_SUITE : "check.gst-plugins-base\\..*"
rules :
- changes :
- "*"
- scripts/*
2021-10-06 10:23:50 +00:00
- ci//**/*
2020-10-24 17:56:22 +00:00
- 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/*
2021-10-06 10:23:50 +00:00
- ci/**/*
2020-10-24 17:56:22 +00:00
- 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/*
2021-10-06 10:23:50 +00:00
- ci/**/*
2020-10-24 17:56:22 +00:00
- 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/*
2021-10-06 10:23:50 +00:00
- ci/**/*
2020-10-24 17:56:22 +00:00
- 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/*
2021-10-06 10:23:50 +00:00
- ci/**/*
2020-10-24 17:56:22 +00:00
- subprojects/gst-devtools/**/*
- subprojects/gstreamer/**/*
- subprojects/gst-plugins-base/**/*
- subprojects/gst-plugins-good/**/*
- subprojects/gst-plugins-bad/**/*
- subprojects/gst-editing-services/**/*
2022-03-29 16:43:56 +00:00
- subprojects/gst-python/**/*
2022-12-22 15:51:46 +00:00
# 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
2020-10-24 17:56:22 +00:00
# ---- Integration ----- #
2021-09-28 19:29:12 +00:00
.documentation :
2022-08-26 12:43:34 +00:00
extends : '.build fedora x86_64'
2020-10-24 17:56:22 +00:00
variables :
2023-03-27 13:34:35 +00:00
MESON_ARGS : >
${SIMPLE_BUILD}
-Ddoc=enabled
-Drs=enabled
-Dgst-docs:fatal_warnings=true
2022-06-09 00:08:19 +00:00
# Disable werror for the docs build, we don't need it
2020-09-07 15:33:13 +00:00
GST_WERROR : 'false'
2020-10-24 17:56:22 +00:00
CI_ARTIFACTS_URL : "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/"
script :
2022-08-26 12:43:34 +00:00
- export PATH=/usr/local/cargo/bin/:/usr/local/bin/:$PATH
- export RUSTUP_HOME='/usr/local/rustup'
- ci/scripts/handle-subprojects-cache.py subprojects/
- echo $MESON_ARGS
- meson build/ $MESON_ARGS
- ccache --show-stats
2022-08-31 18:15:16 +00:00
- ninja -C build/ update_girs
# Ignore modifications to wrap files made by meson
- git checkout subprojects/*.wrap
- ./ci/scripts/check-diff.py "gir files"
2020-10-24 17:56:22 +00:00
- ./gst-env.py ninja -C build/ plugins_doc_caches
2021-12-02 22:57:09 +00:00
# Ignore modifications to wrap files made by meson
- git checkout subprojects/*.wrap
2022-08-31 18:15:16 +00:00
- ./ci/scripts/check-diff.py
2022-08-26 12:43:34 +00:00
2023-03-19 18:35:29 +00:00
- export GI_TYPELIB_PATH=$PWD/girs
- hotdoc run --conf-file build/subprojects/gst-docs/GStreamer-doc.json
2022-08-31 18:15:16 +00:00
2020-10-24 17:56:22 +00:00
- mv build/subprojects/gst-docs/GStreamer-doc/html documentation/
artifacts :
when : always
2021-09-28 19:29:12 +00:00
expire_in : "7 days"
2020-10-24 17:56:22 +00:00
paths :
- documentation/
2022-08-31 18:15:16 +00:00
- diffs/
2021-09-27 14:15:22 +00:00
2021-10-05 13:06:32 +00:00
#
2021-10-13 21:10:40 +00:00
# This jobs runs in gstreamer namespace when after the merge into main branch.
2021-10-05 13:06:32 +00:00
# The produced artifact is later used to automatically update the web page.
#
2021-09-28 19:29:12 +00:00
documentation :
stage : integrate
extends :
- '.documentation'
2022-08-26 12:43:34 +00:00
needs :
- "fedora amd64 docker"
2021-09-28 19:29:12 +00:00
rules :
- if : '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == "main"'
2021-10-05 13:06:32 +00:00
#
# This job is run in users namespace to validate documentation before merging
# MR.
#
2021-09-28 19:29:12 +00:00
build documentation :
extends :
- '.documentation'
stage : build
needs :
2022-10-24 18:51:53 +00:00
- "trigger"
2022-08-26 12:43:34 +00:00
- "fedora amd64 docker"
2021-09-28 19:29:12 +00:00
rules :
2021-10-13 21:10:40 +00:00
# Never run post merge, we have the `documentation` always running for that
- if : '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
2021-10-13 21:00:13 +00:00
when : never
2021-09-28 19:29:12 +00:00
- changes :
- .gitlab-ci.yml
2022-02-05 03:46:49 +00:00
- ci/gitlab/*.py
2021-09-28 19:29:12 +00:00
- subprojects/*.wrap
- subprojects/gst-docs/**/*
- subprojects/gst-devtools/**/*
- subprojects/gst-editing-services/**/*
- subprojects/gst-libav/**/*
- subprojects/gst-omx/**/*
- 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/**/*
2021-09-27 14:15:22 +00:00
# FIXME: Using trigger: causes permission issues, workaround using old REST API.
# https://gitlab.com/gitlab-org/gitlab/-/issues/341737
cerbero trigger :
stage : build
2022-09-22 12:33:53 +00:00
timeout : '4h'
2022-03-30 09:52:53 +00:00
tags :
- placeholder-job
2021-10-05 00:24:58 +00:00
extends :
- '.fedora image'
- '.fdo.suffixed-image@fedora'
2021-10-05 13:27:50 +00:00
needs :
2022-10-24 18:51:53 +00:00
- "trigger"
2021-10-05 13:27:50 +00:00
- "fedora amd64 docker"
2021-09-27 14:15:22 +00:00
script :
2021-09-27 22:37:18 +00:00
- ci/gitlab/trigger_cerbero_pipeline.py
2021-09-27 14:15:22 +00:00
rules :
2023-04-03 11:59:36 +00:00
- if : '$MESON_COMMIT'
2021-10-13 21:10:40 +00:00
# Never run post merge
- if : '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
2021-10-13 21:00:13 +00:00
when : never
2021-09-27 14:15:22 +00:00
- changes :
- .gitlab-ci.yml
2022-02-05 03:46:49 +00:00
- ci/gitlab/*.py
2021-09-27 14:15:22 +00:00
- 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/**/*
2021-10-05 13:27:50 +00:00
- subprojects/gst-examples/**/*