gstreamer-rs/.gitlab-ci.yml
Guillaume Desmottes 429962bdd7 ci: use fdo ci template
Build our own images instead of manually installing everything we need
for each job. This should hopefully speed up our ci and make it more
robust.
2020-04-16 09:46:57 +02:00

256 lines
7.3 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 thoses image:
# - new Rust stable version: update FDO_DISTRIBUTION_TAG
# - add dependencies: update FDO_DISTRIBUTION_PACKAGES and update FDO_DISTRIBUTION_TAG
# - update GStreamer version: update the tag in ci/install-gst.sh and update FDO_DISTRIBUTION_TAG
#
# Updating FDO_DISTRIBUTION_TAG is done by either:
# - 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 acda94e139030dc2caa058118956225e55bbec5f
include:
- project: 'freedesktop/ci-templates'
ref: *templates_sha
file: '/templates/debian.yml'
variables:
FDO_UPSTREAM_REPO: gstreamer/gstreamer-rs
stages:
- "prep"
- "lint"
- "test"
- "extras"
.debian:10:
variables:
FDO_DISTRIBUTION_VERSION: 10
FDO_DISTRIBUTION_TAG: '$RUST_VERSION-2020-04-16.0'
# 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
.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-debian-container:
extends:
- .fdo.container-build@debian
stage: prep
variables:
FDO_DISTRIBUTION_PACKAGES: "build-essential curl 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"
FDO_DISTRIBUTION_EXEC: 'bash ci/install-gst.sh && bash ci/install-rust.sh $RUST_VERSION'
build-stable:
extends:
- .build-debian-container
- .debian:10-stable
build-1-40:
extends:
- .build-debian-container
- .debian:10-1-40
build-nightly:
extends:
- .build-debian-container
- .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}"
.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
.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_16
elif [ $crate = "gstreamer-gl" ]; then
FEATURES=egl,x11,wayland,v1_16
else
FEATURES=v1_16
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
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_16
elif [ $crate = "gstreamer-gl" ]; then
FEATURES=egl,x11,wayland,v1_16
else
FEATURES=v1_16
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
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
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
audit:
extends: .img-stable
stage: 'extras'
only:
- schedules
script:
- cargo audit --deny-warnings
gir-checks:
extends: .img-stable
stage: 'extras'
script:
- git clone https://github.com/gtk-rs/checker
- cd checker && 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