+include:
+ - project: 'freedesktop/ci-templates'
+ ref: 14731f78c23c7b523a85a26a068ade9ac1ecd2f3
+ file: '/templates/fedora.yml'
+ - project: 'freedesktop/ci-templates'
+ ref: 14731f78c23c7b523a85a26a068ade9ac1ecd2f3
+ 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:
- - "build docker"
- - "preparation"
- # Test just one basic build, if succeds procced to test the rest
- - "build"
- - "test"
- # Run multiple builds and tests, multi-distro, multi-arch
- - "full builds"
- - "full tests"
- # build some apps to check that cross-platform binaries are usable
- - "apps"
-
-test manifest:
- variables:
- GIT_STRATEGY: fetch
- image: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/test-manifest:fb91ee18309ab981289aa818ab2a7824ef0567a1'
+ - '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'
+
+ FEDORA_AMD64_SUFFIX: 'amd64/fedora'
+ INDENT_AMD64_SUFFIX: 'amd64/gst-indent'
+ 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"
+
+ MESON_BUILDTYPE_ARGS: --default-library=both
+ DEFAULT_MESON_ARGS: >
+ -Dlibnice:tests=disabled
+ -Dlibnice:examples=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
+ -Dgpl=enabled
+
+ MESON_GST_WERROR: >
+ -Dgstreamer:werror=true
+ -Dgst-plugins-base:werror=true
+ -Dgst-plugins-good:werror=true
+ -Dgst-plugins-ugly:werror=true
+ -Dgst-plugins-bad:werror=true
+ -Dgst-rtsp-server:werror=true
+ -Dgst-libav:werror=true
+ -Dgst-examples:werror=true
+ -Dgst-editing-services:werror=true
+ -Dgst-docs:werror=true
+ -Dgst-omx:werror=true
+ -Dgst-devtools:werror=true
+ -Dgst-python:werror=true
+ -Dgstreamer-vaapi:werror=true
+ -Dgstreamer-sharp:werror=true
+
+workflow:
+ # https://docs.gitlab.com/ee/ci/yaml/index.html#switch-between-branch-pipelines-and-merge-request-pipelines
+ rules:
+ - 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
+ 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"'
+ # 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_DISTRIBUTION_VERSION: '31'
+ 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:
+ variables:
+ FDO_DISTRIBUTION_VERSION: 'stretch'
+ FDO_REPO_SUFFIX: "$INDENT_AMD64_SUFFIX"
+ FDO_DISTRIBUTION_TAG: "$INDENT_TAG-$GST_UPSTREAM_BRANCH"
+ FDO_DISTRIBUTION_PACKAGES: 'curl indent git findutils'
+ 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: []
+
+windows amd64 docker:
stage: "preparation"
+ needs:
+ - "trigger"
+ 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")
+
+ - "& 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:
+ 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:
+ # 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'
+
+#
+# build setup templates
+#
+.build_template: &build
+ - date -R
+ - ci/scripts/handle-subprojects-cache.py subprojects/
+ - date -R
+ - echo $MESON_ARGS
+ - date -R
+ - meson build/ $MESON_ARGS
+ - date -R
+ - ninja -C build/
+ - date -R
+ - 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
+ - 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-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/**/*
+
+.simple_fedora_build: &simple_build >-
+ ${DEFAULT_MESON_ARGS}
+ -Dsharp=enabled
+ -Domx=enabled
+ -Dgst-omx:target=generic
+ -Ddoc=disabled
+ -Drs=disabled
+ ${MESON_BUILDTYPE_ARGS}
+ ${MESON_GST_WERROR}
+
+.build:
+ stage: 'build'
+ extends:
+ - '.build_ccache_vars'
+ 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:
+ MESON_ARGS: "${DEFAULT_MESON_ARGS} ${MESON_BUILDTYPE_ARGS} ${MESON_GST_WERROR}"
+ 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:
+ # 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
+
+.build fedora x86_64:
+ extends:
+ - '.fedora image'
+ - '.fdo.suffixed-image@fedora'
+ - '.build'
+ needs:
+ - "trigger"
+ - "fedora amd64 docker"
+ variables:
+ MESON_ARGS: *simple_build
+
+build fedora x86_64:
+ extends:
+ - '.fedora image'
+ - '.fdo.suffixed-image@fedora'
+ - '.build fedora x86_64'
+ needs:
+ - "trigger"
+ - "fedora amd64 docker"
+ 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 nodebug fedora x86_64:
+ extends:
+ - '.fedora image'
+ - '.fdo.suffixed-image@fedora'
+ - '.build'
+ needs:
+ - "trigger"
+ - "fedora amd64 docker"
+ variables:
+ MESON_ARGS: "${DEFAULT_MESON_ARGS} -Dsharp=enabled -Dgstreamer:gst_debug=false -Domx=enabled -Dgst-omx:target=generic ${MESON_BUILDTYPE_ARGS} ${MESON_GST_WERROR}"
+
+build clang fedora x86_64:
+ extends: '.build fedora x86_64'
+ variables:
+ CC: 'ccache clang'
+ CXX: 'ccache clang++'
+
+.build windows:
+ image: $WINDOWS_IMAGE
+ stage: 'build'
+ tags:
+ - 'docker'
+ - 'windows'
+ - '2022'
+ needs:
+ - "trigger"
+ - "windows amd64 docker"
+ timeout: '45min'
+ variables:
+ MESON_ARGS: >
+ ${DEFAULT_MESON_ARGS}
+ -Dpython=disabled
+ -Dlibav=disabled
+ -Dvaapi=disabled
+ -Dgst-plugins-base:pango=enabled
+ -Dgst-plugins-good:cairo=enabled
+ # Needs to not be empty otherwise the newline -> space replace command in
+ # `script:` will fail
+ MESON_CROSS_ARGS: ' '
+ 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
+ - 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
+
+ - ci/scripts/handle-subprojects-cache.py subprojects/
+ # 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"," ")
+ - $env:MESON_CROSS_ARGS = $env:MESON_CROSS_ARGS.replace("`n"," ")
+ - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
+ meson build $env:MESON_ARGS $env:MESON_CROSS_ARGS &&
+ meson compile -C build"
+ artifacts:
+ expire_in: "7 days"
+ when: "always"
+ paths:
+ - 'build/meson-logs/'
+
+build vs2019 amd64:
+ extends: '.build windows'
+ variables:
+ ARCH: 'amd64'
+ script:
+ - !reference [".build windows", "script",]
+ - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
+ .\gst-env.py gst-inspect-1.0.exe --version &&
+ .\gst-env.py gst-inspect-1.0.exe &&
+ mkdir .\destdir &&
+ meson install --destdir=$env:CI_PROJECT_DIR\destdir -C build &&
+ rmdir /s /q $env:CI_PROJECT_DIR\destdir"
+
+build vs2019 x86:
+ extends: '.build windows'
+ variables:
+ ARCH: 'x86'
+
+build vs2019 arm64 uwp:
+ 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
+
+build msys2 :
+ extends: '.build windows'
+ timeout: '60min'
+ rules:
+ - changes:
+ *modules_changes
+ allow_failure: true
+ when: 'manual'
script:
- - pytest-3 --junitxml=junit.xml --cov=build_manifest gitlab/build_manifest.py
- coverage: '/TOTAL.*\s+(\d+%)$/'
+ # 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
+
+ # 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"
+ # 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('\','/')
+ - C:\msys64\usr\bin\bash -lc "meson build $env:MESON_ARGS && ninja -C build"
+
+# ---- Tests ----- #
+
+.test:
+ stage: 'test'
+ extends:
+ - '.build_ccache_vars'
+ needs:
+ - "trigger"
+ variables:
+ MESON_ARGS: *simple_build
+
+ # 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
+
+ - 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:
- - "junit.xml"
-
-.base:
- image: "docker:stable"
- services:
- - docker:dind
- when: 'manual'
- variables:
- # When using dind, it's wise to use the overlayfs driver for
- # improved performance.
- DOCKER_DRIVER: "overlay2"
- GIT_STRATEGY: fetch
+ - "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*"
+
+integration testsuites fedora:
+ extends: '.test fedora x86_64'
+ parallel: 8
+ variables:
+ EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures --parts=${CI_NODE_TOTAL} --part-index=${CI_NODE_INDEX} --sync"
+ TEST_SUITE: "validate ges"
+
+# gstreamer-full:
+gstreamer-full static build:
+ extends: '.build fedora x86_64'
+ stage: 'build'
+ variables:
+ MESON_ARGS: >
+ --default-library=static
+ -Ddoc=disabled
+ $MESON_GST_WERROR
+
script:
- - export DATE=$(date +"%Y-%m-%d")
- - export IMAGE="${CI_REGISTRY_IMAGE}/${ARCH}/${TAG}"
- - export UID="${IMAGE}:${DATE}-${CI_JOB_ID}"
- - export LATEST="${IMAGE}:latest"
+ - *build
+ - meson test -C build -v test-gst-full
+ artifacts:
+ expire_in: "7 days"
+ when: "always"
+ paths:
+ - 'meson-logs/'
- - docker build --pull -f ${DOCKERFILE} -t ${LATEST} ${CONTEXT_DIR}
+gstreamer-full-minimal static build:
+ extends: 'gstreamer-full static build'
+ stage: 'build'
+ variables:
+ MESON_ARGS: >
+ --default-library=static
+ -Ddoc=disabled
+ -Dgstreamer:gst_debug=false
+ -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
+ $MESON_GST_WERROR
- # If we are in a fork, push the image to the reigstry regardless the branch
- - |
- if [ "$CI_PROJECT_NAMESPACE" != "gstreamer" ]; then
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker push ${LATEST}
- fi
+ 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
+ artifacts:
+ expire_in: "7 days"
+ when: "always"
+ paths:
+ - 'meson-logs/'
- # Push the images to the upstream registry
- - |
- if [ "$CI_COMMIT_REF_NAME" = "master" -a "$CI_PROJECT_NAMESPACE" = "gstreamer" ]; then
- # Tag the image with the git ref
- docker image tag ${LATEST} ${UID}
- # Push the tags
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker push ${UID}
- docker push ${LATEST}
- fi
-
-alpine amd64 manifest builder docker:
- stage: "build docker"
- variables:
- ARCH: "amd64"
- TAG: "build-manifest"
- CONTEXT_DIR: "docker/build_manifest/"
- DOCKERFILE: "docker/build_manifest/Dockerfile"
- extends: .base
-
-test manifest amd64 docker:
- stage: "build docker"
- variables:
- ARCH: "amd64"
- TAG: "test-manifest"
- CONTEXT_DIR: "docker/test_manifest/"
- DOCKERFILE: "docker/test_manifest/Dockerfile"
- extends: .base
+# Valgrind
+.valgrind fedora x86_64:
+ extends: '.test fedora x86_64'
+ stage: 'test'
+ variables:
+ EXTRA_VALIDATE_ARGS: "--valgrind"
-gst-indent amd64 docker:
- stage: "build docker"
+valgrind core:
+ extends: '.valgrind fedora x86_64'
variables:
- ARCH: "amd64"
- TAG: "gst-indent"
- CONTEXT_DIR: "docker/indent/"
- DOCKERFILE: "docker/indent/Dockerfile"
- extends: .base
+ TEST_SUITE: "check.gstreamer\\..*"
+ rules:
+ - changes:
+ - "*"
+ - scripts/*
+ - ci/**/*
+ - subprojects/gst-devtools/**/*
+ - subprojects/gstreamer/**/*
-fedora amd64 docker:
- stage: "build docker"
+valgrind base:
+ extends: '.valgrind fedora x86_64'
variables:
- ARCH: "amd64"
- TAG: "fedora"
- CONTEXT_DIR: "docker/fedora/"
- DOCKERFILE: "docker/fedora/Dockerfile"
- extends: .base
+ TEST_SUITE: "check.gst-plugins-base\\..*"
+ rules:
+ - changes:
+ - "*"
+ - scripts/*
+ - ci//**/*
+ - subprojects/gst-devtools/**/*
+ - subprojects/gstreamer/**/*
+ - subprojects/gst-plugins-base/**/*
-cerbero fedora amd64 docker:
- stage: "build docker"
+valgrind good:
+ extends: '.valgrind fedora x86_64'
variables:
- ARCH: "amd64"
- TAG: "cerbero-fedora"
- CONTEXT_DIR: "docker/cerbero/"
- DOCKERFILE: "docker/cerbero/Dockerfile-fedora"
- extends: .base
+ 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/**/*
-android docker:
- stage: "build docker"
+valgrind ugly:
+ extends: '.valgrind fedora x86_64'
variables:
- ARCH: "amd64"
- TAG: "android"
- CONTEXT_DIR: "docker/android/"
- DOCKERFILE: "docker/android/Dockerfile"
- extends: .base
+ 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/**/*
-include: "gitlab/ci_template.yml"
+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/**/*
-.build local:
- extends: '.build'
- when: 'manual'
+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/**/*
-# Test the build job against the latest build image tag and the local manifest
-build fedora x86_64 local:
- extends: '.build local'
- stage: 'build'
- image: "${CI_REGISTRY_IMAGE}/amd64/fedora:latest"
- except:
- refs:
- - "master@gstreamer/gst-ci"
-
-build cerbero fedora x86_64 local:
- extends: '.cerbero fedora x86_64'
- image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest"
- when: 'manual'
- except:
- refs:
- - "master@gstreamer/gst-ci"
-
-build cerbero android universal local:
- extends: '.cerbero android universal'
- image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest"
- when: 'manual'
- except:
- refs:
- - "master@gstreamer/gst-ci"
-
-build cerbero cross win32 local:
- extends: '.cerbero cross win32'
- image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest"
- when: 'manual'
- except:
- refs:
- - "master@gstreamer/gst-ci"
-
-build cerbero cross win64 local:
- extends: '.cerbero cross win64'
- image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest"
- when: 'manual'
- except:
- refs:
- - "master@gstreamer/gst-ci"
-
-.test fedora x86_64 local:
- image: '${CI_REGISTRY_IMAGE}/amd64/fedora:latest'
- extends: '.test'
- dependencies:
- - build fedora x86_64 local
- when: 'manual'
- except:
- refs:
- - "master@gstreamer/gst-ci"
-
-check fedora local:
- extends: '.test fedora x86_64 local'
- variables:
- TEST_SUITE: 'check.gst*'
-
-android universal examples local:
- extends: '.android universal examples'
- image: "${CI_REGISTRY_IMAGE}/amd64/android:latest"
- dependencies:
- - "build cerbero android universal local"
- when: 'manual'
- except:
- refs:
- - "master@gstreamer/gst-ci"
-
-integration testsuites fedora local:
- extends: '.test fedora x86_64 local'
- before_script:
- - rm -f gst-build/build/subprojects/gstreamer-vaapi/gst/vaapi/libgstvaapi.so
- variables:
- EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures"
- TEST_SUITE: "validate ges"
+# ---- Integration ----- #
+
+.documentation:
+ extends: '.build fedora x86_64'
+ variables:
+ MESON_ARGS: *simple_build
+ MESON_BUILDTYPE_ARGS: "-Ddoc=enabled -Drs=enabled -Dgst-docs:fatal_warnings=true"
+ # Disable werror for the docs build, we don't need it
+ MESON_GST_WERROR: ''
+ 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 subprojects/
+ - echo $MESON_ARGS
+ - meson build/ $MESON_ARGS
+ - ccache --show-stats
+
+ - ./gst-env.py ninja -C build/ plugins_doc_caches
+ # Ignore modifications to wrap files made by meson
+ - git checkout subprojects/*.wrap
+ - ./ci/scripts/check-documentation-diff.py
+
+ - ./gst-env.py ninja -C build subprojects/gst-docs/GStreamer-doc
+ - mv build/subprojects/gst-docs/GStreamer-doc/html documentation/
+
+ artifacts:
+ when: always
+ expire_in: "7 days"
+ paths:
+ - documentation/
+ - plugins-cache-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
+ - ci/gitlab/*.py
+ - 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/**/*
+
+# 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:
+ # 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/**/*