ci: use a custom powershell script to run windows tests

There are a couple things going on here.

First, we need to avoid building egl/wayalnd/x11 crates on windows
as they can't be built.

Then we need to avoid running -sys tests as they don't succeed
currently. See [1]

Finally use a matrix:parallel job to tests multiple build
configurations.

[1] https://github.com/gtk-rs/gtk3-rs/issues/54

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/701>
This commit is contained in:
Jordan Petridis 2021-05-28 06:02:25 +03:00
parent 5e27da5a1c
commit d53dfcf94e
2 changed files with 99 additions and 11 deletions

View file

@ -552,20 +552,23 @@ windows rust docker msrv:
- 'docker' - 'docker'
- 'windows' - 'windows'
- '2022' - '2022'
parallel:
matrix:
- FEATURES:
- "--features=v1_18,"
- "--features=v1_20,"
- "--features=v1_22,"
- "--no-default-features"
- ""
script: script:
- $env:Path += ';C:\bin\' - echo $env:FEATURES
# Skip -sys tests as they don't work
# https://github.com/gtk-rs/gtk3-rs/issues/54
#
# We need to build each crate separately to avoid crates like -egl,-wayland etc on windows
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 &&
cargo build --all && powershell ./ci/run_windows_tests.ps1"
cargo build --tests --all"
- |
if (!$?) {
Write-Host "Failed to build!"
Exit 1
}
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 &&
cargo test --workspace --no-fail-fast -- --skip 'cross_validate_constants_with_c' --skip 'cross_validate_layout_with_c'"
- | - |
if (!$?) { if (!$?) {

85
ci/run_windows_tests.ps1 Normal file
View file

@ -0,0 +1,85 @@
# Add the precompiled gst binaries to the path
$env:Path += ';C:\bin\'
$env:PKG_CONFIG_PATH = "C:/lib/pkgconfig"
# List of all the crates we want to build
# We need to do this manually to avoid trying
# to build egl,wayland,x11 etc, which can't
# work on windows
[string[]] $crates = @(
'gstreamer',
# Unix specific atm
# 'gstreamer-allocators'
'gstreamer-app',
'gstreamer-audio',
'gstreamer-base',
'gstreamer-check',
'gstreamer-controller',
'gstreamer-editing-services',
# 'gstreamer-gl',
# 'gstreamer-gl/egl',
# 'gstreamer-gl/wayland',
# 'gstreamer-gl/x11',
# only has sys
# 'gstreamer-mpegts',
'gstreamer-mpegts/sys',
'gstreamer-net',
'gstreamer-pbutils',
'gstreamer-player',
'gstreamer-rtp',
'gstreamer-rtsp',
'gstreamer-rtsp-server',
'gstreamer-sdp',
# only has sys
# 'gstreamer-tag',
'gstreamer-tag/sys',
'gstreamer-video',
'gstreamer-webrtc',
'tutorials',
'examples'
)
foreach($crate in $crates)
{
Write-Host "Building crate: $crate"
Write-Host "Features: $env:FEATURES"
$env:LocalFeatures = $env:FEATURES
# Don't append feature flags if the string is null/empty
# Or when we want to build without default features
if ($env:LocalFeatures -and ($env:LocalFeatures -ne '--no-default-features')) {
if ($crate -eq 'gstreamer') {
$env:LocalFeatures += "ser_de,"
}
if ($crate -eq 'examples') {
# FIXME: We can do --all-features for examples once we have gtk installed in the image
$env:LocalFeatures = "--features=rtsp-server,rtsp-server-record,pango-cairo,overlay-composition"
}
if ($crate -eq 'tutorials') {
$env:LocalFeatures = ''
}
}
Write-Host "with features: $env:LocalFeatures"
cargo build --color=always --manifest-path $crate/Cargo.toml --all-targets $env:LocalFeatures
if (!$?) {
Write-Host "Failed to build crate: $crate"
Exit 1
}
if (($crate -eq "gstreamer-tag/sys") -or ($crate -eq "gstreamer-mpegts/sys")) {
Write-Host "Skipping tests for $crate"
continue
}
$env:G_DEBUG="fatal_warnings"
cargo test --no-fail-fast --color=always --manifest-path $crate/Cargo.toml $env:LocalFeatures
if (!$?) {
Write-Host "Tests failed to for crate: $crate"
Exit 1
}
}