gstreamer/gitlab/ci_template.yml
Jordan Petridis c44f415a4b citemplate: make it so docker builds only run for detached pipelines
Currently, if you have a MR open, there 2 pipelines being
triggered. One normal, and one detached.

Previously, if you were to rebuild an image, the jobs of the
docker build stage would be executed concurrently, race
and end up both rebuilding the image.

Make them manual for normal pipelines to avoid such occurrence
and waste of resources.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-ci/-/merge_requests/320>
2020-07-26 09:57:43 +00:00

1199 lines
42 KiB
YAML

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: '2020-07-03.1'
CERBERO_TAG: '2020-06-25.0'
ANDROID_TAG: '2020-06-25.0'
MANIFEST_TAG: '2020-06-25.0'
TEST_MANIFEST_TAG: '2020-06-25.0'
INDENT_TAG: '2020-06-29.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'
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: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/windows:v11-master'
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
#
# 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-03-24"
rules:
# Always run for detached pipeleines
- if: '$CI_MERGE_REQUEST_ID'
when: 'always'
- if: '$CI_COMMIT_BRANCH == "master"'
when: 'always'
- if: '$CI_COMMIT_BRANCH == "$GST_UPS_BRANCH"'
when: 'always'
- when: 'manual'
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
--label fdo.expires-after="3w"
-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
#
# Job to create the manifest.xml to used for our builds
#
manifest:
image: $MANIFEST_IMAGE
rules:
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME && $GITLAB_USER_LOGIN == "gstreamer-merge-bot"'
when: 'always'
- if: '$CI_PROJECT_PATH == "gstreamer/cerbero"'
when: 'always'
- if: '$CI_PROJECT_PATH == "gstreamer/gst-docs"'
when: 'always'
- when: 'manual'
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
- find . -name '*.c' -exec 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
#
# 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/ \;
- ./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"
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|gst-plugins-rs)$/'
gstreamer-full:
extends: 'build static fedora x86_64'
stage: integrate
variables:
MESON_ARGS: >
--default-library=static
-Dauto_features=disabled
-Dgst-plugins-good:alpha=enabled
$MESON_GST_WERROR
rules:
- if: '$CI_PROJECT_NAME =~ /^(gst-build|gst-ci)$/'
after_script:
- cd gst-build/
- ninja -C build install
- export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib64/gstreamer-1.0/pkgconfig
- export LD_LIBRARY_PATH=/usr/local/lib64
- cd examples/static-plugins
- meson _build
- ninja -C _build
- meson test -C _build -v
artifacts:
expire_in: "7 days"
when: "always"
paths:
- 'gst-build/build/meson-logs/'
- 'gst-build/build/gstinitstaticplugins.c'
# 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 <os>_<cpu> (used in cache key)
#
# Produces runtime and devel tarball packages for linux/android or .pkg for macos
.cerbero template: &cerbero_package_and_check
- $CERBERO $CERBERO_ARGS package --offline ${CERBERO_PACKAGE_ARGS} -o $(pwd) gstreamer-1.0
# Run gst-inspect-1.0 for some basic checks. Can't do this for cross-(android|ios)-universal, of course.
- |-
[[ $CONFIG == *universal* ]] || $CERBERO $CERBERO_ARGS run $CERBERO_RUN_WRAPPER gst-inspect-1.0$CERBERO_RUN_SUFFIX --version
- |-
[[ $CONFIG == *universal* ]] || $CERBERO $CERBERO_ARGS run $CERBERO_RUN_WRAPPER gst-inspect-1.0$CERBERO_RUN_SUFFIX
- test "x${HAVE_CCACHE}" = "xyes" && ccache -s || true # eat the return value from the failing test
.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 cerbero is cached on the host
CERBERO_HOST_DIR: "/cerbero/"
before_script:
# FIXME Wrong namespace
# Workaround build-tools having hardcoded internal path
- pwd
- mkdir -p ../../gstreamer
- ln -sf $(pwd) ../../gstreamer/cerbero
- mkdir -p ../../${CI_PROJECT_NAMESPACE}
- ln -sf $(pwd) ../../${CI_PROJECT_NAMESPACE}/cerbero
- rsync -aH ${CERBERO_HOST_DIR} .
- echo "home_dir = \"$(pwd)/${CERBERO_HOME}\"" >> localconf.cbc
- echo "local_sources = \"$(pwd)/${CERBERO_SOURCES}\"" >> localconf.cbc
- ./cerbero-uninstalled --self-update manifest.xml
script:
- test "x${HAVE_CCACHE}" = "xyes" && ccache --show-stats
- $CERBERO $CERBERO_ARGS show-config
- $CERBERO $CERBERO_ARGS fetch-bootstrap --build-tools-only
- $CERBERO $CERBERO_ARGS fetch-package --deps gstreamer-1.0
- $CERBERO $CERBERO_ARGS fetch-cache --branch ${GST_UPSTREAM_BRANCH}
- test "x${CERBERO_OVERRIDDEN_DIST_DIR}" != "x"
&& test -d ${CERBERO_HOME}/dist/${ARCH}
&& mkdir -p ${CERBERO_OVERRIDDEN_DIST_DIR}
&& rsync -aH ${CERBERO_HOME}/dist/${ARCH}/ ${CERBERO_OVERRIDDEN_DIST_DIR}
- $CERBERO $CERBERO_ARGS bootstrap --offline --build-tools-only
- *cerbero_package_and_check
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
-Ddevtools=disabled
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
- 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"," ")
# 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"
# XXX: Re-enable when uploading stops timing out
#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 <os>_<cpu> (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:
- test "x${HAVE_CCACHE}" = "xyes" && ccache --show-stats
- $CERBERO $CERBERO_ARGS show-config
- $CERBERO $CERBERO_ARGS fetch-bootstrap --build-tools-only
- $CERBERO $CERBERO_ARGS fetch-package --deps gstreamer-1.0
- $CERBERO $CERBERO_ARGS bootstrap --offline --build-tools-only
- $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
- test "x${CERBERO_OVERRIDDEN_DIST_DIR}" != "x"
&& mkdir -p ${CERBERO_HOME}/dist/${ARCH}
&& rsync -aH ${CERBERO_OVERRIDDEN_DIST_DIR}/ ${CERBERO_HOME}/dist/${ARCH}
- $CERBERO $CERBERO_ARGS gen-cache --branch ${GST_UPSTREAM_BRANCH}
- test "x${CERBERO_PRIVATE_SSH_KEY}" = "x"
|| $CERBERO $CERBERO_ARGS upload-cache --branch ${GST_UPSTREAM_BRANCH}
- *cerbero_package_and_check
#
# 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_SOURCE_BRANCH_NAME && $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_SOURCE_BRANCH_NAME && $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-10.15
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 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-13.2
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_SOURCE_BRANCH_NAME && $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 git+https://github.com/hotdoc/hotdoc@28ad9aa59daa49d6b3fd1bc6b144df52af39475b
- *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-13.2
cross-ios universal examples:
extends: ".cross-ios universal examples"
rules:
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME && $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 ..