.templates_sha: &templates_sha 567700e483aabed992d0a4fea84994a0472deff6 include: - project: 'freedesktop/ci-templates' ref: *templates_sha file: '/templates/debian.yml' - remote: "https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/raw/master/ci/images_template.yml" variables: FDO_UPSTREAM_REPO: gstreamer/gst-plugins-rs 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 stages: - "prep" - "lint" - "test" - "extras" .debian:11: variables: FDO_DISTRIBUTION_VERSION: 'bullseye-slim' before_script: - source ./ci/env.sh - mkdir .cargo && echo -e "[net]\ngit-fetch-with-cli = true" > .cargo/config # If cargo exists assume we probably will want to update # the lockfile - | if command -v cargo; then cargo generate-lockfile cargo update fi .debian:11-stable: extends: .debian:11 variables: FDO_DISTRIBUTION_TAG: '$GST_RS_STABLE-${GST_RS_IMG_TAG}_2021-10-31.0' FDO_BASE_IMAGE: "registry.freedesktop.org/gstreamer/gstreamer-rs/debian/bullseye-slim:$GST_RS_STABLE-$GST_RS_IMG_TAG" .debian:11-msrv: extends: .debian:11 variables: FDO_DISTRIBUTION_TAG: '$GST_RS_MSRV-${GST_RS_IMG_TAG}_2021-10-31.0' FDO_BASE_IMAGE: "registry.freedesktop.org/gstreamer/gstreamer-rs/debian/bullseye-slim:$GST_RS_MSRV-$GST_RS_IMG_TAG" .debian:11-nightly: extends: .debian:11 variables: FDO_DISTRIBUTION_TAG: 'nightly-${GST_RS_IMG_TAG}_2021-10-31.0' FDO_BASE_IMAGE: "registry.freedesktop.org/gstreamer/gstreamer-rs/debian/bullseye-slim:nightly-$GST_RS_IMG_TAG" .build-debian-container: extends: - .fdo.container-build@debian stage: prep variables: FDO_DISTRIBUTION_PACKAGES: "libcsound64-dev llvm clang nasm libsodium-dev" FDO_DISTRIBUTION_EXEC: >- bash ci/install-dav1d.sh && bash ci/install-gtk4.sh && apt clean && bash ./ci/install-rust-ext.sh rules: - if: '$UPDATE_IMG == null' build-stable: extends: - .build-debian-container - .debian:11-stable build-msrv: extends: - .build-debian-container - .debian:11-msrv build-nightly: extends: - .build-debian-container - .debian:11-nightly # Those jobs are triggered by gstreamer-rs when updating its images update-stable: extends: build-stable rules: - if: '$UPDATE_IMG == "stable"' variables: FDO_FORCE_REBUILD: 1 update-msrv: extends: build-msrv rules: - if: '$UPDATE_IMG == "msrv"' variables: FDO_FORCE_REBUILD: 1 update-nightly: extends: build-nightly rules: - if: '$UPDATE_IMG == "nightly"' variables: FDO_FORCE_REBUILD: 1 .dist-debian-container: extends: - .fdo.distribution-image@debian variables: SODIUM_USE_PKG_CONFIG: "true" after_script: - rm -rf target .img-stable: extends: - .dist-debian-container - .debian:11-stable .img-msrv: extends: - .dist-debian-container - .debian:11-msrv .img-nightly: extends: - .dist-debian-container - .debian:11-nightly .cargo test: stage: "test" variables: # csound-sys only looks at /usr/lib and /usr/local top levels CSOUND_LIB_DIR: '/usr/lib/x86_64-linux-gnu/' script: - rustc --version - cargo build --locked --color=always --all - G_DEBUG=fatal_warnings cargo test --locked --color=always --all - cargo build --locked --color=always --all --examples --all-features - G_DEBUG=fatal_warnings cargo test --locked --color=always --all --examples --all-features test msrv: extends: - '.cargo test' - .img-msrv rules: - if: '$UPDATE_IMG == null || $UPDATE_IMG == "msrv"' test stable: extends: - '.cargo test' - .img-stable rules: - if: '$UPDATE_IMG == null || $UPDATE_IMG == "stable"' test nightly: allow_failure: true extends: - '.cargo test' - .img-nightly rules: - if: '$UPDATE_IMG == null || $UPDATE_IMG == "nightly"' .meson: extends: .img-stable rules: - if: '$UPDATE_IMG == null || $UPDATE_IMG == "stable"' variables: # csound-sys only looks at /usr/lib and /usr/local top levels CSOUND_LIB_DIR: '/usr/lib/x86_64-linux-gnu/' meson shared: extends: .meson script: - meson build --default-library=shared --prefix=$(pwd)/install - ninja -C build install - ./ci/check-plugins-installed.py install meson static: extends: .meson script: - meson build --default-library=static --prefix=$(pwd)/install -Dsodium=built-in - ninja -C build install - ./ci/generate-static-test.py test-static-link-all - cd test-static-link-all - PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$(pwd)/../install/lib/x86_64-linux-gnu/pkgconfig meson build - ninja -C build - ./build/test-gst-static rustfmt: extends: .img-stable stage: "lint" rules: - when: 'always' script: - cargo fmt --version - cargo fmt -- --color=always --check check commits: extends: .img-stable stage: "lint" rules: - when: 'always' script: - ci-fairy check-commits --textwidth 0 --no-signed-off-by clippy: extends: .img-stable stage: 'extras' variables: # csound-sys only looks at /usr/lib and /usr/local top levels CSOUND_LIB_DIR: '/usr/lib/x86_64-linux-gnu/' rules: - when: 'always' script: - cargo clippy --locked --color=always --all --all-features --all-targets -- -D warnings deny: extends: .img-stable stage: 'extras' rules: - if: '$CI_PIPELINE_SOURCE == "schedule"' script: - cargo deny check outdated: extends: .img-stable allow_failure: true stage: 'extras' rules: - if: '$CI_PIPELINE_SOURCE == "schedule"' script: - cargo outdated --root-deps-only --exit-code 1 -v coverage: allow_failure: true extends: - .img-nightly stage: 'extras' rules: - when: 'always' variables: RUSTFLAGS: "-Zinstrument-coverage" LLVM_PROFILE_FILE: "gst-plugins-rs-%p-%m.profraw" # csound-sys only looks at /usr/lib and /usr/local top levels CSOUND_LIB_DIR: '/usr/lib/x86_64-linux-gnu/' script: - cargo test --locked --color=always --all-features # generate html report - grcov . --binary-path ./target/debug/ -s . -t html --branch --ignore-not-existing --ignore "*target*" --ignore "*/build.rs" -o ./coverage/ # generate cobertura report for gitlab integration - grcov . --binary-path ./target/debug/ -s . -t cobertura --branch --ignore-not-existing --ignore "*target*" --ignore "*/build.rs" -o coverage.xml # output coverage summary for gitlab parsing. # TODO: use grcov once https://github.com/mozilla/grcov/issues/556 is fixed - grep "%" coverage/index.html | head -1 || true artifacts: paths: - 'coverage' reports: cobertura: coverage.xml