diff --git a/.gitlab-ci/container/gitlab-ci.yml b/.gitlab-ci/container/gitlab-ci.yml index d1b1f077b0e..8257aa13900 100644 --- a/.gitlab-ci/container/gitlab-ci.yml +++ b/.gitlab-ci/container/gitlab-ci.yml @@ -366,16 +366,36 @@ debian/arm_test: script: - .\.gitlab-ci\windows\mesa_container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $MESA_IMAGE $MESA_UPSTREAM_IMAGE ${DOCKERFILE} ${MESA_BASE_IMAGE} -windows_build_vs2019: +windows_vs2019: inherit: default: false extends: - .windows_container_build + variables: + MESA_IMAGE_PATH: &windows_vs_image_path ${WINDOWS_X64_VS_PATH} + MESA_IMAGE_TAG: &windows_vs_image_tag ${WINDOWS_X64_VS_TAG} + DOCKERFILE: Dockerfile_vs + MESA_BASE_IMAGE: "mcr.microsoft.com/windows/server:ltsc2022" + +windows_build_vs2019: + inherit: + default: false + extends: + - .windows_container_build + rules: + - if: '$MICROSOFT_FARM == "offline"' + when: never + - !reference [.ci-run-policy, rules] variables: MESA_IMAGE_PATH: &windows_build_image_path ${WINDOWS_X64_BUILD_PATH} MESA_IMAGE_TAG: &windows_build_image_tag ${WINDOWS_X64_BUILD_TAG} DOCKERFILE: Dockerfile_build + MESA_BASE_IMAGE_PATH: *windows_vs_image_path + MESA_BASE_IMAGE_TAG: *windows_vs_image_tag + MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}" timeout: 2h 30m # LLVM takes ages + needs: + - windows_vs2019 windows_test_vs2019: inherit: @@ -391,11 +411,11 @@ windows_test_vs2019: MESA_IMAGE_TAG: &windows_test_image_tag ${WINDOWS_X64_BUILD_TAG}--${WINDOWS_X64_TEST_TAG} DOCKERFILE: Dockerfile_test # Right now this only needs the VS install to get DXIL.dll. Maybe see about decoupling this at some point - MESA_BASE_IMAGE_PATH: *windows_build_image_path - MESA_BASE_IMAGE_TAG: *windows_build_image_tag + MESA_BASE_IMAGE_PATH: *windows_vs_image_path + MESA_BASE_IMAGE_TAG: *windows_vs_image_tag MESA_BASE_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_BASE_IMAGE_PATH}:${MESA_BASE_IMAGE_TAG}" needs: - - windows_build_vs2019 + - windows_vs2019 .use-windows_build_vs2019: inherit: diff --git a/.gitlab-ci/image-tags.yml b/.gitlab-ci/image-tags.yml index e1f963b9c77..94a20f9511f 100644 --- a/.gitlab-ci/image-tags.yml +++ b/.gitlab-ci/image-tags.yml @@ -14,8 +14,11 @@ variables: FEDORA_X86_BUILD_TAG: "2022-04-24-spirv-tools-5" KERNEL_ROOTFS_TAG: "2022-06-09-piglit-update" + WINDOWS_X64_VS_PATH: "windows/x64_vs" + WINDOWS_X64_VS_TAG: "2022-06-10-vs" + WINDOWS_X64_BUILD_PATH: "windows/x64_build" - WINDOWS_X64_BUILD_TAG: "2022-27-05-server_2022" + WINDOWS_X64_BUILD_TAG: "2022-06-10-vs" WINDOWS_X64_TEST_PATH: "windows/x64_test" - WINDOWS_X64_TEST_TAG: "2022-07-06-server_2022" + WINDOWS_X64_TEST_TAG: "2022-06-10-vs" diff --git a/.gitlab-ci/windows/Dockerfile_build b/.gitlab-ci/windows/Dockerfile_build index 23e3ba1bbe2..3772c16514a 100644 --- a/.gitlab-ci/windows/Dockerfile_build +++ b/.gitlab-ci/windows/Dockerfile_build @@ -1,21 +1,11 @@ # escape=` -FROM mcr.microsoft.com/windows/server:ltsc2022 +ARG base_image +FROM ${base_image} -# https://www.thomasmaurer.ch/2019/07/how-to-install-and-update-powershell-7/ -# Wrapping the following command in cmd.exe -# iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet" -RUN powershell -ExecutionPolicy RemoteSigned -Command "$ErrorActionPreference = 'Stop'; iex ""& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet""" - -# Make sure any failure in PowerShell scripts is fatal -SHELL ["pwsh", "-ExecutionPolicy", "RemoteSigned", "-Command", "$ErrorActionPreference = 'Stop';"] - -COPY mesa_deps_vs2019.ps1 C:\ -RUN C:\mesa_deps_vs2019.ps1 -COPY mesa_vs_init.ps1 C:\ - -ENV VULKAN_SDK_VERSION='1.3.211.0' -COPY mesa_deps_choco.ps1 C:\ -RUN C:\mesa_deps_choco.ps1 COPY mesa_deps_build.ps1 C:\ RUN C:\mesa_deps_build.ps1 + +# When building, `--isolation=process` can leverage all cores and memory +# docker build --isolation=process -f .\Dockerfile_build -t mesa_dep --build-arg base_image=mesa_vs . + diff --git a/.gitlab-ci/windows/Dockerfile_vs b/.gitlab-ci/windows/Dockerfile_vs new file mode 100644 index 00000000000..95c45633151 --- /dev/null +++ b/.gitlab-ci/windows/Dockerfile_vs @@ -0,0 +1,29 @@ +# escape=` + +ARG base_image +FROM ${base_image} + +# https://www.thomasmaurer.ch/2019/07/how-to-install-and-update-powershell-7/ +# Wrapping the following command in cmd.exe +# iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet" +RUN powershell -ExecutionPolicy RemoteSigned -Command "$ErrorActionPreference = 'Stop'; iex ""& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet""" + +# Make sure any failure in PowerShell scripts is fatal +SHELL ["pwsh", "-ExecutionPolicy", "RemoteSigned", "-Command", "$ErrorActionPreference = 'Stop';"] +RUN Write-Output $PSVersionTable $ErrorActionPreference + +COPY mesa_deps_vs2019.ps1 C:\ +RUN C:\mesa_deps_vs2019.ps1 +COPY mesa_vs_init.ps1 C:\ + +ENV VULKAN_SDK_VERSION='1.3.211.0' +COPY mesa_deps_choco.ps1 C:\ +RUN C:\mesa_deps_choco.ps1 + +# Example usage: +# `base_image` should use windows image that can be run with `--isolation=process` option, +# since the resulting container will want to be used that way be later containers in the build process. +# Only --isolation=hyperv can succeed building this container locally, +# --isolation=process have network issue when installing Visual Studio and choco will crash +# docker build --isolation=hyperv -f .\Dockerfile_vs -t mesa_vs --build-arg base_image="mcr.microsoft.com/windows:10.0.19041.1415" . +