# We use https://gitlab.freedesktop.org/freedesktop/ci-templates # to build the images used by the ci. # # Here is how to properly update thoses images: # - new Rust stable version: update GST_RS_IMG_TAG # - 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 personnal 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 322bf2b8f29b6491caeb13861201e96969ddc169 include: - project: 'freedesktop/ci-templates' ref: *templates_sha file: '/templates/debian.yml' - local: "ci/images_template.yml" variables: FDO_UPSTREAM_REPO: gstreamer/gstreamer-rs stages: - "container-base" - "container-final" - "lint" - "test" - "extras" - "deploy" .debian:10: variables: FDO_DISTRIBUTION_VERSION: 10 FDO_DISTRIBUTION_TAG: '$RUST_VERSION-$GST_RS_IMG_TAG' # Only stuff inside the repo directory can be cached # Override the CARGO_HOME variable to force its location CARGO_HOME: "${CI_PROJECT_DIR}/.cargo_home" before_script: - source ./ci/env.sh - mkdir .cargo && echo -e "[net]\ngit-fetch-with-cli = true" > .cargo/config .debian:10-base: extends: .debian:10 variables: FDO_DISTRIBUTION_TAG: 'base-$GST_RS_IMG_TAG' .debian:10-stable: extends: .debian:10 variables: RUST_VERSION: "stable" .debian:10-1-40: extends: .debian:10 variables: RUST_VERSION: "1.40.0" .debian:10-nightly: extends: .debian:10 variables: RUST_VERSION: "nightly" .build-base-image: extends: - .fdo.container-build@debian stage: container-base variables: FDO_DISTRIBUTION_PACKAGES: "build-essential curl python3-setuptools liborc-0.4-dev libglib2.0-dev libxml2-dev libgtk-3-dev libegl1-mesa libgles2-mesa libgl1-mesa-dri libgl1-mesa-glx libwayland-egl1-mesa xz-utils libssl-dev git wget ca-certificates ninja-build python3-pip flex bison libglib2.0-dev" FDO_DISTRIBUTION_EXEC: 'bash ci/install-gst.sh && pip3 install git+http://gitlab.freedesktop.org/freedesktop/ci-templates' .build-final-image: extends: - .fdo.container-build@debian stage: container-final variables: FDO_BASE_IMAGE: '$CI_REGISTRY_IMAGE/debian/10:base-$GST_RS_IMG_TAG' FDO_DISTRIBUTION_EXEC: 'bash ci/install-rust.sh $RUST_VERSION' build-base: extends: - .build-base-image - .debian:10-base build-stable: extends: - .build-final-image - .debian:10-stable build-1-40: extends: - .build-final-image - .debian:10-1-40 build-nightly: extends: - .build-final-image - .debian:10-nightly update-nightly: extends: build-nightly only: variables: - $UPDATE_NIGHTLY == "1" variables: FDO_FORCE_REBUILD: 1 .dist-debian-container: extends: - .fdo.distribution-image@debian cache: key: "gst" paths: - "${CARGO_HOME}" after_script: - rm -rf target .img-stable: extends: - .dist-debian-container - .debian:10-stable .img-1-40: extends: - .dist-debian-container - .debian:10-1-40 .img-nightly: extends: - .dist-debian-container - .debian:10-nightly # GST_PLUGINS_RS_TOKEN is a variable of type 'Var' defined in gstreamer-rs CI # settings and containing a gst-plugins-rs pipeline trigger token .plugins-update: stage: deploy script: - | # FDO_DISTRIBUTION_IMAGE still has indirections - echo $FDO_DISTRIBUTION_IMAGE - DISTRO_IMAGE=$(eval echo ${FDO_DISTRIBUTION_IMAGE}) - echo $DISTRO_IMAGE # retrieve the infos from the registry - JSON_IMAGE=$(skopeo inspect docker://$DISTRO_IMAGE) - IMAGE_PIPELINE_ID=$(echo $JSON_IMAGE | jq -r '.Labels["fdo.pipeline_id"]') - echo $IMAGE_PIPELINE_ID - echo $CI_PIPELINE_ID - | if [[ x"$IMAGE_PIPELINE_ID" == x"$CI_PIPELINE_ID" ]]; then echo "Image has been updated, notify gst-plugins-rs" curl -X POST -F "token=$GST_PLUGINS_RS_TOKEN" -F "ref=master" -F "variables[UPDATE_IMG]=$UPDATE_IMG" https://gitlab.freedesktop.org/api/v4/projects/1400/trigger/pipeline else echo "Image has not been updated, ignore" fi rules: - if: '$CI_COMMIT_REF_NAME == "master" && $CI_PROJECT_PATH == "gstreamer/gstreamer-rs"' # Those jobs need to use another image as ours doesn't have 'skopeo' # and it's not easily installable in Debian stable for now. plugins-update-stable: extends: - .plugins-update - .img-stable image: registry.freedesktop.org/freedesktop/ci-templates/buildah:2020-03-04 variables: UPDATE_IMG: "stable" plugins-update-1-40: extends: - .plugins-update - .img-1-40 image: registry.freedesktop.org/freedesktop/ci-templates/buildah:2020-03-04 variables: UPDATE_IMG: "1-40" plugins-update-nightly: extends: - .plugins-update - .img-nightly image: registry.freedesktop.org/freedesktop/ci-templates/buildah:2020-03-04 variables: UPDATE_IMG: "nightly" .cargo test: stage: "test" script: - rustc --version # First build and test all the crates with their relevant features # Keep features in sync with below - | for crate in gstreamer*; do if [ -n "$ALL_FEATURES" ]; then if [ $crate = "gstreamer" ]; then FEATURES=ser_de,v1_18 elif [ $crate = "gstreamer-gl" ]; then FEATURES=egl,x11,wayland,v1_18 else FEATURES=v1_18 fi cargo build --color=always --manifest-path $crate/Cargo.toml --features=$FEATURES G_DEBUG=fatal_warnings cargo test --color=always --manifest-path $crate/Cargo.toml --features=$FEATURES else cargo build --color=always --manifest-path $crate/Cargo.toml G_DEBUG=fatal_warnings cargo test --color=always --manifest-path $crate/Cargo.toml fi done # If we do a build with all features then also build the # tutorials/examples with all features - | if [ -n "$ALL_FEATURES" ]; then cargo build --color=always --manifest-path examples/Cargo.toml --bins --examples --all-features cargo build --color=always --manifest-path tutorials/Cargo.toml --bins --examples --all-features fi test 1.40: extends: - '.cargo test' - .img-1-40 test stable: extends: - '.cargo test' - .img-stable test stable all-features: variables: ALL_FEATURES: 'yes' extends: - '.cargo test' - .img-stable test nightly: allow_failure: true extends: - '.cargo test' - .img-nightly test nightly all-features: allow_failure: true variables: ALL_FEATURES: 'yes' extends: - '.cargo test' - .img-nightly rustfmt: extends: .img-stable stage: "lint" script: - cargo fmt --version - cargo fmt -- --color=always --check check commits: extends: .img-stable stage: "lint" script: - ci-fairy check-commits --textwidth 0 --no-signed-off-by clippy: extends: .img-stable stage: 'extras' script: - cargo clippy --version # Keep features in sync with above - | for crate in gstreamer*; do if [ $crate = "gstreamer" ]; then FEATURES=ser_de,v1_18 elif [ $crate = "gstreamer-gl" ]; then FEATURES=egl,x11,wayland,v1_18 else FEATURES=v1_18 fi cargo clippy --color=always --manifest-path $crate/Cargo.toml --features=$FEATURES --all-targets -- -A clippy::redundant_pattern_matching -A clippy::single_match -A clippy::cast_lossless -A clippy::missing_safety_doc -D warnings done # And also run over all the examples/tutorials - | cargo clippy --color=always --manifest-path examples/Cargo.toml --all-targets --all-features -- -A clippy::redundant_pattern_matching -A clippy::single_match -A clippy::cast_lossless -A clippy::missing_safety_doc -D warnings -A unused-imports cargo clippy --color=always --manifest-path tutorials/Cargo.toml --all-targets --all-features -- -A clippy::redundant_pattern_matching -A clippy::single_match -A clippy::cast_lossless -A clippy::missing_safety_doc -D warnings deny: extends: .img-stable stage: 'extras' only: - schedules script: - cargo deny check gir-checks: extends: .img-stable stage: 'extras' script: - git clone https://github.com/gtk-rs/checker - cd checker && git reset --hard df3ac62ae7f9876dc34a62b71f3a5427e4a4956d && echo '[workspace]' >> Cargo.toml - cargo build --release - | cargo run --release -- \ --gir-file ../Gir_GstApp.toml ../gstreamer-app \ --gir-file ../Gir_GstAudio.toml ../gstreamer-audio/ \ --gir-file ../Gir_GstBase.toml ../gstreamer-base \ --gir-file ../Gir_GstCheck.toml ../gstreamer-check/ \ --gir-file ../Gir_GstEditingServices.toml ../gstreamer-editing-services/ \ --gir-file ../Gir_GstGL.toml ../gstreamer-gl/ \ --gir-file ../Gir_GstNet.toml ../gstreamer-net/ \ --gir-file ../Gir_GstPbutils.toml ../gstreamer-pbutils/ \ --gir-file ../Gir_GstPlayer.toml ../gstreamer-player/ \ --gir-file ../Gir_GstRtp.toml ../gstreamer-rtp/ \ --gir-file ../Gir_GstRtspServer.toml ../gstreamer-rtsp-server/ \ --gir-file ../Gir_GstRtsp.toml ../gstreamer-rtsp/ \ --gir-file ../Gir_GstSdp.toml ../gstreamer-sdp/ \ --gir-file ../Gir_Gst.toml ../gstreamer/ \ --gir-file ../Gir_GstVideo.toml ../gstreamer-video/ \ --gir-file ../Gir_GstWebRTC.toml ../gstreamer-webrtc/ - cd .. - | for crate in gstreamer*; do echo '-->' $crate (cd $crate && ../checker/check_init_asserts) done outdated: extends: .img-stable allow_failure: true stage: 'extras' only: - schedules script: - cargo outdated --root-deps-only --exit-code 1 -v docs: extends: .img-nightly stage: 'deploy' script: - curl --proto '=https' --tlsv1.2 -sSf -o gir-rustdoc.py https://gitlab.gnome.org/World/Rust/gir-rustdoc/-/raw/main/gir-rustdoc.py - chmod +x gir-rustdoc.py - | eval $(./gir-rustdoc.py pre-docs) for crate in gstreamer*; do cd $crate cargo doc --features --features=dox,embed-lgpl-docs --no-deps cd .. done - rm -rf docs/ - mv target/doc docs/ artifacts: paths: - 'docs'