X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=.gitlab-ci.yml;h=87572e1195b5045152fbfbf6e3cf69d14078d95c;hb=92de0e7c496bdd20fb83bd7a17a0ceb43952c67d;hp=92dca4f5f2c38476b5e1e4fc3302090550c2b624;hpb=822706e4733497ed73475710a9d54ce8019486dd;p=platform%2Fupstream%2Fgstreamer.git diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 92dca4f..87572e1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,195 +1,762 @@ -include: "gitlab/ci_template.yml" +include: + - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/14731f78c23c7b523a85a26a068ade9ac1ecd2f3/templates/fedora.yml" + - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/14731f78c23c7b523a85a26a068ade9ac1ecd2f3/templates/debian.yml" stages: - - "build docker" - - "preparation" - - "pre-build" - - "build" - - "test" - # use the binaries in some way - - "integrate" + - 'trigger' + - 'build docker' + - 'preparation' + - 'pre-build' + - 'build' + - 'test' + # Use the resulting binaries + - 'integrate' -test manifest: - variables: - GIT_STRATEGY: fetch +variables: + # Branch to track for modules that have no ref specified in the manifest + GST_UPSTREAM_BRANCH: 'main' + ORC_UPSTREAM_BRANCH: 'master' + + ### + # 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, its enough + # to change any part of the string of the image you want. + ### + FEDORA_TAG: '2021-10-05.0' + INDENT_TAG: '2021-10-04.0' + WINDOWS_TAG: "2021-10-12.0" + + GST_UPSTREAM_REPO: 'gstreamer/gstreamer' + FDO_UPSTREAM_REPO: 'gstreamer/gstreamer' + + FEDORA_AMD64_SUFFIX: 'amd64/fedora' + INDENT_AMD64_SUFFIX: 'amd64/gst-indent' + WINDOWS_AMD64_SUFFIX: 'amd64/windows' + WINDOWS_RUST_AMD64_SUFFIX: 'amd64/windows-rust' + + FEDORA_DOCS_IMAGE: "registry.freedesktop.org/gstreamer/gst-ci/amd64/fedora:2020-07-03.0-master" + WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" + WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$GST_UPSTREAM_REPO/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH" + + RUST_MINIMUM_VERSION: '1.54.0' + RUST_LATEST_VERSION: '1.55.0' + + WINDOWS_RUST_MINIMUM_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_RUST_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH-rust-$RUST_MINIMUM_VERSION" + WINDOWS_RUST_MINIMUM_UPSTREAM_IMAGE: "$CI_REGISTRY/$GST_UPSTREAM_REPO/$WINDOWS_RUST_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH-rust-$RUST_MINIMUM_VERSION" + + WINDOWS_RUST_LATEST_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_RUST_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH-rust-$RUST_LATEST_VERSION" + WINDOWS_RUST_LATEST_UPSTREAM_IMAGE: "$CI_REGISTRY/$GST_UPSTREAM_REPO/$WINDOWS_RUST_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH-rust-$RUST_LATEST_VERSION" + + 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: - - when: 'always' - image: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/test-manifest:2019-10-23-793476' - stage: "preparation" + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" + when: never + - if: '$CI_COMMIT_BRANCH' + +# +# 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: 'trigger' script: - - pytest-3 --junitxml=junit.xml --cov=build_manifest gitlab/build_manifest.py - coverage: '/TOTAL.*\s+(\d+%)$/' - artifacts: - reports: - junit: - - "junit.xml" + - 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"' + # Alway run tests post merged + - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' + # 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: 'DEFAULT_BRANCH=$GST_UPSTREAM_BRANCH bash ci/docker/fedora/prepare.sh' + +fedora amd64 docker: + extends: + - '.fedora image' + - '.fdo.container-build@fedora' + stage: 'build docker' + needs: + - "trigger" + +.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' -.base: - image: 'registry.fedoraproject.org/fedora:31' +gst-indent amd64 docker: extends: - - '.global_ci_policy' - tags: ['gstreamer'] - rules: - - when: 'manual' - allow_failure: true + - '.gst-indent image' + - '.fdo.container-build@debian' + stage: 'build docker' + # Do not depend on the trigger, as we want to run indent always + needs: [] + +windows amd64 docker: + stage: "build docker" + needs: + - "trigger" variables: - STORAGE_DRIVER: 'vfs' - BUILDAH_FORMAT: 'docker' - GIT_STRATEGY: fetch + # 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 + - "1809" 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" + # 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") - - dnf install -y buildah runc - # Newer versions of podman/buildah try to set overlayfs mount options when - # using the vfs driver, and this causes errors. - - sed -i '/^mountopt =.*/d' /etc/containers/storage.conf + - "& 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 + } + +.windows rust docker build: + stage: 'build docker' + needs: + - job: 'windows amd64 docker' + artifacts: false + rules: + - if: '$CI_PROJECT_NAME == "gst-ci"' + 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: 'docker/windows/rust.Dockerfile' + tags: + - 'windows' + - 'shell' + - '1809' + 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", "BASE_IMAGE=$WINDOWS_IMAGE", "--build-arg", "RUST_VERSION=$RUST_VERSION") - - buildah bud --build-arg DEFAULT_BRANCH=${GST_UPSTREAM_BRANCH} -f ${DOCKERFILE} -t ${LATEST} ${CONTEXT_DIR} + - $env:WINDOWS_CONTAINER_SCRIPT_PATH = "$env:CI_PROJECT_DIR\container.ps1" + - echo "Fetching $env:WINDOWS_CONTAINER_SCRIPT_URL" + - Invoke-WebRequest -Uri $env:WINDOWS_CONTAINER_SCRIPT_URL -OutFile $env:WINDOWS_CONTAINER_SCRIPT_PATH - # If we are in a fork, push the image to the reigstry regardless the branch + - "& $env:WINDOWS_CONTAINER_SCRIPT_PATH $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $RUST_IMAGE $RUST_UPSTREAM_IMAGE $DOCKERFILE" - | - if [ "$CI_PROJECT_NAMESPACE" != "gstreamer" ]; then - buildah login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - buildah push ${LATEST} - fi + if (!($?)) { + echo "Failed to build the image" + Exit 1 + } - # Push the images to the upstream registry +windows rust amd64 docker latest stable: + extends: '.windows rust docker build' + variables: + RUST_IMAGE: !reference [variables, "WINDOWS_RUST_LATEST_IMAGE"] + RUST_UPSTREAM_IMAGE: !reference [variables, "WINDOWS_RUST_LATEST_UPSTREAM_IMAGE"] + RUST_VERSION: !reference [variables, "RUST_LATEST_VERSION"] + +windows rust amd64 docker minimum supported version: + extends: '.windows rust docker build' + variables: + RUST_IMAGE: !reference [variables, "WINDOWS_RUST_MINIMUM_IMAGE"] + RUST_UPSTREAM_IMAGE: !reference [variables, "WINDOWS_RUST_MINIMUM_UPSTREAM_IMAGE"] + RUST_VERSION: !reference [variables, "RUST_MINIMUM_VERSION"] + + + +# ---- Preparation ----- # +# +# gst-indent!! +# +gst indent: + extends: + - '.gst-indent image' + - '.fdo.suffixed-image@debian' + stage: 'preparation' + needs: + - job: 'gst-indent amd64 docker' + artifacts: false + script: + # man indent. grep RETURN VALUE, grab a beer on my behalf... + - indent --version || true + - ./scripts/gst-indent-all - | - if [ "$CI_PROJECT_NAMESPACE" = "gstreamer" ]; then - # Tag the image with the git ref - buildah tag ${LATEST} ${_UID}-${CI_COMMIT_REF_NAME} - # Push the tags - buildah login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - buildah push ${_UID}-${CI_COMMIT_REF_NAME} - buildah push ${LATEST} + if git diff --quiet -- ':!subprojects/gst-integration-testsuites/medias' .; then + echo "Code is properly formatted" + else + git diff --color=always -- ':!subprojects/gst-integration-testsuites/medias' . + echo 'style diverges, please run gst-indent first' + exit 1 fi -alpine amd64 manifest builder docker: - stage: "build docker" +# +# build setup templates +# +.build_template: &build + - echo $MESON_ARGS + + - meson build/ $MESON_ARGS + - ninja -C build/ + - ccache --show-stats + +.build_ccache_vars: variables: - ARCH: "amd64" - TAG: "build-manifest" - CONTEXT_DIR: "docker/build_manifest/" - DOCKERFILE: "docker/build_manifest/Dockerfile" - extends: .base + 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' -test manifest amd64 docker: - stage: "build docker" +.base_modules_changes: &modules_changes + - .gitlab-ci.yml + - 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: - ARCH: "amd64" - TAG: "test-manifest" - CONTEXT_DIR: "docker/test_manifest/" - DOCKERFILE: "docker/test_manifest/Dockerfile" - extends: .base + MESON_ARGS: "${DEFAULT_MESON_ARGS} ${MESON_BUILDTYPE_ARGS} ${MESON_GST_WERROR}" + before_script: + - export RUSTUP_HOME="/usr/local/rustup" + - export CARGO_HOME="/usr/local/cargo" + - export PATH="/usr/local/cargo/bin:$PATH" -gst-indent amd64 docker: - stage: "build docker" + - ci/scripts/handle-subprojects-cache.py subprojects/ + # Update subprojects to respect `.wrap` content + - meson subprojects update --reset + script: + *build + 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: + - "fedora amd64 docker" variables: - ARCH: "amd64" - TAG: "gst-indent" - CONTEXT_DIR: "docker/indent/" - DOCKERFILE: "docker/indent/Dockerfile" - extends: .base + MESON_ARGS: *simple_build -fedora amd64 docker: - stage: "build docker" +build nodebug fedora x86_64: + extends: + - '.fedora image' + - '.fdo.suffixed-image@fedora' + - '.build' + needs: + - "fedora amd64 docker" variables: - ARCH: "amd64" - TAG: "fedora" - CONTEXT_DIR: "docker/fedora/" - DOCKERFILE: "docker/fedora/Dockerfile" - extends: .base + MESON_ARGS: "${DEFAULT_MESON_ARGS} -Dsharp=enabled -Dgstreamer:gst_debug=false -Domx=enabled -Dgst-omx:target=generic ${MESON_BUILDTYPE_ARGS} ${MESON_GST_WERROR}" -cerbero fedora amd64 docker: - stage: "build docker" +build clang fedora x86_64: + extends: '.build fedora x86_64' variables: - ARCH: "amd64" - TAG: "cerbero-fedora" - CONTEXT_DIR: "docker/cerbero/" - DOCKERFILE: "docker/cerbero/Dockerfile-fedora" - extends: .base + CC: 'ccache clang' + CXX: 'ccache clang++' -android docker: - stage: "build docker" +.build windows: + image: $WINDOWS_IMAGE + stage: 'build' + tags: + - 'docker' + - 'windows' + - '1809' + needs: + - "windows amd64 docker" + timeout: '45min' variables: - ARCH: "amd64" - TAG: "android" - CONTEXT_DIR: "docker/android/" - DOCKERFILE: "docker/android/Dockerfile" - extends: .base + MESON_ARGS: > + ${DEFAULT_MESON_ARGS} + -Dpython=disabled + -Dlibav=disabled + -Dvaapi=disabled + -Dgst-plugins-base:pango=enabled + -Dgst-plugins-good:cairo=enabled + 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 + before_script: + - ci/scripts/handle-subprojects-cache.py subprojects/ + script: + # 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"," ") + - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && + meson build $env:MESON_ARGS && + ninja -C build" + # XXX: Re-enable when uploading stops timing out + #artifacts: + # expire_in: "7 days" + # when: "always" + # paths: + # - 'build/meson-logs/' -.local_rules: &local_rules +build vs2017 amd64: + extends: '.build windows' + variables: + ARCH: 'amd64' + +build vs2017 x86: + extends: '.build windows' + variables: + ARCH: 'x86' + +build msys2 : + extends: '.build windows' + timeout: '60min' rules: - - if: '$CI_COMMIT_REF_NAME == "master" && $CI_PROJECT_PATH == "gstreamer/gst-ci"' - when: 'never' - - when: 'manual' + - changes: + *modules_changes allow_failure: true + when: 'manual' + script: + # Make sure powershell exists on errors + # https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6 + - $ErrorActionPreference = "Stop" + + # 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" -.local_template: &local_template - <<: *local_rules +# ---- Tests ----- # + +.test: + stage: 'test' + extends: + - '.build_ccache_vars' needs: - - 'manifest' + - "trigger" + variables: + MESON_ARGS: *simple_build -# Test the build job against the latest build image tag and the local manifest -build fedora x86_64 local: - extends: '.build' - stage: 'build' - image: "${CI_REGISTRY_IMAGE}/amd64/fedora:latest" + # 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: '5 days' + expire_in: '14 days' when: always paths: - - "manifest.xml" - - "gst-build/" - <<: *local_template - -build cerbero fedora x86_64 local: - extends: '.cerbero fedora x86_64' - image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest" - <<: *local_template - -build cerbero cross-android universal local: - extends: '.cerbero cross-android universal' - image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest" - <<: *local_template - -build cerbero cross win32 local: - extends: '.cerbero cross win32' - image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest" - <<: *local_template - -build cerbero cross win64 local: - extends: '.cerbero cross win64' - image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest" - <<: *local_template - -# Note: dependencies: will be deprecated in the future, but current manual -# jobs with needs: (even if they are allowed to fail) will leave the pipeline -# pending. -.test fedora x86_64 local: - image: '${CI_REGISTRY_IMAGE}/amd64/fedora:latest' - extends: '.test' - <<: *local_rules - -check fedora local: - extends: '.test fedora x86_64 local' - variables: - TEST_SUITE: 'check.gst*' - -cross-android universal examples local: - extends: '.cross-android universal examples' - image: "${CI_REGISTRY_IMAGE}/amd64/android:latest" - <<: *local_rules - dependencies: - - 'build cerbero cross-android universal local' - -integration testsuites fedora local: - extends: '.test fedora x86_64 local' - before_script: - - rm -f gst-build/build/subprojects/gstreamer-vaapi/gst/vaapi/libgstvaapi.so + - 'meson-logs/' + - 'validate-logs' + reports: + junit: + - "validate-logs/*.xml" + +.test fedora x86_64: + extends: + - '.fedora image' + - '.fdo.suffixed-image@fedora' + - '.test' + needs: + - "fedora amd64 docker" + tags: ['gstreamer'] + +check fedora: + extends: '.test fedora x86_64' variables: - EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures" + TEST_SUITE: "check.gst*" + +integration testsuites fedora: + extends: '.test fedora x86_64' + parallel: 4 + 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: + - *build + - meson test -C build -v test-gst-full + artifacts: + expire_in: "7 days" + when: "always" + paths: + - 'meson-logs/' + +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 + + 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/' + +# 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/* + - 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/**/* + +# ---- Integration ----- # + +.documentation: + image: $FEDORA_DOCS_IMAGE + extends: + - '.build_ccache_vars' + variables: + MESON_ARGS: *simple_build + MESON_BUILDTYPE_ARGS: "-Ddoc=enabled" + CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/" + script: + # FIXME: should rebuild the image with newer versions! + - pip3 install --upgrade hotdoc + - pip3 install --upgrade meson + - *build + - ./gst-env.py ninja -C build/ plugins_doc_caches + - ./ci/scripts/check-documentation-diff.py + - ./gst-env.py hotdoc run --conf-file=build/subprojects/gst-docs/GStreamer-doc.json --fatal-warnings + - 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: [] + 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" + 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/freedesktop_doc_importer.sh + - 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 + extends: + - '.fedora image' + - '.fdo.suffixed-image@fedora' + needs: + - "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/trigger_cerbero_pipeline.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/**/*