forked from mirrors/gstreamer-rs
ci: add an msvc 2017 test
Tests disabled for now, till some quirks are worked out. Thi should be good enough to at least not break the build though. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/701>
This commit is contained in:
parent
842dad3fa5
commit
5e27da5a1c
4 changed files with 228 additions and 0 deletions
|
@ -38,6 +38,13 @@ workflow:
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
FDO_UPSTREAM_REPO: gstreamer/gstreamer-rs
|
FDO_UPSTREAM_REPO: gstreamer/gstreamer-rs
|
||||||
|
|
||||||
|
# DIY CI-templates like setup for windows
|
||||||
|
WINDOWS_RUST_MINIMUM_IMAGE: "$CI_REGISTRY_IMAGE/windows:$GST_RS_IMG_TAG-main-$GST_RS_MSRV"
|
||||||
|
WINDOWS_RUST_MINIMUM_UPSTREAM_IMAGE: "$CI_REGISTRY/$GST_UPSTREAM_REPO/windows:$GST_RS_IMG_TAG-main-$GST_RS_MSRV"
|
||||||
|
WINDOWS_RUST_STABLE_IMAGE: "$CI_REGISTRY_IMAGE/windows:$GST_RS_IMG_TAG-main-$GST_RS_STABLE"
|
||||||
|
WINDOWS_RUST_STABLE_UPSTREAM_IMAGE: "$CI_REGISTRY/$GST_UPSTREAM_REPO/windows:$GST_RS_IMG_TAG-main-$GST_RS_STABLE"
|
||||||
|
|
||||||
RUST_DOCS_FLAGS: "--extern-html-root-url=muldiv=https://docs.rs/muldiv/1.0.0/muldiv/ -Z unstable-options"
|
RUST_DOCS_FLAGS: "--extern-html-root-url=muldiv=https://docs.rs/muldiv/1.0.0/muldiv/ -Z unstable-options"
|
||||||
NAMESPACE: gstreamer
|
NAMESPACE: gstreamer
|
||||||
# format is <branch>=<name>
|
# format is <branch>=<name>
|
||||||
|
@ -497,3 +504,85 @@ pages:
|
||||||
rules:
|
rules:
|
||||||
- if: ($CI_DEFAULT_BRANCH == $CI_COMMIT_BRANCH) && ($CI_PROJECT_NAMESPACE == $NAMESPACE)
|
- if: ($CI_DEFAULT_BRANCH == $CI_COMMIT_BRANCH) && ($CI_PROJECT_NAMESPACE == $NAMESPACE)
|
||||||
when: 'manual'
|
when: 'manual'
|
||||||
|
|
||||||
|
|
||||||
|
.windows rust docker build:
|
||||||
|
stage: 'container-final'
|
||||||
|
variables:
|
||||||
|
# Unlike the buildah/linux jobs, this file
|
||||||
|
# needs to be relative to windows-docker/ subdir
|
||||||
|
# as it makes life easier in the powershell script
|
||||||
|
#
|
||||||
|
# We also don't need a CONTEXT_DIR var as its also
|
||||||
|
# hardcoded to be windows-docker/
|
||||||
|
DOCKERFILE: 'ci/windows-docker/Dockerfile'
|
||||||
|
GST_UPSTREAM_BRANCH: 'main'
|
||||||
|
tags:
|
||||||
|
- 'windows'
|
||||||
|
- 'shell'
|
||||||
|
- '2022'
|
||||||
|
script:
|
||||||
|
# We need to pass an array and to resolve the env vars, so we can't use a variable:
|
||||||
|
- $DOCKER_BUILD_ARGS = @("--build-arg", "DEFAULT_BRANCH=$GST_UPSTREAM_BRANCH", "--build-arg", "RUST_VERSION=$RUST_VERSION")
|
||||||
|
|
||||||
|
- "& ci/windows-docker/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $RUST_IMAGE $RUST_UPSTREAM_IMAGE $DOCKERFILE"
|
||||||
|
- |
|
||||||
|
if (!($?)) {
|
||||||
|
echo "Failed to build the image"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
windows rust docker stable:
|
||||||
|
extends: '.windows rust docker build'
|
||||||
|
variables:
|
||||||
|
RUST_IMAGE: !reference [variables, "WINDOWS_RUST_STABLE_IMAGE"]
|
||||||
|
RUST_UPSTREAM_IMAGE: !reference [variables, "WINDOWS_RUST_STABLE_UPSTREAM_IMAGE"]
|
||||||
|
RUST_VERSION: !reference [variables, "GST_RS_STABLE"]
|
||||||
|
|
||||||
|
windows rust docker msrv:
|
||||||
|
extends: '.windows rust docker build'
|
||||||
|
variables:
|
||||||
|
RUST_IMAGE: !reference [variables, "WINDOWS_RUST_MINIMUM_IMAGE"]
|
||||||
|
RUST_UPSTREAM_IMAGE: !reference [variables, "WINDOWS_RUST_MINIMUM_UPSTREAM_IMAGE"]
|
||||||
|
RUST_VERSION: !reference [variables, "GST_RS_MSRV"]
|
||||||
|
|
||||||
|
.msvc2019 build:
|
||||||
|
stage: 'test'
|
||||||
|
tags:
|
||||||
|
- 'docker'
|
||||||
|
- 'windows'
|
||||||
|
- '2022'
|
||||||
|
script:
|
||||||
|
- $env:Path += ';C:\bin\'
|
||||||
|
|
||||||
|
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 &&
|
||||||
|
cargo build --all &&
|
||||||
|
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 (!$?) {
|
||||||
|
Write-Host "Tests Failed!"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
test windows msrv:
|
||||||
|
image: $WINDOWS_RUST_MINIMUM_IMAGE
|
||||||
|
needs:
|
||||||
|
- job: 'windows rust docker msrv'
|
||||||
|
artifacts: false
|
||||||
|
extends: '.msvc2019 build'
|
||||||
|
|
||||||
|
test windows stable:
|
||||||
|
needs:
|
||||||
|
- job: 'windows rust docker stable'
|
||||||
|
artifacts: false
|
||||||
|
image: "$WINDOWS_RUST_STABLE_IMAGE"
|
||||||
|
extends: '.msvc2019 build'
|
||||||
|
|
18
ci/windows-docker/Dockerfile
Normal file
18
ci/windows-docker/Dockerfile
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# escape=`
|
||||||
|
|
||||||
|
FROM "registry.freedesktop.org/gstreamer/gstreamer/amd64/windows:2022-05-16.1-main"
|
||||||
|
|
||||||
|
# Make sure any failure in PowerShell is fatal
|
||||||
|
ENV ErrorActionPreference='Stop'
|
||||||
|
SHELL ["powershell","-NoLogo", "-NonInteractive", "-Command"]
|
||||||
|
|
||||||
|
ARG DEFAULT_BRANCH="main"
|
||||||
|
ARG RUST_VERSION="invalid"
|
||||||
|
|
||||||
|
COPY install_gst.ps1 C:\
|
||||||
|
RUN C:\install_gst.ps1
|
||||||
|
RUN choco install -y pkgconfiglite
|
||||||
|
ENV PKG_CONFIG_PATH="C:/lib/pkgconfig"
|
||||||
|
|
||||||
|
RUN Invoke-WebRequest -Uri https://win.rustup.rs/x86_64 -OutFile C:\rustup-init.exe
|
||||||
|
RUN C:\rustup-init.exe -y --profile minimal --default-toolchain $env:RUST_VERSION
|
60
ci/windows-docker/container.ps1
Normal file
60
ci/windows-docker/container.ps1
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# Copied from mesa, big kudos
|
||||||
|
#
|
||||||
|
# https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/.gitlab-ci/windows/mesa_container.ps1
|
||||||
|
# https://gitlab.freedesktop.org/mesa/mesa/-/blob/34e3e164936d1d3cef267da7780e87f062fedf39/.gitlab-ci/windows/mesa_container.ps1
|
||||||
|
|
||||||
|
# Implements the equivalent of ci-templates container-ifnot-exists, using
|
||||||
|
# Docker directly as we don't have buildah/podman/skopeo available under
|
||||||
|
# Windows, nor can we execute Docker-in-Docker
|
||||||
|
$registry_uri = $args[0]
|
||||||
|
$registry_username = $args[1]
|
||||||
|
$registry_password = $args[2]
|
||||||
|
$registry_user_image = $args[3]
|
||||||
|
$registry_central_image = $args[4]
|
||||||
|
$dockerfile = $args[5]
|
||||||
|
|
||||||
|
docker --config "windows-docker.conf" login -u "$registry_username" -p "$registry_password" "$registry_uri"
|
||||||
|
if (!$?) {
|
||||||
|
Write-Host "docker login failed to $registry_uri"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# if the image already exists, don't rebuild it
|
||||||
|
docker --config "windows-docker.conf" pull "$registry_user_image"
|
||||||
|
if ($?) {
|
||||||
|
Write-Host "User image $registry_user_image already exists; not rebuilding"
|
||||||
|
docker --config "windows-docker.conf" logout "$registry_uri"
|
||||||
|
Exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# if the image already exists upstream, copy it
|
||||||
|
docker --config "windows-docker.conf" pull "$registry_central_image"
|
||||||
|
if ($?) {
|
||||||
|
Write-Host "Copying central image $registry_central_image to user image $registry_user_image"
|
||||||
|
docker --config "windows-docker.conf" tag "$registry_central_image" "$registry_user_image"
|
||||||
|
docker --config "windows-docker.conf" push "$registry_user_image"
|
||||||
|
$pushstatus = $?
|
||||||
|
docker --config "windows-docker.conf" logout "$registry_uri"
|
||||||
|
if (!$pushstatus) {
|
||||||
|
Write-Host "Pushing image to $registry_user_image failed"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
Exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "No image found at $registry_user_image or $registry_central_image; rebuilding"
|
||||||
|
docker --config "windows-docker.conf" build $DOCKER_BUILD_ARGS --no-cache -t "$registry_user_image" -f "$dockerfile" "./ci/windows-docker"
|
||||||
|
if (!$?) {
|
||||||
|
Write-Host "Container build failed"
|
||||||
|
docker --config "windows-docker.conf" logout "$registry_uri"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
Get-Date
|
||||||
|
|
||||||
|
docker --config "windows-docker.conf" push "$registry_user_image"
|
||||||
|
$pushstatus = $?
|
||||||
|
docker --config "windows-docker.conf" logout "$registry_uri"
|
||||||
|
if (!$pushstatus) {
|
||||||
|
Write-Host "Pushing image to $registry_user_image failed"
|
||||||
|
Exit 1
|
||||||
|
}
|
61
ci/windows-docker/install_gst.ps1
Normal file
61
ci/windows-docker/install_gst.ps1
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
|
||||||
|
|
||||||
|
# Download gstreamer and all its subprojects
|
||||||
|
git clone -b $env:DEFAULT_BRANCH --depth 1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git C:\gstreamer
|
||||||
|
if (!$?) {
|
||||||
|
Write-Host "Failed to clone gstreamer"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Set-Location C:\gstreamer
|
||||||
|
|
||||||
|
# Copy the cache we already have in the image to avoid massive redownloads
|
||||||
|
Move-Item C:/subprojects/* C:\gstreamer\subprojects
|
||||||
|
|
||||||
|
if (!$?) {
|
||||||
|
Write-Host "Failed to copy subprojects cache"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Update the subprojects cache
|
||||||
|
Write-Output "Running meson subproject reset"
|
||||||
|
meson subprojects update --reset
|
||||||
|
|
||||||
|
if (!$?) {
|
||||||
|
Write-Host "Failed to reset subprojects state"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$env:MESON_ARGS = "-Dglib:installed_tests=false " +
|
||||||
|
"-Dlibnice:tests=disabled " +
|
||||||
|
"-Dlibnice:examples=disabled " +
|
||||||
|
"-Dffmpeg:tests=disabled " +
|
||||||
|
"-Dopenh264:tests=disabled " +
|
||||||
|
"-Dpygobject:tests=false " +
|
||||||
|
"-Dugly=enabled " +
|
||||||
|
"-Dbad=enabled " +
|
||||||
|
"-Dges=enabled " +
|
||||||
|
"-Drtsp_server=enabled " +
|
||||||
|
"-Ddevtools=enabled " +
|
||||||
|
"-Dsharp=disabled " +
|
||||||
|
"-Dpython=disabled " +
|
||||||
|
"-Dlibav=disabled " +
|
||||||
|
"-Dvaapi=disabled " +
|
||||||
|
"-Dgst-plugins-base:pango=enabled " +
|
||||||
|
"-Dgst-plugins-good:cairo=enabled " +
|
||||||
|
"-Dgpl=enabled "
|
||||||
|
|
||||||
|
Write-Output "Building gst"
|
||||||
|
cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=amd64 && meson _build $env:MESON_ARGS && meson compile -C _build && ninja -C _build install"
|
||||||
|
|
||||||
|
if (!$?) {
|
||||||
|
Write-Host "Failed to build and install gst"
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
cd C:\
|
||||||
|
cmd /c rmdir /s /q C:\gstreamer
|
||||||
|
if (!$?) {
|
||||||
|
Write-Host "Failed to remove gst checkout"
|
||||||
|
Exit 1
|
||||||
|
}
|
Loading…
Reference in a new issue