forked from mirrors/gstreamer-rs
8d9bb82492
We are caching the CARGO_HOME which includes git repos of the gtk-rs bindings. Since we don't specify a branch so it uses the default branch for the ref. cargo build usually does an update if it has network access, but its not guaranted or the case for other tools like clippy which may still point to the stale git snapshot like here: https://gitlab.freedesktop.org/thaytan/gstreamer-rs/-/jobs/4165449
362 lines
10 KiB
YAML
362 lines
10 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 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"
|
|
|
|
.source_env_anchor: &source_env
|
|
- source ./ci/env.sh
|
|
- mkdir .cargo && echo -e "[net]\ngit-fetch-with-cli = true" > .cargo/config
|
|
|
|
.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_env
|
|
|
|
.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
|
|
before_script:
|
|
- *source_env
|
|
# Ensure the cache and the .lockfile are up to date
|
|
- cargo generate-lockfile
|
|
- cargo update
|
|
cache:
|
|
key: "gst"
|
|
paths:
|
|
- "${CARGO_HOME}"
|
|
after_script:
|
|
- rm -rf target
|
|
|
|
.img-stable:
|
|
extends:
|
|
- .debian:10-stable
|
|
- .dist-debian-container
|
|
|
|
.img-1-40:
|
|
extends:
|
|
- .debian:10-1-40
|
|
- .dist-debian-container
|
|
|
|
.img-nightly:
|
|
extends:
|
|
- .debian:10-nightly
|
|
- .dist-debian-container
|
|
|
|
# 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 --locked --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 --locked --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 --locked --color=always --manifest-path examples/Cargo.toml --bins --examples --all-features
|
|
cargo build --locked --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 --locked --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 --locked --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
|
|
cargo clippy --locked --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 --depth 1 https://github.com/gtk-rs/checker
|
|
- cd checker && echo '[workspace]' >> Cargo.toml
|
|
- cargo build --locked --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
|
|
|
|
pages:
|
|
extends: .img-stable
|
|
stage: 'deploy'
|
|
script:
|
|
- |
|
|
for crate in gstreamer*; do
|
|
cd $crate
|
|
cargo doc --features --features=dox,embed-lgpl-docs
|
|
cd ..
|
|
done
|
|
- mv target/doc public/
|
|
when: 'manual'
|
|
artifacts:
|
|
paths:
|
|
- 'public'
|