# 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 = # 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: # * examples & tutorials are handled separately. # * gstreamer-editing-services-sys, gstreamer-rtp-sys ABI tests fail. # * FIXME check some gl support? - export EXCLUSION_LIST=(examples tutorials 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 EXAMPLE_FEATURES="rtsp-server gst-rtsp-server/v1_22 rtsp-server-record pango-cairo" - EXAMPLE_FEATURES+=" overlay-composition allocators gst-play gst-player ges image cairo-rs" - EXAMPLE_FEATURES+=" 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 rtsp-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[@]} --features="${EXAMPLE_FEATURES}" # tutorials # - cargo build --locked --color=always -p tutorials --bins - cargo build --keep-going --locked --color=always -p tutorials --bins