gstreamer-rs/.gitlab-ci.yml
2024-04-23 14:06:02 +02:00

133 lines
6 KiB
YAML

# We use https://gitlab.freedesktop.org/freedesktop/ci-templates
# to build the images used by the ci.
#
# Here is how to properly update those images:
# - new Rust stable version: update GST_RS_IMG_TAG and update Rust version
# - add dependencies: update FDO_DISTRIBUTION_PACKAGES and update GST_RS_IMG_TAG
# - update GStreamer version: update the tag in ci/install-gst.sh and update GST_RS_IMG_TAG
#
# GST_RS_IMG_TAG is defined in ci/images_template.yml and should be updated
# either by:
# - setting it to the current date and the version suffix to 0
# - incrementing the version suffix
#
# After each update commit your changes and push to your personal repo.
# After review and ci approval merge the branch as usual.
#
# Updating the nightly image should be done by simply running a scheduled ci
# pipeline on the upstream repo with the $UPDATE_NIGHTLY variable defined.
.templates_sha: &templates_sha b2e24205598dc1d80b5f2c88cf7618051e30e9fd
include:
- project: 'freedesktop/ci-templates'
ref: *templates_sha
file: '/templates/debian.yml'
- local: "ci/images_template.yml"
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
- 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
default:
interruptible: true
variables:
FDO_UPSTREAM_REPO: gstreamer/gstreamer-rs
# DIY CI-templates like setup for windows
WINDOWS_RUST_MINIMUM_IMAGE: "$CI_REGISTRY_IMAGE/windows:$GST_RS_IMG_TAG-main-$GST_RS_MSRV"
WINDOWS_RUST_MINIMUM_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/windows:$GST_RS_IMG_TAG-main-$GST_RS_MSRV"
WINDOWS_RUST_STABLE_IMAGE: "$CI_REGISTRY_IMAGE/windows:$GST_RS_IMG_TAG-main-$GST_RS_STABLE"
WINDOWS_RUST_STABLE_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/windows:$GST_RS_IMG_TAG-main-$GST_RS_STABLE"
RUST_DOCS_FLAGS: "--cfg docsrs --extern-html-root-url=muldiv=https://docs.rs/muldiv/1.0.0/muldiv/ -Z unstable-options --generate-link-to-definition"
NAMESPACE: gstreamer
# format is <branch>=<name>
# the name is used in the URL
# latest release must be at the top
# (only relevant on main branch)
RELEASES:
0.22=0.22
stages:
- "test"
.macos:arm64:
image: "registry.freedesktop.org/gstreamer/cerbero/macos-arm64/14-sonoma:2023-10-25.2"
tags:
- 'gst-mac-arm'
.macos:arm64-stable:
extends: .macos:arm64
after_script:
- rm -rf target
before_script:
- CI=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> $HOME/.zprofile
- eval "$(/opt/homebrew/bin/brew shellenv)"
- CI=1 brew install pkg-config
- export GST_VERSION=1.24.2
- curl --proto '=https' --tlsv1.2 -o gstreamer-1.0-${GST_VERSION}-universal.pkg -sSf https://gstreamer.freedesktop.org/data/pkg/osx/${GST_VERSION}/gstreamer-1.0-${GST_VERSION}-universal.pkg
- curl --proto '=https' --tlsv1.2 -o gstreamer-1.0-devel-${GST_VERSION}-universal.pkg -sSf https://gstreamer.freedesktop.org/data/pkg/osx/${GST_VERSION}/gstreamer-1.0-devel-${GST_VERSION}-universal.pkg
- sudo installer -pkg gstreamer-1.0-${GST_VERSION}-universal.pkg -target /
- sudo installer -pkg gstreamer-1.0-devel-${GST_VERSION}-universal.pkg -target /
- export PKG_CONFIG_PATH=/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/pkgconfig:$PKG_CONFIG_PATH
- export DYLD_FALLBACK_LIBRARY_PATH=/Library/Frameworks/GStreamer.framework/Versions/1.0/lib:$DYLD_FALLBACK_LIBRARY_PATH
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
- echo -e "[net]\ngit-fetch-with-cli = true" > $HOME/.cargo/config
- source "$HOME/.cargo/env"
test macos-arm64 stable:
extends: '.macos:arm64-stable'
stage: 'test'
#needs:
# - 'trigger'
script:
- rustc --version
# Package exclusion list:
- export EXCLUSION_LIST=(gstreamer-editing-services-sys gstreamer-gl gstreamer-gl-sys \
gstreamer-gl-egl gstreamer-gl-egl-sys gstreamer-gl-wayland gstreamer-gl-wayland-sys \
gstreamer-gl-x11 gstreamer-gl-x11-sys gstreamer-rtp-sys)
- export EXCLUDE_ARGS=(`for p in ${EXCLUSION_LIST[@]}; do printf " --exclude %s" $p; done`)
- cargo build --locked --workspace ${EXCLUDE_ARGS[@]} --all-targets --color=always
- G_DEBUG=fatal_warnings cargo test --locked --workspace ${EXCLUDE_ARGS[@]} --all-targets --color=always
# --all-features
- cargo build --locked --workspace ${EXCLUDE_ARGS[@]} --all-targets --all-features --color=always
- G_DEBUG=fatal_warnings cargo test --locked --workspace ${EXCLUDE_ARGS[@]} --all-targets --all-features --color=always
# --no-default-features
- cargo build --keep-going --locked --workspace ${EXCLUDE_ARGS[@]} --all-targets --no-default-features --color=always
- G_DEBUG=fatal_warnings cargo test --locked --workspace ${EXCLUDE_ARGS[@]} --all-targets --no-default-features --color=always
# examples
# Excluding anything gl, fd_allocator & d3d11videosink
- export EXAMPLES_FEATURES="--features=rtsp-server,rtsp-server-record,pango-cairo,overlay-composition,allocators,gst-play,gst-player,ges,image,cairo-rs,gst-video/v1_18"
- export INCLUSION_LIST=(appsink appsrc custom_events custom_meta decodebin debug_ringbuffer \
encodebin events iterator launch_glib_main launch transmux pad_probes play playbin player \
queries rtpfecclient rtpfecserver rtsp-server rtsp-server-subclass rtsp-server-custom-auth \
tagsetter toc futures glib-futures rtso-server-record discoverer pango-cairo \
overlay-composition ges subclass video_converter thumbnail cairo_compositor \
audio_multichannel_interleave)
- export INCLUDE_ARGS=(`for p in ${INCLUSION_LIST[@]}; do printf " --bin %s" $p; done`)
- cargo build --locked --color=always -p examples ${INCLUDE_ARGS[@]} "$EXAMPLES_FEATURES"
# tutorials
- cargo build --locked --color=always -p tutorials --bins