diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1fa28f4eab..bf09d980eb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1 +1,886 @@ -include: 'https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/master/gitlab/ci_template.yml' +include: + - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/7ea696055e322cc7aa4bcbe5422b56a198c4bdff/templates/ci-fairy.yml" + +stages: + - 'build docker' + - 'preparation' + - 'pre-build' + - 'build' + - 'test' + # Use the resulting binaries + - 'integrate' + +variables: + # Branch to track for modules that have no ref specified in the manifest + GST_UPSTREAM_BRANCH: 'master' + ORC_UPSTREAM_BRANCH: 'master' + + GIT_LFS_SKIP_SMUDGE: '1' + + ### + # 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-06-30.0' + INDENT_TAG: '2020-10-22.0' + WINDOWS_TAG: "2021-09-09.0" + + GST_UPSTREAM_REPO: 'gstreamer/gst-ci' + + FEDORA_AMD64_SUFFIX: 'amd64/fedora' + INDENT_AMD64_SUFFIX: 'amd64/gst-indent' + WINDOWS_AMD64_SUFFIX: 'amd64/windows' + WINDOWS_RUST_AMD64_SUFFIX: 'amd64/windows-rust' + + FEDORA_IMAGE: "$CI_REGISTRY_IMAGE/$FEDORA_AMD64_SUFFIX:$FEDORA_TAG-$GST_UPSTREAM_BRANCH" + FEDORA_DOCS_IMAGE: "registry.freedesktop.org/gstreamer/gst-ci/amd64/fedora:2020-07-03.0-master" + INDENT_IMAGE: "$CI_REGISTRY_IMAGE/$INDENT_AMD64_SUFFIX:$INDENT_TAG-$GST_UPSTREAM_BRANCH" + 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 + + 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: + rules: + - if: $CI_MERGE_REQUEST_IID + - if: $CI_COMMIT_TAG + - 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 + + +# Script to check if a docker image exists in the upstream registry +# and if so copy it to the forked registry so we can use it +# +# This is copied/adapted from citemplates/templates/fedora.yml +# https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/96b621fe9f57ec2464f8d1a0940446afbf6c8f59/templates/fedora.yml +.check_image: &check_image_exists | + # if-not-exists steps + set -x + + if [[ -z "$GST_FORCE_REBUILD" ]] + then + # disable exit on failure + set +e + + # check if our image is already in the current registry + # we store the sha of the digest and the layers + skopeo inspect docker://$LOCAL_IMAGE | jq '[.Digest, .Layers]' > local_sha + + # check if our image is already in our gst-ci registry fork + skopeo inspect docker://$LOCAL_GST_CI_IMAGE | jq '[.Digest, .Layers]' > local_gst_ci_sha + + # check if our image is already in the upstream registry + if [[ -z "$GST_UPSTREAM_REPO" ]] + then + echo "WARNING! Variable \$GST_UPSTREAM_REPO is undefined, cannot check for images" + else + skopeo inspect docker://$GST_UPSTREAM_IMAGE | jq '[.Digest, .Layers]' > upstream_sha + fi + + # reenable exit on failure + set -e + + # if the upstream repo has an image, ensure we use the same + if [ -s upstream_sha ] + then + + echo "Checking if $LOCAL_IMAGE is up to date" + # ensure we use the same image from upstream + diff upstream_sha local_sha && exit 0 || true + + echo "Copying image from gstreamer/gst-ci to local registry" + # copy the original image into the current project registry namespace + # we do 2 attempts with skopeo copy at most + skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD \ + docker://$GST_UPSTREAM_IMAGE \ + docker://$LOCAL_IMAGE || \ + skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD \ + docker://$GST_UPSTREAM_IMAGE \ + docker://$LOCAL_IMAGE + + exit 0 + fi + + set +x + + # if the local ci fork repo has an image, ensure we use the same + if [ -s local_gst_ci_sha ] + then + echo "Checking if $LOCAL_GST_CI_IMAGE is up to date" + # ensure we use the same image from upstream + diff local_gst_ci_sha local_sha && exit 0 || true + + echo "Copying image from $CI_PROJECT_NAMESPACE/gst-ci to local registry" + # copy the original image into the current project registry namespace + # we do 2 attempts with skopeo copy at most + skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD \ + docker://$LOCAL_GST_CI_IMAGE \ + docker://$LOCAL_IMAGE || \ + skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD \ + docker://$LOCAL_GST_CI_IMAGE \ + docker://$LOCAL_IMAGE + + exit 0 + fi + + # if we have a local image but none in the upstream repo, use our + if [ -s local_sha ] + then + echo "Using $LOCAL_IMAGE" + exit 0 + fi + fi + + +# Build docker images from Dockerfiles +# +# This is copied/adapted from citemplates/templates/fedora.yml +# https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/96b621fe9f57ec2464f8d1a0940446afbf6c8f59/templates/fedora.yml +# +# CITemplates builds uses buildah run/commit workflow to build the images which doesn't +# fit us atm and our images need further adjustment to make use of it. Porting to +# ci-templates is the next step though. +# +# All the documentation from citemplates should be applicable here, so please refer there +.base: + image: "$CI_REGISTRY/freedesktop/ci-templates/buildah:2020-07-20.1" + variables: + STORAGE_DRIVER: 'vfs' + BUILDAH_FORMAT: 'docker' + BUILDAH_ISOLATION: 'chroot' + + GIT_STRATEGY: fetch + script: + - export LOCAL_IMAGE="$CI_REGISTRY_IMAGE/$REPO_SUFFIX:$TAG" + - export LOCAL_GST_CI_IMAGE="$CI_REGISTRY/$CI_PROJECT_NAMESPACE/gst-ci/$REPO_SUFFIX:$TAG" + - export GST_UPSTREAM_IMAGE="$CI_REGISTRY/$GST_UPSTREAM_REPO/$REPO_SUFFIX:$TAG" + + # check if the docker registry is enabled, else the variable will be missing + - | + if [[ -z "$CI_REGISTRY_IMAGE" ]] + then + echo "ERROR! Looks like your repository/fork has disabled Docker Registries." + echo "Pleae enable them by following the documentation from here:" + echo "https://docs.gitlab.com/ee/user/packages/container_registry/#enable-the-container-registry-for-your-project" + exit 1 + fi + + # 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 + + - *check_image_exists + + - echo "Building image $LOCAL_IMAGE" + + - > + buildah bud + --build-arg DEFAULT_BRANCH=$GST_UPSTREAM_BRANCH + --label ci.job_id=$CI_JOB_ID + --label pipeline.url=$CI_PIPELINE_URL + --label git.ref_name=$CI_COMMIT_REF_NAME + --label git.sha=$CI_COMMIT_SHA + --label gitlab.project_path=$CI_PROJECT_PATH + --label gitlab.project_url=$CI_PROJECT_URL + --label fdo.upstream-repo=$GST_UPSTREAM_REPO + -f $DOCKERFILE + -t $LOCAL_IMAGE + $CONTEXT_DIR + + - buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + + # Sanity check + - | + if [ "$CI_PROJECT_PATH" = "gstreamer/gstreamer" ]; then + if [ "$LOCAL_IMAGE" != "$GST_UPSTREAM_IMAGE" ]; then + echo "ERROR!!! AAAAA! THE IMAGE URI DOES NOT MATCH THE EXPECTED UPSTREAM ONE" + echo $LOCAL_IMAGE + echo $GST_UPSTREAM_IMAGE + exit 1 + fi + fi + + - buildah push $LOCAL_IMAGE + +fedora amd64 docker: + stage: "build docker" + variables: + REPO_SUFFIX: "$FEDORA_AMD64_SUFFIX" + TAG: "$FEDORA_TAG-$GST_UPSTREAM_BRANCH" + + CONTEXT_DIR: "ci/docker/fedora/" + DOCKERFILE: "ci/docker/fedora/Dockerfile" + extends: .base + +gst-indent amd64 docker: + stage: "build docker" + variables: + REPO_SUFFIX: "$INDENT_AMD64_SUFFIX" + TAG: "$INDENT_TAG-$GST_UPSTREAM_BRANCH" + + CONTEXT_DIR: "ci/docker/indent/" + DOCKERFILE: "ci/docker/indent/Dockerfile" + extends: .base + +windows amd64 docker: + stage: "build docker" + variables: + 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: + # 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 + } + +.windows rust docker build: + stage: 'build docker' + needs: + - job: 'windows amd64 docker' + artifacts: false + rules: + - if: '$CI_PROJECT_NAME == "gst-ci"' + variables: + 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: '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") + + - $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 + + - "& $env:WINDOWS_CONTAINER_SCRIPT_PATH $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $RUST_IMAGE $RUST_UPSTREAM_IMAGE $DOCKERFILE" + - | + if (!($?)) { + echo "Failed to build the image" + Exit 1 + } + +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: + image: $INDENT_IMAGE + stage: 'preparation' + variables: + GIT_STRATEGY: 'fetch' + GIT_LFS_SKIP_SMUDGE: '1' + script: + # man indent. grep RETURN VALUE, grab a beer on my behalf... + - indent --version || true + - ./scripts/gst-indent-all + - | + if git diff --quiet; then + echo "Code is properly formatted" + else + git diff --color=always + echo 'style diverges, please run gst-indent first' + exit 1 + fi + + rules: + # If the MR is assigned to the Merge bot, trigger the pipeline automatically + - if: '$CI_MERGE_REQUEST_ASSIGNEES == "gstreamer-merge-bot"' + # 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 + # If this matches, it means the pipeline is running against either the main + # or a stable branch, so make it manual + - if: '$CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' + when: 'manual' + +# +# Check "allow-edit" checkbox on merge requests with ci-fairy +# +check allow-edit: + extends: '.fdo.ci-fairy' + needs: [] + stage: 'preparation' + script: + - ci-fairy check-merge-request --require-allow-collaboration + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + +# +# build setup templates +# +.build_template: &build + - echo $MESON_ARGS + + - meson build/ $MESON_ARGS + - ninja -C build/ + - 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' + +.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: + - "gst indent" + # 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 + after_script: + - mv build/meson-logs/ meson-logs + artifacts: + expire_in: "7 days" + when: "always" + paths: + - 'meson-logs/' + +.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' + # 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}" + before_script: + - 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/' + +.build fedora x86_64: + extends: '.build' + image: $FEDORA_IMAGE + variables: + MESON_ARGS: *simple_build + rules: + - changes: + *modules_changes + +build nodebug fedora x86_64: + extends: '.build' + image: $FEDORA_IMAGE + 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 static fedora x86_64: + extends: '.build fedora x86_64' + variables: + MESON_BUILDTYPE_ARGS: "--default-library=static -Dintrospection=disabled -Ddoc=disabled" + +build static nodebug fedora x86_64: + extends: 'build nodebug fedora x86_64' + variables: + MESON_BUILDTYPE_ARGS: "--default-library=static -Dintrospection=disabled -Ddoc=disabled" + +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' + - '1809' + needs: + - "gst indent" + timeout: '45min' + variables: + MESON_ARGS: > + ${DEFAULT_MESON_ARGS} + -Dpython=disabled + -Dlibav=disabled + -Dvaapi=disabled + -Dgst-plugins-base:pango=enabled + -Dgst-plugins-good:cairo=enabled + rules: + - 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/' + +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: + - 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" + + # For some reason docker build hangs if this is included in the image, needs more troubleshooting + - $env:PATH += ';C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\msys64\mingw32\bin' + # Copied from https://github.com/msys2/setup-msys2/blob/master/main.js#L98 + - C:\msys64\usr\bin\bash -c "pacman-key --init && pacman-key --populate msys2 && pacman-key --refresh-keys || true" + - C:\msys64\usr\bin\bash -c "sed -i 's/^CheckSpace/#CheckSpace/g' /etc/pacman.conf" + - echo "Updating MSYS2" + - C:\msys64\usr\bin\bash -c "pacman -Syuu --noconfirm || echo Update failed, ignoring" + - echo "Killing all MSYS2 processes" + - taskkill /F /FI "MODULES eq msys-2.0.dll" + - echo "Completing MSYS2 update" + - C:\msys64\usr\bin\bash -c "pacman -Suu --noconfirm" + - echo "Installing needed MSYS2 packages" + - C:\msys64\usr\bin\bash -c "pacman -Sy --noconfirm --needed mingw-w64-x86_64-toolchain ninja" + + # 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 -c "meson build $env:MESON_ARGS && ninja -C build" + +# ---- Tests ----- # + +.test: + stage: 'test' + extends: + - '.build_ccache_vars' + needs: + - "gst indent" + 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} + --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: + image: $FEDORA_IMAGE + extends: '.test' + tags: ['gstreamer'] + +check fedora: + extends: '.test fedora x86_64' + variables: + TEST_SUITE: "check.gst*" + +integration testsuites fedora: + extends: '.test fedora x86_64' + parallel: 4 + variables: + EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures --check-bugs --parts=${CI_NODE_TOTAL} --part-index=${CI_NODE_INDEX}" + TEST_SUITE: "validate ges" + GIT_LFS_SKIP_SMUDGE: '0' + +# gstreamer-full: +# introspection has been disabled as the static build does not support it. +# See https://gitlab.freedesktop.org/gstreamer/gst-build/-/issues/162 +gstreamer-full: + extends: 'build static fedora x86_64' + stage: integrate + variables: + MESON_ARGS: > + --default-library=static + -Dintrospection=disabled + $MESON_GST_WERROR + rules: + - changes: + - "*" + - scripts/* + - subprojects/gst-ci/**/* + + script: + - *build + - meson test -C build -v test-gst-full + artifacts: + expire_in: "7 days" + when: "always" + paths: + - 'meson-logs/' + +gstreamer-full-minimal: + extends: 'build static fedora x86_64' + stage: integrate + variables: + MESON_ARGS: > + --default-library=static + -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 + rules: + - if: '$CI_PROJECT_NAME =~ /^(gst-build|gst-ci)$/' + + 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/* + - subprojects/gst-ci/**/* + - subprojects/gst-devtools/**/* + - subprojects/gstreamer/**/* + +valgrind base: + extends: '.valgrind fedora x86_64' + variables: + TEST_SUITE: "check.gst-plugins-base\\..*" + rules: + - changes: + - "*" + - scripts/* + - subprojects/gst-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/* + - subprojects/gst-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/* + - subprojects/gst-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/* + - subprojects/gst-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/* + - subprojects/gst-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' + needs: + - "gst indent" + rules: + - changes: + - "*" + - 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/**/* + stage: integrate + variables: + MESON_ARGS: *simple_build + MESON_BUILDTYPE_ARGS: "-Ddoc=enabled" + CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/" + script: + - pip3 install --upgrade hotdoc + - *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 + paths: + - documentation/ + - plugins-cache-diffs/ diff --git a/.indentignore b/.indentignore new file mode 100644 index 0000000000..11ffdb987f --- /dev/null +++ b/.indentignore @@ -0,0 +1,5 @@ +subprojects/gst-plugins-bad/ext/sctp/usrsctp/usrsctplib/ +subprojects/gstreamer-rs/ +subprojects/gstreamer-rs-sys/ +subprojects/gst-plugins-rs/ +subprojects/gstreamer-sharp/ diff --git a/subprojects/gst-ci/.gitlab-ci.yml b/ci/.gitlab-ci.yml similarity index 100% rename from subprojects/gst-ci/.gitlab-ci.yml rename to ci/.gitlab-ci.yml diff --git a/subprojects/gst-ci/README.txt b/ci/README.txt similarity index 100% rename from subprojects/gst-ci/README.txt rename to ci/README.txt diff --git a/subprojects/gst-ci/docker/README b/ci/docker/README similarity index 100% rename from subprojects/gst-ci/docker/README rename to ci/docker/README diff --git a/subprojects/gst-ci/docker/build_manifest/Dockerfile b/ci/docker/build_manifest/Dockerfile similarity index 100% rename from subprojects/gst-ci/docker/build_manifest/Dockerfile rename to ci/docker/build_manifest/Dockerfile diff --git a/subprojects/gst-ci/docker/fedora/Dockerfile b/ci/docker/fedora/Dockerfile similarity index 90% rename from subprojects/gst-ci/docker/fedora/Dockerfile rename to ci/docker/fedora/Dockerfile index 624cfcdcb8..84a1a038dd 100644 --- a/subprojects/gst-ci/docker/fedora/Dockerfile +++ b/ci/docker/fedora/Dockerfile @@ -4,7 +4,7 @@ ENV RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH -ARG DEFAULT_BRANCH="master" +ARG DEFAULT_BRANCH="main" COPY prepare.sh cleanup.sh /root/ diff --git a/subprojects/gst-ci/docker/android/cleanup.sh b/ci/docker/fedora/cleanup.sh similarity index 100% rename from subprojects/gst-ci/docker/android/cleanup.sh rename to ci/docker/fedora/cleanup.sh diff --git a/subprojects/gst-ci/docker/fedora/prepare.sh b/ci/docker/fedora/prepare.sh similarity index 93% rename from subprojects/gst-ci/docker/fedora/prepare.sh rename to ci/docker/fedora/prepare.sh index a85f3e495d..3327e21e0c 100644 --- a/subprojects/gst-ci/docker/fedora/prepare.sh +++ b/ci/docker/fedora/prepare.sh @@ -7,7 +7,7 @@ sed -i "s/tsflags=nodocs//g" /etc/dnf/dnf.conf dnf install -y git-core ninja-build dnf-plugins-core python3-pip # Configure git for various usage -git config --global user.email "gst-build@gstreamer.net" +git config --global user.email "gstreamer@gstreamer.net" git config --global user.name "Gstbuild Runner" # Add rpm fusion repositories in order to access all of the gst plugins @@ -232,13 +232,13 @@ rustup --version cargo --version rustc --version -# get gst-build and make all subprojects available -git clone -b ${DEFAULT_BRANCH} https://gitlab.freedesktop.org/gstreamer/gst-build.git /gst-build/ -cd /gst-build -meson subprojects download +# get gstreamer and make all subprojects available +git clone -b ${DEFAULT_BRANCH} https://gitlab.freedesktop.org/gstreamer/gstreamer.git /gstreamer +meson subprojects download --sourcedir /gstreamer +/gstreamer/ci/scripts/handle-subprojects-cache.py --build /gstreamer/subprojects/ # Run git gc to prune unwanted refs and reduce the size of the image for i in $(find subprojects/ -mindepth 1 -maxdepth 1 -type d); do git -C $i gc --aggressive || true; -done \ No newline at end of file +done diff --git a/subprojects/gst-ci/docker/indent/Dockerfile b/ci/docker/indent/Dockerfile similarity index 100% rename from subprojects/gst-ci/docker/indent/Dockerfile rename to ci/docker/indent/Dockerfile diff --git a/subprojects/gst-ci/docker/test_manifest/Dockerfile b/ci/docker/test_manifest/Dockerfile similarity index 100% rename from subprojects/gst-ci/docker/test_manifest/Dockerfile rename to ci/docker/test_manifest/Dockerfile diff --git a/subprojects/gst-ci/docker/windows/.dockerignore b/ci/docker/windows/.dockerignore similarity index 100% rename from subprojects/gst-ci/docker/windows/.dockerignore rename to ci/docker/windows/.dockerignore diff --git a/subprojects/gst-ci/docker/windows/Dockerfile b/ci/docker/windows/Dockerfile similarity index 95% rename from subprojects/gst-ci/docker/windows/Dockerfile rename to ci/docker/windows/Dockerfile index e36e4fa01c..9637c2e7bb 100644 --- a/subprojects/gst-ci/docker/windows/Dockerfile +++ b/ci/docker/windows/Dockerfile @@ -14,7 +14,7 @@ RUN 'git config --global user.email "cirunner@gstreamer.freedesktop.org"; git co COPY install_toolchain.ps1 C:\ RUN C:\install_toolchain.ps1 -ARG DEFAULT_BRANCH="master" +ARG DEFAULT_BRANCH="main" COPY prepare_gst_env.ps1 C:\ RUN C:\prepare_gst_env.ps1 diff --git a/subprojects/gst-ci/docker/windows/build_image.ps1 b/ci/docker/windows/build_image.ps1 similarity index 93% rename from subprojects/gst-ci/docker/windows/build_image.ps1 rename to ci/docker/windows/build_image.ps1 index a4be56c1fa..0fadb7e284 100644 --- a/subprojects/gst-ci/docker/windows/build_image.ps1 +++ b/ci/docker/windows/build_image.ps1 @@ -1,6 +1,6 @@ $env:ErrorActionPreference='Stop' -$env:DEFAULT_BRANCH='master' +$env:DEFAULT_BRANCH='main' $env:VERSION='test' $env:tag ="registry.freedesktop.org/gstreamer/gst-ci/amd64/windows:$env:VERSION-$env:DEFAULT_BRANCH" $env:rust_tag ="registry.freedesktop.org/gstreamer/gst-ci/amd64/windows-rust:$env:VERSION-$env:DEFAULT_BRANCH" diff --git a/subprojects/gst-ci/docker/windows/container.ps1 b/ci/docker/windows/container.ps1 similarity index 96% rename from subprojects/gst-ci/docker/windows/container.ps1 rename to ci/docker/windows/container.ps1 index e5dc2cd835..1386495c72 100644 --- a/subprojects/gst-ci/docker/windows/container.ps1 +++ b/ci/docker/windows/container.ps1 @@ -1,5 +1,5 @@ # Copied from mesa, big kudos -# +# # https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/.gitlab-ci/windows/mesa_container.ps1 # https://gitlab.freedesktop.org/mesa/mesa/-/blob/34e3e164936d1d3cef267da7780e87f062fedf39/.gitlab-ci/windows/mesa_container.ps1 @@ -43,7 +43,7 @@ if ($?) { } Write-Host "No image found at $registry_user_image or $registry_central_image; rebuilding" -docker --config "windows-docker.conf" build $DOCKER_BUILD_ARGS --no-cache -t "$registry_user_image" -f "$dockerfile" "./docker/windows" +docker --config "windows-docker.conf" build $DOCKER_BUILD_ARGS --no-cache -t "$registry_user_image" -f "$dockerfile" "./ci/docker/windows" if (!$?) { Write-Host "Container build failed" docker --config "windows-docker.conf" logout "$registry_uri" diff --git a/subprojects/gst-ci/docker/windows/install_choco.ps1 b/ci/docker/windows/install_choco.ps1 similarity index 100% rename from subprojects/gst-ci/docker/windows/install_choco.ps1 rename to ci/docker/windows/install_choco.ps1 diff --git a/subprojects/gst-ci/docker/windows/install_gst.ps1 b/ci/docker/windows/install_gst.ps1 similarity index 100% rename from subprojects/gst-ci/docker/windows/install_gst.ps1 rename to ci/docker/windows/install_gst.ps1 diff --git a/subprojects/gst-ci/docker/windows/install_toolchain.ps1 b/ci/docker/windows/install_toolchain.ps1 similarity index 100% rename from subprojects/gst-ci/docker/windows/install_toolchain.ps1 rename to ci/docker/windows/install_toolchain.ps1 diff --git a/subprojects/gst-ci/docker/windows/prepare_cerbero_env.sh b/ci/docker/windows/prepare_cerbero_env.sh similarity index 100% rename from subprojects/gst-ci/docker/windows/prepare_cerbero_env.sh rename to ci/docker/windows/prepare_cerbero_env.sh diff --git a/ci/docker/windows/prepare_gst_env.ps1 b/ci/docker/windows/prepare_gst_env.ps1 new file mode 100644 index 0000000000..7b19497297 --- /dev/null +++ b/ci/docker/windows/prepare_gst_env.ps1 @@ -0,0 +1,17 @@ +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; + +# FIXME: Python fails to validate github.com SSL certificate, unless we first +# run a dummy download to force refreshing Windows' CA database. +# See: https://bugs.python.org/issue36137 +(New-Object System.Net.WebClient).DownloadString("https://github.com") >$null + +Write-Host "Cloning GStreamer" +git clone -b $env:DEFAULT_BRANCH https://gitlab.freedesktop.org/gstreamer/gstreamer.git C:\gstreamer + +# download the subprojects to try and cache them +Write-Host "Downloading subprojects" +meson subprojects download --sourcedir /gstreamer + +Write-Host "Caching subprojects into /subprojects/" +python /gstreamer/ci/scripts/handle-subprojects-cache.py --build /gstreamer/subprojects/ +Remove-Item -Recurse -Force C:\gstreamer diff --git a/subprojects/gst-ci/docker/windows/rust.Dockerfile b/ci/docker/windows/rust.Dockerfile similarity index 94% rename from subprojects/gst-ci/docker/windows/rust.Dockerfile rename to ci/docker/windows/rust.Dockerfile index 5e7425fef9..f3742454a3 100644 --- a/subprojects/gst-ci/docker/windows/rust.Dockerfile +++ b/ci/docker/windows/rust.Dockerfile @@ -5,7 +5,7 @@ ARG BASE_IMAGE="inavlid.gstreamer.freedesktop.org/invalid" FROM $BASE_IMAGE -ARG DEFAULT_BRANCH="master" +ARG DEFAULT_BRANCH="main" ARG RUST_VERSION="invalid" COPY install_gst.ps1 C:\ diff --git a/subprojects/gst-ci/fuzzing/README.txt b/ci/fuzzing/README.txt similarity index 100% rename from subprojects/gst-ci/fuzzing/README.txt rename to ci/fuzzing/README.txt diff --git a/subprojects/gst-ci/fuzzing/build-oss-fuzz.sh b/ci/fuzzing/build-oss-fuzz.sh similarity index 100% rename from subprojects/gst-ci/fuzzing/build-oss-fuzz.sh rename to ci/fuzzing/build-oss-fuzz.sh diff --git a/subprojects/gst-ci/fuzzing/gst-discoverer.c b/ci/fuzzing/gst-discoverer.c similarity index 100% rename from subprojects/gst-ci/fuzzing/gst-discoverer.c rename to ci/fuzzing/gst-discoverer.c diff --git a/subprojects/gst-ci/fuzzing/localfuzzer.c b/ci/fuzzing/localfuzzer.c similarity index 100% rename from subprojects/gst-ci/fuzzing/localfuzzer.c rename to ci/fuzzing/localfuzzer.c diff --git a/subprojects/gst-ci/fuzzing/typefind.c b/ci/fuzzing/typefind.c similarity index 100% rename from subprojects/gst-ci/fuzzing/typefind.c rename to ci/fuzzing/typefind.c diff --git a/subprojects/gst-ci/gitlab/build_manifest.py b/ci/gitlab/build_manifest.py similarity index 100% rename from subprojects/gst-ci/gitlab/build_manifest.py rename to ci/gitlab/build_manifest.py diff --git a/subprojects/gst-ci/gitlab/clone_manifest_ref.py b/ci/gitlab/clone_manifest_ref.py similarity index 100% rename from subprojects/gst-ci/gitlab/clone_manifest_ref.py rename to ci/gitlab/clone_manifest_ref.py diff --git a/subprojects/gst-ci/gitlab/freedesktop_doc_importer.sh b/ci/gitlab/freedesktop_doc_importer.sh similarity index 100% rename from subprojects/gst-ci/gitlab/freedesktop_doc_importer.sh rename to ci/gitlab/freedesktop_doc_importer.sh diff --git a/subprojects/gst-ci/jenkins/Jenkinsfile-cerbero-debian b/ci/jenkins/Jenkinsfile-cerbero-debian similarity index 100% rename from subprojects/gst-ci/jenkins/Jenkinsfile-cerbero-debian rename to ci/jenkins/Jenkinsfile-cerbero-debian diff --git a/subprojects/gst-ci/jenkins/Jenkinsfile-master-fedora b/ci/jenkins/Jenkinsfile-master-fedora similarity index 100% rename from subprojects/gst-ci/jenkins/Jenkinsfile-master-fedora rename to ci/jenkins/Jenkinsfile-master-fedora diff --git a/subprojects/gst-ci/jenkins/Jenkinsfile-master-ubuntu b/ci/jenkins/Jenkinsfile-master-ubuntu similarity index 100% rename from subprojects/gst-ci/jenkins/Jenkinsfile-master-ubuntu rename to ci/jenkins/Jenkinsfile-master-ubuntu diff --git a/subprojects/gst-ci/jenkins/Jenkinsfile-meson-fedora b/ci/jenkins/Jenkinsfile-meson-fedora similarity index 100% rename from subprojects/gst-ci/jenkins/Jenkinsfile-meson-fedora rename to ci/jenkins/Jenkinsfile-meson-fedora diff --git a/ci/scripts/check-documentation-diff.py b/ci/scripts/check-documentation-diff.py new file mode 100755 index 0000000000..238c958d1e --- /dev/null +++ b/ci/scripts/check-documentation-diff.py @@ -0,0 +1,20 @@ +#!/usr/bin/python3 +import os, subprocess, sys + +if __name__ == "__main__": + diffsdir = '../plugins-cache-diffs' + os.makedirs(diffsdir, exist_ok=True) + res = 0 + try: + subprocess.check_call(['git', 'diff', '--quiet'] ) + except subprocess.CalledProcessError: + diffname = os.path.join(diffsdir, 'plugins_cache.diff') + res += 1 + with open(diffname, 'w') as diff: + subprocess.check_call(['git', 'diff'], stdout=diff) + print('\033[91mYou have a diff in the documentation cache. Please update with:\033[0m') + print(' $ curl %s/%s | git apply -' % (os.environ['CI_ARTIFACTS_URL'], diffname.replace('../', ''))) + + if res != 0: + print('(note that it might take a few minutes for artefacts to be available on the server)\n') + sys.exit(res) \ No newline at end of file diff --git a/ci/scripts/handle-subprojects-cache.py b/ci/scripts/handle-subprojects-cache.py new file mode 100755 index 0000000000..3bec5bfe78 --- /dev/null +++ b/ci/scripts/handle-subprojects-cache.py @@ -0,0 +1,58 @@ +#!/usr/bin/python + +""" +Copies current subproject git repository to create a cache +""" + +import shutil +import os +import sys +import argparse + +DEST = "/subprojects" +PARSER = argparse.ArgumentParser() +PARSER.add_argument('subprojects_dir') +PARSER.add_argument('--build', action="store_true", default=False) + +def create_cache_in_image(options): + os.makedirs(DEST, exist_ok=True) + print("Creating cache from %s" % options.subprojects_dir) + for project_name in os.listdir(options.subprojects_dir): + project_path = os.path.join(options.subprojects_dir, project_name) + + if project_name != "packagecache" and not os.path.exists(os.path.join(project_path, '.git')): + continue + + print("Copying %s" % project_name) + shutil.copytree(project_path, os.path.join(DEST, project_name)) + + +def copy_cache(options): + for path in [DEST, "/gst-build/subprojects", r"C:\gst-build\subprojects"]: # FIXME Remove when not needed anymore. + if not os.path.exists(path): + print("%s doesn't exist." % path) + continue + + for project_name in os.listdir(path): + project_path = os.path.join(options.subprojects_dir, project_name) + + cache_dir = os.path.join(path, project_name) + if os.path.exists(project_path): + print("- Ignoring %s" % cache_dir) + continue + + if not os.path.isdir(cache_dir): + print("- Ignoring %s" % cache_dir) + continue + + print("Copying from %s" % cache_dir) + shutil.copytree(cache_dir, project_path) + + +if __name__ == "__main__": + options = PARSER.parse_args() + + if options.build: + create_cache_in_image(options) + else: + copy_cache(options) \ No newline at end of file diff --git a/scripts/gst-indent-all b/scripts/gst-indent-all new file mode 100755 index 0000000000..c0580b1aed --- /dev/null +++ b/scripts/gst-indent-all @@ -0,0 +1,15 @@ +#!/bin/bash + +filter_cmd=("cat") +if test -f ".indentignore"; then + filter_args=() + while read -r line; do + if test -n "$line"; then + filter_args+=("-e" "$line") + fi + done < ".indentignore" + if [[ ${#filter_args[@]} -gt 0 ]]; then + filter_cmd=("grep" "-v" "${filter_args[@]}") + fi +fi +git ls-files "*.c" | "${filter_cmd[@]}" | xargs -d '\n' gst-indent diff --git a/subprojects/gst-ci/.gitignore b/subprojects/gst-ci/.gitignore deleted file mode 100644 index b25c15b81f..0000000000 --- a/subprojects/gst-ci/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*~ diff --git a/subprojects/gst-ci/docker/android/Dockerfile b/subprojects/gst-ci/docker/android/Dockerfile deleted file mode 100644 index f874ff01d2..0000000000 --- a/subprojects/gst-ci/docker/android/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM registry.fedoraproject.org/fedora:31 - -ENV ANDROID_HOME=/android/sdk -ENV ANDROID_NDK_HOME=/android/ndk - -ARG DEFAULT_BRANCH="master" - -COPY prepare.sh cleanup.sh /root/ - -RUN /usr/bin/sh /root/prepare.sh && \ - /usr/bin/sh /root/cleanup.sh diff --git a/subprojects/gst-ci/docker/android/prepare.sh b/subprojects/gst-ci/docker/android/prepare.sh deleted file mode 100644 index 953bc5ec5a..0000000000 --- a/subprojects/gst-ci/docker/android/prepare.sh +++ /dev/null @@ -1,56 +0,0 @@ -set -eux - -dnf install -y \ - file \ - git-core \ - java-1.8.0-openjdk-devel \ - lbzip2 \ - make \ - pkg-config \ - unzip \ - which \ - xz - -mkdir -p /android/sources - -curl -o /android/sources/android-ndk.zip https://dl.google.com/android/repository/android-ndk-r21-linux-x86_64.zip -unzip /android/sources/android-ndk.zip -d ${ANDROID_NDK_HOME}/ -# remove the intermediate versioned directory -mv ${ANDROID_NDK_HOME}/*/* ${ANDROID_NDK_HOME}/ - -curl -o /android/sources/android-sdk-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip -unzip /android/sources/android-sdk-tools.zip -d ${ANDROID_HOME}/ -mkdir -p ${ANDROID_HOME}/licenses - -# Accept licenses. Values taken from: -# $ANDROID_HOME/tools/bin/sdkmanager --sdk_root=$ANDROID_HOME --licenses -# cd $ANDROID_HOME -# for f in licenses/*; do echo "echo \"$(cat $f | tr -d '\n')\" > \${ANDROID_HOME}/$f"; done -echo "601085b94cd77f0b54ff86406957099ebe79c4d6" > ${ANDROID_HOME}/licenses/android-googletv-license -echo "859f317696f67ef3d7f30a50a5560e7834b43903" > ${ANDROID_HOME}/licenses/android-sdk-arm-dbt-license -echo "24333f8a63b6825ea9c5514f83c2829b004d1fee" > ${ANDROID_HOME}/licenses/android-sdk-license -echo "84831b9409646a918e30573bab4c9c91346d8abd" > ${ANDROID_HOME}/licenses/android-sdk-preview-license -echo "33b6a2b64607f11b759f320ef9dff4ae5c47d97a" > ${ANDROID_HOME}/licenses/google-gdk-license -echo "e9acab5b5fbb560a72cfaecce8946896ff6aab9d" > ${ANDROID_HOME}/licenses/mips-android-sysimage-license - -# pre-cache deps -export GSTREAMER_ROOT_ANDROID=/android/sources/gstreamer-android -curl -o /android/sources/gstreamer-android.tar.xz https://gstreamer.freedesktop.org/data/pkg/android/1.16.2/gstreamer-1.0-android-universal-1.16.2.tar.xz -mkdir $GSTREAMER_ROOT_ANDROID -tar -xvf /android/sources/gstreamer-android.tar.xz -C $GSTREAMER_ROOT_ANDROID -ls $GSTREAMER_ROOT_ANDROID - -git clone -b ${DEFAULT_BRANCH} https://gitlab.freedesktop.org/gstreamer/gst-examples.git /android/sources/gst-examples -chmod +x /android/sources/gst-examples/playback/player/android/gradlew -/android/sources/gst-examples/playback/player/android/gradlew --no-daemon --project-dir /android/sources/gst-examples/playback/player/android dependencies --refresh-dependencies - -chmod +x /android/sources/gst-examples/vulkan/android/gradlew -/android/sources/gst-examples/vulkan/android/gradlew --no-daemon --project-dir /android/sources/gst-examples/vulkan/android dependencies --refresh-dependencies - -git clone -b ${DEFAULT_BRANCH} https://gitlab.freedesktop.org/gstreamer/gst-docs.git /android/sources/gst-docs -chmod +x /android/sources/gst-docs/examples/tutorials/android/gradlew -/android/sources/gst-docs/examples/tutorials/android/gradlew --no-daemon --project-dir /android/sources/gst-docs/examples/tutorials/android dependencies --refresh-dependencies - -unset GSTREAMER_ROOT_ANDROID - -rm -rf /android/sources diff --git a/subprojects/gst-ci/docker/cerbero/Dockerfile-fedora b/subprojects/gst-ci/docker/cerbero/Dockerfile-fedora deleted file mode 100644 index c903b9562b..0000000000 --- a/subprojects/gst-ci/docker/cerbero/Dockerfile-fedora +++ /dev/null @@ -1,35 +0,0 @@ -FROM registry.fedoraproject.org/fedora:31 - -ENV TERM="dumb" - -ARG DEFAULT_BRANCH="master" - -# System setup -RUN echo "fastestmirror=true" >> /etc/dnf/dnf.conf && \ - dnf upgrade -y && \ - dnf install -y sudo git lbzip2 rsync wine which - -# Configure git for various usage -RUN git config --global user.email "cerbero@gstreamer.freedesktop.org" && \ - git config --global user.name "Cerbero Build System" - -RUN git clone -b ${DEFAULT_BRANCH} https://gitlab.freedesktop.org/gstreamer/cerbero.git && \ - mkdir $HOME/.cerbero && \ - echo "allow_parallel_build=True" > $HOME/.cerbero/cerbero.cbc && \ - echo "use_ccache=True" >> $HOME/.cerbero/cerbero.cbc && \ - cd cerbero && \ - echo "local_sources=\"/cerbero/cerbero-sources\"" >> localconf.cbc && \ - echo "home_dir=\"/cerbero/cerbero-build\"" >> localconf.cbc && \ - ./cerbero-uninstalled -t -c localconf.cbc fetch-bootstrap --jobs=4 && \ - ./cerbero-uninstalled -t -c localconf.cbc fetch-package --jobs=4 gstreamer-1.0 && \ - ./cerbero-uninstalled -t -c localconf.cbc bootstrap -y --build-tools=no --toolchains=no && \ - ./cerbero-uninstalled -t -c localconf.cbc -c config/cross-win32.cbc fetch-bootstrap --jobs=4 && \ - ./cerbero-uninstalled -t -c localconf.cbc -c config/cross-win32.cbc fetch-package --jobs=4 gstreamer-1.0 && \ - ./cerbero-uninstalled -t -c localconf.cbc -c config/cross-win64.cbc fetch-bootstrap --jobs=4 && \ - ./cerbero-uninstalled -t -c localconf.cbc -c config/cross-win64.cbc fetch-package --jobs=4 gstreamer-1.0 && \ - ./cerbero-uninstalled -t -c localconf.cbc -c config/cross-android-universal.cbc fetch-bootstrap --jobs=4 && \ - ./cerbero-uninstalled -t -c localconf.cbc -c config/cross-android-universal.cbc fetch-package --jobs=4 gstreamer-1.0 && \ - cd .. && \ - rm -rf /cerbero/cerbero-build/{dist,logs,sources} && \ - rm -f /cerbero/cerbero-build/{linux,windows,android}*.cache && \ - dnf clean all diff --git a/subprojects/gst-ci/docker/fedora/cleanup.sh b/subprojects/gst-ci/docker/fedora/cleanup.sh deleted file mode 100644 index a60a9fcf4b..0000000000 --- a/subprojects/gst-ci/docker/fedora/cleanup.sh +++ /dev/null @@ -1,7 +0,0 @@ -set -eux - -echo "Removing DNF cache" -dnf clean all - -rm -R /root/* -rm -rf /var/cache/dnf /var/log/dnf* diff --git a/subprojects/gst-ci/docker/windows/prepare_gst_env.ps1 b/subprojects/gst-ci/docker/windows/prepare_gst_env.ps1 deleted file mode 100644 index 652fe2b4f7..0000000000 --- a/subprojects/gst-ci/docker/windows/prepare_gst_env.ps1 +++ /dev/null @@ -1,24 +0,0 @@ -[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; - -# Download gst-build and all its subprojects -git clone -b $env:DEFAULT_BRANCH https://gitlab.freedesktop.org/gstreamer/gst-build.git C:\gst-build -if (!$?) { - Write-Host "Failed to clone gst-build" - Exit 1 -} - -# download the subprojects to try and cache them -meson subprojects download --sourcedir C:\gst-build -if (!$?) { - Write-Host "Failed to download the subprojects" - Exit 1 -} - -# Remove files that will conflict with a fresh clone on the runner side -Remove-Item -Force 'C:/gst-build/subprojects/*.wrap' -Remove-Item -Recurse -Force 'C:/gst-build/subprojects/win-nasm' -Remove-Item -Recurse -Force 'C:/gst-build/subprojects/win-flex-bison-binaries' -Remove-Item -Recurse -Force 'C:/gst-build/subprojects/macos-bison-binary' - -Move-Item C:\gst-build\subprojects C:\subprojects -Remove-Item -Recurse -Force C:\gst-build diff --git a/subprojects/gst-ci/gitlab/cerbero_setup.sh b/subprojects/gst-ci/gitlab/cerbero_setup.sh deleted file mode 100644 index 96fc7390df..0000000000 --- a/subprojects/gst-ci/gitlab/cerbero_setup.sh +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/bash - -set -ex - -show_ccache_sum() { - if [[ -n ${HAVE_CCACHE} ]]; then - ccache -s - fi -} - -# XXX: This is copied and modified from the cerbero-uninstalled script -# Use `mount` to get a list of MSYS mount points that the MSYS shell uses. -# That's our reference point for translating from MSYS paths to Win32 paths. -# We assume that the MSYS mount point directories are only in the filesystem -# root. This will break if people add their own custom mount points beyond what -# MSYS automatically creates, which is highly unlikely. -# -# /d -> d:/ -# /c -> c:/ -# /d/projects/cerbero -> d:/projects/cerbero/ -# /home/USERNAME/cerbero -> C:\\MinGW\\msys\\1.0/home/USERNAME/ -# /mingw -> C:\\MinGW/ -# /mingw/bin/foobar -> C:\\MinGW\\bin/foobar/ -# /tmp/baz -> C:\\Users\\USERNAME\\AppData\\Local\\Temp/baz/ -msys_dir_to_win32() { - set -e - local msys_path stripped_path mount_point path mounted_path - # If the path is already a native path, just return that - if [[ $1 == ?:/* ]] || [[ $1 == ?:\\* ]]; then - echo $1 - return - fi - # Convert /c or /mingw etc to /c/ or /mingw/ etc; gives us a necessary - # anchor to split the path into components - msys_path="$1/" - # Strip leading slash - stripped_path="${msys_path#/}" - # Get the first path component, which may be a mount point - mount_point="/${stripped_path%%/*}" - # Get the path inside the mountp oint - path="/${stripped_path#*/}" - mounted_path="$(mount | sed -n "s|\(.*\) on $mount_point type.*|\1|p")" - # If it's not a mounted path (like /c or /tmp or /mingw), then it's in the - # general MSYS root mount - if [[ -z $mounted_path ]]; then - mounted_path="$(mount | sed -n "s|\(.*\) on / type.*|\1|p")" - path="$1" - fi - echo ${mounted_path}${path%/} -} - -# Print the working directory in the native OS path format, but with forward -# slashes -pwd_native() { - if [[ -n "$MSYSTEM" ]]; then - msys_dir_to_win32 "$(pwd)" - else - pwd - fi -} - -fix_build_tools() { - if [[ $(uname) == Darwin ]]; then - # Bison needs these env vars set for the build-tools prefix to be - # relocatable, and we only build it on macOS. On Linux we install it - # using the package manager, and on Windows we use the MSYS Bison. - export M4="$(pwd)/${CERBERO_HOME}/build-tools/bin/m4" - export BISON_PKGDATADIR="$(pwd)/${CERBERO_HOME}/build-tools/share/bison" - fi -} - -# Produces runtime and devel tarball packages for linux/android or .pkg for macos -cerbero_package_and_check() { - $CERBERO $CERBERO_ARGS package --offline ${CERBERO_PACKAGE_ARGS} -o "$(pwd_native)" gstreamer-1.0 - - # Run gst-inspect-1.0 for some basic checks. Can't do this for cross-(android|ios)-universal, of course. - if [[ $CONFIG != *universal* ]]; then - $CERBERO $CERBERO_ARGS run $CERBERO_RUN_WRAPPER gst-inspect-1.0$CERBERO_RUN_SUFFIX --version - $CERBERO $CERBERO_ARGS run $CERBERO_RUN_WRAPPER gst-inspect-1.0$CERBERO_RUN_SUFFIX - fi - - show_ccache_sum -} - -cerbero_before_script() { - pwd - ls -lha - - # Copy cerbero git repo stored on the image - cp -a "${CERBERO_HOST_DIR}/.git" . - git checkout . - git status - - # If there's no cerbero-sources directory in the runner cache, copy it from - # the image cache - if ! [[ -d ${CERBERO_SOURCES} ]]; then - time cp -a "${CERBERO_HOST_DIR}/${CERBERO_SOURCES}" . - fi - du -sch "${CERBERO_SOURCES}" || true - - echo "home_dir = \"$(pwd_native)/${CERBERO_HOME}\"" > localconf.cbc - echo "local_sources = \"$(pwd_native)/${CERBERO_SOURCES}\"" >> localconf.cbc - if [[ $CONFIG == win??.cbc ]]; then - # Visual Studio 2017 build tools install path - echo 'vs_install_path = "C:/BuildTools"' >> localconf.cbc - echo 'vs_install_version = "vs15"' >> localconf.cbc - fi - cat localconf.cbc - - time ./cerbero-uninstalled --self-update manifest.xml - - # GitLab runner does not always wipe the image after each job, so do that - # to ensure we don't have any leftover data from a previous job such as - # a dirty builddir, or tarballs/pkg files, leftover files from an old - # cerbero commit, etc. Skip the things we actually need to keep. - time git clean -xdff -e cerbero_setup.sh -e manifest.xml -e localconf.cbc -e "${CERBERO_SOURCES}" -} - -cerbero_script() { - show_ccache_sum - - $CERBERO $CERBERO_ARGS show-config - $CERBERO $CERBERO_ARGS fetch-bootstrap --jobs=4 - $CERBERO $CERBERO_ARGS fetch-package --jobs=4 --deps gstreamer-1.0 - du -sch "${CERBERO_SOURCES}" || true - - $CERBERO $CERBERO_ARGS fetch-cache --branch "${GST_UPSTREAM_BRANCH}" - - if [[ -n ${CERBERO_OVERRIDDEN_DIST_DIR} && -d "${CERBERO_HOME}/dist/${ARCH}" ]]; then - mkdir -p "${CERBERO_OVERRIDDEN_DIST_DIR}" - time rsync -aH "${CERBERO_HOME}/dist/${ARCH}/" "${CERBERO_OVERRIDDEN_DIST_DIR}" - fi - - $CERBERO $CERBERO_ARGS bootstrap --offline --system=no - fix_build_tools - - cerbero_package_and_check -} - -cerbero_deps_script() { - show_ccache_sum - - $CERBERO $CERBERO_ARGS show-config - $CERBERO $CERBERO_ARGS fetch-bootstrap --jobs=4 - $CERBERO $CERBERO_ARGS fetch-package --jobs=4 --deps gstreamer-1.0 - $CERBERO $CERBERO_ARGS bootstrap --offline --system=no - $CERBERO $CERBERO_ARGS build-deps --offline \ - gstreamer-1.0 gst-plugins-base-1.0 gst-plugins-good-1.0 \ - gst-plugins-bad-1.0 gst-plugins-ugly-1.0 gst-rtsp-server-1.0 \ - gst-libav-1.0 gst-devtools-1.0 gst-editing-services-1.0 libnice - - if [[ -n ${CERBERO_OVERRIDDEN_DIST_DIR} ]]; then - mkdir -p "${CERBERO_HOME}/dist/${ARCH}" - time rsync -aH "${CERBERO_OVERRIDDEN_DIST_DIR}/" "${CERBERO_HOME}/dist/${ARCH}" - fi - - # Check that the env var is set. Don't expand this protected variable by - # doing something silly like [[ -n ${CERBERO_...} ]] because it will get - # printed in the CI logs due to set -x - if env | grep -q -e CERBERO_PRIVATE_SSH_KEY; then - time $CERBERO $CERBERO_ARGS gen-cache --branch "${GST_UPSTREAM_BRANCH}" - time $CERBERO $CERBERO_ARGS upload-cache --branch "${GST_UPSTREAM_BRANCH}" - fi - - cerbero_package_and_check -} - -# Run whichever function is asked of us -eval "$1" diff --git a/subprojects/gst-ci/gitlab/ci_template.yml b/subprojects/gst-ci/gitlab/ci_template.yml deleted file mode 100644 index cb8ae521d3..0000000000 --- a/subprojects/gst-ci/gitlab/ci_template.yml +++ /dev/null @@ -1,1427 +0,0 @@ -include: - - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/7ea696055e322cc7aa4bcbe5422b56a198c4bdff/templates/ci-fairy.yml" - -stages: - - 'build docker' - - 'preparation' - - 'pre-build' - - 'build' - - 'test' - # Use the resulting binaries - - 'integrate' - -variables: - # Branch to track for modules that have no ref specified in the manifest - GST_UPSTREAM_BRANCH: 'master' - 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-06-30.0' - CERBERO_TAG: '2020-10-22.0' - ANDROID_TAG: '2020-10-22.0' - MANIFEST_TAG: '2020-10-22.0' - TEST_MANIFEST_TAG: '2020-10-22.0' - INDENT_TAG: '2020-10-22.0' - WINDOWS_TAG: "2021-09-09.0" - - GST_UPSTREAM_REPO: 'gstreamer/gst-ci' - - FEDORA_AMD64_SUFFIX: 'amd64/fedora' - CERBERO_AMD64_SUFFIX: 'amd64/cerbero-fedora' - ANDROID_AMD64_SUFFIX: 'amd64/android-fedora' - MANIFEST_AMD64_SUFFIX: 'amd64/build-manifest' - TEST_MANIFEST_AMD64_SUFFIX: 'amd64/test-manifest' - INDENT_AMD64_SUFFIX: 'amd64/gst-indent' - WINDOWS_AMD64_SUFFIX: 'amd64/windows' - WINDOWS_RUST_AMD64_SUFFIX: 'amd64/windows-rust' - - FEDORA_IMAGE: "$CI_REGISTRY_IMAGE/$FEDORA_AMD64_SUFFIX:$FEDORA_TAG-$GST_UPSTREAM_BRANCH" - FEDORA_DOCS_IMAGE: "registry.freedesktop.org/gstreamer/gst-ci/amd64/fedora:2020-07-03.0-master" - CERBERO_IMAGE: "$CI_REGISTRY_IMAGE/$CERBERO_AMD64_SUFFIX:$CERBERO_TAG-$GST_UPSTREAM_BRANCH" - ANDROID_IMAGE: "$CI_REGISTRY_IMAGE/$ANDROID_AMD64_SUFFIX:$ANDROID_TAG-$GST_UPSTREAM_BRANCH" - MANIFEST_IMAGE: "$CI_REGISTRY_IMAGE/$MANIFEST_AMD64_SUFFIX:$MANIFEST_TAG-$GST_UPSTREAM_BRANCH" - TEST_MANIFEST_IMAGE: "$CI_REGISTRY_IMAGE/$TEST_MANIFEST_AMD64_SUFFIX:$TEST_MANIFEST_TAG-$GST_UPSTREAM_BRANCH" - INDENT_IMAGE: "$CI_REGISTRY_IMAGE/$INDENT_AMD64_SUFFIX:$INDENT_TAG-$GST_UPSTREAM_BRANCH" - 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" - - # Current windows image doesn't seem to be able to spawn procceses for reason, - # use a different image until this is debuged - # Running command 'c:/builds/alatiera/gst-ci/cerbero-build/build-tools/bin/meson --prefix=c:/builds/alatiera/gst-ci/cerbero-build/dist/msvc_x86_64 --libdir=lib -Ddebug=true --default-library=both -Doptimization=2 --backend=ninja --wrap-mode=nodownload -Db_vscrt=md --native-file c:/builds/alatiera/gst-ci/cerbero-build/sources/msvc_x86_64/gstreamer-1.0-1.19.0.1/_builddir/meson-native-file.txt -Dlibunwind=disabled -Ddbghelp=enabled -Dintrospection=disabled -Dexamples=disabled' - # failed to create process - CERBERO_WINDOWS_IMAGE: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/windows:v13-master' - - # Can't use $CI_* variables since we use this template in all repos, not just gst-ci - CERBERO_SCRIPT_URL: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/gitlab/cerbero_setup.sh" - WINDOWS_CONTAINER_SCRIPT_URL: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/docker/windows/container.ps1" - - GIT_STRATEGY: none - 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 - - 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 - - DEFAULT_CERBERO_ARGS: > - --variants werror - --timestamps - -workflow: - rules: - - if: $CI_MERGE_REQUEST_IID - # don't create a pipeline if its a commit pipeline, on a branch and that branch has - # open merge requests (bc we will get a MR build instead) - - if: $CI_OPEN_MERGE_REQUESTS - when: never - - if: $CI_COMMIT_TAG - - 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 - - -# Script to check if a docker image exists in the upstream registry -# and if so copy it to the forked registry so we can use it -# -# This is copied/adapted from citemplates/templates/fedora.yml -# https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/96b621fe9f57ec2464f8d1a0940446afbf6c8f59/templates/fedora.yml -.check_image: &check_image_exists | - # if-not-exists steps - set -x - - if [[ -z "$GST_FORCE_REBUILD" ]] - then - # disable exit on failure - set +e - - # check if our image is already in the current registry - # we store the sha of the digest and the layers - skopeo inspect docker://$LOCAL_IMAGE | jq '[.Digest, .Layers]' > local_sha - - # check if our image is already in our gst-ci registry fork - skopeo inspect docker://$LOCAL_GST_CI_IMAGE | jq '[.Digest, .Layers]' > local_gst_ci_sha - - # check if our image is already in the upstream registry - if [[ -z "$GST_UPSTREAM_REPO" ]] - then - echo "WARNING! Variable \$GST_UPSTREAM_REPO is undefined, cannot check for images" - else - skopeo inspect docker://$GST_UPSTREAM_IMAGE | jq '[.Digest, .Layers]' > upstream_sha - fi - - # reenable exit on failure - set -e - - # if the upstream repo has an image, ensure we use the same - if [ -s upstream_sha ] - then - - echo "Checking if $LOCAL_IMAGE is up to date" - # ensure we use the same image from upstream - diff upstream_sha local_sha && exit 0 || true - - echo "Copying image from gstreamer/gst-ci to local registry" - # copy the original image into the current project registry namespace - # we do 2 attempts with skopeo copy at most - skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD \ - docker://$GST_UPSTREAM_IMAGE \ - docker://$LOCAL_IMAGE || \ - skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD \ - docker://$GST_UPSTREAM_IMAGE \ - docker://$LOCAL_IMAGE - - exit 0 - fi - - set +x - - # if the local ci fork repo has an image, ensure we use the same - if [ -s local_gst_ci_sha ] - then - echo "Checking if $LOCAL_GST_CI_IMAGE is up to date" - # ensure we use the same image from upstream - diff local_gst_ci_sha local_sha && exit 0 || true - - echo "Copying image from $CI_PROJECT_NAMESPACE/gst-ci to local registry" - # copy the original image into the current project registry namespace - # we do 2 attempts with skopeo copy at most - skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD \ - docker://$LOCAL_GST_CI_IMAGE \ - docker://$LOCAL_IMAGE || \ - skopeo copy --dest-creds $CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD \ - docker://$LOCAL_GST_CI_IMAGE \ - docker://$LOCAL_IMAGE - - exit 0 - fi - - # if we have a local image but none in the upstream repo, use our - if [ -s local_sha ] - then - echo "Using $LOCAL_IMAGE" - exit 0 - fi - fi - - -# Build docker images from Dockerfiles -# -# This is copied/adapted from citemplates/templates/fedora.yml -# https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/96b621fe9f57ec2464f8d1a0940446afbf6c8f59/templates/fedora.yml -# -# CITemplates builds uses buildah run/commit workflow to build the images which doesn't -# fit us atm and our images need further adjustment to make use of it. Porting to -# ci-templates is the next step though. -# -# All the documentation from citemplates should be applicable here, so please refer there -.base: - image: "$CI_REGISTRY/freedesktop/ci-templates/buildah:2020-07-20.1" - variables: - STORAGE_DRIVER: 'vfs' - BUILDAH_FORMAT: 'docker' - BUILDAH_ISOLATION: 'chroot' - - GIT_STRATEGY: fetch - script: - - export LOCAL_IMAGE="$CI_REGISTRY_IMAGE/$REPO_SUFFIX:$TAG" - - export LOCAL_GST_CI_IMAGE="$CI_REGISTRY/$CI_PROJECT_NAMESPACE/gst-ci/$REPO_SUFFIX:$TAG" - - export GST_UPSTREAM_IMAGE="$CI_REGISTRY/$GST_UPSTREAM_REPO/$REPO_SUFFIX:$TAG" - - # check if the docker registry is enabled, else the variable will be missing - - | - if [[ -z "$CI_REGISTRY_IMAGE" ]] - then - echo "ERROR! Looks like your repository/fork has disabled Docker Registries." - echo "Pleae enable them by following the documentation from here:" - echo "https://docs.gitlab.com/ee/user/packages/container_registry/#enable-the-container-registry-for-your-project" - exit 1 - fi - - # 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 - - - *check_image_exists - - # This part of the job should only ever be possible to be reach in a gst-ci fork - - | - if [[ "$CI_PROJECT_NAME" != 'gst-ci' ]] - then - echo "ERROR! Something is wrong!" - echo "This part of the job is supposed to be executed only in gst-ci forks, and its probably going to fail else" - exit 1 - fi - - - echo "Building image $LOCAL_IMAGE" - - - > - buildah bud - --build-arg DEFAULT_BRANCH=$GST_UPSTREAM_BRANCH - --label ci.job_id=$CI_JOB_ID - --label pipeline.url=$CI_PIPELINE_URL - --label git.ref_name=$CI_COMMIT_REF_NAME - --label git.sha=$CI_COMMIT_SHA - --label gitlab.project_path=$CI_PROJECT_PATH - --label gitlab.project_url=$CI_PROJECT_URL - --label fdo.upstream-repo=$GST_UPSTREAM_REPO - -f $DOCKERFILE - -t $LOCAL_IMAGE - $CONTEXT_DIR - - - buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - # Sanity check - - | - if [ "$CI_PROJECT_PATH" = "gstreamer/gst-ci" ]; then - if [ "$LOCAL_IMAGE" != "$GST_UPSTREAM_IMAGE" ]; then - echo "ERROR!!! AAAAA! THE IMAGE URI DOES NOT MATCH THE EXPECTED UPSTREAM ONE" - echo $LOCAL_IMAGE - echo $GST_UPSTREAM_IMAGE - exit 1 - fi - fi - - - buildah push $LOCAL_IMAGE - -fedora amd64 docker: - stage: "build docker" - variables: - REPO_SUFFIX: "$FEDORA_AMD64_SUFFIX" - TAG: "$FEDORA_TAG-$GST_UPSTREAM_BRANCH" - - CONTEXT_DIR: "./docker/fedora/" - DOCKERFILE: "docker/fedora/Dockerfile" - extends: .base - -cerbero fedora amd64 docker: - stage: "build docker" - variables: - REPO_SUFFIX: "$CERBERO_AMD64_SUFFIX" - TAG: "$CERBERO_TAG-$GST_UPSTREAM_BRANCH" - - CONTEXT_DIR: "docker/cerbero/" - DOCKERFILE: "docker/cerbero/Dockerfile-fedora" - extends: .base - -android docker: - stage: "build docker" - variables: - REPO_SUFFIX: "$ANDROID_AMD64_SUFFIX" - TAG: "$ANDROID_TAG-$GST_UPSTREAM_BRANCH" - - CONTEXT_DIR: "docker/android/" - DOCKERFILE: "docker/android/Dockerfile" - extends: .base - -alpine amd64 manifest builder docker: - stage: "build docker" - variables: - REPO_SUFFIX: "$MANIFEST_AMD64_SUFFIX" - TAG: '$MANIFEST_TAG-$GST_UPSTREAM_BRANCH' - - CONTEXT_DIR: "docker/build_manifest/" - DOCKERFILE: "docker/build_manifest/Dockerfile" - extends: .base - -gst-indent amd64 docker: - stage: "build docker" - variables: - REPO_SUFFIX: "$INDENT_AMD64_SUFFIX" - TAG: "$INDENT_TAG-$GST_UPSTREAM_BRANCH" - - CONTEXT_DIR: "docker/indent/" - DOCKERFILE: "docker/indent/Dockerfile" - extends: .base - -windows amd64 docker: - stage: "build docker" - variables: - 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: "docker/windows/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") - - - $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 - - - "& $env:WINDOWS_CONTAINER_SCRIPT_PATH $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: - 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: '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") - - - $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 - - - "& $env:WINDOWS_CONTAINER_SCRIPT_PATH $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $RUST_IMAGE $RUST_UPSTREAM_IMAGE $DOCKERFILE" - - | - if (!($?)) { - echo "Failed to build the image" - Exit 1 - } - -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"] - -# -# Job to create the manifest.xml to used for our builds -# -manifest: - image: $MANIFEST_IMAGE - rules: - # Always have automatic pipeline for branchs in cerbero and docs - # cause they need to update artifacts, like the docs site or cerbero deps - - if: '$CI_PROJECT_PATH == "gstreamer/cerbero"' - - if: '$CI_PROJECT_PATH == "gstreamer/gst-docs"' - - # If the MR is assigned to the Merge bot, trigger the pipeline automatically - - if: '$CI_MERGE_REQUEST_ASSIGNEES == "gstreamer-merge-bot"' - # 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 - # If this matches, it means the pipeline is running against either the main - # or a stable branch, so make it manual - - if: '$CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH' - when: 'manual' - allow_failure: false - - stage: 'preparation' - script: - - cd /gst-ci - - gitlab/build_manifest.py --self-update - - gitlab/build_manifest.py ${CI_PROJECT_DIR}/manifest.xml - - cat ${CI_PROJECT_DIR}/manifest.xml - artifacts: - expire_in: "7 days" - paths: - - "manifest.xml" - -# -# gst-indent!! -# -gst indent: - image: $INDENT_IMAGE - stage: 'preparation' - variables: - GIT_STRATEGY: 'fetch' - rules: - - if: '$CI_PROJECT_NAME !~ /^(gstreamer-sharp|gst-integration-testsuites|cerbero|gst-docs)$/' - script: - # man indent. grep RETURN VALUE, grab a beer on my behalf... - - indent --version || true - - | - filter_cmd=("cat") - if test -f ".indentignore"; then - filter_args=() - while read -r line; do - if test -n "$line"; then - filter_args+=("-e" "$line") - fi - done < ".indentignore" - if [[ ${#filter_args[@]} -gt 0 ]]; then - filter_cmd=("grep" "-v" "${filter_args[@]}") - fi - fi - find . -name '*.c' | "${filter_cmd[@]}" | xargs -d '\n' gst-indent - - | - if git diff --quiet; then - echo "Code is properly formatted" - else - git diff --color=always - echo 'style diverges, please run gst-indent first' - exit 1 - fi - -# -# Check "allow-edit" checkbox on merge requests with ci-fairy -# -check allow-edit: - extends: '.fdo.ci-fairy' - needs: [] - stage: 'preparation' - variables: - GIT_STRATEGY: 'none' - script: - - ci-fairy check-merge-request --require-allow-collaboration - rules: - - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - -# -# gst-build setup templates -# -.gst_build_template: &gst_build - - echo $MESON_ARGS - # Sometimes, gitlab-runner want to reuse - # existing docker volumes without cleaning them up... - # Make sure the docker volume is clean - - rm -rf gst-build || true - - rm -rf meson-logs || true - - rm -rf validate-logs || true - - - curl -L -o clone_manifest_ref.py "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/gitlab/clone_manifest_ref.py" - - python3 clone_manifest_ref.py --manifest manifest.xml --project gst-build --destination gst-build - - cd gst-build/ - # only copy immediate directories. We don't want to modify .wrap files - - find /gst-build/subprojects/ -mindepth 1 -maxdepth 1 -type d -exec cp -r \{\} subprojects/ \; - - # Reset the state of the subprojects to what gst-build expects - - meson subprojects update --reset - - ./git-update --no-interaction --manifest="${CI_PROJECT_DIR}/manifest.xml" - - - meson build/ $MESON_ARGS - - ninja -C build/ - - ccache --show-stats - -.gst_build_ccache_vars: - variables: - CCACHE_COMPILERCHECK: 'content' - CCACHE_COMPRESS: 'true' - CCACHE_BASEDIR: '/cache/gstreamer/gst-build' - CCACHE_DIR: '/cache/gstreamer/gst-build/ccache/' - # shared across everything really - CCACHE_MAXSIZE: '10G' - CARGO_HOME: '/cache/gstreamer/cargo' - -.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: - - '.gst_build_ccache_vars' - needs: - - "manifest" - # 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}" - rules: - - if: '$CI_PROJECT_NAME != "cerbero"' - script: - *gst_build - after_script: - - mv gst-build/build/meson-logs/ meson-logs - # Cleanup everything else to reduce the size - # of the docker volume we leave behind - - rm -rf gst-build - artifacts: - expire_in: "7 days" - when: "always" - paths: - - 'meson-logs/' - - 'manifest.xml' - -.build fedora x86_64: - extends: '.build' - image: $FEDORA_IMAGE - variables: - MESON_ARGS: *simple_build - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-omx|gst-plugins-rs)$/' - -build nodebug fedora x86_64: - extends: '.build' - image: $FEDORA_IMAGE - variables: - MESON_ARGS: "${DEFAULT_MESON_ARGS} -Dsharp=enabled -Dgstreamer:gst_debug=false -Domx=enabled -Dgst-omx:target=generic ${MESON_BUILDTYPE_ARGS} ${MESON_GST_WERROR}" - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-docs|gst-integration-testsuites|gst-omx|gst-plugins-rs)$/' - -build static fedora x86_64: - extends: '.build fedora x86_64' - variables: - MESON_BUILDTYPE_ARGS: "--default-library=static -Dintrospection=disabled -Ddoc=disabled" - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-docs|gst-integration-testsuites|gst-omx|gst-plugins-rs)$/' - -build static nodebug fedora x86_64: - extends: 'build nodebug fedora x86_64' - variables: - MESON_BUILDTYPE_ARGS: "--default-library=static -Dintrospection=disabled -Ddoc=disabled" - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-docs|gst-integration-testsuites|gst-omx|gst-plugins-rs)$/' - -build clang fedora x86_64: - extends: '.build fedora x86_64' - variables: - CC: 'ccache clang' - CXX: 'ccache clang++' - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-docs|gst-integration-testsuites|gst-omx|gst-plugins-rs)$/' - -.test: - stage: 'test' - extends: - - '.gst_build_ccache_vars' - needs: - - "manifest" - 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: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-examples|gst-docs)$/' - script: - - *gst_build - - - echo "-> Running ${TEST_SUITE}" - - > - ./gst-uninstalled.py - gst-validate-launcher ${TEST_SUITE} - --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 gst-build/build/meson-logs/ meson-logs - # Cleanup everything else to reduce the size - # of the docker volume we leave behind - - rm -rf gst-build - artifacts: - expire_in: '14 days' - when: always - paths: - - 'meson-logs/' - - 'validate-logs' - - 'manifest.xml' - reports: - junit: - - "validate-logs/*.xml" - -.test fedora x86_64: - image: $FEDORA_IMAGE - extends: '.test' - tags: ['gstreamer'] - -check fedora: - extends: '.test fedora x86_64' - variables: - TEST_SUITE: "check.gst*" - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-docs|gst-integration-testsuites|gst-omx|gst-plugins-rs)$/' - -integration testsuites fedora: - extends: '.test fedora x86_64' - parallel: 4 - variables: - EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures --check-bugs --parts=${CI_NODE_TOTAL} --part-index=${CI_NODE_INDEX}" - TEST_SUITE: "validate ges" - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-docs|gst-examples|gst-omx|gstreamer-sharp|gst-plugins-rs)$/' - -# gstreamer-full: -# introspection has been disabled as the static build does not support it. -# See https://gitlab.freedesktop.org/gstreamer/gst-build/-/issues/162 -gstreamer-full: - extends: 'build static fedora x86_64' - stage: integrate - variables: - MESON_ARGS: > - --default-library=static - -Dintrospection=disabled - $MESON_GST_WERROR - rules: - - if: '$CI_PROJECT_NAME =~ /^(gst-build|gst-ci)$/' - - script: - - *gst_build - - meson test -C build -v test-gst-full - artifacts: - expire_in: "7 days" - when: "always" - paths: - - 'meson-logs/' - -gstreamer-full-minimal: - extends: 'build static fedora x86_64' - stage: integrate - variables: - MESON_ARGS: > - --default-library=static - -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 - rules: - - if: '$CI_PROJECT_NAME =~ /^(gst-build|gst-ci)$/' - - script: - - *gst_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: - - if: '$CI_PROJECT_NAME =~ /^(gstreamer|gst-ci|gst-devtools)$/' - -valgrind base: - extends: '.valgrind fedora x86_64' - variables: - TEST_SUITE: "check.gst-plugins-base\\..*" - rules: - - if: '$CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-ci|gst-devtools)$/' - -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: - - if: '$CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-plugins-good|gst-ci|gst-devtools)$/' - -valgrind ugly: - extends: '.valgrind fedora x86_64' - variables: - TEST_SUITE: "check.gst-plugins-ugly\\..*" - rules: - - if: '$CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-plugins-ugly|gst-ci|gst-devtools)$/' - -valgrind bad: - extends: '.valgrind fedora x86_64' - variables: - TEST_SUITE: "check.gst-plugins-bad\\..*" - rules: - - if: '$CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-plugins-good|gst-plugins-bad|gst-ci|gst-devtools)$/' - -valgrind ges: - extends: '.valgrind fedora x86_64' - variables: - TEST_SUITE: "check.gst-editing-services\\..*" - rules: - - if: '$CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-plugins-good|gst-editing-services|gst-ci|gst-devtools)$/' - -# Template for Cerbero GStreamer Build -# -# Parameters: -# CONFIG: The name of the configuration file to use -# ARCH: The cerbero _ (used in cache key) -# -.cerbero: - stage: "build" - image: $CERBERO_IMAGE - rules: - - if: '$CI_PROJECT_NAME == "cerbero"' - needs: - - "manifest" - # Ensure that the runners it will be executed on - # will have plenty of space for the cache - tags: ['gstreamer'] - timeout: '3h' - variables: - CCACHE_COMPILERCHECK: "content" - CCACHE_COMPRESS: "true" - CCACHE_BASEDIR: "/cache/gstreamer/cerbero/" - CCACHE_DIR: "/cache/gstreamer/cerbero/ccache/" - # shared across everything really - CCACHE_MAXSIZE: "50G" - - CERBERO_HOME: "cerbero-build" - CERBERO_SOURCES: "cerbero-sources" - CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS}" - CERBERO: "./cerbero-uninstalled -c config/${CONFIG} -c localconf.cbc -m manifest.xml" - CERBERO_PACKAGE_ARGS: "-t" - CERBERO_RUN_WRAPPER: "" # 'wine' on cross-winXX - CERBERO_RUN_SUFFIX: "" # '.exe' on cross-winXX - HAVE_CCACHE: "yes" - # used by macos packages as we only ever install to a fixed directory - CERBERO_OVERRIDDEN_DIST_DIR: "" - # location where the cerbero git repo is stored on the image - CERBERO_HOST_DIR: "/cerbero/" - before_script: - - echo "Fetching ${CERBERO_SCRIPT_URL}" - - curl -L -o cerbero_setup.sh "${CERBERO_SCRIPT_URL}" - - chmod +x cerbero_setup.sh - - ./cerbero_setup.sh cerbero_before_script - script: - - ./cerbero_setup.sh cerbero_script - cache: - key: "${CI_JOB_NAME}" - paths: - - "${CERBERO_SOURCES}" - artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" - expire_in: '5 days' - when: 'always' - paths: - - "manifest.xml" - - "${CERBERO_HOME}/logs" - - "*.tar.*" - -.build windows: - image: $WINDOWS_IMAGE - stage: 'build' - needs: - - 'manifest' - tags: - - 'docker' - - 'windows' - - '1809' - timeout: '45min' - variables: - MESON_ARGS: > - ${DEFAULT_MESON_ARGS} - -Dpython=disabled - -Dlibav=disabled - -Dvaapi=disabled - -Dgst-plugins-base:pango=enabled - -Dgst-plugins-good:cairo=enabled - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-docs|gst-integration-testsuites|gst-omx|gst-plugins-rs|gstreamer-vaapi)$/' - script: - # Sometimes there's seems to be an existing gst-build clone that comes either from the ether or - # from a previous job due to some gitlab bug or implicit behavior? - # So let's always check and clear it out if its there - # https://gitlab.freedesktop.org/tpm/gstreamer-sharp/-/jobs/1672137 - - if (Test-Path $env:CI_PROJECT_DIR/gst-build) { Remove-Item -Recurse -Force $env:CI_PROJECT_DIR/gst-build } - - # 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" - - - Invoke-WebRequest -Uri "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/$env:GST_UPSTREAM_BRANCH/gitlab/clone_manifest_ref.py" -OutFile $env:CI_PROJECT_DIR/clone_manifest_ref.py - - python clone_manifest_ref.py --manifest manifest.xml --project gst-build --destination $env:CI_PROJECT_DIR/gst-build - - cd $env:CI_PROJECT_DIR/gst-build - - # Update meson - # FIXME: remove this once the windows image is rebuilt/updated - - pip install -U meson==0.56.2 - - - cp -r C:/subprojects/* subprojects/ - - cd $env:CI_PROJECT_DIR/gst-build - # Reset the subprojects to invalidate the cache if needed - - meson subprojects update --reset - # Run the git-update script and feed it the manifest to setup the environment - - python git-update --no-interaction --manifest=$env:CI_PROJECT_DIR/manifest.xml - - # 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"," ") - # Gitlab executes PowerShell in docker, but VsDevCmd.bat is a batch script. - # Environment variables substitutions is done by PowerShell before calling - # cmd.exe, that's why we use $env:FOO instead of %FOO% - - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH && - meson build $env:MESON_ARGS && - ninja -C build" - artifacts: - expire_in: "7 days" - when: "always" - paths: - - 'gst-build/build/meson-logs/' - -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_PROJECT_NAME !~ /^(cerbero|gst-docs|gst-integration-testsuites|gst-omx|gst-plugins-rs|gstreamer-vaapi)$/' - allow_failure: true - when: 'manual' - script: - # Sometimes there's seems to be an existing gst-build clone that comes either from the ether or - # from a previous job due to some gitlab bug or implicit behavior? - # So let's always check and clear it out if its there - # https://gitlab.freedesktop.org/tpm/gstreamer-sharp/-/jobs/1672137 - - if (Test-Path $env:CI_PROJECT_DIR/gst-build) { Remove-Item -Recurse -Force $env:CI_PROJECT_DIR/gst-build } - - # 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" - - # For some reason docker build hangs if this is included in the image, needs more troubleshooting - - $env:PATH += ';C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\msys64\mingw32\bin' - # Copied from https://github.com/msys2/setup-msys2/blob/master/main.js#L98 - - C:\msys64\usr\bin\bash -c "pacman-key --init && pacman-key --populate msys2 && pacman-key --refresh-keys || true" - - C:\msys64\usr\bin\bash -c "sed -i 's/^CheckSpace/#CheckSpace/g' /etc/pacman.conf" - - echo "Updating MSYS2" - - C:\msys64\usr\bin\bash -c "pacman -Syuu --noconfirm || echo Update failed, ignoring" - - echo "Killing all MSYS2 processes" - - taskkill /F /FI "MODULES eq msys-2.0.dll" - - echo "Completing MSYS2 update" - - C:\msys64\usr\bin\bash -c "pacman -Suu --noconfirm" - - echo "Installing needed MSYS2 packages" - - C:\msys64\usr\bin\bash -c "pacman -Sy --noconfirm --needed mingw-w64-x86_64-toolchain ninja" - - - Invoke-WebRequest -Uri "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/$env:GST_UPSTREAM_BRANCH/gitlab/clone_manifest_ref.py" -OutFile $env:CI_PROJECT_DIR/clone_manifest_ref.py - - python clone_manifest_ref.py --manifest manifest.xml --project gst-build --destination $env:CI_PROJECT_DIR/gst-build - - cd $env:CI_PROJECT_DIR/gst-build - - - cp -r C:\subprojects\* subprojects\ - - # Run the git-update script and feed it the manifest to setup the environment - - cd $env:CI_PROJECT_DIR/gst-build; python git-update --no-interaction --manifest=$env:CI_PROJECT_DIR/manifest.xml - # 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 -c "cd $env:_PROJECT_DIR/gst-build && - meson build $env:MESON_ARGS && - ninja -C build" - - -# Template for Cerbero GStreamer Deps -# -# This template is used by cerbero/ project to pre-built the GStreamer -# dependencies. When available, the .cerbero jobs will download this artifact -# in order to speed up the build. -# -# Parameters: -# CONFIG: The name of the configuration file to use -# ARCH: The cerbero _ (used in cache key) -# -# Produce an artifact with the dist/ and .cache along -# with the associated build-tools. -.cerbero deps: - extends: .cerbero - rules: - - if: '$CI_PROJECT_NAME == "cerbero"' - script: - - ./cerbero_setup.sh cerbero_deps_script - -# -# Cerbero Linux X86_64 build -# -cerbero deps fedora x86_64: - extends: '.cerbero deps' - variables: - CONFIG: "linux.config" - ARCH: "linux_x86_64" - -build cerbero fedora x86_64: - extends: '.cerbero' - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-omx|gstreamer-vaapi|gst-docs|gst-integration-testsuites|gst-plugins-rs)$/' - variables: - CONFIG: "linux.config" - -# -# Cerbero Android Universal build -# -.cerbero cross-android universal: - variables: - CONFIG: "cross-android-universal.cbc" - ARCH: "android_universal" - artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" - expire_in: '5 days' - when: 'always' - paths: - - "manifest.xml" - - "${CERBERO_HOME}/logs" - - "*[0-9].tar.*" - -cerbero deps cross-android universal: - extends: - - '.cerbero deps' - - '.cerbero cross-android universal' - -build cerbero cross-android universal: - extends: - - '.cerbero' - - '.cerbero cross-android universal' - rules: - - if: '$CI_MERGE_REQUEST_IID && $CI_PROJECT_NAME == "gst-docs"' - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-docs|gst-omx|gstreamer-vaapi|gst-integration-testsuites|gst-plugins-rs)$/' - -# -# Cerbero Cross Windows builds -# -cerbero deps cross-windows x86: - extends: '.cerbero deps' - variables: - CONFIG: "cross-win32.cbc" - ARCH: "mingw_x86" - -build cerbero cross win32: - extends: '.cerbero' - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-docs|gst-omx|gstreamer-vaapi|gst-docs|gst-integration-testsuites|gst-plugins-rs)$/' - variables: - CONFIG: "cross-win32.cbc" - CERBERO_RUN_WRAPPER: "wine" - CERBERO_RUN_SUFFIX: ".exe" - - -cerbero deps cross-windows x86_64: - extends: '.cerbero deps' - variables: - CONFIG: "cross-win64.cbc" - ARCH: "mingw_x86_64" - -build cerbero cross win64: - extends: '.cerbero' - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-omx|gstreamer-vaapi|gst-docs|gst-integration-testsuites|gst-plugins-rs)$/' - variables: - CONFIG: "cross-win64.cbc" - CERBERO_RUN_WRAPPER: "wine" - CERBERO_RUN_SUFFIX: ".exe" - -# -# Build an Android App using the android binaries -# -.cross-android universal examples: - image: $ANDROID_IMAGE - stage: 'integrate' - variables: - EXAMPLES_HOME: ${CI_PROJECT_DIR}/examples - GSTREAMER_ROOT_ANDROID: ${CI_PROJECT_DIR}/examples/cerbero-android-universal - script: - - mkdir -p ${EXAMPLES_HOME}/outputs - - curl -L -o clone_manifest_ref.py https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/gitlab/clone_manifest_ref.py - - chmod +x clone_manifest_ref.py - - ./clone_manifest_ref.py --manifest manifest.xml --project gst-examples --destination ${EXAMPLES_HOME}/gst-examples - - ./clone_manifest_ref.py --manifest manifest.xml --project gst-docs --destination ${EXAMPLES_HOME}/gst-docs - - rm clone_manifest_ref.py - - # extract our binaries - - rm -f gstreamer-1.0-android-universal-*-runtime.tar.* - - mkdir ${GSTREAMER_ROOT_ANDROID} - - time tar -C ${GSTREAMER_ROOT_ANDROID} -xf gstreamer-1.0-android-universal-*.tar.* - - # gst-examples - player - - chmod +x ${EXAMPLES_HOME}/gst-examples/playback/player/android/gradlew - - ${EXAMPLES_HOME}/gst-examples/playback/player/android/gradlew --no-daemon --project-dir ${EXAMPLES_HOME}/gst-examples/playback/player/android assembleDebug - - cp ${EXAMPLES_HOME}/gst-examples/playback/player/android/app/build/outputs/apk/debug/*.apk ${EXAMPLES_HOME}/outputs/ - - # gst-examples - vulkan - - chmod +x ${EXAMPLES_HOME}/gst-examples/vulkan/android/gradlew - - ${EXAMPLES_HOME}/gst-examples/vulkan/android/gradlew --no-daemon --project-dir ${EXAMPLES_HOME}/gst-examples/vulkan/android assembleDebug - - cp ${EXAMPLES_HOME}/gst-examples/vulkan/android/build/outputs/apk/debug/*.apk ${EXAMPLES_HOME}/outputs/ - - # gst-docs android tutorials - - chmod +x ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/gradlew - - ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/gradlew --no-daemon --project-dir ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android assembleDebug - - cp ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/android-tutorial-*/build/outputs/apk/debug/*.apk ${EXAMPLES_HOME}/outputs/ - after_script: - - rm -rf ${GSTREAMER_ROOT_ANDROID} - - rm -rf ${EXAMPLES_HOME}/gst-examples ${EXAMPLES_HOME}/gst-docs - artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" - expire_in: '5 days' - when: 'always' - paths: - - "manifest.xml" - - "${EXAMPLES_HOME}/outputs" - -cross-android universal examples: - extends: ".cross-android universal examples" - rules: - - if: '$CI_MERGE_REQUEST_IID && $CI_PROJECT_NAME == "gst-docs"' - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-docs|gst-omx|gstreamer-vaapi|gst-integration-testsuites|gst-plugins-rs)$/' - needs: - - "build cerbero cross-android universal" - -cerbero cross-android universal examples: - extends: ".cross-android universal examples" - rules: - - if: '$CI_PROJECT_NAME == "cerbero"' - needs: - - "cerbero deps cross-android universal" - -# -# Cerbero macOS X86_64 build -# -.cerbero macos x86_64: - variables: - ARCH: "darwin_x86_64" - CONFIG: "osx-x86-64.cbc" - CERBERO_PACKAGE_ARGS: "" - HAVE_CCACHE: "" - CERBERO_OVERRIDDEN_DIST_DIR: "/Library/Frameworks/GStreamer.framework/Versions/1.0" - CERBERO_HOST_DIR: "/Users/gst-ci/cerbero/" - tags: - - gst-macos-11.1 - artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" - expire_in: '5 days' - when: 'always' - paths: - - "manifest.xml" - - "${CERBERO_HOME}/logs" - - "gstreamer-1.0-1.*.pkg" - - "gstreamer-1.0-devel-1.*.pkg" - -cerbero deps macos x86_64: - extends: - - '.cerbero deps' - - '.cerbero macos x86_64' - -build cerbero macos x86_64: - extends: - - '.cerbero' - - '.cerbero macos x86_64' - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-docs|gst-omx|gst-sharp|gstreamer-vaapi|gst-integration-testsuites|gst-plugins-rs)$/' - -# -# Cerbero macOS Universal build -# -.cerbero cross-macos universal: - variables: - ARCH: "darwin_universal" - CONFIG: "cross-macos-universal.cbc" - CERBERO_PACKAGE_ARGS: "" - HAVE_CCACHE: "" - CERBERO_HOST_DIR: "/Users/gst-ci/cerbero/" - tags: - - gst-macos-11.1 - artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" - expire_in: '5 days' - when: 'always' - paths: - - "manifest.xml" - - "${CERBERO_HOME}/logs" - - "gstreamer-1.0-1.*.pkg" - - "gstreamer-1.0-devel-1.*.pkg" - -cerbero deps cross-macos universal: - extends: - - '.cerbero deps' - - '.cerbero cross-macos universal' - -build cerbero cross-macos universal: - extends: - - '.cerbero' - - '.cerbero cross-macos universal' - script: - # We have build-tools that have fixed paths pointing to the upstream - # repository. We need to point - - pwd - - mkdir -p "../../gstreamer" - - ln -sf "$(pwd)" "../../gstreamer/cerbero" - - mkdir -p "../../${CI_PROJECT_NAMESPACE}" - - ln -sf "$(pwd)" "../../${CI_PROJECT_NAMESPACE}/cerbero" - - - ./cerbero_setup.sh cerbero_script - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-docs|gst-omx|gst-sharp|gstreamer-vaapi|gst-integration-testsuites|gst-plugins-rs)$/' - -# -# Cerbero iOS build -# -.cerbero cross-ios universal: - variables: - ARCH: "ios_universal" - CONFIG: "cross-ios-universal.cbc" - CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror" - CERBERO_PACKAGE_ARGS: "" - HAVE_CCACHE: "" - CERBERO_HOST_DIR: "/Users/gst-ci/cerbero/" - tags: - - gst-ios-14.3 - artifacts: - name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}" - expire_in: '5 days' - when: 'always' - paths: - - "manifest.xml" - - "${CERBERO_HOME}/logs" - - "gstreamer-1.0-*-ios-universal.pkg" - -cerbero deps cross-ios universal: - extends: - - '.cerbero deps' - - '.cerbero cross-ios universal' - -build cerbero cross-ios universal: - extends: - - '.cerbero' - - '.cerbero cross-ios universal' - rules: - - if: '$CI_MERGE_REQUEST_IID && $CI_PROJECT_NAME == "gst-docs"' - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-docs|gst-omx|gst-sharp|gstreamer-vaapi|gst-integration-testsuites|gst-plugins-rs)$/' - -documentation: - image: $FEDORA_DOCS_IMAGE - extends: - - '.gst_build_ccache_vars' - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-integration-testsuites|gst-plugins-rs|gst-python)$/' - needs: - - "manifest" - stage: integrate - variables: - MESON_ARGS: *simple_build - MESON_BUILDTYPE_ARGS: "-Ddoc=enabled" - CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/" - script: - - pip3 install --upgrade hotdoc - - # FIXME: remove this once the docs image is updated - - pip3 install -U meson==0.56.2 - - - *gst_build - - ./gst-uninstalled.py ninja -C build/ plugins_doc_caches - - | - python3 -c "import os, subprocess, sys - subprojects = [os.environ['CI_PROJECT_NAME']] - if subprojects[0] in ['gst-ci', 'gst-build']: - subprojects = ['gstreamer', 'gst-plugins-ugly', 'gst-omx', 'gst-plugins-good', 'gst-plugins-base', 'gstreamer-vaapi', 'gst-libav', 'gst-editing-services', 'gst-rtsp-server', 'gst-plugins-bad',] - - diffsdir = '../plugins-cache-diffs' - os.makedirs(diffsdir, exist_ok=True) - res = 0 - for subproject in subprojects: - cwd = os.path.join('subprojects', subproject) - try: - subprocess.check_call(['git', 'diff', '--quiet'], cwd=cwd) - except subprocess.CalledProcessError: - diffname = os.path.join(diffsdir, '%s_cache.diff' % subproject) - res += 1 - with open(diffname, 'w') as diff: - subprocess.check_call(['git', 'diff'], stdout=diff, cwd=cwd) - print('\033[91mYou have a diff in the %s documentation cache. Please update with:\033[0m' % subproject) - print(' $ curl %s/%s | git apply -' % (os.environ['CI_ARTIFACTS_URL'], diffname.replace('../', ''))) - if res != 0: - print('(note that it might take a few minutes for artefacts to be available on the server)\n') - sys.exit(res)" - - - ./gst-uninstalled.py hotdoc run --conf-file=build/subprojects/gst-docs/GStreamer-doc.json --fatal-warnings - - cd - - - mv gst-build/build/subprojects/gst-docs/GStreamer-doc/html documentation/ - - artifacts: - when: always - paths: - - documentation/ - - plugins-cache-diffs/ - -# -# Build an iOS App using the iOS binaries -# -.cross-ios universal examples: - stage: 'integrate' - variables: - EXAMPLES_HOME: ${CI_PROJECT_DIR}/examples - # disable codesigning so we don't need developer identities on the CI - # machines - XCODE_BUILD_ARGS: > - CODE_SIGNING_REQUIRED="NO" - CODE_SIGN_IDENTITY="" - CODE_SIGNING_ALLOWED="NO" - CODE_SIGN_ENTITLEMENTS="" - script: - # install the binaries - - installer -pkg gstreamer-1.0-devel-*-ios-universal.pkg -target CurrentUserHomeDirectory -verbose - - - curl -L -o clone_manifest_ref.py https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/gitlab/clone_manifest_ref.py - - chmod +x clone_manifest_ref.py - - ./clone_manifest_ref.py --manifest manifest.xml --project gst-examples --destination ${EXAMPLES_HOME}/gst-examples - - ./clone_manifest_ref.py --manifest manifest.xml --project gst-docs --destination ${EXAMPLES_HOME}/gst-docs - - rm clone_manifest_ref.py - - # dump some useful information - - xcodebuild -version - - xcodebuild -showsdks - - # gst-docs ios tutorials - - xcodebuild -showBuildSettings -alltargets -project ${EXAMPLES_HOME}/gst-docs/examples/tutorials/xcode\ iOS/GStreamer\ iOS\ Tutorials.xcodeproj - - xcodebuild -alltargets -destination generic/platform=iOS -project ${EXAMPLES_HOME}/gst-docs/examples/tutorials/xcode\ iOS/GStreamer\ iOS\ Tutorials.xcodeproj ${XCODE_BUILD_ARGS} - - # gst-examples - - xcodebuild -showBuildSettings -alltargets -project ${EXAMPLES_HOME}/gst-examples/playback/player/ios/GstPlay.xcodeproj - - xcodebuild -alltargets -destination generic/platform=iOS -project ${EXAMPLES_HOME}/gst-examples/playback/player/ios/GstPlay.xcodeproj ${XCODE_BUILD_ARGS} - after_script: - - rm -rf ${EXAMPLES_HOME}/gst-examples ${EXAMPLES_HOME}/gst-docs - tags: - - gst-ios-14.3 - -cross-ios universal examples: - extends: ".cross-ios universal examples" - rules: - - if: '$CI_MERGE_REQUEST_IID && $CI_PROJECT_NAME == "gst-docs"' - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-docs|gst-omx|gstreamer-vaapi|gst-integration-testsuites|gst-plugins-rs)$/' - needs: - - "build cerbero cross-ios universal" - -cerbero cross-ios universal examples: - extends: ".cross-ios universal examples" - rules: - - if: '$CI_PROJECT_NAME == "cerbero"' - needs: - - "cerbero deps cross-ios universal" - -build gst-omx zynq fedora x86_64: - extends: '.build fedora x86_64' - variables: - MESON_ARGS: "-Domx=enabled -Dgst-omx:target=zynqultrascaleplus -Dgst-omx:header_path=${CI_PROJECT_DIR}/vcu-omx-il/omx_header -Dpython=disabled -Dlibav=disabled -Dlibnice=disabled -Dugly=disabled -Dbad=disabled -Ddevtools=disabled -Dges=disabled -Drtsp_server=disabled -Dvaapi=disabled -Dsharp=disabled -Dgst-examples=disabled -Drs=disabled ${MESON_BUILDTYPE_ARGS} $MESON_GST_WERROR" - rules: - - if: '$CI_PROJECT_NAME =~ /^(gst-omx|gst-ci)$/' - before_script: - - git clone https://github.com/Xilinx/vcu-omx-il.git --branch=release-2020.1 ${CI_PROJECT_DIR}/vcu-omx-il - -build gst-omx tizonia fedora x86_64: - extends: '.build fedora x86_64' - variables: - MESON_ARGS: "-Domx=enabled -Dgst-omx:target=tizonia -Dpython=disabled -Dlibav=disabled -Dlibnice=disabled -Dugly=disabled -Dbad=disabled -Ddevtools=disabled -Dges=disabled -Drtsp_server=disabled -Dvaapi=disabled -Dsharp=disabled -Dgst-examples=disabled -Drs=disabled ${MESON_BUILDTYPE_ARGS} $MESON_GST_WERROR" - PKG_CONFIG_PATH: ${PKG_CONFIG_PATH}:${CI_PROJECT_DIR}/tizonia-install/lib64/pkgconfig/ - rules: - - if: '$CI_PROJECT_NAME =~ /^(gst-omx|gst-ci)$/' - before_script: - - git clone https://github.com/tizonia/tizonia-openmax-il --branch v0.20.2 - - cd tizonia-openmax-il - - meson build -Dclients=false -Dplugins='' -Dplayer=false -Dprefix=${CI_PROJECT_DIR}/tizonia-install - - ninja -C build - - ninja -C build install - - cd .. - -# -# Cerbero Native Windows builds -# -.cerbero windows native: - needs: ['manifest'] - image: $CERBERO_WINDOWS_IMAGE - tags: - - 'docker' - - 'windows' - - 'gstreamer-windows' - - '1809' - variables: - CONFIG: 'win64.cbc' - ARCH: 'msvc_x86_64' - CERBERO_HOST_DIR: "C:/cerbero" - CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v visualstudio -v nowerror" - CERBERO_RUN_SUFFIX: ".exe" - HAVE_CCACHE: "" - before_script: - - $env:CI_PROJECT_DIR = $env:CI_PROJECT_DIR.replace('\', '/') - - $env:CERBERO_SCRIPTS_PATH = "$env:CI_PROJECT_DIR/cerbero_setup.sh" - - echo "Fetching $env:CERBERO_SCRIPT_URL" - - Invoke-WebRequest -Uri $env:CERBERO_SCRIPT_URL -OutFile $env:CERBERO_SCRIPTS_PATH - - C:\MinGW\msys\1.0\bin\bash.exe --login -c "cd $env:CI_PROJECT_DIR && $env:CERBERO_SCRIPTS_PATH cerbero_before_script" - -cerbero deps msvc x86_64: - extends: ['.cerbero deps', '.cerbero windows native'] - script: - - C:\MinGW\msys\1.0\bin\bash.exe --login -c "cd $env:CI_PROJECT_DIR && $env:CERBERO_SCRIPTS_PATH cerbero_deps_script" - -build cerbero msvc x86_64: - extends: ['.cerbero', '.cerbero windows native'] - script: - - C:\MinGW\msys\1.0\bin\bash.exe --login -c "cd $env:CI_PROJECT_DIR && $env:CERBERO_SCRIPTS_PATH cerbero_script" - rules: - - if: '$CI_PROJECT_NAME !~ /^(cerbero|gst-build|gst-omx|gstreamer-vaapi|gst-docs|gst-integration-testsuites|gst-plugins-rs)$/' diff --git a/subprojects/gst-plugins-bad/.indentignore b/subprojects/gst-plugins-bad/.indentignore deleted file mode 100644 index a54620b63f..0000000000 --- a/subprojects/gst-plugins-bad/.indentignore +++ /dev/null @@ -1 +0,0 @@ -ext/sctp/usrsctp/usrsctplib/