mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer-rs.git
synced 2024-06-14 12:19:28 +00:00
429962bdd7
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.
256 lines
7.3 KiB
YAML
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
|