From 6357041be136a831824487a6d4470967935f295b Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Thu, 23 Jan 2025 14:22:31 -0800 Subject: [PATCH 01/24] Update CUDA to 12.8 and Ubuntu to 24.04 "Noble" --- .../azure-pipelines/linux/managed-image.json | 2 +- .../azure-pipelines/linux/provision-image.sh | 14 +-- .../azure-pipelines/windows/deploy-cuda.ps1 | 86 +++++++++---------- 3 files changed, 51 insertions(+), 51 deletions(-) diff --git a/scripts/azure-pipelines/linux/managed-image.json b/scripts/azure-pipelines/linux/managed-image.json index e1325fc7791bc6..cd53e9a67979e9 100644 --- a/scripts/azure-pipelines/linux/managed-image.json +++ b/scripts/azure-pipelines/linux/managed-image.json @@ -7,7 +7,7 @@ } }, { - "name": "linux-ubuntu2204-nvidia-cuda-cudnn" + "name": "linux-ubuntu2404-nvidia-cuda-cudnn" }, { "name": "linux-install-powershell" diff --git a/scripts/azure-pipelines/linux/provision-image.sh b/scripts/azure-pipelines/linux/provision-image.sh index 7aa3d634554d7a..c47b6d5ad833de 100755 --- a/scripts/azure-pipelines/linux/provision-image.sh +++ b/scripts/azure-pipelines/linux/provision-image.sh @@ -8,13 +8,13 @@ export DEBIAN_FRONTEND=noninteractive # Add apt repos ## CUDA -wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin -mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 -apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub -add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" +wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin +mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600 +apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/3bf863cc.pub +add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/ /" ## PowerShell -wget -q https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb +wget -q https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb dpkg -i packages-microsoft-prod.deb rm -f packages-microsoft-prod.deb add-apt-repository universe @@ -109,8 +109,8 @@ APT_PACKAGES="$APT_PACKAGES wayland-protocols" APT_PACKAGES="$APT_PACKAGES libbluetooth-dev" ## CUDA -APT_PACKAGES="$APT_PACKAGES cuda-compiler-12-1 cuda-libraries-dev-12-1 cuda-driver-dev-12-1 \ - cuda-cudart-dev-12-1 libcublas-12-1 libcurand-dev-12-1 cuda-nvml-dev-12-1 libcudnn8-dev libnccl2 \ +APT_PACKAGES="$APT_PACKAGES cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 \ + cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev libnccl2 \ libnccl-dev" ## PowerShell + Azure diff --git a/scripts/azure-pipelines/windows/deploy-cuda.ps1 b/scripts/azure-pipelines/windows/deploy-cuda.ps1 index e239fdb6c82ba1..a0332a4179d668 100644 --- a/scripts/azure-pipelines/windows/deploy-cuda.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cuda.ps1 @@ -10,58 +10,58 @@ if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { [string]$CudaUrl if ([string]::IsNullOrEmpty($SasToken)) { Write-Host 'Downloading from the Internet' - $CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda_12.5.0_555.85_windows.exe' + $CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_571.96_windows.exe' } else { Write-Host 'Downloading from vcpkgimageminting using SAS token' $SasToken = $SasToken.Replace('"', '') - $CudaUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cuda_12.5.0_555.85_windows.exe?$SasToken" + $CudaUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cuda_12.8.0_571.96_windows.exe?$SasToken" } # https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html # Intentionally omitted: -# demo_suite_12.5 -# documentation_12.5 -# nvvm_samples_12.5 -# visual_studio_integration_12.5 +# demo_suite_12.8 +# documentation_12.8 +# nsight_compute_12.8 +# nsight_systems_12.8 +# nsight_vse_12.8 +# nvvm_samples_12.8 +# visual_studio_integration_12.8 +# visual_profiler_12.8 # Display.Driver DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( '-s', - 'cublas_12.5', - 'cublas_dev_12.5', - 'cuda_profiler_api_12.5', - 'cudart_12.5', - 'cufft_12.5', - 'cufft_dev_12.5', - 'cuobjdump_12.5', - 'cupti_12.5', - 'curand_12.5', - 'curand_dev_12.5', - 'cusolver_12.5', - 'cusolver_dev_12.5', - 'cusparse_12.5', - 'cusparse_dev_12.5', - 'cuxxfilt_12.5', - 'npp_12.5', - 'npp_dev_12.5', - 'nsight_compute_12.5', - 'nsight_systems_12.5', - 'nsight_vse_12.5', - 'nvcc_12.5', - 'nvdisasm_12.5', - 'nvfatbin_12.5', - 'nvjitlink_12.5', - 'nvjpeg_12.5', - 'nvjpeg_dev_12.5', - 'nvml_dev_12.5', - 'nvprof_12.5', - 'nvprune_12.5', - 'nvrtc_12.5', - 'nvrtc_dev_12.5', - 'nvtx_12.5', - 'occupancy_calculator_12.5', - 'opencl_12.5', - 'sanitizer_12.5', - 'thrust_12.5', - 'visual_profiler_12.5', + 'cublas_12.8', + 'cublas_dev_12.8', + 'cuda_profiler_api_12.8', + 'cudart_12.8', + 'cufft_12.8', + 'cufft_dev_12.8', + 'cuobjdump_12.8', + 'cupti_12.8', + 'curand_12.8', + 'curand_dev_12.8', + 'cusolver_12.8', + 'cusolver_dev_12.8', + 'cusparse_12.8', + 'cusparse_dev_12.8', + 'cuxxfilt_12.8', + 'npp_12.8', + 'npp_dev_12.8', + 'nvcc_12.8', + 'nvdisasm_12.8', + 'nvfatbin_12.8', + 'nvjitlink_12.8', + 'nvjpeg_12.8', + 'nvjpeg_dev_12.8', + 'nvml_dev_12.8', + 'nvprof_12.8', + 'nvprune_12.8', + 'nvrtc_12.8', + 'nvrtc_dev_12.8', + 'nvtx_12.8', + 'occupancy_calculator_12.8', + 'opencl_12.8', + 'sanitizer_12.8', + 'thrust_12.8', '-n' ) From a364e0a4624eafd9cee3dfc86469837ed33fec8f Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 24 Jan 2025 13:35:08 -0800 Subject: [PATCH 02/24] Update CUDNN. --- scripts/azure-pipelines/windows/deploy-cudnn.ps1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 index 7ca82a254be5ad..5587590ac2e3be 100644 --- a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 @@ -10,16 +10,16 @@ if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { [string]$CudnnUrl if ([string]::IsNullOrEmpty($SasToken)) { Write-Host 'Downloading from the Internet' - $CudnnUrl = 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.2.0.82_cuda12-archive.zip' + $CudnnUrl = 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.7.0.66_cuda12-archive.zip' } else { Write-Host 'Downloading from vcpkgimageminting using SAS token' $SasToken = $SasToken.Replace('"', '') - $CudnnUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cudnn-windows-x86_64-9.2.0.82_cuda12-archive.zip?$SasToken" + $CudnnUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cudnn-windows-x86_64-9.7.0.66_cuda12-archive.zip?$SasToken" } -DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.5" +DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.8" -if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.5\include\cudnn.h") { +if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.8\include\cudnn.h") { Write-Host 'cudnn appears correctly installed' } else { Write-Error 'cudnn appears broken!' From b5804141eb699fc64a3afb60eedd5effca74d67d Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 12 Feb 2025 10:43:49 -0800 Subject: [PATCH 03/24] Cherry-pick Android container changes from https://github.com/microsoft/vcpkg/pull/42080 --- scripts/azure-pipelines/android/Dockerfile | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/scripts/azure-pipelines/android/Dockerfile b/scripts/azure-pipelines/android/Dockerfile index d20d58e7fa4cf6..bd4dbd4086626c 100644 --- a/scripts/azure-pipelines/android/Dockerfile +++ b/scripts/azure-pipelines/android/Dockerfile @@ -3,6 +3,11 @@ FROM ubuntu:noble-20241118.1 ADD https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb /packages-microsoft-prod.deb +ADD https://builds.openlogic.com/downloadJDK/openlogic-openjdk/11.0.25+9/openlogic-openjdk-11.0.25+9-linux-x64.tar.gz /openlogic-openjdk-11.0.25+9-linux-x64.tar.gz +ADD https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip /sdk-commandlinetools-linux-10406996_latest.zip +ADD https://dl.google.com/android/repository/build-tools_r34-linux.zip /build-tools_r34-linux.zip +ADD https://dl.google.com/android/repository/platform-34-ext7_r03.zip /platform-34-ext7_r03.zip +ADD https://dl.google.com/android/repository/platform-tools_r35.0.1-linux.zip /platform-tools_r35.0.1-linux.zip ADD https://dl.google.com/android/repository/android-ndk-r27c-linux.zip /android-ndk-r27c-linux.zip # Add apt packages @@ -59,11 +64,34 @@ apt-get -y dist-upgrade apt-get -y --no-install-recommends install $APT_PACKAGES +# OpenJDK +tar xzf openlogic-openjdk-11.0.25+9-linux-x64.tar.gz +rm openlogic-openjdk-11.0.25+9-linux-x64.tar.gz + +# Android SDK +unzip -q sdk-commandlinetools-linux-10406996_latest.zip -d android-sdk +rm sdk-commandlinetools-linux-10406996_latest.zip + +unzip -q build-tools_r34-linux.zip -d android-sdk/build-tools +mv android-sdk/build-tools/android-14 android-sdk/build-tools/34.0.0 +rm build-tools_r34-linux.zip + +unzip -q platform-34-ext7_r03.zip -d android-sdk/platforms +rm platform-34-ext7_r03.zip + +unzip -q platform-tools_r35.0.1-linux.zip -d android-sdk +rm platform-tools_r35.0.1-linux.zip + # Android NDK unzip /android-ndk-r27c-linux.zip rm -f android-ndk-r27c-linux.zip + END_OF_SCRIPT +ENV JAVA_HOME /openlogic-openjdk-11.0.25+9-linux-x64 + +ENV ANDROID_HOME /android-sdk + ENV ANDROID_NDK_HOME /android-ndk-r27c WORKDIR /vcpkg From 82221c25066ce688665987d849a8c5672bd05f4b Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 12 Feb 2025 10:47:38 -0800 Subject: [PATCH 04/24] Update Visual Studio to 17.13.0. --- scripts/azure-pipelines/windows/deploy-visual-studio.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 index d2bda88be4d226..903ff5155d3aa8 100644 --- a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 +++ b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 @@ -8,8 +8,8 @@ if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { } # See https://learn.microsoft.com/visualstudio/releases/2022/release-history -# 17.12.4 -$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/9e5046bb-ab15-4a45-9546-cbabed333482/e7bd4bc12f0345ae1708ec3c7e442a0ddf9f5e390f711feef4758ef0719b819a/vs_Enterprise.exe' +# 17.13.0 +$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/45212da0-ea11-4612-bbff-cf4b802a1640/64a98e70906ade95e6a565687d6e92b3b37ed37633a029224cb2bde7cc073071/vs_Enterprise.exe' $Workloads = @( 'Microsoft.VisualStudio.Workload.NativeDesktop', 'Microsoft.VisualStudio.Workload.Universal', From 5278abe0741b216a3c9d817f5f3443f187c887f1 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 12 Feb 2025 11:26:34 -0800 Subject: [PATCH 05/24] Actually fix cuda/cudnn for Linux. --- scripts/azure-pipelines/linux/managed-image.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/azure-pipelines/linux/managed-image.json b/scripts/azure-pipelines/linux/managed-image.json index cd53e9a67979e9..4e2c20f1a79855 100644 --- a/scripts/azure-pipelines/linux/managed-image.json +++ b/scripts/azure-pipelines/linux/managed-image.json @@ -1,14 +1,14 @@ { "artifacts": [ + { + "name": "linux-ubuntu-nvidia-repo" + }, { "name": "linux-install-packages", "parameters": { - "packages": "git curl zip unzip tar at libxt-dev gperf libxaw7-dev cifs-utils build-essential g++ gfortran libx11-dev libxkbcommon-x11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxinerama-dev libxxf86vm-dev libxcursor-dev yasm libnuma1 libnuma-dev libtool-bin libltdl-dev flex bison libbison-dev autoconf libudev-dev libncurses5-dev libtool libxrandr-dev xutils-dev dh-autoreconf autoconf-archive libgles2-mesa-dev ruby-full pkg-config meson nasm cmake ninja-build libxext-dev libxfixes-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-util0-dev libxkbcommon-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-cursor-dev libkrb5-dev libxcb-res0-dev libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev python3-setuptools python3-mako python3-pip python3-venv python3-jinja2 nodejs libwayland-dev python-is-python3 guile-2.2-dev libxdamage-dev libxtst-dev haskell-stack golang-go wayland-protocols libbluetooth-dev" + "packages": "git curl zip unzip tar at libxt-dev gperf libxaw7-dev cifs-utils build-essential g++ gfortran libx11-dev libxkbcommon-x11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxinerama-dev libxxf86vm-dev libxcursor-dev yasm libnuma1 libnuma-dev libtool-bin libltdl-dev flex bison libbison-dev autoconf libudev-dev libncurses5-dev libtool libxrandr-dev xutils-dev dh-autoreconf autoconf-archive libgles2-mesa-dev ruby-full pkg-config meson nasm cmake ninja-build libxext-dev libxfixes-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-util0-dev libxkbcommon-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-cursor-dev libkrb5-dev libxcb-res0-dev libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev python3-setuptools python3-mako python3-pip python3-venv python3-jinja2 nodejs libwayland-dev python-is-python3 guile-2.2-dev libxdamage-dev libxtst-dev haskell-stack golang-go wayland-protocols libbluetooth-dev cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev libnccl2 libnccl-dev" } }, - { - "name": "linux-ubuntu2404-nvidia-cuda-cudnn" - }, { "name": "linux-install-powershell" }, From 97902268b28674ec845610feb2bf6fd331a97c1f Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 14 Feb 2025 12:19:15 -0800 Subject: [PATCH 06/24] Replicate the version-agnostic behavior to provision-image.sh --- scripts/azure-pipelines/linux/provision-image.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/azure-pipelines/linux/provision-image.sh b/scripts/azure-pipelines/linux/provision-image.sh index c47b6d5ad833de..3cf94a715896b9 100755 --- a/scripts/azure-pipelines/linux/provision-image.sh +++ b/scripts/azure-pipelines/linux/provision-image.sh @@ -7,14 +7,18 @@ export DEBIAN_FRONTEND=noninteractive # Add apt repos +# Detect Ubuntu VERSION_ID from /etc/os-release (e.g., "20.04") and format to "2004" +UBUNTU_VERSION_ID=$(. /etc/os-release && echo "$VERSION_ID") +NVIDIA_REPO_VERSION=$(echo "$UBUNTU_VERSION_ID" | sed 's/\.//') + ## CUDA -wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin -mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600 -apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/3bf863cc.pub -add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/ /" +wget "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${NVIDIA_REPO_VERSION}/x86_64/cuda-ubuntu${NVIDIA_REPO_VERSION}.pin" +mv "cuda-ubuntu${NVIDIA_REPO_VERSION}.pin" /etc/apt/preferences.d/cuda-repository-pin-600 +apt-key adv --fetch-keys "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${NVIDIA_REPO_VERSION}/x86_64/3bf863cc.pub" +add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${NVIDIA_REPO_VERSION}/x86_64/ /" ## PowerShell -wget -q https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb +wget -q https://packages.microsoft.com/config/ubuntu/${UBUNTU_VERSION_ID}/packages-microsoft-prod.deb dpkg -i packages-microsoft-prod.deb rm -f packages-microsoft-prod.deb add-apt-repository universe From bdab7b811292b09654894a1648a880198e90a6cf Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 14 Feb 2025 13:08:03 -0800 Subject: [PATCH 07/24] Fix the name for cudnn in the CUDA 12 era. --- scripts/azure-pipelines/linux/managed-image.json | 2 +- scripts/azure-pipelines/linux/provision-image.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/azure-pipelines/linux/managed-image.json b/scripts/azure-pipelines/linux/managed-image.json index 4e2c20f1a79855..86900f812e1808 100644 --- a/scripts/azure-pipelines/linux/managed-image.json +++ b/scripts/azure-pipelines/linux/managed-image.json @@ -6,7 +6,7 @@ { "name": "linux-install-packages", "parameters": { - "packages": "git curl zip unzip tar at libxt-dev gperf libxaw7-dev cifs-utils build-essential g++ gfortran libx11-dev libxkbcommon-x11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxinerama-dev libxxf86vm-dev libxcursor-dev yasm libnuma1 libnuma-dev libtool-bin libltdl-dev flex bison libbison-dev autoconf libudev-dev libncurses5-dev libtool libxrandr-dev xutils-dev dh-autoreconf autoconf-archive libgles2-mesa-dev ruby-full pkg-config meson nasm cmake ninja-build libxext-dev libxfixes-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-util0-dev libxkbcommon-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-cursor-dev libkrb5-dev libxcb-res0-dev libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev python3-setuptools python3-mako python3-pip python3-venv python3-jinja2 nodejs libwayland-dev python-is-python3 guile-2.2-dev libxdamage-dev libxtst-dev haskell-stack golang-go wayland-protocols libbluetooth-dev cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev libnccl2 libnccl-dev" + "packages": "git curl zip unzip tar at libxt-dev gperf libxaw7-dev cifs-utils build-essential g++ gfortran libx11-dev libxkbcommon-x11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxinerama-dev libxxf86vm-dev libxcursor-dev yasm libnuma1 libnuma-dev libtool-bin libltdl-dev flex bison libbison-dev autoconf libudev-dev libncurses5-dev libtool libxrandr-dev xutils-dev dh-autoreconf autoconf-archive libgles2-mesa-dev ruby-full pkg-config meson nasm cmake ninja-build libxext-dev libxfixes-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-util0-dev libxkbcommon-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-cursor-dev libkrb5-dev libxcb-res0-dev libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev python3-setuptools python3-mako python3-pip python3-venv python3-jinja2 nodejs libwayland-dev python-is-python3 guile-2.2-dev libxdamage-dev libxtst-dev haskell-stack golang-go wayland-protocols libbluetooth-dev cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev-cuda-12 libnccl2 libnccl-dev" } }, { diff --git a/scripts/azure-pipelines/linux/provision-image.sh b/scripts/azure-pipelines/linux/provision-image.sh index 3cf94a715896b9..e253d64966ece6 100755 --- a/scripts/azure-pipelines/linux/provision-image.sh +++ b/scripts/azure-pipelines/linux/provision-image.sh @@ -114,8 +114,8 @@ APT_PACKAGES="$APT_PACKAGES libbluetooth-dev" ## CUDA APT_PACKAGES="$APT_PACKAGES cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 \ - cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev libnccl2 \ - libnccl-dev" + cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev-cuda-12 \ + libnccl2 libnccl-dev" ## PowerShell + Azure APT_PACKAGES="$APT_PACKAGES powershell azure-cli" From 8a0b83ad2758f64354e9d26a1eb518d1e1c61782 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 14 Feb 2025 13:09:13 -0800 Subject: [PATCH 08/24] libicu70 -> libicu74 and add those to manged-image.json. --- scripts/azure-pipelines/linux/managed-image.json | 2 +- scripts/azure-pipelines/linux/provision-image.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/azure-pipelines/linux/managed-image.json b/scripts/azure-pipelines/linux/managed-image.json index 86900f812e1808..60751b131de170 100644 --- a/scripts/azure-pipelines/linux/managed-image.json +++ b/scripts/azure-pipelines/linux/managed-image.json @@ -6,7 +6,7 @@ { "name": "linux-install-packages", "parameters": { - "packages": "git curl zip unzip tar at libxt-dev gperf libxaw7-dev cifs-utils build-essential g++ gfortran libx11-dev libxkbcommon-x11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxinerama-dev libxxf86vm-dev libxcursor-dev yasm libnuma1 libnuma-dev libtool-bin libltdl-dev flex bison libbison-dev autoconf libudev-dev libncurses5-dev libtool libxrandr-dev xutils-dev dh-autoreconf autoconf-archive libgles2-mesa-dev ruby-full pkg-config meson nasm cmake ninja-build libxext-dev libxfixes-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-util0-dev libxkbcommon-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-cursor-dev libkrb5-dev libxcb-res0-dev libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev python3-setuptools python3-mako python3-pip python3-venv python3-jinja2 nodejs libwayland-dev python-is-python3 guile-2.2-dev libxdamage-dev libxtst-dev haskell-stack golang-go wayland-protocols libbluetooth-dev cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev-cuda-12 libnccl2 libnccl-dev" + "packages": "git curl zip unzip tar at libxt-dev gperf libxaw7-dev cifs-utils build-essential g++ gfortran libx11-dev libxkbcommon-x11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxinerama-dev libxxf86vm-dev libxcursor-dev yasm libnuma1 libnuma-dev libtool-bin libltdl-dev flex bison libbison-dev autoconf libudev-dev libncurses5-dev libtool libxrandr-dev xutils-dev dh-autoreconf autoconf-archive libgles2-mesa-dev ruby-full pkg-config meson nasm cmake ninja-build libxext-dev libxfixes-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-util0-dev libxkbcommon-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-cursor-dev libkrb5-dev libxcb-res0-dev libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev python3-setuptools python3-mako python3-pip python3-venv python3-jinja2 nodejs libwayland-dev python-is-python3 guile-2.2-dev libxdamage-dev libxtst-dev haskell-stack golang-go wayland-protocols libbluetooth-dev cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev-cuda-12 libnccl2 libnccl-dev libkrb5-3 zlib1g libicu74 debsums liblttng-ust1" } }, { diff --git a/scripts/azure-pipelines/linux/provision-image.sh b/scripts/azure-pipelines/linux/provision-image.sh index e253d64966ece6..d20f2d87f48846 100755 --- a/scripts/azure-pipelines/linux/provision-image.sh +++ b/scripts/azure-pipelines/linux/provision-image.sh @@ -124,7 +124,7 @@ APT_PACKAGES="$APT_PACKAGES powershell azure-cli" if [[ $(grep microsoft /proc/version) ]]; then echo "Skipping install of ADO prerequisites on WSL." else -APT_PACKAGES="$APT_PACKAGES libkrb5-3 zlib1g libicu70 debsums liblttng-ust1" +APT_PACKAGES="$APT_PACKAGES libkrb5-3 zlib1g libicu74 debsums liblttng-ust1" fi apt-get -y --no-install-recommends install $APT_PACKAGES From bd448c7b7d10c55c6316a1c16d7bc4a6c16cb30d Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 14 Feb 2025 14:34:21 -0800 Subject: [PATCH 09/24] LFize, go back to Ubuntu 22.04 because 1ES seems to hate it --- scripts/azure-pipelines/azure-pipelines.yml | 204 +-- .../azure-pipelines/linux/azure-pipelines.yml | 173 +- .../linux/changing-linux-packages.md | 8 +- .../azure-pipelines/linux/managed-image.json | 2 +- .../azure-pipelines/linux/provision-image.sh | 2 +- .../azure-pipelines/osx/azure-pipelines.yml | 168 +- .../patch-tuesday-checklist.md | 50 +- .../azure-pipelines/test-modified-ports.ps1 | 428 ++--- .../windows-unstable/README.md | 8 +- .../windows-unstable/azure-pipelines.yml | 166 +- .../windows/azure-pipelines.yml | 218 +-- .../windows/bootstrap-from-source.cmd | 14 +- .../azure-pipelines/windows/create-image.ps1 | 568 +++---- .../windows/deploy-azure-cli.ps1 | 40 +- .../azure-pipelines/windows/deploy-cuda.ps1 | 134 +- .../azure-pipelines/windows/deploy-cudnn.ps1 | 52 +- .../windows/deploy-install-disk.ps1 | 128 +- .../windows/deploy-inteloneapi.ps1 | 132 +- .../azure-pipelines/windows/deploy-mpi.ps1 | 40 +- .../azure-pipelines/windows/deploy-pwsh.ps1 | 40 +- .../windows/deploy-settings.txt | 48 +- .../windows/deploy-tlssettings.ps1 | 1476 ++++++++--------- .../windows/deploy-visual-studio.ps1 | 84 +- .../azure-pipelines/windows/disk-space.ps1 | 70 +- .../windows/provision-entire-image.ps1 | 40 +- scripts/azure-pipelines/windows/sysprep.ps1 | 38 +- .../windows/utility-prefix.ps1 | 312 ++-- .../windows/validate-version-files.ps1 | 58 +- 28 files changed, 2352 insertions(+), 2349 deletions(-) diff --git a/scripts/azure-pipelines/azure-pipelines.yml b/scripts/azure-pipelines/azure-pipelines.yml index 40c48b4ed83de8..ae3b3cb4dae3ca 100644 --- a/scripts/azure-pipelines/azure-pipelines.yml +++ b/scripts/azure-pipelines/azure-pipelines.yml @@ -1,102 +1,102 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# -parameters: - - name: vcpkgToolSha - displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' - type: string - default: 'use default' - - name: tripletPattern - displayName: 'Enable triplets which contain this substring' - type: string - default: '-' - -jobs: -- template: windows/azure-pipelines.yml - parameters: - jobName: x86_windows - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: windows/azure-pipelines.yml - parameters: - jobName: x64_windows - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: windows/azure-pipelines.yml - parameters: - jobName: x64_windows_release - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: windows/azure-pipelines.yml - parameters: - jobName: x64_windows_static - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: windows/azure-pipelines.yml - parameters: - jobName: x64_windows_static_md - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: windows/azure-pipelines.yml - parameters: - jobName: x64_uwp - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: windows/azure-pipelines.yml - parameters: - jobName: arm64_windows - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: windows/azure-pipelines.yml - parameters: - jobName: arm64_windows_static_md - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: windows/azure-pipelines.yml - parameters: - jobName: arm64_uwp - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: osx/azure-pipelines.yml - parameters: - jobName: x64_osx - poolName: 'PrOsx-2025-01-24' - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: osx/azure-pipelines.yml - parameters: - jobName: arm64_osx - poolName: 'PrOsx-2025-01-24-arm64' - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: linux/azure-pipelines.yml - parameters: - jobName: x64_linux - vcpkgToolSha: ${{ parameters.vcpkgToolSha }} - tripletPattern: ${{ parameters.tripletPattern }} - -- template: android/azure-pipelines.yml - parameters: - jobName: arm_neon_android - tripletPattern: ${{ parameters.tripletPattern }} - -- template: android/azure-pipelines.yml - parameters: - jobName: x64_android - tripletPattern: ${{ parameters.tripletPattern }} - -- template: android/azure-pipelines.yml - parameters: - jobName: arm64_android - tripletPattern: ${{ parameters.tripletPattern }} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: tripletPattern + displayName: 'Enable triplets which contain this substring' + type: string + default: '-' + +jobs: +- template: windows/azure-pipelines.yml + parameters: + jobName: x86_windows + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_windows + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_windows_release + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_windows_static + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_windows_static_md + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_uwp + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: arm64_windows + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: arm64_windows_static_md + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: arm64_uwp + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: osx/azure-pipelines.yml + parameters: + jobName: x64_osx + poolName: 'PrOsx-2025-01-24' + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: osx/azure-pipelines.yml + parameters: + jobName: arm64_osx + poolName: 'PrOsx-2025-01-24-arm64' + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: linux/azure-pipelines.yml + parameters: + jobName: x64_linux + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: android/azure-pipelines.yml + parameters: + jobName: arm_neon_android + tripletPattern: ${{ parameters.tripletPattern }} + +- template: android/azure-pipelines.yml + parameters: + jobName: x64_android + tripletPattern: ${{ parameters.tripletPattern }} + +- template: android/azure-pipelines.yml + parameters: + jobName: arm64_android + tripletPattern: ${{ parameters.tripletPattern }} diff --git a/scripts/azure-pipelines/linux/azure-pipelines.yml b/scripts/azure-pipelines/linux/azure-pipelines.yml index 35420080ac07fb..daef6437bbd7fc 100644 --- a/scripts/azure-pipelines/linux/azure-pipelines.yml +++ b/scripts/azure-pipelines/linux/azure-pipelines.yml @@ -1,86 +1,87 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# - -parameters: - - name: vcpkgToolSha - displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' - type: string - default: 'use default' - - name: jobName - type: string - default: 'x64_linux' - - name: tripletPattern - displayName: 'Enable the triplets which contain this substring' - type: string - default: '' - -jobs: -- job: x64_linux - condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) - pool: - name: PrLin-WUS - workspace: - clean: resources - timeoutInMinutes: 1440 # 1 day - variables: - - name: WORKING_ROOT - value: /mnt/vcpkg-ci - - name: VCPKG_DOWNLOADS - value: /mnt/vcpkg-ci/downloads - steps: - # Note: /mnt is the Azure machines' temporary disk. - - bash: | - sudo mkdir /home/agent -m=777 - sudo chown `id -u` /home/agent - sudo mkdir ${{ variables.WORKING_ROOT }} -m=777 - sudo mkdir ${{ variables.VCPKG_DOWNLOADS }} -m=777 - exit 0 - displayName: 'Create working directories' - - bash: ./bootstrap-vcpkg.sh - displayName: 'Bootstrap vcpkg' - condition: eq('use default', '${{ parameters.vcpkgToolSha }}') - - bash: ./scripts/azure-pipelines/bootstrap-from-source.sh ${{ parameters.vcpkgToolSha }} - displayName: "Build vcpkg with CMake" - condition: ne('use default', '${{ parameters.vcpkgToolSha }}') - - task: AzureCLI@2 - displayName: '*** Test Modified Ports' - inputs: - azureSubscription: 'VcpkgPrFleet' - scriptType: 'pscore' - scriptLocation: 'inlineScript' - inlineScript: | - $current = Get-Date -AsUtc - $endDate = $current.AddDays(2) - $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' - $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String - $assetSas = $assetSas.Trim() - $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String - $binarySas = $binarySas.Trim() - $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" - & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azblob,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) - - task: PublishPipelineArtifact@1 - displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}" - inputs: - targetPath: '$(Build.ArtifactStagingDirectory)/failure-logs' - artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" - condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') - - bash: | - python3 scripts/file_script.py /mnt/vcpkg-ci/installed/vcpkg/info/ - displayName: 'Build a file list for all packages' - condition: always() - - task: PublishPipelineArtifact@1 - displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" - condition: always() - inputs: - targetPath: scripts/list_files - artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" - - task: PublishTestResults@2 - displayName: 'Publish Test Results' - condition: ne(variables['XML_RESULTS_FILE'], '') - inputs: - testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} - testResultsFormat: xUnit - testResultsFiles: $(XML_RESULTS_FILE) - platform: ${{ replace(parameters.jobName, '_', '-') }} - configuration: static +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: jobName + type: string + default: 'x64_linux' + - name: tripletPattern + displayName: 'Enable the triplets which contain this substring' + type: string + default: '' + +jobs: +- job: x64_linux + condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) + pool: + name: PrLin-WUS + demands: ImageOverride -equals PrLin-WUS-Ubuntu-22-04 + workspace: + clean: resources + timeoutInMinutes: 1440 # 1 day + variables: + - name: WORKING_ROOT + value: /mnt/vcpkg-ci + - name: VCPKG_DOWNLOADS + value: /mnt/vcpkg-ci/downloads + steps: + # Note: /mnt is the Azure machines' temporary disk. + - bash: | + sudo mkdir /home/agent -m=777 + sudo chown `id -u` /home/agent + sudo mkdir ${{ variables.WORKING_ROOT }} -m=777 + sudo mkdir ${{ variables.VCPKG_DOWNLOADS }} -m=777 + exit 0 + displayName: 'Create working directories' + - bash: ./bootstrap-vcpkg.sh + displayName: 'Bootstrap vcpkg' + condition: eq('use default', '${{ parameters.vcpkgToolSha }}') + - bash: ./scripts/azure-pipelines/bootstrap-from-source.sh ${{ parameters.vcpkgToolSha }} + displayName: "Build vcpkg with CMake" + condition: ne('use default', '${{ parameters.vcpkgToolSha }}') + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'VcpkgPrFleet' + scriptType: 'pscore' + scriptLocation: 'inlineScript' + inlineScript: | + $current = Get-Date -AsUtc + $endDate = $current.AddDays(2) + $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' + $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String + $assetSas = $assetSas.Trim() + $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String + $binarySas = $binarySas.Trim() + $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" + & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azblob,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)/failure-logs' + artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') + - bash: | + python3 scripts/file_script.py /mnt/vcpkg-ci/installed/vcpkg/info/ + displayName: 'Build a file list for all packages' + condition: always() + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" + condition: always() + inputs: + targetPath: scripts/list_files + artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" + - task: PublishTestResults@2 + displayName: 'Publish Test Results' + condition: ne(variables['XML_RESULTS_FILE'], '') + inputs: + testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} + testResultsFormat: xUnit + testResultsFiles: $(XML_RESULTS_FILE) + platform: ${{ replace(parameters.jobName, '_', '-') }} + configuration: static diff --git a/scripts/azure-pipelines/linux/changing-linux-packages.md b/scripts/azure-pipelines/linux/changing-linux-packages.md index f8b5f8265b016f..b0a3e9d90551e9 100644 --- a/scripts/azure-pipelines/linux/changing-linux-packages.md +++ b/scripts/azure-pipelines/linux/changing-linux-packages.md @@ -1,3 +1,5 @@ -- [ ] Update `provision-image.sh` to add the new apt package. -- [ ] Update `managed-image.json` to add the new apt package to the very long line of packages. -- [ ] Update the managed image named CPP_GITHUB\PrLin-1ES\PrLin-1ESImage by copying the contents of `managed-image.json` to the Settings\Image text box. +- [ ] Update `provision-image.sh` to add the new apt package. +- [ ] Update `managed-image.json` to add the new apt package to the very long line of packages. +- [ ] Create a new managed image CPP_GITHUB\PrLin-WUS\name it, choose the base image you want and copy the contents of managed-image.json into the Settings\Artifacts text box. +- [ ] Change the 1ES Hosted Pool for Linux to add that image to it. +- [ ] Change ImageOverride in $/scripts/azure-pipelines/linux/azure-pipelines.yml to the name you picked. diff --git a/scripts/azure-pipelines/linux/managed-image.json b/scripts/azure-pipelines/linux/managed-image.json index 60751b131de170..5827b5fb3bfc2c 100644 --- a/scripts/azure-pipelines/linux/managed-image.json +++ b/scripts/azure-pipelines/linux/managed-image.json @@ -6,7 +6,7 @@ { "name": "linux-install-packages", "parameters": { - "packages": "git curl zip unzip tar at libxt-dev gperf libxaw7-dev cifs-utils build-essential g++ gfortran libx11-dev libxkbcommon-x11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxinerama-dev libxxf86vm-dev libxcursor-dev yasm libnuma1 libnuma-dev libtool-bin libltdl-dev flex bison libbison-dev autoconf libudev-dev libncurses5-dev libtool libxrandr-dev xutils-dev dh-autoreconf autoconf-archive libgles2-mesa-dev ruby-full pkg-config meson nasm cmake ninja-build libxext-dev libxfixes-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-util0-dev libxkbcommon-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-cursor-dev libkrb5-dev libxcb-res0-dev libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev python3-setuptools python3-mako python3-pip python3-venv python3-jinja2 nodejs libwayland-dev python-is-python3 guile-2.2-dev libxdamage-dev libxtst-dev haskell-stack golang-go wayland-protocols libbluetooth-dev cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev-cuda-12 libnccl2 libnccl-dev libkrb5-3 zlib1g libicu74 debsums liblttng-ust1" + "packages": "git curl zip unzip tar at libxt-dev gperf libxaw7-dev cifs-utils build-essential g++ gfortran libx11-dev libxkbcommon-x11-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxinerama-dev libxxf86vm-dev libxcursor-dev yasm libnuma1 libnuma-dev libtool-bin libltdl-dev flex bison libbison-dev autoconf libudev-dev libncurses5-dev libtool libxrandr-dev xutils-dev dh-autoreconf autoconf-archive libgles2-mesa-dev ruby-full pkg-config meson nasm cmake ninja-build libxext-dev libxfixes-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-util0-dev libxkbcommon-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev libxcb-cursor-dev libkrb5-dev libxcb-res0-dev libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev python3-setuptools python3-mako python3-pip python3-venv python3-jinja2 nodejs libwayland-dev python-is-python3 guile-2.2-dev libxdamage-dev libxtst-dev haskell-stack golang-go wayland-protocols libbluetooth-dev cuda-compiler-12-8 cuda-libraries-dev-12-8 cuda-driver-dev-12-8 cuda-cudart-dev-12-8 libcublas-12-8 libcurand-dev-12-8 cuda-nvml-dev-12-8 libcudnn9-dev-cuda-12 libnccl2 libnccl-dev libkrb5-3 zlib1g libicu70 debsums liblttng-ust1" } }, { diff --git a/scripts/azure-pipelines/linux/provision-image.sh b/scripts/azure-pipelines/linux/provision-image.sh index d20f2d87f48846..e253d64966ece6 100755 --- a/scripts/azure-pipelines/linux/provision-image.sh +++ b/scripts/azure-pipelines/linux/provision-image.sh @@ -124,7 +124,7 @@ APT_PACKAGES="$APT_PACKAGES powershell azure-cli" if [[ $(grep microsoft /proc/version) ]]; then echo "Skipping install of ADO prerequisites on WSL." else -APT_PACKAGES="$APT_PACKAGES libkrb5-3 zlib1g libicu74 debsums liblttng-ust1" +APT_PACKAGES="$APT_PACKAGES libkrb5-3 zlib1g libicu70 debsums liblttng-ust1" fi apt-get -y --no-install-recommends install $APT_PACKAGES diff --git a/scripts/azure-pipelines/osx/azure-pipelines.yml b/scripts/azure-pipelines/osx/azure-pipelines.yml index 09073bd8439008..50b559c563fdf3 100644 --- a/scripts/azure-pipelines/osx/azure-pipelines.yml +++ b/scripts/azure-pipelines/osx/azure-pipelines.yml @@ -1,84 +1,84 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# - -parameters: - - name: vcpkgToolSha - displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' - type: string - default: 'use default' - - name: jobName - type: string - default: 'x64_osx' - - name: poolName - type: string - - name: tripletPattern - displayName: 'Enable the triplets which contain this substring' - type: string - default: '' - -jobs: -- job: ${{ parameters.jobName }} - condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) - pool: - name: ${{ parameters.poolName }} - workspace: - clean: resources - timeoutInMinutes: 2880 # 2 days - variables: - - name: WORKING_ROOT - value: /Users/vcpkg/Data - - name: VCPKG_DOWNLOADS - value: /Users/vcpkg/Data/downloads - steps: - - bash: | - sudo mkdir ${{ variables.VCPKG_DOWNLOADS }} || 0 - sudo chmod 777 ${{ variables.VCPKG_DOWNLOADS }} || 0 - exit 0 - displayName: 'Create ${{ variables.VCPKG_DOWNLOADS }}' - - bash: ./bootstrap-vcpkg.sh - displayName: 'Bootstrap vcpkg' - condition: eq('use default', '${{ parameters.vcpkgToolSha }}') - - bash: ./scripts/azure-pipelines/bootstrap-from-source.sh ${{ parameters.vcpkgToolSha }} - displayName: "Build vcpkg with CMake" - condition: ne('use default', '${{ parameters.vcpkgToolSha }}') - - task: AzureCLI@2 - displayName: '*** Test Modified Ports' - inputs: - azureSubscription: 'VcpkgPrFleet' - scriptType: 'pscore' - scriptLocation: 'inlineScript' - inlineScript: | - $current = Get-Date -AsUtc - $endDate = $current.AddDays(2) - $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' - $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String - $assetSas = $assetSas.Trim() - $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String - $binarySas = $binarySas.Trim() - $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" - & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azblob,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) - - task: PublishPipelineArtifact@1 - displayName: 'Publish Artifact: failure logs for x64-osx' - inputs: - targetPath: '$(Build.ArtifactStagingDirectory)/failure-logs' - artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" - condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') - - bash: python3 scripts/file_script.py /Users/vcpkg/Data/installed/vcpkg/info/ - displayName: 'Build a file list for all packages' - condition: always() - - task: PublishPipelineArtifact@1 - displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" - condition: always() - inputs: - targetPath: scripts/list_files - artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" - - task: PublishTestResults@2 - displayName: 'Publish Test Results' - condition: ne(variables['XML_RESULTS_FILE'], '') - inputs: - testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} - testResultsFormat: xUnit - testResultsFiles: $(XML_RESULTS_FILE) - platform: ${{ replace(parameters.jobName, '_', '-') }} - configuration: static +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: jobName + type: string + default: 'x64_osx' + - name: poolName + type: string + - name: tripletPattern + displayName: 'Enable the triplets which contain this substring' + type: string + default: '' + +jobs: +- job: ${{ parameters.jobName }} + condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) + pool: + name: ${{ parameters.poolName }} + workspace: + clean: resources + timeoutInMinutes: 2880 # 2 days + variables: + - name: WORKING_ROOT + value: /Users/vcpkg/Data + - name: VCPKG_DOWNLOADS + value: /Users/vcpkg/Data/downloads + steps: + - bash: | + sudo mkdir ${{ variables.VCPKG_DOWNLOADS }} || 0 + sudo chmod 777 ${{ variables.VCPKG_DOWNLOADS }} || 0 + exit 0 + displayName: 'Create ${{ variables.VCPKG_DOWNLOADS }}' + - bash: ./bootstrap-vcpkg.sh + displayName: 'Bootstrap vcpkg' + condition: eq('use default', '${{ parameters.vcpkgToolSha }}') + - bash: ./scripts/azure-pipelines/bootstrap-from-source.sh ${{ parameters.vcpkgToolSha }} + displayName: "Build vcpkg with CMake" + condition: ne('use default', '${{ parameters.vcpkgToolSha }}') + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'VcpkgPrFleet' + scriptType: 'pscore' + scriptLocation: 'inlineScript' + inlineScript: | + $current = Get-Date -AsUtc + $endDate = $current.AddDays(2) + $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' + $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String + $assetSas = $assetSas.Trim() + $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String + $binarySas = $binarySas.Trim() + $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" + & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azblob,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) + - task: PublishPipelineArtifact@1 + displayName: 'Publish Artifact: failure logs for x64-osx' + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)/failure-logs' + artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') + - bash: python3 scripts/file_script.py /Users/vcpkg/Data/installed/vcpkg/info/ + displayName: 'Build a file list for all packages' + condition: always() + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" + condition: always() + inputs: + targetPath: scripts/list_files + artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" + - task: PublishTestResults@2 + displayName: 'Publish Test Results' + condition: ne(variables['XML_RESULTS_FILE'], '') + inputs: + testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} + testResultsFormat: xUnit + testResultsFiles: $(XML_RESULTS_FILE) + platform: ${{ replace(parameters.jobName, '_', '-') }} + configuration: static diff --git a/scripts/azure-pipelines/patch-tuesday-checklist.md b/scripts/azure-pipelines/patch-tuesday-checklist.md index cd25fb602e61c2..b5112a55936f75 100644 --- a/scripts/azure-pipelines/patch-tuesday-checklist.md +++ b/scripts/azure-pipelines/patch-tuesday-checklist.md @@ -1,25 +1,25 @@ -## First time machine setup: -* [ ] Install Azure PowerShell: https://docs.microsoft.com/en-us/powershell/azure/install-az-ps -* [ ] Run `Connect-AzAccount -Subscription CPP_GITHUB` -* [ ] Install Docker - -## Each Patch Tuesday: -* [ ] Check for depends:vm-update PRs and make relevant changes if possible. -* [ ] Check for Service 360 alerts (possibly at https://aka.ms/s360 ?) against the service named - "C++ VCPKG Validation" about vulnerable software we are installing in the VMs and update that. - (Most often PowerShell needs to be updated) -* [ ] Check for any other software for the Windows images we wish to update and make the edits to do - so in `scripts/azure-pipelines/windows` -* [ ] Check for any updates possible to `vcpkg-tools.json`. Note that PowerShell currently uses the - 7.2.x series due to customer reported problems on older Windows with 7.3.x and later. -* [ ] Update the first line of android/Dockerfile with the current 'focal' image according to - https://hub.docker.com/_/ubuntu -* [ ] Run android/create-docker-image.ps1 -* [ ] Update azure-pipelines.yml to point to the new linux docker image from Azure Container Registry -* [ ] Run windows/create-image.ps1 -* [ ] Update azure-pipelines.yml to point to the new Android image. -* [ ] Submit PR with those changes and merge it. -* [ ] In the Azure portal, mark the newly created image as the 'latest' one. -* [ ] Mint a new macOS base box. (See instructions in `scripts/azure-pipelines/osx/README.md`) -* [ ] Deploy the new base box to all hosts. -* [ ] Update the software on the CTI's machine #12 to match. +## First time machine setup: +* [ ] Install Azure PowerShell: https://docs.microsoft.com/en-us/powershell/azure/install-az-ps +* [ ] Run `Connect-AzAccount -Subscription CPP_GITHUB` +* [ ] Install Docker + +## Each Patch Tuesday: +* [ ] Check for depends:vm-update PRs and make relevant changes if possible. +* [ ] Check for Service 360 alerts (possibly at https://aka.ms/s360 ?) against the service named + "C++ VCPKG Validation" about vulnerable software we are installing in the VMs and update that. + (Most often PowerShell needs to be updated) +* [ ] Check for any other software for the Windows images we wish to update and make the edits to do + so in `scripts/azure-pipelines/windows` +* [ ] Check for any updates possible to `vcpkg-tools.json`. Note that PowerShell currently uses the + 7.2.x series due to customer reported problems on older Windows with 7.3.x and later. +* [ ] Update the first line of android/Dockerfile with the current 'focal' image according to + https://hub.docker.com/_/ubuntu +* [ ] Run android/create-docker-image.ps1 +* [ ] Update azure-pipelines.yml to point to the new linux docker image from Azure Container Registry +* [ ] Run windows/create-image.ps1 +* [ ] Update azure-pipelines.yml to point to the new Android image. +* [ ] Submit PR with those changes and merge it. +* [ ] In the Azure portal, mark the newly created image as the 'latest' one. +* [ ] Mint a new macOS base box. (See instructions in `scripts/azure-pipelines/osx/README.md`) +* [ ] Deploy the new base box to all hosts. +* [ ] Update the software on the CTI's machine #12 to match. diff --git a/scripts/azure-pipelines/test-modified-ports.ps1 b/scripts/azure-pipelines/test-modified-ports.ps1 index 66cf7dc2f47a04..583832637211fb 100755 --- a/scripts/azure-pipelines/test-modified-ports.ps1 +++ b/scripts/azure-pipelines/test-modified-ports.ps1 @@ -1,214 +1,214 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# - -<# -.SYNOPSIS -Runs the 'Test Modified Ports' part of the vcpkg CI system for all platforms. - -.PARAMETER Triplet -The triplet to test. - -.PARAMETER WorkingRoot -The location used as scratch space for 'installed', 'packages', and 'buildtrees' vcpkg directories. - -.PARAMETER ArtifactStagingDirectory -The Azure Pipelines artifacts directory. If not supplied, defaults to the current directory. - -.PARAMETER ArchivesRoot -Equivalent to '-BinarySourceStub "files,$ArchivesRoot"' - -.PARAMETER BinarySourceStub -The type and parameters of the binary source. Shared across runs of this script. If -this parameter is not set, binary caching will not be used. Example: "files,W:\" - -.PARAMETER BuildReason -The reason Azure Pipelines is running this script. For invocations caused by `PullRequest`, -modified ports are identified by changed hashes with regard to git HEAD~1 (subject to NoParentHashes), -and ports marked as failing in the CI baseline (or which depend on such ports) are skipped. -If BinarySourceStub is set and this parameter is set to a non-empty value other than `PullRequest`, -binary caching will be in write-only mode. - -.PARAMETER NoParentHashes -Indicates to not use parent hashes even for pull requests. - -.PARAMETER PassingIsPassing -Indicates that 'Passing, remove from fail list' results should not be emitted as failures. (For example, this is used -when using vcpkg to test a prerelease MSVC++ compiler) -#> - -[CmdletBinding(DefaultParameterSetName="ArchivesRoot")] -Param( - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - [string]$Triplet, - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - $WorkingRoot, - [ValidateNotNullOrEmpty()] - $ArtifactStagingDirectory = '.', - [Parameter(ParameterSetName='ArchivesRoot')] - $ArchivesRoot = $null, - [Parameter(ParameterSetName='BinarySourceStub')] - $BinarySourceStub = $null, - [String]$BuildReason = $null, - [switch]$NoParentHashes = $false, - [switch]$PassingIsPassing = $false -) - -if (-Not ((Test-Path "triplets/$Triplet.cmake") -or (Test-Path "triplets/community/$Triplet.cmake"))) { - Write-Error "Incorrect triplet '$Triplet', please supply a valid triplet." - exit 1 -} - -if ((-Not [string]::IsNullOrWhiteSpace($ArchivesRoot))) { - if ((-Not [string]::IsNullOrWhiteSpace($BinarySourceStub))) { - Write-Error "Only one binary caching setting may be used." - exit 1 - } - - $BinarySourceStub = "files,$ArchivesRoot" -} - -$buildtreesRoot = Join-Path $WorkingRoot 'b' -$installRoot = Join-Path $WorkingRoot 'installed' -$packagesRoot = Join-Path $WorkingRoot 'p' - -$commonArgs = @( - "--x-buildtrees-root=$buildtreesRoot", - "--x-install-root=$installRoot", - "--x-packages-root=$packagesRoot", - "--overlay-ports=scripts/test_ports" -) -$cachingArgs = @() - -$skipFailuresArg = @() -if ([string]::IsNullOrWhiteSpace($BinarySourceStub)) { - $cachingArgs = @('--no-binarycaching') -} else { - $cachingArgs = @('--binarycaching') - $binaryCachingMode = 'readwrite' - if ([string]::IsNullOrWhiteSpace($BuildReason)) { - Write-Host 'Build reason not specified, defaulting to using binary caching in read write mode.' - } - elseif ($BuildReason -eq 'PullRequest') { - Write-Host 'Build reason was Pull Request, using binary caching in read write mode, skipping failures.' - $skipFailuresArg = @('--skip-failures') - } - else { - Write-Host "Build reason was $BuildReason, using binary caching in write only mode." - $binaryCachingMode = 'write' - } - - $cachingArgs += @("--binarysource=clear;$BinarySourceStub,$binaryCachingMode") -} - -if ($IsWindows) { - $executableExtension = '.exe' -} else { - $executableExtension = [string]::Empty -} - -$failureLogs = Join-Path $ArtifactStagingDirectory 'failure-logs' -$xunitFile = Join-Path $ArtifactStagingDirectory "$Triplet-results.xml" - -if ($IsWindows) { - mkdir empty - cmd /c "robocopy.exe empty `"$buildtreesRoot`" /MIR /NFL /NDL /NC /NP > nul" - cmd /c "robocopy.exe empty `"$packagesRoot`" /MIR /NFL /NDL /NC /NP > nul" - cmd /c "robocopy.exe empty `"$installRoot`" /MIR /NFL /NDL /NC /NP > nul" - rmdir empty -} - -& "./vcpkg$executableExtension" x-ci-clean @commonArgs -$lastLastExitCode = $LASTEXITCODE -if ($lastLastExitCode -ne 0) -{ - Write-Error "vcpkg clean failed" - exit $lastLastExitCode -} - -if ($Triplet -eq 'x64-windows-release') { - $tripletSwitch = "--host-triplet=$Triplet" -} else { - $tripletSwitch = "--triplet=$Triplet" -} - -$parentHashes = @() -if (($BuildReason -eq 'PullRequest') -and -not $NoParentHashes) -{ - $headBaseline = Get-Content "$PSScriptRoot/../ci.baseline.txt" -Raw - $headTool = Get-Content "$PSScriptRoot/../vcpkg-tool-metadata.txt" -Raw - - # Prefetch tools for better output - foreach ($tool in @('cmake', 'ninja', 'git')) { - & "./vcpkg$executableExtension" fetch $tool - $lastLastExitCode = $LASTEXITCODE - if ($lastLastExitCode -ne 0) - { - Write-Error "Failed to fetch $tool" - exit $lastLastExitCode - } - } - - Write-Host "Comparing with HEAD~1" - & git revert -n -m 1 HEAD | Out-Null - $lastLastExitCode = $LASTEXITCODE - if ($lastLastExitCode -ne 0) - { - Write-Error "git revert failed" - exit $lastLastExitCode - } - - $parentBaseline = Get-Content "$PSScriptRoot/../ci.baseline.txt" -Raw - $parentTool = Get-Content "$PSScriptRoot/../vcpkg-tool-metadata.txt" -Raw - if (($parentBaseline -eq $headBaseline) -and ($parentTool -eq $headTool)) - { - Write-Host "CI baseline unchanged, determining parent hashes" - $parentHashesFile = Join-Path $ArtifactStagingDirectory 'parent-hashes.json' - $parentHashes = @("--parent-hashes=$parentHashesFile") - # The vcpkg.cmake toolchain file is not part of ABI hashing, - # but changes must trigger at least some testing. - Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake" - Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake-user" - & "./vcpkg$executableExtension" ci $tripletSwitch --dry-run "--ci-baseline=$PSScriptRoot/../ci.baseline.txt" @commonArgs --no-binarycaching "--output-hashes=$parentHashesFile" - $lastLastExitCode = $LASTEXITCODE - if ($lastLastExitCode -ne 0) - { - Write-Error "Generating parent hashes failed; this is usually an infrastructure problem with vcpkg" - exit $lastLastExitCode - } - } - else - { - Write-Host "Tool or baseline modified, not using parent hashes" - } - - Write-Host "Running CI for HEAD" - & git reset --hard HEAD - $lastLastExitCode = $LASTEXITCODE - if ($lastLastExitCode -ne 0) - { - Write-Error "git reset failed" - exit $lastLastExitCode - } -} - -# The vcpkg.cmake toolchain file is not part of ABI hashing, -# but changes must trigger at least some testing. -Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake" -Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake-user" -& "./vcpkg$executableExtension" ci $tripletSwitch --failure-logs=$failureLogs --x-xunit=$xunitFile "--ci-baseline=$PSScriptRoot/../ci.baseline.txt" @commonArgs @cachingArgs @parentHashes @skipFailuresArg -$lastLastExitCode = $LASTEXITCODE - -$failureLogsEmpty = (-Not (Test-Path $failureLogs) -Or ((Get-ChildItem $failureLogs).count -eq 0)) -Write-Host "##vso[task.setvariable variable=FAILURE_LOGS_EMPTY]$failureLogsEmpty" - -Write-Host "##vso[task.setvariable variable=XML_RESULTS_FILE]$xunitFile" - -if ($lastLastExitCode -ne 0) -{ - Write-Error "vcpkg ci testing failed; this is usually a bug in a port. Check for failure logs attached to the run in Azure Pipelines." -} - -exit $lastLastExitCode +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +<# +.SYNOPSIS +Runs the 'Test Modified Ports' part of the vcpkg CI system for all platforms. + +.PARAMETER Triplet +The triplet to test. + +.PARAMETER WorkingRoot +The location used as scratch space for 'installed', 'packages', and 'buildtrees' vcpkg directories. + +.PARAMETER ArtifactStagingDirectory +The Azure Pipelines artifacts directory. If not supplied, defaults to the current directory. + +.PARAMETER ArchivesRoot +Equivalent to '-BinarySourceStub "files,$ArchivesRoot"' + +.PARAMETER BinarySourceStub +The type and parameters of the binary source. Shared across runs of this script. If +this parameter is not set, binary caching will not be used. Example: "files,W:\" + +.PARAMETER BuildReason +The reason Azure Pipelines is running this script. For invocations caused by `PullRequest`, +modified ports are identified by changed hashes with regard to git HEAD~1 (subject to NoParentHashes), +and ports marked as failing in the CI baseline (or which depend on such ports) are skipped. +If BinarySourceStub is set and this parameter is set to a non-empty value other than `PullRequest`, +binary caching will be in write-only mode. + +.PARAMETER NoParentHashes +Indicates to not use parent hashes even for pull requests. + +.PARAMETER PassingIsPassing +Indicates that 'Passing, remove from fail list' results should not be emitted as failures. (For example, this is used +when using vcpkg to test a prerelease MSVC++ compiler) +#> + +[CmdletBinding(DefaultParameterSetName="ArchivesRoot")] +Param( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string]$Triplet, + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + $WorkingRoot, + [ValidateNotNullOrEmpty()] + $ArtifactStagingDirectory = '.', + [Parameter(ParameterSetName='ArchivesRoot')] + $ArchivesRoot = $null, + [Parameter(ParameterSetName='BinarySourceStub')] + $BinarySourceStub = $null, + [String]$BuildReason = $null, + [switch]$NoParentHashes = $false, + [switch]$PassingIsPassing = $false +) + +if (-Not ((Test-Path "triplets/$Triplet.cmake") -or (Test-Path "triplets/community/$Triplet.cmake"))) { + Write-Error "Incorrect triplet '$Triplet', please supply a valid triplet." + exit 1 +} + +if ((-Not [string]::IsNullOrWhiteSpace($ArchivesRoot))) { + if ((-Not [string]::IsNullOrWhiteSpace($BinarySourceStub))) { + Write-Error "Only one binary caching setting may be used." + exit 1 + } + + $BinarySourceStub = "files,$ArchivesRoot" +} + +$buildtreesRoot = Join-Path $WorkingRoot 'b' +$installRoot = Join-Path $WorkingRoot 'installed' +$packagesRoot = Join-Path $WorkingRoot 'p' + +$commonArgs = @( + "--x-buildtrees-root=$buildtreesRoot", + "--x-install-root=$installRoot", + "--x-packages-root=$packagesRoot", + "--overlay-ports=scripts/test_ports" +) +$cachingArgs = @() + +$skipFailuresArg = @() +if ([string]::IsNullOrWhiteSpace($BinarySourceStub)) { + $cachingArgs = @('--no-binarycaching') +} else { + $cachingArgs = @('--binarycaching') + $binaryCachingMode = 'readwrite' + if ([string]::IsNullOrWhiteSpace($BuildReason)) { + Write-Host 'Build reason not specified, defaulting to using binary caching in read write mode.' + } + elseif ($BuildReason -eq 'PullRequest') { + Write-Host 'Build reason was Pull Request, using binary caching in read write mode, skipping failures.' + $skipFailuresArg = @('--skip-failures') + } + else { + Write-Host "Build reason was $BuildReason, using binary caching in write only mode." + $binaryCachingMode = 'write' + } + + $cachingArgs += @("--binarysource=clear;$BinarySourceStub,$binaryCachingMode") +} + +if ($IsWindows) { + $executableExtension = '.exe' +} else { + $executableExtension = [string]::Empty +} + +$failureLogs = Join-Path $ArtifactStagingDirectory 'failure-logs' +$xunitFile = Join-Path $ArtifactStagingDirectory "$Triplet-results.xml" + +if ($IsWindows) { + mkdir empty + cmd /c "robocopy.exe empty `"$buildtreesRoot`" /MIR /NFL /NDL /NC /NP > nul" + cmd /c "robocopy.exe empty `"$packagesRoot`" /MIR /NFL /NDL /NC /NP > nul" + cmd /c "robocopy.exe empty `"$installRoot`" /MIR /NFL /NDL /NC /NP > nul" + rmdir empty +} + +& "./vcpkg$executableExtension" x-ci-clean @commonArgs +$lastLastExitCode = $LASTEXITCODE +if ($lastLastExitCode -ne 0) +{ + Write-Error "vcpkg clean failed" + exit $lastLastExitCode +} + +if ($Triplet -eq 'x64-windows-release') { + $tripletSwitch = "--host-triplet=$Triplet" +} else { + $tripletSwitch = "--triplet=$Triplet" +} + +$parentHashes = @() +if (($BuildReason -eq 'PullRequest') -and -not $NoParentHashes) +{ + $headBaseline = Get-Content "$PSScriptRoot/../ci.baseline.txt" -Raw + $headTool = Get-Content "$PSScriptRoot/../vcpkg-tool-metadata.txt" -Raw + + # Prefetch tools for better output + foreach ($tool in @('cmake', 'ninja', 'git')) { + & "./vcpkg$executableExtension" fetch $tool + $lastLastExitCode = $LASTEXITCODE + if ($lastLastExitCode -ne 0) + { + Write-Error "Failed to fetch $tool" + exit $lastLastExitCode + } + } + + Write-Host "Comparing with HEAD~1" + & git revert -n -m 1 HEAD | Out-Null + $lastLastExitCode = $LASTEXITCODE + if ($lastLastExitCode -ne 0) + { + Write-Error "git revert failed" + exit $lastLastExitCode + } + + $parentBaseline = Get-Content "$PSScriptRoot/../ci.baseline.txt" -Raw + $parentTool = Get-Content "$PSScriptRoot/../vcpkg-tool-metadata.txt" -Raw + if (($parentBaseline -eq $headBaseline) -and ($parentTool -eq $headTool)) + { + Write-Host "CI baseline unchanged, determining parent hashes" + $parentHashesFile = Join-Path $ArtifactStagingDirectory 'parent-hashes.json' + $parentHashes = @("--parent-hashes=$parentHashesFile") + # The vcpkg.cmake toolchain file is not part of ABI hashing, + # but changes must trigger at least some testing. + Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake" + Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake-user" + & "./vcpkg$executableExtension" ci $tripletSwitch --dry-run "--ci-baseline=$PSScriptRoot/../ci.baseline.txt" @commonArgs --no-binarycaching "--output-hashes=$parentHashesFile" + $lastLastExitCode = $LASTEXITCODE + if ($lastLastExitCode -ne 0) + { + Write-Error "Generating parent hashes failed; this is usually an infrastructure problem with vcpkg" + exit $lastLastExitCode + } + } + else + { + Write-Host "Tool or baseline modified, not using parent hashes" + } + + Write-Host "Running CI for HEAD" + & git reset --hard HEAD + $lastLastExitCode = $LASTEXITCODE + if ($lastLastExitCode -ne 0) + { + Write-Error "git reset failed" + exit $lastLastExitCode + } +} + +# The vcpkg.cmake toolchain file is not part of ABI hashing, +# but changes must trigger at least some testing. +Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake" +Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake-user" +& "./vcpkg$executableExtension" ci $tripletSwitch --failure-logs=$failureLogs --x-xunit=$xunitFile "--ci-baseline=$PSScriptRoot/../ci.baseline.txt" @commonArgs @cachingArgs @parentHashes @skipFailuresArg +$lastLastExitCode = $LASTEXITCODE + +$failureLogsEmpty = (-Not (Test-Path $failureLogs) -Or ((Get-ChildItem $failureLogs).count -eq 0)) +Write-Host "##vso[task.setvariable variable=FAILURE_LOGS_EMPTY]$failureLogsEmpty" + +Write-Host "##vso[task.setvariable variable=XML_RESULTS_FILE]$xunitFile" + +if ($lastLastExitCode -ne 0) +{ + Write-Error "vcpkg ci testing failed; this is usually a bug in a port. Check for failure logs attached to the run in Azure Pipelines." +} + +exit $lastLastExitCode diff --git a/scripts/azure-pipelines/windows-unstable/README.md b/scripts/azure-pipelines/windows-unstable/README.md index d60367247ac768..5dc58f56f94215 100644 --- a/scripts/azure-pipelines/windows-unstable/README.md +++ b/scripts/azure-pipelines/windows-unstable/README.md @@ -1,4 +1,4 @@ -The "unstable" build is used internally by Microsoft to test prerelease versions -of our C++ compiler; not seeing results from these build definitions in the -GitHub portal is normal as these builds depend on acquisition of private -compiler bits that aren't yet shipping. +The "unstable" build is used internally by Microsoft to test prerelease versions +of our C++ compiler; not seeing results from these build definitions in the +GitHub portal is normal as these builds depend on acquisition of private +compiler bits that aren't yet shipping. diff --git a/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml b/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml index 5e50f0092aeafa..bdc3db7bcb130f 100644 --- a/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml +++ b/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml @@ -1,83 +1,83 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# - -jobs: -- job: x64_windows - pool: - name: vcpkg-testing-msvc - demands: ImageVersionOverride -equals 2025.01.21 - workspace: - clean: resources - timeoutInMinutes: 2880 # 2 days - variables: - - name: WORKING_ROOT - value: D:\ - - name: VCPKG_DOWNLOADS - value: D:\downloads - - name: Codeql.Enabled - value: false - steps: - - task: DownloadBuildArtifacts@0 - displayName: 'Download DropBuildNumber if not specified' - inputs: - buildType: specific - project: '0bdbc590-a062-4c3f-b0f6-9383f67865ee' - pipeline: 16549 - buildVersionToDownload: latestFromBranch - branchName: 'refs/heads/$(MSVCBranchName)' - artifactName: BuildNumber - downloadPath: 'D:\msvc-drops' - condition: eq(variables['DropBuildNumber'], '') - - task: PowerShell@2 - displayName: 'Set DropBuildNumber if not specified' - inputs: - targetType: inline - script: | - $DropBuildNumber = Get-Content -Path D:\msvc-drops\BuildNumber\Build.BuildNumber.txt - Write-Host "##vso[task.setvariable variable=DropBuildNumber]$DropBuildNumber" - Write-Host "Build Number set to: $DropBuildNumber" - pwsh: true - condition: eq(variables['DropBuildNumber'], '') - - task: ms-vscs-artifact.build-tasks.artifactDropDownloadTask-1.artifactDropDownloadTask@0 - displayName: 'Download msvc x86 ret' - inputs: - dropServiceURI: 'https://devdiv.artifacts.visualstudio.com/DefaultCollection' - buildNumber: 'msvc/builds/$(DropBuildNumber)/x86ret' - destinationPath: 'D:\msvc-drops\$(DropBuildNumber)\binaries.x86ret' - - task: ms-vscs-artifact.build-tasks.artifactDropDownloadTask-1.artifactDropDownloadTask@0 - displayName: 'Download msvc amd64 ret' - inputs: - dropServiceURI: 'https://devdiv.artifacts.visualstudio.com/DefaultCollection' - buildNumber: 'msvc/builds/$(DropBuildNumber)/amd64ret' - destinationPath: 'D:\msvc-drops\$(DropBuildNumber)\binaries.amd64ret' - - task: PowerShell@2 - displayName: 'Rearrange MSVC Drop Layout' - inputs: - targetType: filePath - filePath: 'scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1' - arguments: '-DropRoot "D:\msvc-drops\$(DropBuildNumber)" -BuildType ret' - pwsh: true - - script: .\bootstrap-vcpkg.bat - displayName: 'Bootstrap vcpkg' - - task: AzureCLI@2 - displayName: '*** Test Modified Ports' - inputs: - azureSubscription: 'VcpkgPrFleet' - scriptType: 'pscore' - failOnStandardError: true - scriptLocation: 'inlineScript' - inlineScript: | - $current = Get-Date -AsUtc - $endDate = $current.AddDays(2) - $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' - $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions r --expiry $end -o tsv | Out-String - $assetSas = $assetSas.Trim() - $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,read" - & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet x64-windows -BuildReason $(Build.Reason) -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) -PassingIsPassing - - task: PublishPipelineArtifact@1 - displayName: "Publish Artifact: failure logs for x64-windows" - inputs: - targetPath: '$(Build.ArtifactStagingDirectory)\failure-logs' - artifact: "failure logs for x64-windows" - condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +jobs: +- job: x64_windows + pool: + name: vcpkg-testing-msvc + demands: ImageVersionOverride -equals 2025.01.21 + workspace: + clean: resources + timeoutInMinutes: 2880 # 2 days + variables: + - name: WORKING_ROOT + value: D:\ + - name: VCPKG_DOWNLOADS + value: D:\downloads + - name: Codeql.Enabled + value: false + steps: + - task: DownloadBuildArtifacts@0 + displayName: 'Download DropBuildNumber if not specified' + inputs: + buildType: specific + project: '0bdbc590-a062-4c3f-b0f6-9383f67865ee' + pipeline: 16549 + buildVersionToDownload: latestFromBranch + branchName: 'refs/heads/$(MSVCBranchName)' + artifactName: BuildNumber + downloadPath: 'D:\msvc-drops' + condition: eq(variables['DropBuildNumber'], '') + - task: PowerShell@2 + displayName: 'Set DropBuildNumber if not specified' + inputs: + targetType: inline + script: | + $DropBuildNumber = Get-Content -Path D:\msvc-drops\BuildNumber\Build.BuildNumber.txt + Write-Host "##vso[task.setvariable variable=DropBuildNumber]$DropBuildNumber" + Write-Host "Build Number set to: $DropBuildNumber" + pwsh: true + condition: eq(variables['DropBuildNumber'], '') + - task: ms-vscs-artifact.build-tasks.artifactDropDownloadTask-1.artifactDropDownloadTask@0 + displayName: 'Download msvc x86 ret' + inputs: + dropServiceURI: 'https://devdiv.artifacts.visualstudio.com/DefaultCollection' + buildNumber: 'msvc/builds/$(DropBuildNumber)/x86ret' + destinationPath: 'D:\msvc-drops\$(DropBuildNumber)\binaries.x86ret' + - task: ms-vscs-artifact.build-tasks.artifactDropDownloadTask-1.artifactDropDownloadTask@0 + displayName: 'Download msvc amd64 ret' + inputs: + dropServiceURI: 'https://devdiv.artifacts.visualstudio.com/DefaultCollection' + buildNumber: 'msvc/builds/$(DropBuildNumber)/amd64ret' + destinationPath: 'D:\msvc-drops\$(DropBuildNumber)\binaries.amd64ret' + - task: PowerShell@2 + displayName: 'Rearrange MSVC Drop Layout' + inputs: + targetType: filePath + filePath: 'scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1' + arguments: '-DropRoot "D:\msvc-drops\$(DropBuildNumber)" -BuildType ret' + pwsh: true + - script: .\bootstrap-vcpkg.bat + displayName: 'Bootstrap vcpkg' + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'VcpkgPrFleet' + scriptType: 'pscore' + failOnStandardError: true + scriptLocation: 'inlineScript' + inlineScript: | + $current = Get-Date -AsUtc + $endDate = $current.AddDays(2) + $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' + $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions r --expiry $end -o tsv | Out-String + $assetSas = $assetSas.Trim() + $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,read" + & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet x64-windows -BuildReason $(Build.Reason) -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) -PassingIsPassing + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: failure logs for x64-windows" + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)\failure-logs' + artifact: "failure logs for x64-windows" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') diff --git a/scripts/azure-pipelines/windows/azure-pipelines.yml b/scripts/azure-pipelines/windows/azure-pipelines.yml index 3d075229386e5b..fe02a3a17d1bff 100644 --- a/scripts/azure-pipelines/windows/azure-pipelines.yml +++ b/scripts/azure-pipelines/windows/azure-pipelines.yml @@ -1,109 +1,109 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# - -parameters: - - name: vcpkgToolSha - displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' - type: string - default: 'use default' - - name: jobName - type: string - default: 'x86_windows' - - name: tripletPattern - displayName: 'Enable the triplets which contain this substring' - type: string - default: '' - -jobs: -- job: ${{ parameters.jobName }} - condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) - pool: - name: PrWin-WUS - demands: ImageVersionOverride -equals 2025.01.21 - workspace: - clean: resources - timeoutInMinutes: 2880 # 2 days - variables: - - name: WORKING_ROOT - value: D:\ - - name: VCPKG_DOWNLOADS - value: D:\downloads - - name: DiffFile - value: $(Build.ArtifactStagingDirectory)\format.diff - - name: ExtraChecksTriplet - value: x86-windows - steps: - - script: .\bootstrap-vcpkg.bat - displayName: 'Bootstrap vcpkg' - condition: eq('use default', '${{ parameters.vcpkgToolSha }}') - - script: .\scripts\azure-pipelines\windows\bootstrap-from-source.cmd ${{ parameters.vcpkgToolSha }} - displayName: "Build vcpkg with CMake" - condition: ne('use default', '${{ parameters.vcpkgToolSha }}') - - script: '.\vcpkg.exe format-manifest --all' - displayName: 'Format Manifests' - condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') - - task: PowerShell@2 - displayName: 'Create Diff' - condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') - inputs: - filePath: scripts/azure-pipelines/Create-PRDiff.ps1 - arguments: "-DiffFile '$(DiffFile)'" - pwsh: true - - task: PublishPipelineArtifact@1 - displayName: 'Publish Format and Documentation Diff' - condition: and(eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}'), failed()) - inputs: - targetPath: '$(DiffFile)' - artifact: 'format.diff' - - task: AzureCLI@2 - displayName: '*** Test Modified Ports' - inputs: - azureSubscription: 'VcpkgPrFleet' - scriptType: 'pscore' - scriptLocation: 'inlineScript' - inlineScript: | - $current = Get-Date -AsUtc - $endDate = $current.AddDays(2) - $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' - $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String - $assetSas = $assetSas.Trim() - $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String - $binarySas = $binarySas.Trim() - $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" - ./vcpkg.exe fetch python3 - & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azblob,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) - - task: PowerShell@2 - displayName: 'Validate version files' - condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') - inputs: - filePath: 'scripts/azure-pipelines/windows/validate-version-files.ps1' - pwsh: true - - task: PublishPipelineArtifact@1 - displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}" - inputs: - targetPath: '$(Build.ArtifactStagingDirectory)\failure-logs' - artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" - condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') - - task: PowerShell@2 - displayName: 'Build a file list for all packages' - condition: always() - inputs: - targetType: inline - script: | - & $(.\vcpkg fetch python3) .\scripts\file_script.py D:\installed\vcpkg\info\ - pwsh: true - - task: PublishPipelineArtifact@1 - displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" - condition: always() - inputs: - targetPath: scripts/list_files - artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" - - task: PublishTestResults@2 - displayName: 'Publish Test Results' - condition: ne(variables['XML_RESULTS_FILE'], '') - inputs: - testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} - testResultsFormat: xUnit - testResultsFiles: $(XML_RESULTS_FILE) - platform: ${{ replace(parameters.jobName, '_', '-') }} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: jobName + type: string + default: 'x86_windows' + - name: tripletPattern + displayName: 'Enable the triplets which contain this substring' + type: string + default: '' + +jobs: +- job: ${{ parameters.jobName }} + condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) + pool: + name: PrWin-WUS + demands: ImageVersionOverride -equals 2025.01.21 + workspace: + clean: resources + timeoutInMinutes: 2880 # 2 days + variables: + - name: WORKING_ROOT + value: D:\ + - name: VCPKG_DOWNLOADS + value: D:\downloads + - name: DiffFile + value: $(Build.ArtifactStagingDirectory)\format.diff + - name: ExtraChecksTriplet + value: x86-windows + steps: + - script: .\bootstrap-vcpkg.bat + displayName: 'Bootstrap vcpkg' + condition: eq('use default', '${{ parameters.vcpkgToolSha }}') + - script: .\scripts\azure-pipelines\windows\bootstrap-from-source.cmd ${{ parameters.vcpkgToolSha }} + displayName: "Build vcpkg with CMake" + condition: ne('use default', '${{ parameters.vcpkgToolSha }}') + - script: '.\vcpkg.exe format-manifest --all' + displayName: 'Format Manifests' + condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') + - task: PowerShell@2 + displayName: 'Create Diff' + condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') + inputs: + filePath: scripts/azure-pipelines/Create-PRDiff.ps1 + arguments: "-DiffFile '$(DiffFile)'" + pwsh: true + - task: PublishPipelineArtifact@1 + displayName: 'Publish Format and Documentation Diff' + condition: and(eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}'), failed()) + inputs: + targetPath: '$(DiffFile)' + artifact: 'format.diff' + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'VcpkgPrFleet' + scriptType: 'pscore' + scriptLocation: 'inlineScript' + inlineScript: | + $current = Get-Date -AsUtc + $endDate = $current.AddDays(2) + $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' + $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String + $assetSas = $assetSas.Trim() + $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String + $binarySas = $binarySas.Trim() + $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" + ./vcpkg.exe fetch python3 + & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azblob,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) + - task: PowerShell@2 + displayName: 'Validate version files' + condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') + inputs: + filePath: 'scripts/azure-pipelines/windows/validate-version-files.ps1' + pwsh: true + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)\failure-logs' + artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') + - task: PowerShell@2 + displayName: 'Build a file list for all packages' + condition: always() + inputs: + targetType: inline + script: | + & $(.\vcpkg fetch python3) .\scripts\file_script.py D:\installed\vcpkg\info\ + pwsh: true + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" + condition: always() + inputs: + targetPath: scripts/list_files + artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" + - task: PublishTestResults@2 + displayName: 'Publish Test Results' + condition: ne(variables['XML_RESULTS_FILE'], '') + inputs: + testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} + testResultsFormat: xUnit + testResultsFiles: $(XML_RESULTS_FILE) + platform: ${{ replace(parameters.jobName, '_', '-') }} diff --git a/scripts/azure-pipelines/windows/bootstrap-from-source.cmd b/scripts/azure-pipelines/windows/bootstrap-from-source.cmd index 8f8aae33748094..c2dc13bb28e3ea 100644 --- a/scripts/azure-pipelines/windows/bootstrap-from-source.cmd +++ b/scripts/azure-pipelines/windows/bootstrap-from-source.cmd @@ -1,7 +1,7 @@ -call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x86 -host_arch=x86 -git clone https://github.com/microsoft/vcpkg-tool vcpkg-tool -git -C vcpkg-tool switch -d %1 -rmdir /s /q build.x86.release > nul 2> nul -cmake.exe -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=OFF -DVCPKG_WARNINGS_AS_ERRORS=OFF -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_BUILD_TLS12_DOWNLOADER=OFF -B build.x86.release -S vcpkg-tool -ninja.exe -C build.x86.release -move build.x86.release\vcpkg.exe vcpkg.exe +call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x86 -host_arch=x86 +git clone https://github.com/microsoft/vcpkg-tool vcpkg-tool +git -C vcpkg-tool switch -d %1 +rmdir /s /q build.x86.release > nul 2> nul +cmake.exe -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=OFF -DVCPKG_WARNINGS_AS_ERRORS=OFF -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_BUILD_TLS12_DOWNLOADER=OFF -B build.x86.release -S vcpkg-tool +ninja.exe -C build.x86.release +move build.x86.release\vcpkg.exe vcpkg.exe diff --git a/scripts/azure-pipelines/windows/create-image.ps1 b/scripts/azure-pipelines/windows/create-image.ps1 index 6b9ac3992d5002..0b2a159b8b1a1a 100644 --- a/scripts/azure-pipelines/windows/create-image.ps1 +++ b/scripts/azure-pipelines/windows/create-image.ps1 @@ -1,284 +1,284 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# - -<# -.SYNOPSIS -Creates a Windows virtual machine image, set up for vcpkg's CI. - -.DESCRIPTION -create-image.ps1 creates an Azure Windows VM image, set up for vcpkg's CI system. - -This script assumes you have installed Azure tools into PowerShell by following the instructions -at https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-3.6.1 -or are running from Azure Cloud Shell. -#> - -$Location = 'westus3' -$DatePrefixComponent = Get-Date -Format 'yyyy-MM-dd' -$Prefix = "Win-$DatePrefixComponent" -$GalleryImageVersion = $DatePrefixComponent.Replace('-','.') -$VMSize = 'Standard_D8ads_v5' -$ProtoVMName = 'PROTOTYPE' -$WindowsServerSku = '2025-datacenter-azure-edition' -$ErrorActionPreference = 'Stop' - -$ProgressActivity = 'Creating Windows Image' -$TotalProgress = 17 -$CurrentProgress = 1 - -# Assigning this to another variable helps when running the commands in this script manually for -# debugging -$Root = $PSScriptRoot - -<# -.SYNOPSIS -Generates a random password. - -.DESCRIPTION -New-Password generates a password, randomly, of length $Length, containing -only alphanumeric characters, underscore, and dash. - -.PARAMETER Length -The length of the returned password. -#> -function New-Password { - Param ([int] $Length = 32) - $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-" - if ($alphabet.Length -ne 64) { - throw 'Bad alphabet length' - } - - $result = New-Object SecureString - for ($idx = 0; $idx -lt $Length; $idx++) { - $result.AppendChar($alphabet[(Get-SecureRandom -Maximum $alphabet.Length)]) - } - - return $result -} - -<# -.SYNOPSIS -Waits for the shutdown of the specified resource. - -.DESCRIPTION -Wait-Shutdown takes a VM, and checks if there's a 'PowerState/stopped' -code; if there is, it returns. If there isn't, it waits ten seconds and -tries again. - -.PARAMETER ResourceGroupName -The name of the resource group to look up the VM in. - -.PARAMETER Name -The name of the virtual machine to wait on. -#> -function Wait-Shutdown { - [CmdletBinding()] - Param([string]$ResourceGroupName, [string]$Name) - - Write-Host "Waiting for $Name to stop..." - while ($true) { - $Vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $Name -Status - $highestStatus = $Vm.Statuses.Count - for ($idx = 0; $idx -lt $highestStatus; $idx++) { - if ($Vm.Statuses[$idx].Code -eq 'PowerState/stopped') { - return - } - } - - Write-Host "... not stopped yet, sleeping for 10 seconds" - Start-Sleep -Seconds 10 - } -} - - -$AdminPW = New-Password -$Credential = New-Object System.Management.Automation.PSCredential ("AdminUser", $AdminPW) - -$VirtualNetwork = Get-AzVirtualNetwork -ResourceGroupName 'vcpkg-image-minting' -Name 'vcpkg-image-minting-wus3' -$Subnet = $VirtualNetwork.Subnets | Where-Object -Property 'Name' -EQ -Value 'image-minting' | Select-Object -First 1 - -#################################################################################################### -Write-Progress ` - -Activity $ProgressActivity ` - -Status 'Creating prototype VM' ` - -PercentComplete (100 / $TotalProgress * $CurrentProgress++) - -$NicName = $Prefix + 'NIC' -$Nic = New-AzNetworkInterface ` - -Name $NicName ` - -ResourceGroupName 'vcpkg-image-minting' ` - -Location $Location ` - -Subnet $Subnet ` - -EnableAcceleratedNetworking - -$VM = New-AzVMConfig -Name $ProtoVMName -VMSize $VMSize -SecurityType TrustedLaunch -IdentityType SystemAssigned -$VM = Set-AzVMOperatingSystem ` - -VM $VM ` - -Windows ` - -ComputerName $ProtoVMName ` - -Credential $Credential ` - -ProvisionVMAgent - -$VM = Add-AzVMNetworkInterface -VM $VM -Id $Nic.Id -$VM = Set-AzVMOSDisk -VM $VM -StorageAccountType 'Premium_LRS' -CreateOption 'FromImage' -$VM = Set-AzVMSourceImage ` - -VM $VM ` - -PublisherName 'MicrosoftWindowsServer' ` - -Offer 'WindowsServer' ` - -Skus $WindowsServerSku ` - -Version latest - -$VM = Set-AzVMBootDiagnostic -VM $VM -Disable -New-AzVm ` - -ResourceGroupName 'vcpkg-image-minting' ` - -Location $Location ` - -VM $VM - -$VMCreated = Get-AzVM -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName -$VMCreatedOsDisk = $VMCreated.StorageProfile.OsDisk.Name - -#################################################################################################### -Write-Progress ` - -Activity $ProgressActivity ` - -Status 'Minting token for vcpkg-image-minting storage account' ` - -PercentComplete (100 / $TotalProgress * $CurrentProgress++) - -$VcpkgImageMintingAccount = Get-AzStorageAccount -ResourceGroupName 'vcpkg-image-minting' -Name 'vcpkgimageminting' - -$AssetStorageContext = New-AzStorageContext -StorageAccountName 'vcpkgimageminting' -UseConnectedAccount -$StartTime = Get-Date -$ExpiryTime = $StartTime.AddHours(4) -$AssetsSas = New-AzStorageContainerSASToken -Name 'assets' -Permission r -StartTime $StartTime -ExpiryTime $ExpiryTime -Context $AssetStorageContext - -#################################################################################################### -function Invoke-ScriptWithPrefix { - param( - [string]$ScriptName, - [switch]$SkipSas - ) - - Write-Progress ` - -Activity $ProgressActivity ` - -Status "Running provisioning script $ScriptName in VM" ` - -PercentComplete (100 / $TotalProgress * $CurrentProgress++) - - $UtilityPrefixContent = Get-Content "$Root\utility-prefix.ps1" -Encoding utf8NoBOM -Raw - - $tempScriptFilename = "$env:TEMP\temp-script.txt" - try { - $script = Get-Content "$Root\$ScriptName" -Encoding utf8NoBOM -Raw -$replacement = @" -if (Test-Path "`$PSScriptRoot/utility-prefix.ps1") { - . "`$PSScriptRoot/utility-prefix.ps1" -} -"@ - $script = $script.Replace($replacement, $UtilityPrefixContent); - Set-Content -Path $tempScriptFilename -Value $script -Encoding utf8NoBOM - - $parameter = $null - if (-not $SkipSas) { - $parameter = @{SasToken = "`"$AssetsSas`"";} - } - - $InvokeResult = Invoke-AzVMRunCommand ` - -ResourceGroupName 'vcpkg-image-minting' ` - -VMName $ProtoVMName ` - -CommandId 'RunPowerShellScript' ` - -ScriptPath $tempScriptFilename ` - -Parameter $parameter - - Write-Host "$ScriptName output: $($InvokeResult.value.Message)" - } finally { - Remove-Item $tempScriptFilename -Force - } -} - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-tlssettings.ps1' -SkipSas -Write-Host 'Waiting 1 minute for VM to reboot...' -Start-Sleep -Seconds 60 - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-visual-studio.ps1' - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-mpi.ps1' - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-cuda.ps1' - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-cudnn.ps1' - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-inteloneapi.ps1' - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-pwsh.ps1' - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-azure-cli.ps1' - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'deploy-settings.txt' -SkipSas -Restart-AzVM -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName - -#################################################################################################### -Invoke-ScriptWithPrefix -ScriptName 'sysprep.ps1' - -#################################################################################################### -Write-Progress ` - -Activity $ProgressActivity ` - -Status 'Waiting for VM to shut down' ` - -PercentComplete (100 / $TotalProgress * $CurrentProgress++) - -Wait-Shutdown -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName - -#################################################################################################### -Write-Progress ` - -Activity $ProgressActivity ` - -Status 'Converting VM to Image' ` - -PercentComplete (100 / $TotalProgress * $CurrentProgress++) - -Stop-AzVM ` - -ResourceGroupName 'vcpkg-image-minting' ` - -Name $ProtoVMName ` - -Force - -Set-AzVM ` - -ResourceGroupName 'vcpkg-image-minting' ` - -Name $ProtoVMName ` - -Generalized - -$westus3Location = @{Name = 'West US 3';} -$westusLocation = @{Name = 'West US';} - -New-AzGalleryImageVersion ` - -ResourceGroupName 'vcpkg-image-minting' ` - -GalleryName 'vcpkg_gallery_wus3' ` - -GalleryImageDefinitionName 'PrWinWus3-TrustedLaunch' ` - -Name $GalleryImageVersion ` - -Location $Location ` - -SourceImageVMId $VMCreated.ID ` - -ReplicaCount 1 ` - -StorageAccountType 'Premium_LRS' ` - -PublishingProfileExcludeFromLatest ` - -TargetRegion @($westus3Location, $westusLocation) - -#################################################################################################### -Write-Progress ` - -Activity $ProgressActivity ` - -Status 'Deleting unused temporary resources' ` - -PercentComplete (100 / $TotalProgress * $CurrentProgress++) - -Remove-AzVM -Id $VMCreated.ID -Force -Remove-AzDisk -ResourceGroupName 'vcpkg-image-minting' -Name $VMCreatedOsDisk -Force -Remove-AzNetworkInterface -ResourceGroupName 'vcpkg-image-minting' -Name $NicName -Force - -#################################################################################################### -Write-Progress -Activity $ProgressActivity -Completed -Write-Host "Generated Image: $GalleryImageVersion" -Write-Host 'Finished!' - -$AdminPW.Dispose() +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +<# +.SYNOPSIS +Creates a Windows virtual machine image, set up for vcpkg's CI. + +.DESCRIPTION +create-image.ps1 creates an Azure Windows VM image, set up for vcpkg's CI system. + +This script assumes you have installed Azure tools into PowerShell by following the instructions +at https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-3.6.1 +or are running from Azure Cloud Shell. +#> + +$Location = 'westus3' +$DatePrefixComponent = Get-Date -Format 'yyyy-MM-dd' +$Prefix = "Win-$DatePrefixComponent" +$GalleryImageVersion = $DatePrefixComponent.Replace('-','.') +$VMSize = 'Standard_D8ads_v5' +$ProtoVMName = 'PROTOTYPE' +$WindowsServerSku = '2025-datacenter-azure-edition' +$ErrorActionPreference = 'Stop' + +$ProgressActivity = 'Creating Windows Image' +$TotalProgress = 17 +$CurrentProgress = 1 + +# Assigning this to another variable helps when running the commands in this script manually for +# debugging +$Root = $PSScriptRoot + +<# +.SYNOPSIS +Generates a random password. + +.DESCRIPTION +New-Password generates a password, randomly, of length $Length, containing +only alphanumeric characters, underscore, and dash. + +.PARAMETER Length +The length of the returned password. +#> +function New-Password { + Param ([int] $Length = 32) + $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-" + if ($alphabet.Length -ne 64) { + throw 'Bad alphabet length' + } + + $result = New-Object SecureString + for ($idx = 0; $idx -lt $Length; $idx++) { + $result.AppendChar($alphabet[(Get-SecureRandom -Maximum $alphabet.Length)]) + } + + return $result +} + +<# +.SYNOPSIS +Waits for the shutdown of the specified resource. + +.DESCRIPTION +Wait-Shutdown takes a VM, and checks if there's a 'PowerState/stopped' +code; if there is, it returns. If there isn't, it waits ten seconds and +tries again. + +.PARAMETER ResourceGroupName +The name of the resource group to look up the VM in. + +.PARAMETER Name +The name of the virtual machine to wait on. +#> +function Wait-Shutdown { + [CmdletBinding()] + Param([string]$ResourceGroupName, [string]$Name) + + Write-Host "Waiting for $Name to stop..." + while ($true) { + $Vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $Name -Status + $highestStatus = $Vm.Statuses.Count + for ($idx = 0; $idx -lt $highestStatus; $idx++) { + if ($Vm.Statuses[$idx].Code -eq 'PowerState/stopped') { + return + } + } + + Write-Host "... not stopped yet, sleeping for 10 seconds" + Start-Sleep -Seconds 10 + } +} + + +$AdminPW = New-Password +$Credential = New-Object System.Management.Automation.PSCredential ("AdminUser", $AdminPW) + +$VirtualNetwork = Get-AzVirtualNetwork -ResourceGroupName 'vcpkg-image-minting' -Name 'vcpkg-image-minting-wus3' +$Subnet = $VirtualNetwork.Subnets | Where-Object -Property 'Name' -EQ -Value 'image-minting' | Select-Object -First 1 + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Creating prototype VM' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +$NicName = $Prefix + 'NIC' +$Nic = New-AzNetworkInterface ` + -Name $NicName ` + -ResourceGroupName 'vcpkg-image-minting' ` + -Location $Location ` + -Subnet $Subnet ` + -EnableAcceleratedNetworking + +$VM = New-AzVMConfig -Name $ProtoVMName -VMSize $VMSize -SecurityType TrustedLaunch -IdentityType SystemAssigned +$VM = Set-AzVMOperatingSystem ` + -VM $VM ` + -Windows ` + -ComputerName $ProtoVMName ` + -Credential $Credential ` + -ProvisionVMAgent + +$VM = Add-AzVMNetworkInterface -VM $VM -Id $Nic.Id +$VM = Set-AzVMOSDisk -VM $VM -StorageAccountType 'Premium_LRS' -CreateOption 'FromImage' +$VM = Set-AzVMSourceImage ` + -VM $VM ` + -PublisherName 'MicrosoftWindowsServer' ` + -Offer 'WindowsServer' ` + -Skus $WindowsServerSku ` + -Version latest + +$VM = Set-AzVMBootDiagnostic -VM $VM -Disable +New-AzVm ` + -ResourceGroupName 'vcpkg-image-minting' ` + -Location $Location ` + -VM $VM + +$VMCreated = Get-AzVM -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName +$VMCreatedOsDisk = $VMCreated.StorageProfile.OsDisk.Name + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Minting token for vcpkg-image-minting storage account' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +$VcpkgImageMintingAccount = Get-AzStorageAccount -ResourceGroupName 'vcpkg-image-minting' -Name 'vcpkgimageminting' + +$AssetStorageContext = New-AzStorageContext -StorageAccountName 'vcpkgimageminting' -UseConnectedAccount +$StartTime = Get-Date +$ExpiryTime = $StartTime.AddHours(4) +$AssetsSas = New-AzStorageContainerSASToken -Name 'assets' -Permission r -StartTime $StartTime -ExpiryTime $ExpiryTime -Context $AssetStorageContext + +#################################################################################################### +function Invoke-ScriptWithPrefix { + param( + [string]$ScriptName, + [switch]$SkipSas + ) + + Write-Progress ` + -Activity $ProgressActivity ` + -Status "Running provisioning script $ScriptName in VM" ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + + $UtilityPrefixContent = Get-Content "$Root\utility-prefix.ps1" -Encoding utf8NoBOM -Raw + + $tempScriptFilename = "$env:TEMP\temp-script.txt" + try { + $script = Get-Content "$Root\$ScriptName" -Encoding utf8NoBOM -Raw +$replacement = @" +if (Test-Path "`$PSScriptRoot/utility-prefix.ps1") { + . "`$PSScriptRoot/utility-prefix.ps1" +} +"@ + $script = $script.Replace($replacement, $UtilityPrefixContent); + Set-Content -Path $tempScriptFilename -Value $script -Encoding utf8NoBOM + + $parameter = $null + if (-not $SkipSas) { + $parameter = @{SasToken = "`"$AssetsSas`"";} + } + + $InvokeResult = Invoke-AzVMRunCommand ` + -ResourceGroupName 'vcpkg-image-minting' ` + -VMName $ProtoVMName ` + -CommandId 'RunPowerShellScript' ` + -ScriptPath $tempScriptFilename ` + -Parameter $parameter + + Write-Host "$ScriptName output: $($InvokeResult.value.Message)" + } finally { + Remove-Item $tempScriptFilename -Force + } +} + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-tlssettings.ps1' -SkipSas +Write-Host 'Waiting 1 minute for VM to reboot...' +Start-Sleep -Seconds 60 + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-visual-studio.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-mpi.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-cuda.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-cudnn.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-inteloneapi.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-pwsh.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-azure-cli.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-settings.txt' -SkipSas +Restart-AzVM -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'sysprep.ps1' + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Waiting for VM to shut down' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +Wait-Shutdown -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Converting VM to Image' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +Stop-AzVM ` + -ResourceGroupName 'vcpkg-image-minting' ` + -Name $ProtoVMName ` + -Force + +Set-AzVM ` + -ResourceGroupName 'vcpkg-image-minting' ` + -Name $ProtoVMName ` + -Generalized + +$westus3Location = @{Name = 'West US 3';} +$westusLocation = @{Name = 'West US';} + +New-AzGalleryImageVersion ` + -ResourceGroupName 'vcpkg-image-minting' ` + -GalleryName 'vcpkg_gallery_wus3' ` + -GalleryImageDefinitionName 'PrWinWus3-TrustedLaunch' ` + -Name $GalleryImageVersion ` + -Location $Location ` + -SourceImageVMId $VMCreated.ID ` + -ReplicaCount 1 ` + -StorageAccountType 'Premium_LRS' ` + -PublishingProfileExcludeFromLatest ` + -TargetRegion @($westus3Location, $westusLocation) + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Deleting unused temporary resources' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +Remove-AzVM -Id $VMCreated.ID -Force +Remove-AzDisk -ResourceGroupName 'vcpkg-image-minting' -Name $VMCreatedOsDisk -Force +Remove-AzNetworkInterface -ResourceGroupName 'vcpkg-image-minting' -Name $NicName -Force + +#################################################################################################### +Write-Progress -Activity $ProgressActivity -Completed +Write-Host "Generated Image: $GalleryImageVersion" +Write-Host 'Finished!' + +$AdminPW.Dispose() diff --git a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 index 5b71ed37fb2d94..437366fd662198 100644 --- a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 @@ -1,20 +1,20 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -[string]$AzCliUrl -if ([string]::IsNullOrEmpty($SasToken)) { - Write-Host 'Downloading from the Internet' - $AzCliUrl = 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.68.0-x64.msi' -} else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' - $SasToken = $SasToken.Replace('"', '') - $AzCliUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/azure-cli-2.68.0-x64.msi?$SasToken" -} - -DownloadAndInstall -Url $AzCliUrl -Name 'Azure CLI' -Args @('/quiet', '/norestart') +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$AzCliUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $AzCliUrl = 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.68.0-x64.msi' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $AzCliUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/azure-cli-2.68.0-x64.msi?$SasToken" +} + +DownloadAndInstall -Url $AzCliUrl -Name 'Azure CLI' -Args @('/quiet', '/norestart') diff --git a/scripts/azure-pipelines/windows/deploy-cuda.ps1 b/scripts/azure-pipelines/windows/deploy-cuda.ps1 index a0332a4179d668..de61ffe55d11aa 100644 --- a/scripts/azure-pipelines/windows/deploy-cuda.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cuda.ps1 @@ -1,67 +1,67 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -[string]$CudaUrl -if ([string]::IsNullOrEmpty($SasToken)) { - Write-Host 'Downloading from the Internet' - $CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_571.96_windows.exe' -} else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' - $SasToken = $SasToken.Replace('"', '') - $CudaUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cuda_12.8.0_571.96_windows.exe?$SasToken" -} - -# https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html -# Intentionally omitted: -# demo_suite_12.8 -# documentation_12.8 -# nsight_compute_12.8 -# nsight_systems_12.8 -# nsight_vse_12.8 -# nvvm_samples_12.8 -# visual_studio_integration_12.8 -# visual_profiler_12.8 -# Display.Driver -DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( - '-s', - 'cublas_12.8', - 'cublas_dev_12.8', - 'cuda_profiler_api_12.8', - 'cudart_12.8', - 'cufft_12.8', - 'cufft_dev_12.8', - 'cuobjdump_12.8', - 'cupti_12.8', - 'curand_12.8', - 'curand_dev_12.8', - 'cusolver_12.8', - 'cusolver_dev_12.8', - 'cusparse_12.8', - 'cusparse_dev_12.8', - 'cuxxfilt_12.8', - 'npp_12.8', - 'npp_dev_12.8', - 'nvcc_12.8', - 'nvdisasm_12.8', - 'nvfatbin_12.8', - 'nvjitlink_12.8', - 'nvjpeg_12.8', - 'nvjpeg_dev_12.8', - 'nvml_dev_12.8', - 'nvprof_12.8', - 'nvprune_12.8', - 'nvrtc_12.8', - 'nvrtc_dev_12.8', - 'nvtx_12.8', - 'occupancy_calculator_12.8', - 'opencl_12.8', - 'sanitizer_12.8', - 'thrust_12.8', - '-n' -) +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$CudaUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_571.96_windows.exe' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $CudaUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cuda_12.8.0_571.96_windows.exe?$SasToken" +} + +# https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html +# Intentionally omitted: +# demo_suite_12.8 +# documentation_12.8 +# nsight_compute_12.8 +# nsight_systems_12.8 +# nsight_vse_12.8 +# nvvm_samples_12.8 +# visual_studio_integration_12.8 +# visual_profiler_12.8 +# Display.Driver +DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( + '-s', + 'cublas_12.8', + 'cublas_dev_12.8', + 'cuda_profiler_api_12.8', + 'cudart_12.8', + 'cufft_12.8', + 'cufft_dev_12.8', + 'cuobjdump_12.8', + 'cupti_12.8', + 'curand_12.8', + 'curand_dev_12.8', + 'cusolver_12.8', + 'cusolver_dev_12.8', + 'cusparse_12.8', + 'cusparse_dev_12.8', + 'cuxxfilt_12.8', + 'npp_12.8', + 'npp_dev_12.8', + 'nvcc_12.8', + 'nvdisasm_12.8', + 'nvfatbin_12.8', + 'nvjitlink_12.8', + 'nvjpeg_12.8', + 'nvjpeg_dev_12.8', + 'nvml_dev_12.8', + 'nvprof_12.8', + 'nvprune_12.8', + 'nvrtc_12.8', + 'nvrtc_dev_12.8', + 'nvtx_12.8', + 'occupancy_calculator_12.8', + 'opencl_12.8', + 'sanitizer_12.8', + 'thrust_12.8', + '-n' +) diff --git a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 index 5587590ac2e3be..fbca97abd275e5 100644 --- a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 @@ -1,26 +1,26 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -[string]$CudnnUrl -if ([string]::IsNullOrEmpty($SasToken)) { - Write-Host 'Downloading from the Internet' - $CudnnUrl = 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.7.0.66_cuda12-archive.zip' -} else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' - $SasToken = $SasToken.Replace('"', '') - $CudnnUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cudnn-windows-x86_64-9.7.0.66_cuda12-archive.zip?$SasToken" -} - -DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.8" - -if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.8\include\cudnn.h") { - Write-Host 'cudnn appears correctly installed' -} else { - Write-Error 'cudnn appears broken!' -} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$CudnnUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $CudnnUrl = 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.7.0.66_cuda12-archive.zip' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $CudnnUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cudnn-windows-x86_64-9.7.0.66_cuda12-archive.zip?$SasToken" +} + +DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.8" + +if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.8\include\cudnn.h") { + Write-Host 'cudnn appears correctly installed' +} else { + Write-Error 'cudnn appears broken!' +} diff --git a/scripts/azure-pipelines/windows/deploy-install-disk.ps1 b/scripts/azure-pipelines/windows/deploy-install-disk.ps1 index 131461c6bb678e..4a7d5d70e5adf1 100644 --- a/scripts/azure-pipelines/windows/deploy-install-disk.ps1 +++ b/scripts/azure-pipelines/windows/deploy-install-disk.ps1 @@ -1,64 +1,64 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -<# -.SYNOPSIS -Partitions a new physical disk. -.DESCRIPTION -Takes the disk $DiskNumber, turns it on, then partitions it for use with label -$Label and drive letter $Letter. -.PARAMETER DiskNumber -The number of the disk to set up. -.PARAMETER Letter -The drive letter at which to mount the disk. -.PARAMETER Label -The label to give the disk. -#> -Function New-PhysicalDisk { -Param( - [int]$DiskNumber, - [string]$Letter, - [string]$Label -) - if ($Letter.Length -ne 1) { - throw "Bad drive letter $Letter, expected only one letter. (Did you accidentially add a : ?)" - } - - try { - Write-Host "Attempting to online physical disk $DiskNumber" - [string]$diskpartScriptPath = Get-TempFilePath -Extension 'txt' - [string]$diskpartScriptContent = - "SELECT DISK $DiskNumber`r`n" + - "ONLINE DISK`r`n" - - Write-Host "Writing diskpart script to $diskpartScriptPath with content:" - Write-Host $diskpartScriptContent - Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent - Write-Host 'Invoking DISKPART...' - & diskpart.exe /s $diskpartScriptPath - - Write-Host "Provisioning physical disk $DiskNumber as drive $Letter" - [string]$diskpartScriptContent = - "SELECT DISK $DiskNumber`r`n" + - "ATTRIBUTES DISK CLEAR READONLY`r`n" + - "CREATE PARTITION PRIMARY`r`n" + - "FORMAT FS=NTFS LABEL=`"$Label`" QUICK`r`n" + - "ASSIGN LETTER=$Letter`r`n" - Write-Host "Writing diskpart script to $diskpartScriptPath with content:" - Write-Host $diskpartScriptContent - Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent - Write-Host 'Invoking DISKPART...' - & diskpart.exe /s $diskpartScriptPath - } - catch { - Write-Error "Failed to provision physical disk $DiskNumber as drive $Letter! $($_.Exception.Message)" - } -} - -New-PhysicalDisk -DiskNumber 1 -Letter 'E' -Label 'install disk' +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +<# +.SYNOPSIS +Partitions a new physical disk. +.DESCRIPTION +Takes the disk $DiskNumber, turns it on, then partitions it for use with label +$Label and drive letter $Letter. +.PARAMETER DiskNumber +The number of the disk to set up. +.PARAMETER Letter +The drive letter at which to mount the disk. +.PARAMETER Label +The label to give the disk. +#> +Function New-PhysicalDisk { +Param( + [int]$DiskNumber, + [string]$Letter, + [string]$Label +) + if ($Letter.Length -ne 1) { + throw "Bad drive letter $Letter, expected only one letter. (Did you accidentially add a : ?)" + } + + try { + Write-Host "Attempting to online physical disk $DiskNumber" + [string]$diskpartScriptPath = Get-TempFilePath -Extension 'txt' + [string]$diskpartScriptContent = + "SELECT DISK $DiskNumber`r`n" + + "ONLINE DISK`r`n" + + Write-Host "Writing diskpart script to $diskpartScriptPath with content:" + Write-Host $diskpartScriptContent + Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent + Write-Host 'Invoking DISKPART...' + & diskpart.exe /s $diskpartScriptPath + + Write-Host "Provisioning physical disk $DiskNumber as drive $Letter" + [string]$diskpartScriptContent = + "SELECT DISK $DiskNumber`r`n" + + "ATTRIBUTES DISK CLEAR READONLY`r`n" + + "CREATE PARTITION PRIMARY`r`n" + + "FORMAT FS=NTFS LABEL=`"$Label`" QUICK`r`n" + + "ASSIGN LETTER=$Letter`r`n" + Write-Host "Writing diskpart script to $diskpartScriptPath with content:" + Write-Host $diskpartScriptContent + Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent + Write-Host 'Invoking DISKPART...' + & diskpart.exe /s $diskpartScriptPath + } + catch { + Write-Error "Failed to provision physical disk $DiskNumber as drive $Letter! $($_.Exception.Message)" + } +} + +New-PhysicalDisk -DiskNumber 1 -Letter 'E' -Label 'install disk' diff --git a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 index c43a5f1918fd1a..b973ca7e6bf070 100644 --- a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 @@ -1,66 +1,66 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - - -[string]$oneAPIBaseUrl -if ([string]::IsNullOrEmpty($SasToken)) { - Write-Host 'Downloading from the Internet' - $oneAPIBaseUrl = 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/c95a3b26-fc45-496c-833b-df08b10297b9/w_HPCKit_p_2024.1.0.561_offline.exe' -} else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' - $SasToken = $SasToken.Replace('"', '') - $oneAPIBaseUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/w_HPCKit_p_2024.1.0.561_offline.exe?$SasToken" -} - -$oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' - -$LocalName = 'w_HPCKit_p_2024.1.0.561_offline.exe' - -try { - [bool]$doRemove = $false - [string]$LocalPath = Join-Path $PSScriptRoot $LocalName - if (Test-Path $LocalPath) { - Write-Host "Using local Intel oneAPI..." - } else { - Write-Host "Downloading Intel oneAPI..." - $tempPath = Get-TempFilePath - New-Item -ItemType Directory -Path $tempPath -Force - $LocalPath = Join-Path $tempPath $LocalName - curl.exe -L -o $LocalPath $oneAPIBaseUrl - $doRemove = $true - } - - [string]$extractionPath = Get-TempFilePath - Write-Host 'Extracting Intel oneAPI...to folder: ' $extractionPath - $proc = Start-Process -FilePath $LocalPath -ArgumentList @('-s ', '-x', '-f', $extractionPath) -Wait -PassThru - $exitCode = $proc.ExitCode - if ($exitCode -eq 0) { - Write-Host 'Extraction successful!' - } else { - Write-Error "Extraction failed! Exited with $exitCode." - throw - } - - Write-Host 'Install Intel oneAPI...from folder: ' $extractionPath - $proc = Start-Process -FilePath "$extractionPath/bootstrapper.exe" -ArgumentList @('-s ', '--action install', "--components=$oneAPIHPCComponents" , '--eula=accept', '-p=NEED_VS2017_INTEGRATION=0', '-p=NEED_VS2019_INTEGRATION=0', '-p=NEED_VS2022_INTEGRATION=0', '--log-dir=.') -Wait -PassThru - $exitCode = $proc.ExitCode - if ($exitCode -eq 0) { - Write-Host 'Installation successful!' - } elseif ($exitCode -eq 3010) { - Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).' - } else { - Write-Error "Installation failed! Exited with $exitCode." - } - - if ($doRemove) { - Remove-Item -Path $LocalPath -Force - } -} catch { - Write-Error "Installation failed! Exception: $($_.Exception.Message)" -} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + + +[string]$oneAPIBaseUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $oneAPIBaseUrl = 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/c95a3b26-fc45-496c-833b-df08b10297b9/w_HPCKit_p_2024.1.0.561_offline.exe' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $oneAPIBaseUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/w_HPCKit_p_2024.1.0.561_offline.exe?$SasToken" +} + +$oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' + +$LocalName = 'w_HPCKit_p_2024.1.0.561_offline.exe' + +try { + [bool]$doRemove = $false + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + if (Test-Path $LocalPath) { + Write-Host "Using local Intel oneAPI..." + } else { + Write-Host "Downloading Intel oneAPI..." + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force + $LocalPath = Join-Path $tempPath $LocalName + curl.exe -L -o $LocalPath $oneAPIBaseUrl + $doRemove = $true + } + + [string]$extractionPath = Get-TempFilePath + Write-Host 'Extracting Intel oneAPI...to folder: ' $extractionPath + $proc = Start-Process -FilePath $LocalPath -ArgumentList @('-s ', '-x', '-f', $extractionPath) -Wait -PassThru + $exitCode = $proc.ExitCode + if ($exitCode -eq 0) { + Write-Host 'Extraction successful!' + } else { + Write-Error "Extraction failed! Exited with $exitCode." + throw + } + + Write-Host 'Install Intel oneAPI...from folder: ' $extractionPath + $proc = Start-Process -FilePath "$extractionPath/bootstrapper.exe" -ArgumentList @('-s ', '--action install', "--components=$oneAPIHPCComponents" , '--eula=accept', '-p=NEED_VS2017_INTEGRATION=0', '-p=NEED_VS2019_INTEGRATION=0', '-p=NEED_VS2022_INTEGRATION=0', '--log-dir=.') -Wait -PassThru + $exitCode = $proc.ExitCode + if ($exitCode -eq 0) { + Write-Host 'Installation successful!' + } elseif ($exitCode -eq 3010) { + Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).' + } else { + Write-Error "Installation failed! Exited with $exitCode." + } + + if ($doRemove) { + Remove-Item -Path $LocalPath -Force + } +} catch { + Write-Error "Installation failed! Exception: $($_.Exception.Message)" +} diff --git a/scripts/azure-pipelines/windows/deploy-mpi.ps1 b/scripts/azure-pipelines/windows/deploy-mpi.ps1 index 990f443ca4c822..5f66bdb0329e80 100644 --- a/scripts/azure-pipelines/windows/deploy-mpi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-mpi.ps1 @@ -1,20 +1,20 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -[string]$MpiUrl -if ([string]::IsNullOrEmpty($SasToken)) { - Write-Host 'Downloading from the Internet' - $MpiUrl = 'https://download.microsoft.com/download/a/5/2/a5207ca5-1203-491a-8fb8-906fd68ae623/msmpisetup.exe' -} else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' - $SasToken = $SasToken.Replace('"', '') - $MpiUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/msmpisetup.exe?$SasToken" -} - -DownloadAndInstall -Name 'MSMPI' -Url $MpiUrl -Args @('-force', '-unattend') +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$MpiUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $MpiUrl = 'https://download.microsoft.com/download/a/5/2/a5207ca5-1203-491a-8fb8-906fd68ae623/msmpisetup.exe' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $MpiUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/msmpisetup.exe?$SasToken" +} + +DownloadAndInstall -Name 'MSMPI' -Url $MpiUrl -Args @('-force', '-unattend') diff --git a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 index e216c7b0e93ee9..76f98fdb99e5e4 100644 --- a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 +++ b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 @@ -1,20 +1,20 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -[string]$PwshUrl -if ([string]::IsNullOrEmpty($SasToken)) { - Write-Host 'Downloading from the Internet' - $PwshUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.4.6/PowerShell-7.4.6-win-x64.msi' -} else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' - $SasToken = $SasToken.Replace('"', '') - $PwshUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/PowerShell-7.4.6-win-x64.msi?$SasToken" -} - -DownloadAndInstall -Url $PwshUrl -Name 'PowerShell Core' -Args @('/quiet', '/norestart') +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$PwshUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $PwshUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.4.6/PowerShell-7.4.6-win-x64.msi' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $PwshUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/PowerShell-7.4.6-win-x64.msi?$SasToken" +} + +DownloadAndInstall -Url $PwshUrl -Name 'PowerShell Core' -Args @('/quiet', '/norestart') diff --git a/scripts/azure-pipelines/windows/deploy-settings.txt b/scripts/azure-pipelines/windows/deploy-settings.txt index f017559d0a8c25..4c28f249a31fca 100644 --- a/scripts/azure-pipelines/windows/deploy-settings.txt +++ b/scripts/azure-pipelines/windows/deploy-settings.txt @@ -1,24 +1,24 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -$ErrorActionPreference = 'Stop' -$ProgressPreference = 'SilentlyContinue' - -Write-Host 'Disabling pagefile...' -wmic computersystem set AutomaticManagedPagefile=False -wmic pagefileset delete - -$av = Get-Command Add-MPPreference -ErrorAction SilentlyContinue -if ($null -eq $av) { - Write-Host 'AntiVirus not installed, skipping exclusions.' -} else { - Write-Host 'Configuring AntiVirus exclusions...' - Add-MpPreference -ExclusionPath C:\agent - Add-MPPreference -ExclusionPath D:\ - Add-MPPreference -ExclusionPath E:\ - Add-MPPreference -ExclusionProcess ninja.exe - Add-MPPreference -ExclusionProcess clang-cl.exe - Add-MPPreference -ExclusionProcess cl.exe - Add-MPPreference -ExclusionProcess link.exe - Add-MPPreference -ExclusionProcess python.exe -} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +$ErrorActionPreference = 'Stop' +$ProgressPreference = 'SilentlyContinue' + +Write-Host 'Disabling pagefile...' +wmic computersystem set AutomaticManagedPagefile=False +wmic pagefileset delete + +$av = Get-Command Add-MPPreference -ErrorAction SilentlyContinue +if ($null -eq $av) { + Write-Host 'AntiVirus not installed, skipping exclusions.' +} else { + Write-Host 'Configuring AntiVirus exclusions...' + Add-MpPreference -ExclusionPath C:\agent + Add-MPPreference -ExclusionPath D:\ + Add-MPPreference -ExclusionPath E:\ + Add-MPPreference -ExclusionProcess ninja.exe + Add-MPPreference -ExclusionProcess clang-cl.exe + Add-MPPreference -ExclusionProcess cl.exe + Add-MPPreference -ExclusionProcess link.exe + Add-MPPreference -ExclusionProcess python.exe +} diff --git a/scripts/azure-pipelines/windows/deploy-tlssettings.ps1 b/scripts/azure-pipelines/windows/deploy-tlssettings.ps1 index 4b00a6deacee3f..94e3732d70a708 100644 --- a/scripts/azure-pipelines/windows/deploy-tlssettings.ps1 +++ b/scripts/azure-pipelines/windows/deploy-tlssettings.ps1 @@ -1,738 +1,738 @@ -#*************************************************************************************************************** -# This script supports the TLS 1.2 everywhere project -# It does the following: -# * By default it disables TLS 1.O, TLS 1.1, SSLv2, SSLv3 and Enables TLS1.2 -# * The CipherSuite order is set to the SDL approved version. -# * The FIPS MinEncryptionLevel is set to 3. -# * RC4 is disabled -# * A log with a transcript of all actions taken is generated -#*************************************************************************************************************** - -#************************************************ SCRIPT USAGE ************************************************ -# .\TLSSettings.ps1 -# -SetCipherOrder : Excellence/Min-Bar, default(Excellence), use B to set Min-Bar. (Min-Bar ordering prefers ciphers with smaller key sizes to improve performance over security) -# -RebootIfRequired : $true/$false, default($true), use $false to disable auto-reboot (Settings won't take effect until a reboot is completed) -# -EnableOlderTlsVersions : $true/$false, default($false), use $true to explicitly Enable TLS1.0, TLS1.1 -#*************************************************************************************************************** - -#***************************TEAM CAN DETERMINE WHAT CIPHER SUITE ORDER IS CHOSEN ****************************** -# Option B provides the min-bar configuration (small trade-off: performance over security) -# Syntax: .\TLSSettings.ps1 -SetCipherOrder B -# if no option is supplied, you will get the opportunity for excellence cipher order (small trade-off: security over performance) -# Syntax: .\TLSSettings.ps1 -#*************************************************************************************************************** - -param ( - [string]$SetCipherOrder = " ", - [bool]$RebootIfRequired = $true, - [bool]$EnableOlderTlsVersions = $false -) - -#******************* FUNCTION THAT ACTUALLY UPDATES KEYS; WILL RETURN REBOOT FLAG IF CHANGES *********************** -Function Set-CryptoSetting { - param ( - $regKeyName, - $value, - $valuedata, - $valuetype - ) - - $restart = $false - - # Check for existence of registry key, and create if it does not exist - If (!(Test-Path -Path $regKeyName)) { - New-Item $regKeyName | Out-Null - } - - - # Get data of registry value, or null if it does not exist - $val = (Get-ItemProperty -Path $regKeyName -Name $value -ErrorAction SilentlyContinue).$value - - - If ($val -eq $null) { - # Value does not exist - create and set to desired value - New-ItemProperty -Path $regKeyName -Name $value -Value $valuedata -PropertyType $valuetype | Out-Null - $restart = $true - } - Else { - # Value does exist - if not equal to desired value, change it - If ($val -ne $valuedata) { - Set-ItemProperty -Path $regKeyName -Name $value -Value $valuedata - $restart = $true - } - } - - - $restart -} -#*************************************************************************************************************** - - -#******************* FUNCTION THAT DISABLES RC4 *********************** -Function DisableRC4 { - - $restart = $false - $subkeys = Get-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" - $ciphers = $subkeys.OpenSubKey("Ciphers", $true) - - Write-Log -Message "----- Checking the status of RC4 -----" -Logfile $logLocation -Severity Information - - $RC4 = $false - if ($ciphers.SubKeyCount -eq 0) { - $k1 = $ciphers.CreateSubKey("RC4 128/128") - $k1.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) - $restart = $true - $k2 = $ciphers.CreateSubKey("RC4 64/128") - $k2.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) - $k3 = $ciphers.CreateSubKey("RC4 56/128") - $k3.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) - $k4 = $ciphers.CreateSubKey("RC4 40/128") - $k4.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) - - Write-Log -Message "RC4 was disabled " -Logfile $logLocation -Severity Information - $RC4 = $true - } - - If ($RC4 -ne $true) { - Write-Log -Message "There was no change for RC4 " -Logfile $logLocation -Severity Information - } - - $restart -} -#*************************************************************************************************************** - -#******************* FUNCTION CHECKS FOR PROBLEMATIC FIPS SETTING AND FIXES IT *********************** -Function Test-RegistryValueForFipsSettings { - - $restart = $false - - $fipsPath = @( - "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp", - "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services", - "HKLM:\System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration" - ) - - $fipsValue = "MinEncryptionLevel" - - - foreach ($path in $fipsPath) { - - Write-Log -Message "Checking to see if $($path)\$fipsValue exists" -Logfile $logLocation -Severity Information - - $ErrorActionPreference = "stop" - Try { - - $result = Get-ItemProperty -Path $path | Select-Object -ExpandProperty $fipsValue - if ($result -eq 4) { - set-itemproperty -Path $path -Name $fipsValue -value 3 - Write-Log -Message "Regkey $($path)\$fipsValue was changed from value $result to a value of 3" -Logfile $logLocation -Severity Information - $restart = $true - } - else { - Write-Log -Message "Regkey $($path)\$fipsValue left at value $result" -Logfile $logLocation -Severity Information - } - - } - Catch [System.Management.Automation.ItemNotFoundException] { - - Write-Log -Message "Reg path $path was not found" -Logfile $logLocation -Severity Information - } - Catch [System.Management.Automation.PSArgumentException] { - - Write-Log -Message "Regkey $($path)\$fipsValue was not found" -Logfile $logLocation -Severity Information - } - Catch { - Write-Log -Message "Error of type $($Error[0].Exception.GetType().FullName) trying to get $($path)\$fipsValue" -Logfile $logLocation -Severity Information - } - Finally {$ErrorActionPreference = "Continue" - } - } - $restart -} -#*************************************************************************************************************** - -#********************************** FUNCTION THAT CREATE LOG DIRECTORY IF IT DOES NOT EXIST ******************************* -function CreateLogDirectory { - - $TARGETDIR = "$env:HOMEDRIVE\Logs" - if ( -Not (Test-Path -Path $TARGETDIR ) ) { - New-Item -ItemType directory -Path $TARGETDIR | Out-Null - } - - $TARGETDIR = $TARGETDIR + "\" + "TLSSettingsLogFile.csv" - - return $TARGETDIR -} -#*************************************************************************************************************** - - -#********************************** FUNCTION THAT LOGS WHAT THE SCRIPT IS DOING ******************************* -function Write-Log { - [CmdletBinding()] - param( - [Parameter()] - [ValidateNotNullOrEmpty()] - [string]$Message, - - [Parameter()] - [ValidateNotNullOrEmpty()] - [string]$LogFile, - - [Parameter()] - [ValidateNotNullOrEmpty()] - [ValidateSet('Information', 'Warning', 'Error')] - [string]$Severity = 'Information' - ) - - - [pscustomobject]@{ - Time = (Get-Date -f g) - Message = $Message - Severity = $Severity - } | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append -FilePath $LogFile -} - -#********************************TLS CipherSuite Settings ******************************************* - -# CipherSuites for windows OS < 10 -function Get-BaseCipherSuitesOlderWindows() -{ - param - ( - [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder - ) - $cipherorder = @() - - if ($isExcellenceOrder -eq $true) - { - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256" - } - else - { - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384" - } - - # Add additional ciphers when EnableOlderTlsVersions flag is set to true - if ($EnableOlderTlsVersions) - { - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" - $cipherorder += "TLS_RSA_WITH_AES_256_GCM_SHA384" - $cipherorder += "TLS_RSA_WITH_AES_128_GCM_SHA256" - $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA256" - $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA256" - $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA" - $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA" - } - return $cipherorder -} - -# Ciphersuites needed for backwards compatibility with Firefox, Chrome -# Server 2012 R2 doesn't support TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 -# Both firefox and chrome negotiate ECDHE_RSA_AES_256_CBC_SHA1, Edge negotiates ECDHE_RSA_AES_256_CBC_SHA384 -function Get-BrowserCompatCipherSuitesOlderWindows() -{ - param - ( - [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder - ) - $cipherorder = @() - - if ($isExcellenceOrder -eq $true) - { - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384" # (uses SHA-1) - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" # (uses SHA-1) - } - else - { - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" # (uses SHA-1) - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384" # (uses SHA-1) - } - return $cipherorder -} - -# Ciphersuites for OS versions windows 10 and above -function Get-BaseCipherSuitesWin10Above() -{ - param - ( - [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder - ) - - $cipherorder = @() - - if ($isExcellenceOrder -eq $true) - { - - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" - } - else - { - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" - } - # Add additional ciphers when EnableOlderTlsVersions flag is set to true - if ($EnableOlderTlsVersions) - { - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256" - $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256" - $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" - $cipherorder += "TLS_RSA_WITH_AES_256_GCM_SHA384" - $cipherorder += "TLS_RSA_WITH_AES_128_GCM_SHA256" - $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA256" - $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA256" - $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA" - $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA" - } - - return $cipherorder -} - - -#******************************* TLS Version Settings **************************************************** - -function Get-RegKeyPathForTls12() -{ - $regKeyPath = @( - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" - ) - return $regKeyPath -} - -function Get-RegKeyPathForTls11() -{ - $regKeyPath = @( - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" - ) - return $regKeyPath -} - -function Get-RegKeypathForTls10() -{ - $regKeyPath = @( - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" - ) - return $regKeyPath -} - -function Get-RegKeyPathForSsl30() -{ - $regKeyPath = @( - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server" - ) - return $regKeyPath -} - -function Get-RegKeyPathForSsl20() -{ - $regKeyPath = @( - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client", - "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" - ) - return $regKeyPath -} - -#Initialize reboot value to false -$reboot = $false - -#*****************************Create the logfile if not does not exist*************************************** -$logLocation = CreateLogDirectory - - -#Start writing to the logs -Write-Log -Message "========== Start of logging for a script execution ==========" -Logfile $logLocation -Severity Information - -$registryPathGoodGuys = @() -$registryPathBadGuys = @() - -# we enable TLS 1.2 and disable SSL 2.0, 3.0 in any case -$registryPathGoodGuys += Get-RegKeyPathForTls12 - -$registryPathBadGuys += Get-RegKeyPathForSsl20 -$registryPathBadGuys += Get-RegKeyPathForSsl30 - -# add TLS 1.0/1.1 to good/bad depending on user's preference -# default is adding TLS 1.0/1.1 to bad -if ($EnableOlderTlsVersions) -{ - $registryPathGoodGuys += Get-RegKeypathForTls10 - $registryPathGoodGuys += Get-RegKeyPathForTls11 - Write-Log -Message "Enabling TLS1.2, TLS1.1, TLS1.0. Disabling SSL3.0, SSL2.0" -Logfile $logLocation -Severity Information -} -else -{ - $registryPathBadGuys += Get-RegKeypathForTls10 - $registryPathBadGuys += Get-RegKeyPathForTls11 - Write-Log -Message "Enabling TLS1.2. Disabling TLS1.1, TLS1.0, SSL3.0, SSL2.0" -Logfile $logLocation -Severity Information -} - - -Write-Log -Message "Check which registry keys exist already and which registry keys need to be created." -Logfile $logLocation -Severity Information - -#******************* CREATE THE REGISTRY KEYS IF THEY DON'T EXIST******************************** -# Check for existence of GoodGuy registry keys, and create if they do not exist -For ($i = 0; $i -lt $registryPathGoodGuys.Length; $i = $i + 1) { - - Write-Log -Message "Checking for existing of key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information - If (!(Test-Path -Path $registryPathGoodGuys[$i])) { - New-Item $registryPathGoodGuys[$i] | Out-Null - Write-Log -Message "Creating key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information - } -} - -# Check for existence of BadGuy registry keys, and create if they do not exist -For ($i = 0; $i -lt $registryPathBadGuys.Length; $i = $i + 1) { - - Write-Log -Message "Checking for existing of key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information - If (!(Test-Path -Path $registryPathBadGuys[$i])) { - Write-Log -Message "Creating key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information - New-Item $registryPathBadGuys[$i] | Out-Null - } -} - -#******************* EXPLICITLY DISABLE SSLV2, SSLV3, TLS10 AND TLS11 ******************************** -For ($i = 0; $i -lt $registryPathBadGuys.Length; $i = $i + 1) { - - if ($registryPathBadGuys[$i].Contains("Client") -Or $registryPathBadGuys[$i].Contains("Server")) { - - Write-Log -Message "Disabling this key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information - $result = Set-CryptoSetting $registryPathBadGuys[$i].ToString() Enabled 0 DWord - $result = Set-CryptoSetting $registryPathBadGuys[$i].ToString() DisabledByDefault 1 DWord - $reboot = $reboot -or $result - } -} - -#********************************* EXPLICITLY Enable TLS12 **************************************** -For ($i = 0; $i -lt $registryPathGoodGuys.Length; $i = $i + 1) { - - if ($registryPathGoodGuys[$i].Contains("Client") -Or $registryPathGoodGuys[$i].Contains("Server")) { - - Write-Log -Message "Enabling this key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information - $result = Set-CryptoSetting $registryPathGoodGuys[$i].ToString() Enabled 1 DWord - $result = Set-CryptoSetting $registryPathGoodGuys[$i].ToString() DisabledByDefault 0 DWord - $reboot = $reboot -or $result - } -} - -#************************************** Disable RC4 ************************************************ -$result = DisableRC4 -$reboot = $reboot -or $result - - -#************************************** Set Cipher Suite Order ************************************** -Write-Log -Message "----- starting ciphersuite order calculation -----" -Logfile $logLocation -Severity Information -$configureExcellenceOrder = $true -if ($SetCipherOrder.ToUpper() -eq "B") -{ - $configureExcellenceOrder = $false - Write-Host "The min bar cipher suite order was chosen." - Write-Log -Message "The min bar cipher suite order was chosen." -Logfile $logLocation -Severity Information -} -else -{ - Write-Host "The opportunity for excellence cipher suite order was chosen." - Write-Log -Message "The opportunity for excellence cipher suite order was chosen." -Logfile $logLocation -Severity Information -} -$cipherlist = @() - -if ([Environment]::OSVersion.Version.Major -lt 10) -{ - $cipherlist += Get-BaseCipherSuitesOlderWindows -isExcellenceOrder $configureExcellenceOrder - $cipherlist += Get-BrowserCompatCipherSuitesOlderWindows -isExcellenceOrder $configureExcellenceOrder -} -else -{ - $cipherlist += Get-BaseCipherSuitesWin10Above -isExcellenceOrder $configureExcellenceOrder -} -$cipherorder = [System.String]::Join(",", $cipherlist) - Write-Host "Appropriate ciphersuite order : $cipherorder" - Write-Log -Message "Appropriate ciphersuite order : $cipherorder" -Logfile $logLocation -Severity Information - -$CipherSuiteRegKey = "HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002" - -if (!(Test-Path -Path $CipherSuiteRegKey)) -{ - New-Item $CipherSuiteRegKey | Out-Null - $reboot = $True - Write-Log -Message "Creating key: $($CipherSuiteRegKey) " -Logfile $logLocation -Severity Information -} - -$val = (Get-Item -Path $CipherSuiteRegKey -ErrorAction SilentlyContinue).GetValue("Functions", $null) -Write-Log -Message "Previous cipher suite value: $val " -Logfile $logLocation -Severity Information -Write-Log -Message "New cipher suite value : $cipherorder " -Logfile $logLocation -Severity Information - -if ($val -ne $cipherorder) -{ - Write-Log -Message "Cipher suite order needs to be updated. " -Logfile $logLocation -Severity Information - Write-Host "The original cipher suite order needs to be updated", `n, $val - Set-ItemProperty -Path $CipherSuiteRegKey -Name Functions -Value $cipherorder - Write-Log -Message "Cipher suite value was updated. " -Logfile $logLocation -Severity Information - $reboot = $True -} -else -{ - Write-Log -Message "Cipher suite order does not need to be updated. " -Logfile $logLocation -Severity Information - Write-Log -Message "Cipher suite value was not updated as there was no change. " -Logfile $logLocation -Severity Information -} - -#****************************** CHECK THE FIPS SETTING WHICH IMPACTS RDP'S ALLOWED CIPHERS ************************** -#Check for FipsSettings -Write-Log -Message "Checking to see if reg keys exist and if MinEncryptionLevel is set to 4" -Logfile $logLocation -Severity Information -$result = Test-RegistryValueForFipsSettings -$reboot = $reboot -or $result - - -#************************************** REBOOT ************************************** - -if ($RebootIfRequired) -{ - Write-Log -Message "You set the RebootIfRequired flag to true. If changes are made, the system will reboot " -Logfile $logLocation -Severity Information - # If any settings were changed, reboot - If ($reboot) - { - Write-Log -Message "Rebooting now... " -Logfile $logLocation -Severity Information - Write-Log -Message "Using this command: shutdown.exe /r /t 5 /c ""Crypto settings changed"" /f /d p:2:4 " -Logfile $logLocation -Severity Information - Write-Host "Rebooting now..." - shutdown.exe /r /t 5 /c "Crypto settings changed" /f /d p:2:4 - } - Else - { - Write-Host "Nothing get updated." - Write-Log -Message "Nothing get updated. " -Logfile $logLocation -Severity Information - } -} -else -{ - - Write-Log -Message "You set the RebootIfRequired flag to false. If changes are made, the system will NOT reboot " -Logfile $logLocation -Severity Information - Write-Log -Message "No changes will take effect until a reboot has been completed. " -Logfile $logLocation -Severity Information - Write-Log -Message "Script does not include a reboot by design" -Logfile $logLocation -Severity Information -} -Write-Log -Message "========== End of logging for a script execution ==========" -Logfile $logLocation -Severity Information -# SIG # Begin signature block -# MIIjhgYJKoZIhvcNAQcCoIIjdzCCI3MCAQExDzANBglghkgBZQMEAgEFADB5Bgor -# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG -# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAHtlEJwNffjnOP -# Sr2t1yq5EfE0ll4GozyZt3UXO9BXKKCCDYEwggX/MIID56ADAgECAhMzAAABh3IX -# chVZQMcJAAAAAAGHMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD -# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy -# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p -# bmcgUENBIDIwMTEwHhcNMjAwMzA0MTgzOTQ3WhcNMjEwMzAzMTgzOTQ3WjB0MQsw -# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u -# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy -# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -# AQDOt8kLc7P3T7MKIhouYHewMFmnq8Ayu7FOhZCQabVwBp2VS4WyB2Qe4TQBT8aB -# znANDEPjHKNdPT8Xz5cNali6XHefS8i/WXtF0vSsP8NEv6mBHuA2p1fw2wB/F0dH -# sJ3GfZ5c0sPJjklsiYqPw59xJ54kM91IOgiO2OUzjNAljPibjCWfH7UzQ1TPHc4d -# weils8GEIrbBRb7IWwiObL12jWT4Yh71NQgvJ9Fn6+UhD9x2uk3dLj84vwt1NuFQ -# itKJxIV0fVsRNR3abQVOLqpDugbr0SzNL6o8xzOHL5OXiGGwg6ekiXA1/2XXY7yV -# Fc39tledDtZjSjNbex1zzwSXAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE -# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhov4ZyO96axkJdMjpzu2zVXOJcsw -# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 -# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDU4Mzg1MB8GA1UdIwQYMBaAFEhu -# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu -# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w -# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3 -# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx -# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAixmy -# S6E6vprWD9KFNIB9G5zyMuIjZAOuUJ1EK/Vlg6Fb3ZHXjjUwATKIcXbFuFC6Wr4K -# NrU4DY/sBVqmab5AC/je3bpUpjtxpEyqUqtPc30wEg/rO9vmKmqKoLPT37svc2NV -# BmGNl+85qO4fV/w7Cx7J0Bbqk19KcRNdjt6eKoTnTPHBHlVHQIHZpMxacbFOAkJr -# qAVkYZdz7ikNXTxV+GRb36tC4ByMNxE2DF7vFdvaiZP0CVZ5ByJ2gAhXMdK9+usx -# zVk913qKde1OAuWdv+rndqkAIm8fUlRnr4saSCg7cIbUwCCf116wUJ7EuJDg0vHe -# yhnCeHnBbyH3RZkHEi2ofmfgnFISJZDdMAeVZGVOh20Jp50XBzqokpPzeZ6zc1/g -# yILNyiVgE+RPkjnUQshd1f1PMgn3tns2Cz7bJiVUaqEO3n9qRFgy5JuLae6UweGf -# AeOo3dgLZxikKzYs3hDMaEtJq8IP71cX7QXe6lnMmXU/Hdfz2p897Zd+kU+vZvKI -# 3cwLfuVQgK2RZ2z+Kc3K3dRPz2rXycK5XCuRZmvGab/WbrZiC7wJQapgBodltMI5 -# GMdFrBg9IeF7/rP4EqVQXeKtevTlZXjpuNhhjuR+2DMt/dWufjXpiW91bo3aH6Ea -# jOALXmoxgltCp1K7hrS6gmsvj94cLRf50QQ4U8Qwggd6MIIFYqADAgECAgphDpDS -# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK -# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 -# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0 -# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla -# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS -# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT -# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB -# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG -# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S -# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz -# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7 -# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u -# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33 -# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl -# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP -# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB -# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF -# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM -# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ -# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud -# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO -# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0 -# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y -# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p -# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y -# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB -# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw -# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA -# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY -# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj -# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd -# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ -# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf -# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ -# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j -# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B -# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96 -# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7 -# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I -# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIVWzCCFVcCAQEwgZUwfjELMAkG -# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx -# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z -# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAYdyF3IVWUDHCQAAAAABhzAN -# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor -# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgOQvu7NUq -# wmve+qCoalj/s9HX5Hz9/zYISdJyOFTC4FIwQgYKKwYBBAGCNwIBDDE0MDKgFIAS -# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN -# BgkqhkiG9w0BAQEFAASCAQAHbtGz0AChe0qMPM3c7iU8BQCfJklePUlAlhwFSuCx -# careoloxao+ZtS+dQRlrxLu/ZSqtmJHNsyRoWzsHdOs65pwUYhV3svzaXd7pJwkc -# nbDXedLBbNuQrQrrL2xbGtzT3U+EwgpJ1TTEYwHgqkTFogIelGa2sjD5N+4Vvalq -# t+vxaYrWwkTtsm0qczLKGRUjJqCjARjviE1xsOvs4zwbpXx/bEs/6M7U9tR+w/DS -# nDY/5KAKYET0DCVDhmsMmzJi3xXdBr4sAz0484AAB0CIRVgPCgdgr8E0NQUESJzm -# xm3K4bMAgTMWRiGTL4MRYSuMIn09sbfYXP9hjXLvTV4YoYIS5TCCEuEGCisGAQQB -# gjcDAwExghLRMIISzQYJKoZIhvcNAQcCoIISvjCCEroCAQMxDzANBglghkgBZQME -# AgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMB -# MDEwDQYJYIZIAWUDBAIBBQAEIJBynrmlQmGS0UNGTk53HVKEc4aHvNdYrs5eCcHM -# puc5AgZfEgElnvMYEzIwMjAwNzI0MTgwNDM3Ljg3NlowBIACAfSggdCkgc0wgcox -# CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG -# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg -# SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg -# RVNOOkUwNDEtNEJFRS1GQTdFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt -# cCBzZXJ2aWNloIIOPDCCBPEwggPZoAMCAQICEzMAAAEHfjdomIdaN9YAAAAAAQcw -# DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0 -# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh -# dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcN -# MTkxMDA4MTczODM1WhcNMjEwMTAzMTczODM1WjCByjELMAkGA1UEBhMCVVMxCzAJ -# BgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg -# Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv -# bnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046RTA0MS00QkVFLUZB -# N0UxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIHNlcnZpY2UwggEiMA0G -# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUuqOUlbaeWirgwbCwhhNIOqTshpo+ -# QdSYxAt9JnkeulQFeKrQ6rOSECXxwgOjL/TNMIXtkig1MaifFON6si/Ri+AsV8Gu -# rQp4fylJzLDMFdJcGSpV3CGRdpDb0au8kNQLmnZuxLxAL91R7//3mH2QDQI20w3G -# 06s+Xv8+js9wQksXAfclXX1TJoBIx1Pi1FGqCnY3KlW81+Plhz0T4yStm1MgnqH4 -# RKYyPdcempCYC/BI04Ph2EJL+uQQfAfYdbf9vGqpKYjsuktnWr5uowD3H5At+x3l -# YH5rz4JCleKjeLpB/j74H7VZ0I5eTEbls9e2lEKaUzb9o0wjnjDc+t4BAgMBAAGj -# ggEbMIIBFzAdBgNVHQ4EFgQUNOHjlxlIJXMcP9n/0ogYdX8p6HcwHwYDVR0jBBgw -# FoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov -# L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGltU3RhUENB -# XzIwMTAtMDctMDEuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0 -# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAx -# MC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDAN -# BgkqhkiG9w0BAQsFAAOCAQEAGN3/7XWSzHGKjk444w+2q1D3k7Bh/ZahUvWHFJ6E -# UKU5vLzEGsdsgJSvWXHZDRrpf5rcUGQyjnlo1hAY1mDteNKFushS6bedxcxPHJje -# lVZ9N2/e5+/7zLu18YjnKw5bFu7dWqYBMI3J0FOr56XJOJ1KTtMiJhpxuib+FWy+ -# pyhVVgHGTUHuUdbE09dY9WxuRsbpb4DdWAWNrPDB6VAOO50QfEj+0tW+zF6h3RhB -# TI0ilj0+AzgXE+6DyJ7/br6aVvCEvNRJzE6akJnMyn/kzmC32LxvRZWKEwWDR0Fn -# zeXj5ynSStZ6iifTBP7gqiDsidguxh+BFX7HxhN1eHf7jTCCBnEwggRZoAMCAQIC -# CmEJgSoAAAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD -# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy -# b3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp -# ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIx -# NDY1NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV -# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG -# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3 -# DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF -# ++18aEssX8XD5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRD -# DNdNuDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSx -# z5NMksHEpl3RYRNuKMYa+YaAu99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1 -# rL2KQk1AUdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16Hgc -# sOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB -# 4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqF -# bVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD -# VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv -# cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB -# BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j -# ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCB -# kjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jv -# c29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQe -# MiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQA -# LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUx -# vs8F4qn++ldtGTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GAS -# inbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1 -# L3mBZdmptWvkx872ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWO -# M7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4 -# pm3S4Zz5Hfw42JT0xqUKloakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45 -# V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x -# 4QDf5zEHpJM692VHeOj4qEir995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEe -# gPsbiSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKn -# QqLJzxlBTeCG+SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp -# 3lfB0d4wwP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvT -# X4/edIhJEqGCAs4wggI3AgEBMIH4oYHQpIHNMIHKMQswCQYDVQQGEwJVUzELMAkG -# A1UECBMCV0ExEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD -# b3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9u -# cyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpFMDQxLTRCRUUtRkE3 -# RTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgc2VydmljZaIjCgEBMAcG -# BSsOAwIaAxUAwwu+tfgG3rC7RZrxuFO2CmZSfPiggYMwgYCkfjB8MQswCQYDVQQG -# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG -# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg -# VGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOLFEVUwIhgPMjAy -# MDA3MjQxNTUwNDVaGA8yMDIwMDcyNTE1NTA0NVowdzA9BgorBgEEAYRZCgQBMS8w -# LTAKAgUA4sURVQIBADAKAgEAAgIa9QIB/zAHAgEAAgIR9DAKAgUA4sZi1QIBADA2 -# BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIB -# AAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBADwvhE9bln801RR+oEXjtPJXTqtYMakR -# ymItUlO2HRorDqEv2SJR/V/kQjcsqS6ig54bOiKs0Il2fW/s/pi+x1ydJMpOyhM7 -# zzqm3acQ9kbYHIDoPWVT/Rq2Oo33Dq380zXENcc0hpLAKF3Cu06SbbNbqu+A/wbI -# z5IClz6kU8kiMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m -# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB -# IDIwMTACEzMAAAEHfjdomIdaN9YAAAAAAQcwDQYJYIZIAWUDBAIBBQCgggFKMBoG -# CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg6+NCew+c -# OhYIOzhUKofOF7MxtgOvSMWQCMCIWlTFNMgwgfoGCyqGSIb3DQEJEAIvMYHqMIHn -# MIHkMIG9BCBBYvCj4pFkwhumagATn0gLh9fdDNzImQkKNeOtRj/LHjCBmDCBgKR+ -# MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS -# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT -# HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABB343aJiHWjfWAAAA -# AAEHMCIEIGIH6vLdbEFNnxTxBhtIN7CtmhcKy/9m6/xoAA3LHzXUMA0GCSqGSIb3 -# DQEBCwUABIIBAKGg3zNulscnGBDlD6Q/U6yLQ5dN3gF9UrprgACiQ1gs/DexU7oC -# hjNZxBnH5RTA/7q9TFf2a1rBydHWVnqXuuQQJ0HuskdpXahxR4y1jboDdGwr7F08 -# v/gmPeeUik28Je72QZp5m/R0O61/kMQaDpLO9iPH0Z9iMGfqJonFPDeY4VX8Da2n -# cPY7mrv6YAI+ydZ+mUdBp2yjas7+/N8MntcNtAO0HpWFXQTAmb77RrSssfeZphRA -# mBD+gLx5C3q4uSmuOqaQxUaF0y8FeuetHp0bw2sfce6GlMXJwzTpC6HvXnaVtMy0 -# pgzd/KPHW7EgSvmRVKmvwiQGiZBoRG/Gcg8= -# SIG # End signature block +#*************************************************************************************************************** +# This script supports the TLS 1.2 everywhere project +# It does the following: +# * By default it disables TLS 1.O, TLS 1.1, SSLv2, SSLv3 and Enables TLS1.2 +# * The CipherSuite order is set to the SDL approved version. +# * The FIPS MinEncryptionLevel is set to 3. +# * RC4 is disabled +# * A log with a transcript of all actions taken is generated +#*************************************************************************************************************** + +#************************************************ SCRIPT USAGE ************************************************ +# .\TLSSettings.ps1 +# -SetCipherOrder : Excellence/Min-Bar, default(Excellence), use B to set Min-Bar. (Min-Bar ordering prefers ciphers with smaller key sizes to improve performance over security) +# -RebootIfRequired : $true/$false, default($true), use $false to disable auto-reboot (Settings won't take effect until a reboot is completed) +# -EnableOlderTlsVersions : $true/$false, default($false), use $true to explicitly Enable TLS1.0, TLS1.1 +#*************************************************************************************************************** + +#***************************TEAM CAN DETERMINE WHAT CIPHER SUITE ORDER IS CHOSEN ****************************** +# Option B provides the min-bar configuration (small trade-off: performance over security) +# Syntax: .\TLSSettings.ps1 -SetCipherOrder B +# if no option is supplied, you will get the opportunity for excellence cipher order (small trade-off: security over performance) +# Syntax: .\TLSSettings.ps1 +#*************************************************************************************************************** + +param ( + [string]$SetCipherOrder = " ", + [bool]$RebootIfRequired = $true, + [bool]$EnableOlderTlsVersions = $false +) + +#******************* FUNCTION THAT ACTUALLY UPDATES KEYS; WILL RETURN REBOOT FLAG IF CHANGES *********************** +Function Set-CryptoSetting { + param ( + $regKeyName, + $value, + $valuedata, + $valuetype + ) + + $restart = $false + + # Check for existence of registry key, and create if it does not exist + If (!(Test-Path -Path $regKeyName)) { + New-Item $regKeyName | Out-Null + } + + + # Get data of registry value, or null if it does not exist + $val = (Get-ItemProperty -Path $regKeyName -Name $value -ErrorAction SilentlyContinue).$value + + + If ($val -eq $null) { + # Value does not exist - create and set to desired value + New-ItemProperty -Path $regKeyName -Name $value -Value $valuedata -PropertyType $valuetype | Out-Null + $restart = $true + } + Else { + # Value does exist - if not equal to desired value, change it + If ($val -ne $valuedata) { + Set-ItemProperty -Path $regKeyName -Name $value -Value $valuedata + $restart = $true + } + } + + + $restart +} +#*************************************************************************************************************** + + +#******************* FUNCTION THAT DISABLES RC4 *********************** +Function DisableRC4 { + + $restart = $false + $subkeys = Get-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" + $ciphers = $subkeys.OpenSubKey("Ciphers", $true) + + Write-Log -Message "----- Checking the status of RC4 -----" -Logfile $logLocation -Severity Information + + $RC4 = $false + if ($ciphers.SubKeyCount -eq 0) { + $k1 = $ciphers.CreateSubKey("RC4 128/128") + $k1.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) + $restart = $true + $k2 = $ciphers.CreateSubKey("RC4 64/128") + $k2.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) + $k3 = $ciphers.CreateSubKey("RC4 56/128") + $k3.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) + $k4 = $ciphers.CreateSubKey("RC4 40/128") + $k4.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) + + Write-Log -Message "RC4 was disabled " -Logfile $logLocation -Severity Information + $RC4 = $true + } + + If ($RC4 -ne $true) { + Write-Log -Message "There was no change for RC4 " -Logfile $logLocation -Severity Information + } + + $restart +} +#*************************************************************************************************************** + +#******************* FUNCTION CHECKS FOR PROBLEMATIC FIPS SETTING AND FIXES IT *********************** +Function Test-RegistryValueForFipsSettings { + + $restart = $false + + $fipsPath = @( + "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp", + "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services", + "HKLM:\System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration" + ) + + $fipsValue = "MinEncryptionLevel" + + + foreach ($path in $fipsPath) { + + Write-Log -Message "Checking to see if $($path)\$fipsValue exists" -Logfile $logLocation -Severity Information + + $ErrorActionPreference = "stop" + Try { + + $result = Get-ItemProperty -Path $path | Select-Object -ExpandProperty $fipsValue + if ($result -eq 4) { + set-itemproperty -Path $path -Name $fipsValue -value 3 + Write-Log -Message "Regkey $($path)\$fipsValue was changed from value $result to a value of 3" -Logfile $logLocation -Severity Information + $restart = $true + } + else { + Write-Log -Message "Regkey $($path)\$fipsValue left at value $result" -Logfile $logLocation -Severity Information + } + + } + Catch [System.Management.Automation.ItemNotFoundException] { + + Write-Log -Message "Reg path $path was not found" -Logfile $logLocation -Severity Information + } + Catch [System.Management.Automation.PSArgumentException] { + + Write-Log -Message "Regkey $($path)\$fipsValue was not found" -Logfile $logLocation -Severity Information + } + Catch { + Write-Log -Message "Error of type $($Error[0].Exception.GetType().FullName) trying to get $($path)\$fipsValue" -Logfile $logLocation -Severity Information + } + Finally {$ErrorActionPreference = "Continue" + } + } + $restart +} +#*************************************************************************************************************** + +#********************************** FUNCTION THAT CREATE LOG DIRECTORY IF IT DOES NOT EXIST ******************************* +function CreateLogDirectory { + + $TARGETDIR = "$env:HOMEDRIVE\Logs" + if ( -Not (Test-Path -Path $TARGETDIR ) ) { + New-Item -ItemType directory -Path $TARGETDIR | Out-Null + } + + $TARGETDIR = $TARGETDIR + "\" + "TLSSettingsLogFile.csv" + + return $TARGETDIR +} +#*************************************************************************************************************** + + +#********************************** FUNCTION THAT LOGS WHAT THE SCRIPT IS DOING ******************************* +function Write-Log { + [CmdletBinding()] + param( + [Parameter()] + [ValidateNotNullOrEmpty()] + [string]$Message, + + [Parameter()] + [ValidateNotNullOrEmpty()] + [string]$LogFile, + + [Parameter()] + [ValidateNotNullOrEmpty()] + [ValidateSet('Information', 'Warning', 'Error')] + [string]$Severity = 'Information' + ) + + + [pscustomobject]@{ + Time = (Get-Date -f g) + Message = $Message + Severity = $Severity + } | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append -FilePath $LogFile +} + +#********************************TLS CipherSuite Settings ******************************************* + +# CipherSuites for windows OS < 10 +function Get-BaseCipherSuitesOlderWindows() +{ + param + ( + [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder + ) + $cipherorder = @() + + if ($isExcellenceOrder -eq $true) + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256" + } + else + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384" + } + + # Add additional ciphers when EnableOlderTlsVersions flag is set to true + if ($EnableOlderTlsVersions) + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" + $cipherorder += "TLS_RSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_RSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA" + $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA" + } + return $cipherorder +} + +# Ciphersuites needed for backwards compatibility with Firefox, Chrome +# Server 2012 R2 doesn't support TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 +# Both firefox and chrome negotiate ECDHE_RSA_AES_256_CBC_SHA1, Edge negotiates ECDHE_RSA_AES_256_CBC_SHA384 +function Get-BrowserCompatCipherSuitesOlderWindows() +{ + param + ( + [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder + ) + $cipherorder = @() + + if ($isExcellenceOrder -eq $true) + { + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384" # (uses SHA-1) + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" # (uses SHA-1) + } + else + { + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" # (uses SHA-1) + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384" # (uses SHA-1) + } + return $cipherorder +} + +# Ciphersuites for OS versions windows 10 and above +function Get-BaseCipherSuitesWin10Above() +{ + param + ( + [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder + ) + + $cipherorder = @() + + if ($isExcellenceOrder -eq $true) + { + + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" + } + else + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" + } + # Add additional ciphers when EnableOlderTlsVersions flag is set to true + if ($EnableOlderTlsVersions) + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" + $cipherorder += "TLS_RSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_RSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA" + $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA" + } + + return $cipherorder +} + + +#******************************* TLS Version Settings **************************************************** + +function Get-RegKeyPathForTls12() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" + ) + return $regKeyPath +} + +function Get-RegKeyPathForTls11() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" + ) + return $regKeyPath +} + +function Get-RegKeypathForTls10() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" + ) + return $regKeyPath +} + +function Get-RegKeyPathForSsl30() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server" + ) + return $regKeyPath +} + +function Get-RegKeyPathForSsl20() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" + ) + return $regKeyPath +} + +#Initialize reboot value to false +$reboot = $false + +#*****************************Create the logfile if not does not exist*************************************** +$logLocation = CreateLogDirectory + + +#Start writing to the logs +Write-Log -Message "========== Start of logging for a script execution ==========" -Logfile $logLocation -Severity Information + +$registryPathGoodGuys = @() +$registryPathBadGuys = @() + +# we enable TLS 1.2 and disable SSL 2.0, 3.0 in any case +$registryPathGoodGuys += Get-RegKeyPathForTls12 + +$registryPathBadGuys += Get-RegKeyPathForSsl20 +$registryPathBadGuys += Get-RegKeyPathForSsl30 + +# add TLS 1.0/1.1 to good/bad depending on user's preference +# default is adding TLS 1.0/1.1 to bad +if ($EnableOlderTlsVersions) +{ + $registryPathGoodGuys += Get-RegKeypathForTls10 + $registryPathGoodGuys += Get-RegKeyPathForTls11 + Write-Log -Message "Enabling TLS1.2, TLS1.1, TLS1.0. Disabling SSL3.0, SSL2.0" -Logfile $logLocation -Severity Information +} +else +{ + $registryPathBadGuys += Get-RegKeypathForTls10 + $registryPathBadGuys += Get-RegKeyPathForTls11 + Write-Log -Message "Enabling TLS1.2. Disabling TLS1.1, TLS1.0, SSL3.0, SSL2.0" -Logfile $logLocation -Severity Information +} + + +Write-Log -Message "Check which registry keys exist already and which registry keys need to be created." -Logfile $logLocation -Severity Information + +#******************* CREATE THE REGISTRY KEYS IF THEY DON'T EXIST******************************** +# Check for existence of GoodGuy registry keys, and create if they do not exist +For ($i = 0; $i -lt $registryPathGoodGuys.Length; $i = $i + 1) { + + Write-Log -Message "Checking for existing of key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information + If (!(Test-Path -Path $registryPathGoodGuys[$i])) { + New-Item $registryPathGoodGuys[$i] | Out-Null + Write-Log -Message "Creating key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information + } +} + +# Check for existence of BadGuy registry keys, and create if they do not exist +For ($i = 0; $i -lt $registryPathBadGuys.Length; $i = $i + 1) { + + Write-Log -Message "Checking for existing of key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information + If (!(Test-Path -Path $registryPathBadGuys[$i])) { + Write-Log -Message "Creating key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information + New-Item $registryPathBadGuys[$i] | Out-Null + } +} + +#******************* EXPLICITLY DISABLE SSLV2, SSLV3, TLS10 AND TLS11 ******************************** +For ($i = 0; $i -lt $registryPathBadGuys.Length; $i = $i + 1) { + + if ($registryPathBadGuys[$i].Contains("Client") -Or $registryPathBadGuys[$i].Contains("Server")) { + + Write-Log -Message "Disabling this key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information + $result = Set-CryptoSetting $registryPathBadGuys[$i].ToString() Enabled 0 DWord + $result = Set-CryptoSetting $registryPathBadGuys[$i].ToString() DisabledByDefault 1 DWord + $reboot = $reboot -or $result + } +} + +#********************************* EXPLICITLY Enable TLS12 **************************************** +For ($i = 0; $i -lt $registryPathGoodGuys.Length; $i = $i + 1) { + + if ($registryPathGoodGuys[$i].Contains("Client") -Or $registryPathGoodGuys[$i].Contains("Server")) { + + Write-Log -Message "Enabling this key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information + $result = Set-CryptoSetting $registryPathGoodGuys[$i].ToString() Enabled 1 DWord + $result = Set-CryptoSetting $registryPathGoodGuys[$i].ToString() DisabledByDefault 0 DWord + $reboot = $reboot -or $result + } +} + +#************************************** Disable RC4 ************************************************ +$result = DisableRC4 +$reboot = $reboot -or $result + + +#************************************** Set Cipher Suite Order ************************************** +Write-Log -Message "----- starting ciphersuite order calculation -----" -Logfile $logLocation -Severity Information +$configureExcellenceOrder = $true +if ($SetCipherOrder.ToUpper() -eq "B") +{ + $configureExcellenceOrder = $false + Write-Host "The min bar cipher suite order was chosen." + Write-Log -Message "The min bar cipher suite order was chosen." -Logfile $logLocation -Severity Information +} +else +{ + Write-Host "The opportunity for excellence cipher suite order was chosen." + Write-Log -Message "The opportunity for excellence cipher suite order was chosen." -Logfile $logLocation -Severity Information +} +$cipherlist = @() + +if ([Environment]::OSVersion.Version.Major -lt 10) +{ + $cipherlist += Get-BaseCipherSuitesOlderWindows -isExcellenceOrder $configureExcellenceOrder + $cipherlist += Get-BrowserCompatCipherSuitesOlderWindows -isExcellenceOrder $configureExcellenceOrder +} +else +{ + $cipherlist += Get-BaseCipherSuitesWin10Above -isExcellenceOrder $configureExcellenceOrder +} +$cipherorder = [System.String]::Join(",", $cipherlist) + Write-Host "Appropriate ciphersuite order : $cipherorder" + Write-Log -Message "Appropriate ciphersuite order : $cipherorder" -Logfile $logLocation -Severity Information + +$CipherSuiteRegKey = "HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002" + +if (!(Test-Path -Path $CipherSuiteRegKey)) +{ + New-Item $CipherSuiteRegKey | Out-Null + $reboot = $True + Write-Log -Message "Creating key: $($CipherSuiteRegKey) " -Logfile $logLocation -Severity Information +} + +$val = (Get-Item -Path $CipherSuiteRegKey -ErrorAction SilentlyContinue).GetValue("Functions", $null) +Write-Log -Message "Previous cipher suite value: $val " -Logfile $logLocation -Severity Information +Write-Log -Message "New cipher suite value : $cipherorder " -Logfile $logLocation -Severity Information + +if ($val -ne $cipherorder) +{ + Write-Log -Message "Cipher suite order needs to be updated. " -Logfile $logLocation -Severity Information + Write-Host "The original cipher suite order needs to be updated", `n, $val + Set-ItemProperty -Path $CipherSuiteRegKey -Name Functions -Value $cipherorder + Write-Log -Message "Cipher suite value was updated. " -Logfile $logLocation -Severity Information + $reboot = $True +} +else +{ + Write-Log -Message "Cipher suite order does not need to be updated. " -Logfile $logLocation -Severity Information + Write-Log -Message "Cipher suite value was not updated as there was no change. " -Logfile $logLocation -Severity Information +} + +#****************************** CHECK THE FIPS SETTING WHICH IMPACTS RDP'S ALLOWED CIPHERS ************************** +#Check for FipsSettings +Write-Log -Message "Checking to see if reg keys exist and if MinEncryptionLevel is set to 4" -Logfile $logLocation -Severity Information +$result = Test-RegistryValueForFipsSettings +$reboot = $reboot -or $result + + +#************************************** REBOOT ************************************** + +if ($RebootIfRequired) +{ + Write-Log -Message "You set the RebootIfRequired flag to true. If changes are made, the system will reboot " -Logfile $logLocation -Severity Information + # If any settings were changed, reboot + If ($reboot) + { + Write-Log -Message "Rebooting now... " -Logfile $logLocation -Severity Information + Write-Log -Message "Using this command: shutdown.exe /r /t 5 /c ""Crypto settings changed"" /f /d p:2:4 " -Logfile $logLocation -Severity Information + Write-Host "Rebooting now..." + shutdown.exe /r /t 5 /c "Crypto settings changed" /f /d p:2:4 + } + Else + { + Write-Host "Nothing get updated." + Write-Log -Message "Nothing get updated. " -Logfile $logLocation -Severity Information + } +} +else +{ + + Write-Log -Message "You set the RebootIfRequired flag to false. If changes are made, the system will NOT reboot " -Logfile $logLocation -Severity Information + Write-Log -Message "No changes will take effect until a reboot has been completed. " -Logfile $logLocation -Severity Information + Write-Log -Message "Script does not include a reboot by design" -Logfile $logLocation -Severity Information +} +Write-Log -Message "========== End of logging for a script execution ==========" -Logfile $logLocation -Severity Information +# SIG # Begin signature block +# MIIjhgYJKoZIhvcNAQcCoIIjdzCCI3MCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAHtlEJwNffjnOP +# Sr2t1yq5EfE0ll4GozyZt3UXO9BXKKCCDYEwggX/MIID56ADAgECAhMzAAABh3IX +# chVZQMcJAAAAAAGHMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p +# bmcgUENBIDIwMTEwHhcNMjAwMzA0MTgzOTQ3WhcNMjEwMzAzMTgzOTQ3WjB0MQsw +# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u +# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQDOt8kLc7P3T7MKIhouYHewMFmnq8Ayu7FOhZCQabVwBp2VS4WyB2Qe4TQBT8aB +# znANDEPjHKNdPT8Xz5cNali6XHefS8i/WXtF0vSsP8NEv6mBHuA2p1fw2wB/F0dH +# sJ3GfZ5c0sPJjklsiYqPw59xJ54kM91IOgiO2OUzjNAljPibjCWfH7UzQ1TPHc4d +# weils8GEIrbBRb7IWwiObL12jWT4Yh71NQgvJ9Fn6+UhD9x2uk3dLj84vwt1NuFQ +# itKJxIV0fVsRNR3abQVOLqpDugbr0SzNL6o8xzOHL5OXiGGwg6ekiXA1/2XXY7yV +# Fc39tledDtZjSjNbex1zzwSXAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE +# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhov4ZyO96axkJdMjpzu2zVXOJcsw +# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 +# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDU4Mzg1MB8GA1UdIwQYMBaAFEhu +# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu +# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w +# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3 +# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx +# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAixmy +# S6E6vprWD9KFNIB9G5zyMuIjZAOuUJ1EK/Vlg6Fb3ZHXjjUwATKIcXbFuFC6Wr4K +# NrU4DY/sBVqmab5AC/je3bpUpjtxpEyqUqtPc30wEg/rO9vmKmqKoLPT37svc2NV +# BmGNl+85qO4fV/w7Cx7J0Bbqk19KcRNdjt6eKoTnTPHBHlVHQIHZpMxacbFOAkJr +# qAVkYZdz7ikNXTxV+GRb36tC4ByMNxE2DF7vFdvaiZP0CVZ5ByJ2gAhXMdK9+usx +# zVk913qKde1OAuWdv+rndqkAIm8fUlRnr4saSCg7cIbUwCCf116wUJ7EuJDg0vHe +# yhnCeHnBbyH3RZkHEi2ofmfgnFISJZDdMAeVZGVOh20Jp50XBzqokpPzeZ6zc1/g +# yILNyiVgE+RPkjnUQshd1f1PMgn3tns2Cz7bJiVUaqEO3n9qRFgy5JuLae6UweGf +# AeOo3dgLZxikKzYs3hDMaEtJq8IP71cX7QXe6lnMmXU/Hdfz2p897Zd+kU+vZvKI +# 3cwLfuVQgK2RZ2z+Kc3K3dRPz2rXycK5XCuRZmvGab/WbrZiC7wJQapgBodltMI5 +# GMdFrBg9IeF7/rP4EqVQXeKtevTlZXjpuNhhjuR+2DMt/dWufjXpiW91bo3aH6Ea +# jOALXmoxgltCp1K7hrS6gmsvj94cLRf50QQ4U8Qwggd6MIIFYqADAgECAgphDpDS +# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK +# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 +# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0 +# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla +# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS +# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT +# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG +# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S +# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz +# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7 +# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u +# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33 +# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl +# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP +# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB +# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF +# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM +# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ +# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud +# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO +# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0 +# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y +# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p +# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y +# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB +# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw +# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA +# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY +# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj +# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd +# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ +# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf +# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ +# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j +# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B +# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96 +# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7 +# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I +# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIVWzCCFVcCAQEwgZUwfjELMAkG +# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx +# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z +# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAYdyF3IVWUDHCQAAAAABhzAN +# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor +# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgOQvu7NUq +# wmve+qCoalj/s9HX5Hz9/zYISdJyOFTC4FIwQgYKKwYBBAGCNwIBDDE0MDKgFIAS +# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN +# BgkqhkiG9w0BAQEFAASCAQAHbtGz0AChe0qMPM3c7iU8BQCfJklePUlAlhwFSuCx +# careoloxao+ZtS+dQRlrxLu/ZSqtmJHNsyRoWzsHdOs65pwUYhV3svzaXd7pJwkc +# nbDXedLBbNuQrQrrL2xbGtzT3U+EwgpJ1TTEYwHgqkTFogIelGa2sjD5N+4Vvalq +# t+vxaYrWwkTtsm0qczLKGRUjJqCjARjviE1xsOvs4zwbpXx/bEs/6M7U9tR+w/DS +# nDY/5KAKYET0DCVDhmsMmzJi3xXdBr4sAz0484AAB0CIRVgPCgdgr8E0NQUESJzm +# xm3K4bMAgTMWRiGTL4MRYSuMIn09sbfYXP9hjXLvTV4YoYIS5TCCEuEGCisGAQQB +# gjcDAwExghLRMIISzQYJKoZIhvcNAQcCoIISvjCCEroCAQMxDzANBglghkgBZQME +# AgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMB +# MDEwDQYJYIZIAWUDBAIBBQAEIJBynrmlQmGS0UNGTk53HVKEc4aHvNdYrs5eCcHM +# puc5AgZfEgElnvMYEzIwMjAwNzI0MTgwNDM3Ljg3NlowBIACAfSggdCkgc0wgcox +# CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG +# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg +# SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg +# RVNOOkUwNDEtNEJFRS1GQTdFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt +# cCBzZXJ2aWNloIIOPDCCBPEwggPZoAMCAQICEzMAAAEHfjdomIdaN9YAAAAAAQcw +# DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0 +# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh +# dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcN +# MTkxMDA4MTczODM1WhcNMjEwMTAzMTczODM1WjCByjELMAkGA1UEBhMCVVMxCzAJ +# BgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg +# Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv +# bnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046RTA0MS00QkVFLUZB +# N0UxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIHNlcnZpY2UwggEiMA0G +# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUuqOUlbaeWirgwbCwhhNIOqTshpo+ +# QdSYxAt9JnkeulQFeKrQ6rOSECXxwgOjL/TNMIXtkig1MaifFON6si/Ri+AsV8Gu +# rQp4fylJzLDMFdJcGSpV3CGRdpDb0au8kNQLmnZuxLxAL91R7//3mH2QDQI20w3G +# 06s+Xv8+js9wQksXAfclXX1TJoBIx1Pi1FGqCnY3KlW81+Plhz0T4yStm1MgnqH4 +# RKYyPdcempCYC/BI04Ph2EJL+uQQfAfYdbf9vGqpKYjsuktnWr5uowD3H5At+x3l +# YH5rz4JCleKjeLpB/j74H7VZ0I5eTEbls9e2lEKaUzb9o0wjnjDc+t4BAgMBAAGj +# ggEbMIIBFzAdBgNVHQ4EFgQUNOHjlxlIJXMcP9n/0ogYdX8p6HcwHwYDVR0jBBgw +# FoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov +# L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGltU3RhUENB +# XzIwMTAtMDctMDEuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0 +# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAx +# MC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDAN +# BgkqhkiG9w0BAQsFAAOCAQEAGN3/7XWSzHGKjk444w+2q1D3k7Bh/ZahUvWHFJ6E +# UKU5vLzEGsdsgJSvWXHZDRrpf5rcUGQyjnlo1hAY1mDteNKFushS6bedxcxPHJje +# lVZ9N2/e5+/7zLu18YjnKw5bFu7dWqYBMI3J0FOr56XJOJ1KTtMiJhpxuib+FWy+ +# pyhVVgHGTUHuUdbE09dY9WxuRsbpb4DdWAWNrPDB6VAOO50QfEj+0tW+zF6h3RhB +# TI0ilj0+AzgXE+6DyJ7/br6aVvCEvNRJzE6akJnMyn/kzmC32LxvRZWKEwWDR0Fn +# zeXj5ynSStZ6iifTBP7gqiDsidguxh+BFX7HxhN1eHf7jTCCBnEwggRZoAMCAQIC +# CmEJgSoAAAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp +# ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIx +# NDY1NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV +# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG +# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF +# ++18aEssX8XD5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRD +# DNdNuDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSx +# z5NMksHEpl3RYRNuKMYa+YaAu99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1 +# rL2KQk1AUdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16Hgc +# sOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB +# 4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqF +# bVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD +# VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv +# cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB +# BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j +# ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCB +# kjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jv +# c29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQe +# MiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQA +# LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUx +# vs8F4qn++ldtGTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GAS +# inbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1 +# L3mBZdmptWvkx872ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWO +# M7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4 +# pm3S4Zz5Hfw42JT0xqUKloakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45 +# V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x +# 4QDf5zEHpJM692VHeOj4qEir995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEe +# gPsbiSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKn +# QqLJzxlBTeCG+SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp +# 3lfB0d4wwP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvT +# X4/edIhJEqGCAs4wggI3AgEBMIH4oYHQpIHNMIHKMQswCQYDVQQGEwJVUzELMAkG +# A1UECBMCV0ExEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD +# b3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9u +# cyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpFMDQxLTRCRUUtRkE3 +# RTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgc2VydmljZaIjCgEBMAcG +# BSsOAwIaAxUAwwu+tfgG3rC7RZrxuFO2CmZSfPiggYMwgYCkfjB8MQswCQYDVQQG +# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG +# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg +# VGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOLFEVUwIhgPMjAy +# MDA3MjQxNTUwNDVaGA8yMDIwMDcyNTE1NTA0NVowdzA9BgorBgEEAYRZCgQBMS8w +# LTAKAgUA4sURVQIBADAKAgEAAgIa9QIB/zAHAgEAAgIR9DAKAgUA4sZi1QIBADA2 +# BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIB +# AAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBADwvhE9bln801RR+oEXjtPJXTqtYMakR +# ymItUlO2HRorDqEv2SJR/V/kQjcsqS6ig54bOiKs0Il2fW/s/pi+x1ydJMpOyhM7 +# zzqm3acQ9kbYHIDoPWVT/Rq2Oo33Dq380zXENcc0hpLAKF3Cu06SbbNbqu+A/wbI +# z5IClz6kU8kiMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m +# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB +# IDIwMTACEzMAAAEHfjdomIdaN9YAAAAAAQcwDQYJYIZIAWUDBAIBBQCgggFKMBoG +# CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg6+NCew+c +# OhYIOzhUKofOF7MxtgOvSMWQCMCIWlTFNMgwgfoGCyqGSIb3DQEJEAIvMYHqMIHn +# MIHkMIG9BCBBYvCj4pFkwhumagATn0gLh9fdDNzImQkKNeOtRj/LHjCBmDCBgKR+ +# MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS +# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT +# HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABB343aJiHWjfWAAAA +# AAEHMCIEIGIH6vLdbEFNnxTxBhtIN7CtmhcKy/9m6/xoAA3LHzXUMA0GCSqGSIb3 +# DQEBCwUABIIBAKGg3zNulscnGBDlD6Q/U6yLQ5dN3gF9UrprgACiQ1gs/DexU7oC +# hjNZxBnH5RTA/7q9TFf2a1rBydHWVnqXuuQQJ0HuskdpXahxR4y1jboDdGwr7F08 +# v/gmPeeUik28Je72QZp5m/R0O61/kMQaDpLO9iPH0Z9iMGfqJonFPDeY4VX8Da2n +# cPY7mrv6YAI+ydZ+mUdBp2yjas7+/N8MntcNtAO0HpWFXQTAmb77RrSssfeZphRA +# mBD+gLx5C3q4uSmuOqaQxUaF0y8FeuetHp0bw2sfce6GlMXJwzTpC6HvXnaVtMy0 +# pgzd/KPHW7EgSvmRVKmvwiQGiZBoRG/Gcg8= +# SIG # End signature block diff --git a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 index 903ff5155d3aa8..ea393414c3c618 100644 --- a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 +++ b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 @@ -1,42 +1,42 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -# See https://learn.microsoft.com/visualstudio/releases/2022/release-history -# 17.13.0 -$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/45212da0-ea11-4612-bbff-cf4b802a1640/64a98e70906ade95e6a565687d6e92b3b37ed37633a029224cb2bde7cc073071/vs_Enterprise.exe' -$Workloads = @( - 'Microsoft.VisualStudio.Workload.NativeDesktop', - 'Microsoft.VisualStudio.Workload.Universal', - 'Microsoft.VisualStudio.Component.UWP.VC.ARM64', - 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64', - 'Microsoft.VisualStudio.Component.VC.Tools.ARM64', - 'Microsoft.VisualStudio.Component.VC.ASAN', - 'Microsoft.VisualStudio.Component.VC.ATL', - 'Microsoft.VisualStudio.Component.VC.ATLMFC', - 'Microsoft.VisualStudio.Component.VC.ATL.ARM64', - 'Microsoft.VisualStudio.Component.VC.MFC.ARM64', - 'Microsoft.VisualStudio.Component.Windows11SDK.26100', - 'Microsoft.VisualStudio.Component.Windows10SDK.20348', # As of 2024-11-15, CMake explicitly needs a Windows 10 SDK for Store - # These .NET parts are needed for easyhook, openni2 - 'Microsoft.Net.Component.4.8.SDK', - 'Microsoft.Net.Component.4.7.2.TargetingPack', - 'Microsoft.Component.NetFX.Native', - 'Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset', - 'Microsoft.VisualStudio.Component.VC.Llvm.Clang', - 'Microsoft.VisualStudio.ComponentGroup.UWP.VC.BuildTools', - 'Microsoft.VisualStudio.Component.VC.CMake.Project' -) - -$vsArgs = @('--quiet', '--norestart', '--wait', '--nocache') -foreach ($workload in $Workloads) { - $vsArgs += '--add' - $vsArgs += $workload -} - -DownloadAndInstall -Name 'Visual Studio' -Url $VisualStudioBootstrapperUrl -Args $vsArgs +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +# See https://learn.microsoft.com/visualstudio/releases/2022/release-history +# 17.13.0 +$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/45212da0-ea11-4612-bbff-cf4b802a1640/64a98e70906ade95e6a565687d6e92b3b37ed37633a029224cb2bde7cc073071/vs_Enterprise.exe' +$Workloads = @( + 'Microsoft.VisualStudio.Workload.NativeDesktop', + 'Microsoft.VisualStudio.Workload.Universal', + 'Microsoft.VisualStudio.Component.UWP.VC.ARM64', + 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64', + 'Microsoft.VisualStudio.Component.VC.Tools.ARM64', + 'Microsoft.VisualStudio.Component.VC.ASAN', + 'Microsoft.VisualStudio.Component.VC.ATL', + 'Microsoft.VisualStudio.Component.VC.ATLMFC', + 'Microsoft.VisualStudio.Component.VC.ATL.ARM64', + 'Microsoft.VisualStudio.Component.VC.MFC.ARM64', + 'Microsoft.VisualStudio.Component.Windows11SDK.26100', + 'Microsoft.VisualStudio.Component.Windows10SDK.20348', # As of 2024-11-15, CMake explicitly needs a Windows 10 SDK for Store + # These .NET parts are needed for easyhook, openni2 + 'Microsoft.Net.Component.4.8.SDK', + 'Microsoft.Net.Component.4.7.2.TargetingPack', + 'Microsoft.Component.NetFX.Native', + 'Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset', + 'Microsoft.VisualStudio.Component.VC.Llvm.Clang', + 'Microsoft.VisualStudio.ComponentGroup.UWP.VC.BuildTools', + 'Microsoft.VisualStudio.Component.VC.CMake.Project' +) + +$vsArgs = @('--quiet', '--norestart', '--wait', '--nocache') +foreach ($workload in $Workloads) { + $vsArgs += '--add' + $vsArgs += $workload +} + +DownloadAndInstall -Name 'Visual Studio' -Url $VisualStudioBootstrapperUrl -Args $vsArgs diff --git a/scripts/azure-pipelines/windows/disk-space.ps1 b/scripts/azure-pipelines/windows/disk-space.ps1 index 8680d770158c35..b3b408616ecde7 100644 --- a/scripts/azure-pipelines/windows/disk-space.ps1 +++ b/scripts/azure-pipelines/windows/disk-space.ps1 @@ -1,35 +1,35 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# - -<# -.SYNOPSIS -Prints total and free disk space for each disk on the system -#> - -Function Format-Size { - [CmdletBinding()] - Param([long]$Size) - - if ($Size -lt 1024) { - $Size = [int]$Size - return "$Size B" - } - - $Size = $Size / 1024 - if ($Size -lt 1024) { - $Size = [int]$Size - return "$Size KiB" - } - - $Size = $Size / 1024 - if ($Size -lt 1024) { - $Size = [int]$Size - return "$Size MiB" - } - - $Size = [int]($Size / 1024) - return "$Size GiB" -} - -Get-CimInstance -ClassName Win32_LogicalDisk | Format-Table -Property @{Label="Disk"; Expression={ $_.DeviceID }},@{Label="Label"; Expression={ $_.VolumeName }},@{Label="Size"; Expression={ Format-Size($_.Size) }},@{Label="Free Space"; Expression={ Format-Size($_.FreeSpace) }} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +<# +.SYNOPSIS +Prints total and free disk space for each disk on the system +#> + +Function Format-Size { + [CmdletBinding()] + Param([long]$Size) + + if ($Size -lt 1024) { + $Size = [int]$Size + return "$Size B" + } + + $Size = $Size / 1024 + if ($Size -lt 1024) { + $Size = [int]$Size + return "$Size KiB" + } + + $Size = $Size / 1024 + if ($Size -lt 1024) { + $Size = [int]$Size + return "$Size MiB" + } + + $Size = [int]($Size / 1024) + return "$Size GiB" +} + +Get-CimInstance -ClassName Win32_LogicalDisk | Format-Table -Property @{Label="Disk"; Expression={ $_.DeviceID }},@{Label="Label"; Expression={ $_.VolumeName }},@{Label="Size"; Expression={ Format-Size($_.Size) }},@{Label="Free Space"; Expression={ Format-Size($_.FreeSpace) }} diff --git a/scripts/azure-pipelines/windows/provision-entire-image.ps1 b/scripts/azure-pipelines/windows/provision-entire-image.ps1 index b77baf95fe6f1e..0b93c8f11027d5 100644 --- a/scripts/azure-pipelines/windows/provision-entire-image.ps1 +++ b/scripts/azure-pipelines/windows/provision-entire-image.ps1 @@ -1,20 +1,20 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -# This script runs all the scripts we run on Azure machines to deploy prerequisites, -# and assumes it is being run as an admin user. - -. "$PSScriptRoot\deploy-tlssettings.ps1" -RebootIfRequired 0 -. "$PSScriptRoot\deploy-visual-studio.ps1" -. "$PSScriptRoot\deploy-mpi.ps1" -. "$PSScriptRoot\deploy-cuda.ps1" -. "$PSScriptRoot\deploy-cudnn.ps1" -. "$PSScriptRoot\deploy-inteloneapi.ps1" -. "$PSScriptRoot\deploy-pwsh.ps1" -. "$PSScriptRoot\deploy-azure-cli.ps1" -try { - Copy-Item "$PSScriptRoot\deploy-settings.txt" "$PSScriptRoot\deploy-settings.ps1" - . "$PSScriptRoot\deploy-settings.ps1" -} finally { - Remove-Item "$PSScriptRoot\deploy-settings.ps1" -} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +# This script runs all the scripts we run on Azure machines to deploy prerequisites, +# and assumes it is being run as an admin user. + +. "$PSScriptRoot\deploy-tlssettings.ps1" -RebootIfRequired 0 +. "$PSScriptRoot\deploy-visual-studio.ps1" +. "$PSScriptRoot\deploy-mpi.ps1" +. "$PSScriptRoot\deploy-cuda.ps1" +. "$PSScriptRoot\deploy-cudnn.ps1" +. "$PSScriptRoot\deploy-inteloneapi.ps1" +. "$PSScriptRoot\deploy-pwsh.ps1" +. "$PSScriptRoot\deploy-azure-cli.ps1" +try { + Copy-Item "$PSScriptRoot\deploy-settings.txt" "$PSScriptRoot\deploy-settings.ps1" + . "$PSScriptRoot\deploy-settings.ps1" +} finally { + Remove-Item "$PSScriptRoot\deploy-settings.ps1" +} diff --git a/scripts/azure-pipelines/windows/sysprep.ps1 b/scripts/azure-pipelines/windows/sysprep.ps1 index 74af5cb2a94373..2af2ae9fa103d0 100644 --- a/scripts/azure-pipelines/windows/sysprep.ps1 +++ b/scripts/azure-pipelines/windows/sysprep.ps1 @@ -1,19 +1,19 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT -# - -param([string]$SasToken) - -<# -.SYNOPSIS -Prepares the virtual machine for imaging. - -.DESCRIPTION -Runs the `sysprep` utility to prepare the system for imaging. -See https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--system-preparation--overview -for more information. -#> - -$ErrorActionPreference = 'Stop' -Write-Host 'Running sysprep' -& C:\Windows\system32\sysprep\sysprep.exe /oobe /generalize /mode:vm /shutdown +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +param([string]$SasToken) + +<# +.SYNOPSIS +Prepares the virtual machine for imaging. + +.DESCRIPTION +Runs the `sysprep` utility to prepare the system for imaging. +See https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--system-preparation--overview +for more information. +#> + +$ErrorActionPreference = 'Stop' +Write-Host 'Running sysprep' +& C:\Windows\system32\sysprep\sysprep.exe /oobe /generalize /mode:vm /shutdown diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index 5b86144b6ac646..2e0b0f0ad2e92b 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -1,156 +1,156 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -<# -.SYNOPSIS -Gets a random file path in the temp directory. - -.DESCRIPTION -Get-TempFilePath takes an extension, and returns a path with a random -filename component in the temporary directory with that extension. - -.PARAMETER Extension -The extension to use for the path. -#> -Function Get-TempFilePath { - Param( - [String]$Extension - ) - - $tempPath = [System.IO.Path]::GetTempPath() - $tempName = [System.IO.Path]::GetRandomFileName() - if (-not [String]::IsNullOrWhiteSpace($Extension)) { - $tempName = $tempName + '.' + $Extension - } - return Join-Path $tempPath $tempName -} - -<# -.SYNOPSIS -Download and install a component. - -.DESCRIPTION -DownloadAndInstall downloads an executable from the given URL, and runs it with the given command-line arguments. - -.PARAMETER Name -The name of the component, to be displayed in logging messages. - -.PARAMETER Url -The URL of the installer. - -.PARAMETER Args -The command-line arguments to pass to the installer. -#> -Function DownloadAndInstall { - [CmdletBinding(PositionalBinding=$false)] - Param( - [Parameter(Mandatory)][String]$Name, - [Parameter(Mandatory)][String]$Url, - [Parameter(Mandatory)][String[]]$Args, - [String]$LocalName = $null - ) - - try { - if ([string]::IsNullOrWhiteSpace($LocalName)) { - $LocalName = [uri]::new($Url).Segments[-1] - } - - [bool]$doRemove = $false - [string]$LocalPath = Join-Path $PSScriptRoot $LocalName - if (Test-Path $LocalPath) { - Write-Host "Using local $Name..." - } else { - Write-Host "Downloading $Name..." - $tempPath = Get-TempFilePath - New-Item -ItemType Directory -Path $tempPath -Force | Out-Null - $LocalPath = Join-Path $tempPath $LocalName - curl.exe --fail -L -o $LocalPath $Url - if (-Not $?) { - Write-Error 'Download failed!' - } - $doRemove = $true - } - - Write-Host "Installing $Name..." - $proc = Start-Process -FilePath $LocalPath -ArgumentList $Args -Wait -PassThru - $exitCode = $proc.ExitCode - - if ($exitCode -eq 0) { - Write-Host 'Installation successful!' - } elseif ($exitCode -eq 3010) { - Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).' - } else { - Write-Error "Installation failed! Exited with $exitCode." - } - - if ($doRemove) { - Remove-Item -Path $LocalPath -Force - } - } catch { - Write-Error "Installation failed! Exception: $($_.Exception.Message)" - } -} - -<# -.SYNOPSIS -Download and install a zip file component. - -.DESCRIPTION -DownloadAndUnzip downloads a zip from the given URL, and extracts it to the indicated path. - -.PARAMETER Name -The name of the component, to be displayed in logging messages. - -.PARAMETER Url -The URL of the zip to download. - -.PARAMETER Destination -The location to which the zip should be extracted -#> -Function DownloadAndUnzip { - [CmdletBinding(PositionalBinding=$false)] - Param( - [Parameter(Mandatory)][String]$Name, - [Parameter(Mandatory)][String]$Url, - [Parameter(Mandatory)][String]$Destination - ) - - try { - $fileName = [uri]::new($Url).Segments[-1] - if ([string]::IsNullOrWhiteSpace($LocalName)) { - $LocalName = $fileName - } - - [string]$zipPath - [bool]$doRemove = $false - [string]$LocalPath = Join-Path $PSScriptRoot $LocalName - if (Test-Path $LocalPath) { - Write-Host "Using local $Name..." - $zipPath = $LocalPath - } else { - $tempPath = Get-TempFilePath - New-Item -ItemType Directory -Path $tempPath -Force | Out-Null - $zipPath = Join-Path $tempPath $LocalName - Write-Host "Downloading $Name ( $Url -> $zipPath )..." - curl.exe --fail -L -o $zipPath $Url - if (-Not $?) { - Write-Error 'Download failed!' - } - $doRemove = $true - } - - Write-Host "Installing $Name to $Destination..." - & tar.exe -xvf $zipPath --strip 1 --directory $Destination - if ($LASTEXITCODE -eq 0) { - Write-Host 'Installation successful!' - } else { - Write-Error "Installation failed! Exited with $LASTEXITCODE." - } - - if ($doRemove) { - Remove-Item -Path $zipPath -Force - } - } catch { - Write-Error "Installation failed! Exception: $($_.Exception.Message)" - } -} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +<# +.SYNOPSIS +Gets a random file path in the temp directory. + +.DESCRIPTION +Get-TempFilePath takes an extension, and returns a path with a random +filename component in the temporary directory with that extension. + +.PARAMETER Extension +The extension to use for the path. +#> +Function Get-TempFilePath { + Param( + [String]$Extension + ) + + $tempPath = [System.IO.Path]::GetTempPath() + $tempName = [System.IO.Path]::GetRandomFileName() + if (-not [String]::IsNullOrWhiteSpace($Extension)) { + $tempName = $tempName + '.' + $Extension + } + return Join-Path $tempPath $tempName +} + +<# +.SYNOPSIS +Download and install a component. + +.DESCRIPTION +DownloadAndInstall downloads an executable from the given URL, and runs it with the given command-line arguments. + +.PARAMETER Name +The name of the component, to be displayed in logging messages. + +.PARAMETER Url +The URL of the installer. + +.PARAMETER Args +The command-line arguments to pass to the installer. +#> +Function DownloadAndInstall { + [CmdletBinding(PositionalBinding=$false)] + Param( + [Parameter(Mandatory)][String]$Name, + [Parameter(Mandatory)][String]$Url, + [Parameter(Mandatory)][String[]]$Args, + [String]$LocalName = $null + ) + + try { + if ([string]::IsNullOrWhiteSpace($LocalName)) { + $LocalName = [uri]::new($Url).Segments[-1] + } + + [bool]$doRemove = $false + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + if (Test-Path $LocalPath) { + Write-Host "Using local $Name..." + } else { + Write-Host "Downloading $Name..." + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force | Out-Null + $LocalPath = Join-Path $tempPath $LocalName + curl.exe --fail -L -o $LocalPath $Url + if (-Not $?) { + Write-Error 'Download failed!' + } + $doRemove = $true + } + + Write-Host "Installing $Name..." + $proc = Start-Process -FilePath $LocalPath -ArgumentList $Args -Wait -PassThru + $exitCode = $proc.ExitCode + + if ($exitCode -eq 0) { + Write-Host 'Installation successful!' + } elseif ($exitCode -eq 3010) { + Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).' + } else { + Write-Error "Installation failed! Exited with $exitCode." + } + + if ($doRemove) { + Remove-Item -Path $LocalPath -Force + } + } catch { + Write-Error "Installation failed! Exception: $($_.Exception.Message)" + } +} + +<# +.SYNOPSIS +Download and install a zip file component. + +.DESCRIPTION +DownloadAndUnzip downloads a zip from the given URL, and extracts it to the indicated path. + +.PARAMETER Name +The name of the component, to be displayed in logging messages. + +.PARAMETER Url +The URL of the zip to download. + +.PARAMETER Destination +The location to which the zip should be extracted +#> +Function DownloadAndUnzip { + [CmdletBinding(PositionalBinding=$false)] + Param( + [Parameter(Mandatory)][String]$Name, + [Parameter(Mandatory)][String]$Url, + [Parameter(Mandatory)][String]$Destination + ) + + try { + $fileName = [uri]::new($Url).Segments[-1] + if ([string]::IsNullOrWhiteSpace($LocalName)) { + $LocalName = $fileName + } + + [string]$zipPath + [bool]$doRemove = $false + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + if (Test-Path $LocalPath) { + Write-Host "Using local $Name..." + $zipPath = $LocalPath + } else { + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force | Out-Null + $zipPath = Join-Path $tempPath $LocalName + Write-Host "Downloading $Name ( $Url -> $zipPath )..." + curl.exe --fail -L -o $zipPath $Url + if (-Not $?) { + Write-Error 'Download failed!' + } + $doRemove = $true + } + + Write-Host "Installing $Name to $Destination..." + & tar.exe -xvf $zipPath --strip 1 --directory $Destination + if ($LASTEXITCODE -eq 0) { + Write-Host 'Installation successful!' + } else { + Write-Error "Installation failed! Exited with $LASTEXITCODE." + } + + if ($doRemove) { + Remove-Item -Path $zipPath -Force + } + } catch { + Write-Error "Installation failed! Exception: $($_.Exception.Message)" + } +} diff --git a/scripts/azure-pipelines/windows/validate-version-files.ps1 b/scripts/azure-pipelines/windows/validate-version-files.ps1 index 1bcb05a7bd81a8..32b9ba751ae29c 100644 --- a/scripts/azure-pipelines/windows/validate-version-files.ps1 +++ b/scripts/azure-pipelines/windows/validate-version-files.ps1 @@ -1,29 +1,29 @@ -./vcpkg.exe --feature-flags=versions x-ci-verify-versions --verbose | -ForEach-Object -Begin { - $long_error = '' -} -Process { - if ($long_error -ne '' -and $_ -match '^$|^ ') { - # Extend multi-line message - $long_error = -join($long_error, "%0D%0A", $_ -replace '^ ','' ` - -replace '(git add) [^ ]*\\ports\\([^ ]*)', '$1 ports/$2' ) - } else { - if ($long_error -ne '') { - # Flush multi-line message - $long_error - $long_error = '' - } - if ($_ -match '^Error: ') { - # Start multi-line message - $long_error = $_ -replace '^Error: ', '##vso[task.logissue type=error]' ` - -replace '(^##vso[^\]]*)](.*) [^ ]*\\versions\\(.-)\\(.*.json)(.*)', '$1;sourcepath=versions/$3/$4;linenumber=2]$2 version/$3/$4$5' - } else { - # Normal line - $_ - } - } -} -End { - if ($long_error -ne '') { - # Flush multi-line message - $long_error - } -} +./vcpkg.exe --feature-flags=versions x-ci-verify-versions --verbose | +ForEach-Object -Begin { + $long_error = '' +} -Process { + if ($long_error -ne '' -and $_ -match '^$|^ ') { + # Extend multi-line message + $long_error = -join($long_error, "%0D%0A", $_ -replace '^ ','' ` + -replace '(git add) [^ ]*\\ports\\([^ ]*)', '$1 ports/$2' ) + } else { + if ($long_error -ne '') { + # Flush multi-line message + $long_error + $long_error = '' + } + if ($_ -match '^Error: ') { + # Start multi-line message + $long_error = $_ -replace '^Error: ', '##vso[task.logissue type=error]' ` + -replace '(^##vso[^\]]*)](.*) [^ ]*\\versions\\(.-)\\(.*.json)(.*)', '$1;sourcepath=versions/$3/$4;linenumber=2]$2 version/$3/$4$5' + } else { + # Normal line + $_ + } + } +} -End { + if ($long_error -ne '') { + # Flush multi-line message + $long_error + } +} From 3871c2889d73a6efbc4cc3853f036f80c4df9da5 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 14 Feb 2025 14:35:07 -0800 Subject: [PATCH 10/24] Update Windows pool. --- scripts/azure-pipelines/windows-unstable/azure-pipelines.yml | 2 +- scripts/azure-pipelines/windows/azure-pipelines.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml b/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml index bdc3db7bcb130f..a4b603778ecc4f 100644 --- a/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml +++ b/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml @@ -6,7 +6,7 @@ jobs: - job: x64_windows pool: name: vcpkg-testing-msvc - demands: ImageVersionOverride -equals 2025.01.21 + demands: ImageVersionOverride -equals 2025.02.14 workspace: clean: resources timeoutInMinutes: 2880 # 2 days diff --git a/scripts/azure-pipelines/windows/azure-pipelines.yml b/scripts/azure-pipelines/windows/azure-pipelines.yml index fe02a3a17d1bff..2b9d993286e4db 100644 --- a/scripts/azure-pipelines/windows/azure-pipelines.yml +++ b/scripts/azure-pipelines/windows/azure-pipelines.yml @@ -20,7 +20,7 @@ jobs: condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) pool: name: PrWin-WUS - demands: ImageVersionOverride -equals 2025.01.21 + demands: ImageVersionOverride -equals 2025.02.14 workspace: clean: resources timeoutInMinutes: 2880 # 2 days From a62a1bf7f586c79dc3da8a18c4253f608a888c4d Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 14 Feb 2025 17:47:48 -0800 Subject: [PATCH 11/24] Update Android Image. --- scripts/azure-pipelines/android/azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/azure-pipelines/android/azure-pipelines.yml b/scripts/azure-pipelines/android/azure-pipelines.yml index ae312fd38681d5..5ad9e9a49ca8c9 100644 --- a/scripts/azure-pipelines/android/azure-pipelines.yml +++ b/scripts/azure-pipelines/android/azure-pipelines.yml @@ -27,7 +27,7 @@ jobs: - name: ANDROID_NDK_HOME value: /android-ndk-r27c - name: ANDROID_DOCKER_IMAGE - value: 'vcpkgandroidwus.azurecr.io/vcpkg-android:2025-01-20' + value: 'vcpkgandroidwus.azurecr.io/vcpkg-android:2025-02-14' steps: # Note: /mnt is the Azure machines' temporary disk. - bash: | From 4a2f9bf4a884604c83f05634139077387dc0c8f4 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 18 Feb 2025 12:55:36 -0800 Subject: [PATCH 12/24] [saucer] Remove from fail list. --- scripts/ci.baseline.txt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 664f3cb3b2ad29..4036e46f111e4b 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -1004,15 +1004,6 @@ rtmidi:arm-neon-android=fail rtmidi:arm64-android=fail rtmidi:x64-android=fail salome-medcoupling:x64-linux=fail -# Visual Studio 17.12 compiler bug, fixed in 17.13: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/2242053 -saucer:arm64-windows-static-md=fail -saucer:arm64-windows-static-md=fail -saucer:arm64-windows=fail -saucer:arm64-windows=fail -saucer:x64-windows-static-md=fail -saucer:x64-windows-static=fail -saucer:x64-windows=fail -saucer:x86-windows=fail scintilla:arm-neon-android=fail scintilla:arm64-android=fail scintilla:x64-android=fail From bb3151352704da9266fdbe2651e9c39132098e18 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 18 Feb 2025 12:56:10 -0800 Subject: [PATCH 13/24] popsift:x64-linux: Remove from fail list. --- scripts/ci.baseline.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 4036e46f111e4b..c9039922b4c7ee 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -901,7 +901,6 @@ pmdk:x64-android=fail pmdk:x64-osx=fail pmdk:x64-windows-static=fail popsift:x64-windows-static-md=fail -popsift:x64-linux=fail # segfaults :( ptex:arm-neon-android=fail ptex:arm64-android=fail ptex:x64-android=fail From eef61f2aa6ecc1b00edf4d53b6448ee246a5c095 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 18 Feb 2025 13:30:26 -0800 Subject: [PATCH 14/24] [bcg729] Remove unnecessary stdint.h that caused failures on all arm64 platforms. --- ports/bcg729/portfile.cmake | 3 +++ ports/bcg729/vcpkg.json | 2 +- versions/b-/bcg729.json | 5 +++++ versions/baseline.json | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ports/bcg729/portfile.cmake b/ports/bcg729/portfile.cmake index 02b510a5bf9876..3400fa3b99921b 100644 --- a/ports/bcg729/portfile.cmake +++ b/ports/bcg729/portfile.cmake @@ -8,6 +8,9 @@ vcpkg_from_github( disable-alt-packaging.patch ) +# Already removed upstream: https://github.com/BelledonneCommunications/bcg729/pull/19 +file(REMOVE "${SOURCE_PATH}/include/MSVC/stdint.h") + string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" ENABLE_STATIC) string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" ENABLE_SHARED) diff --git a/ports/bcg729/vcpkg.json b/ports/bcg729/vcpkg.json index 4a08dcd9cc7355..967d9974053191 100644 --- a/ports/bcg729/vcpkg.json +++ b/ports/bcg729/vcpkg.json @@ -1,7 +1,7 @@ { "name": "bcg729", "version": "1.1.1", - "port-version": 3, + "port-version": 4, "description": "Bcg729 is an open source implementation of the ITU G.729 Annex A and B codec.", "homepage": "https://github.com/BelledonneCommunications/bcg729", "dependencies": [ diff --git a/versions/b-/bcg729.json b/versions/b-/bcg729.json index ce2969ea11a1a0..5b6808ba88d20a 100644 --- a/versions/b-/bcg729.json +++ b/versions/b-/bcg729.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "00204704e4e35484bdbac4856b5d6891cdc7d211", + "version": "1.1.1", + "port-version": 4 + }, { "git-tree": "f3ab650b9aee68c1967ab35c8890ffcfd721b485", "version": "1.1.1", diff --git a/versions/baseline.json b/versions/baseline.json index 9224dec7a823ba..8cb8c031583ea8 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -574,7 +574,7 @@ }, "bcg729": { "baseline": "1.1.1", - "port-version": 3 + "port-version": 4 }, "bddisasm": { "baseline": "2.2.0", From 90ee0c90cb6823321792bd2c072ff2c1450dac9d Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 18 Feb 2025 16:47:25 -0800 Subject: [PATCH 15/24] ci.baseline.txt: Skip ports that hate __n64 __uint64x1_t_to_n64(uint64x1_t) This is due to a problem with . Sorry @cenit ! C:\PROGRA~1\MICROS~1\2022\ENTERP~1\VC\Tools\MSVC\1443~1.348\bin\Hostx64\arm64\cl.exe /TP -external:ID:\installed\arm64-windows\include -external:W0 /nologo /DWIN32 /D_WINDOWS /utf-8 /GR /EHsc /MP /MDd /Z7 /Ob0 /Od /RTC1 -MDd -MP -GR- -GF -Zc:__cplusplus -Zc:inline -Zc:strictStrings -Zc:threadSafeInit- -W4 -Zc:arm64-aliased-neon-types- -GS /showIncludes /FoCMakeFiles\blend2d.dir\src\blend2d\matrix_avx.cpp.obj /FdCMakeFiles\blend2d.dir\ /FS -c D:\b\blend2d\src\35679d7f82-3427ecd9ab.clean\src\blend2d\matrix_avx.cpp cl : Command line warning D9025 : overriding '/GR' with '/GR-' C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\ucrt\wchar.h(254): error C2664: '__n64 __uint64x1_t_to_n64(uint64x1_t)': cannot convert argument 1 from 'uint16x4_t' to 'uint64x1_t' C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\ucrt\wchar.h(254): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\arm64_neon.h(1957): note: see declaration of '__uint64x1_t_to_n64' C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\ucrt\wchar.h(254): note: while trying to match the argument list '(uint16x4_t)' C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\ucrt\wchar.h(381): error C2664: '__n64 __uint64x1_t_to_n64(uint64x1_t)': cannot convert argument 1 from 'uint16x4_t' to 'uint64x1_t' C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\ucrt\wchar.h(381): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.43.34808\include\arm64_neon.h(1957): note: see declaration of '__uint64x1_t_to_n64' C:\Program Files (x86)\Windows Kits\10\include\10.0.26100.0\ucrt\wchar.h(381): note: while trying to match the argument list '(uint16x4_t)' --- scripts/ci.baseline.txt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index c9039922b4c7ee..ab60f69bcbce0d 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -139,6 +139,10 @@ lapack-reference:x64-uwp=skip #openblas:x64-windows-static=skip # ################################################################ +# Bug in VS2022 17.13 where breaks with -Zc:arm64-aliased-neon-types- +blend2d:arm64-uwp=fail +blend2d:arm64-windows=fail +blend2d:arm64-windows-static-md=fail blitz:x64-android=fail boinc:arm-neon-android=fail boinc:arm64-android=fail @@ -1356,9 +1360,13 @@ vcpkg-ci-mathgl:x86-windows=pass vcpkg-ci-opencv:arm-neon-android=pass vcpkg-ci-opencv:arm64-android=pass vcpkg-ci-opencv:arm64-osx=pass -vcpkg-ci-opencv:arm64-uwp=pass -vcpkg-ci-opencv:arm64-windows-static-md=pass -vcpkg-ci-opencv:arm64-windows=pass +# Incorrect use of arm64 intrinsics in in VS 2022 17.13 broke these with -Zc:arm64-aliased-neon-types- +#vcpkg-ci-opencv:arm64-uwp=pass +opencv4:arm64-uwp=fail +#vcpkg-ci-opencv:arm64-windows-static-md=pass +opencv4:arm64-windows-static-md=fail +#vcpkg-ci-opencv:arm64-windows=pass +opencv4:arm64-windows=fail vcpkg-ci-opencv:x64-android=pass vcpkg-ci-opencv:x64-linux=pass vcpkg-ci-opencv:x64-osx=pass From e25c2dc236c5a239a9d1262357a9325e31f99a2f Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 18 Feb 2025 17:11:28 -0800 Subject: [PATCH 16/24] [graphviz] Workaround insufficiently _Ugly wchar.h VS2022 17.13's , in the definition of wmemchr, has: wchar_t const* S = _S; which conflicts with graphviz #define S 03 /* STRING */ I filed a bug to fix to be sufficiently _Ugly but this works around the problem for now. --- ports/graphviz/portfile.cmake | 1 + ports/graphviz/vcpkg.json | 2 +- .../workaround-insufficiently-ugly-wchar-h.patch | 12 ++++++++++++ versions/baseline.json | 2 +- versions/g-/graphviz.json | 5 +++++ 5 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 ports/graphviz/workaround-insufficiently-ugly-wchar-h.patch diff --git a/ports/graphviz/portfile.cmake b/ports/graphviz/portfile.cmake index 45a2dd7b716f22..93c6a82d7aec2a 100644 --- a/ports/graphviz/portfile.cmake +++ b/ports/graphviz/portfile.cmake @@ -15,6 +15,7 @@ vcpkg_from_gitlab( select-plugins.patch static-linkage.patch webp-install.patch + workaround-insufficiently-ugly-wchar-h.patch # Avoids conflict between #define S and VS2022 17.13's ) vcpkg_list(SET OPTIONS) diff --git a/ports/graphviz/vcpkg.json b/ports/graphviz/vcpkg.json index 3ef8af4cabd2f2..40444a9f5caff3 100644 --- a/ports/graphviz/vcpkg.json +++ b/ports/graphviz/vcpkg.json @@ -1,7 +1,7 @@ { "name": "graphviz", "version-semver": "10.0.1", - "port-version": 2, + "port-version": 3, "description": "Graph Visualization Tools", "homepage": "https://graphviz.org/", "license": "EPL-1.0", diff --git a/ports/graphviz/workaround-insufficiently-ugly-wchar-h.patch b/ports/graphviz/workaround-insufficiently-ugly-wchar-h.patch new file mode 100644 index 00000000000000..f4d8a974e3f629 --- /dev/null +++ b/ports/graphviz/workaround-insufficiently-ugly-wchar-h.patch @@ -0,0 +1,12 @@ +diff --git a/lib/expr/expr.h b/lib/expr/expr.h +index 3d7fbd6..d6cfb53 100644 +--- a/lib/expr/expr.h ++++ b/lib/expr/expr.h +@@ -36,6 +36,7 @@ extern "C" { + #include + #include + #include ++#include + + #define EX_VERSION 20000101L + diff --git a/versions/baseline.json b/versions/baseline.json index 8cb8c031583ea8..047154e3231053 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -3270,7 +3270,7 @@ }, "graphviz": { "baseline": "10.0.1", - "port-version": 2 + "port-version": 3 }, "greatest": { "baseline": "1.5.0", diff --git a/versions/g-/graphviz.json b/versions/g-/graphviz.json index 70428e06fad77f..fb7ca45ec08fb8 100644 --- a/versions/g-/graphviz.json +++ b/versions/g-/graphviz.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "3e9c7044c50ed9e178cba90b5b1dd3ae2ea5899e", + "version-semver": "10.0.1", + "port-version": 3 + }, { "git-tree": "955a22b12fa97eaa166e57071bc5455bf7a191fb", "version-semver": "10.0.1", From bb2f47f3af050af0665fcf1b94406ea432551e51 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 18 Feb 2025 18:06:04 -0800 Subject: [PATCH 17/24] [lcm] Avoid fake stdint.h. Also filed https://github.com/lcm-proj/lcm/pull/563 --- ports/lcm/avoid-fake-stdint-h.patch | 24 ++++++++++++++++++++++++ ports/lcm/portfile.cmake | 4 ++++ ports/lcm/vcpkg.json | 2 +- versions/baseline.json | 2 +- versions/l-/lcm.json | 5 +++++ 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 ports/lcm/avoid-fake-stdint-h.patch diff --git a/ports/lcm/avoid-fake-stdint-h.patch b/ports/lcm/avoid-fake-stdint-h.patch new file mode 100644 index 00000000000000..7290c6ae5be5c1 --- /dev/null +++ b/ports/lcm/avoid-fake-stdint-h.patch @@ -0,0 +1,24 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 90833e3..2b7cff8 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -17,7 +17,6 @@ include(lcm-cmake/version.cmake) + set(CMAKE_INCLUDE_CURRENT_DIR ON) + if (WIN32) + add_definitions(-DWIN32 -D_CRT_SECURE_NO_WARNINGS) +- include_directories(${lcm_SOURCE_DIR}/WinSpecific/include) + include_directories(${lcm_SOURCE_DIR}/WinSpecific/getopt) + include_directories(${lcm_SOURCE_DIR}) + add_subdirectory(WinSpecific) +diff --git a/lcm-python/setup.py b/lcm-python/setup.py +index e015d20..2528d9f 100644 +--- a/lcm-python/setup.py ++++ b/lcm-python/setup.py +@@ -47,7 +47,6 @@ if os.name == 'nt': + sys.exit('GLIB_PATH environment variable not set.') + + include_dirs += [ \ +- os.path.join("..", "WinSpecific\include"), + os.path.join("..", "WinSpecific"), + os.path.join(glibPath, "include", "glib-2.0"), + os.path.join(glibPath, "lib", "glib-2.0", "include") ] diff --git a/ports/lcm/portfile.cmake b/ports/lcm/portfile.cmake index 6b5246b3b9968e..be6a4cee1896ba 100644 --- a/ports/lcm/portfile.cmake +++ b/ports/lcm/portfile.cmake @@ -9,8 +9,12 @@ vcpkg_from_github( fix-build-error.patch glib.link.patch disable-docs.patch + avoid-fake-stdint-h.patch # https://github.com/lcm-proj/lcm/pull/563 ) +# Remove fake stdint.h that conficts with the real one in VS2022 17.13 targeting arm64 +file(REMOVE "${SOURCE_PATH}/WinSpecific/include/inttypes.h" "${SOURCE_PATH}/WinSpecific/include/stdint.h") + vcpkg_cmake_configure( SOURCE_PATH "${SOURCE_PATH}" OPTIONS diff --git a/ports/lcm/vcpkg.json b/ports/lcm/vcpkg.json index 3a0666e9a2c520..7538e5c48be426 100644 --- a/ports/lcm/vcpkg.json +++ b/ports/lcm/vcpkg.json @@ -1,7 +1,7 @@ { "name": "lcm", "version": "1.4.0", - "port-version": 6, + "port-version": 7, "description": [ "Lightweight Communications and Marshalling (LCM)", "LCM is a set of libraries and tools for message passing and data marshalling, targeted at real-time systems where high-bandwidth and low latency are critical. It provides a publish/subscribe message passing model and automatic marshalling/unmarshalling code generation with bindings for applications in a variety of programming languages." diff --git a/versions/baseline.json b/versions/baseline.json index 047154e3231053..8393b96ebf2157 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -4226,7 +4226,7 @@ }, "lcm": { "baseline": "1.4.0", - "port-version": 6 + "port-version": 7 }, "lcms": { "baseline": "2.16", diff --git a/versions/l-/lcm.json b/versions/l-/lcm.json index 7d1c87cb9b3f92..03007972240fbf 100644 --- a/versions/l-/lcm.json +++ b/versions/l-/lcm.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "38f103e81adb06b1836fef85e22d61ca409e1ec4", + "version": "1.4.0", + "port-version": 7 + }, { "git-tree": "b282016c7e5f1aacff821854e8fab52d64b4c970", "version": "1.4.0", From 25d6b34828d2dc1be923b3bb30b3764b4a54fe9a Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 18 Feb 2025 18:34:28 -0800 Subject: [PATCH 18/24] Fix incorrect vcpkg-ci-openmageio=pass entries. (Drive by fix of https://github.com/microsoft/vcpkg/pull/43555#discussion_r1957841970 ) --- scripts/ci.baseline.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index ab60f69bcbce0d..e05a6f8064ddc7 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -1376,13 +1376,13 @@ vcpkg-ci-opencv:x64-windows-static-md=pass vcpkg-ci-opencv:x64-windows-static=pass vcpkg-ci-opencv:x64-windows=pass vcpkg-ci-opencv:x86-windows=pass -vcpkg-ci-openimageio:x86-windows=pass -vcpkg-ci-openimageio:x64-windows=pass -vcpkg-ci-openimageio:x64-windows-static=pass +vcpkg-ci-openimageio:x64-windows-release=pass vcpkg-ci-openimageio:x64-windows-static-md=pass vcpkg-ci-openimageio:x64-windows-static=pass +vcpkg-ci-openimageio:x64-windows-static=pass vcpkg-ci-openimageio:x64-windows=pass vcpkg-ci-openimageio:x86-windows=pass +vcpkg-ci-openimageio:x86-windows=pass vcpkg-ci-paraview:arm64-osx=pass vcpkg-ci-paraview:x64-linux=pass vcpkg-ci-paraview:x64-osx=pass From 95f98bd8e580528e1a32290a4b45ba7193aa84a0 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 18 Feb 2025 18:50:40 -0800 Subject: [PATCH 19/24] [openvino] arm64 also broken by --- scripts/ci.baseline.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index e05a6f8064ddc7..5d06b99b1e9e97 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -863,6 +863,9 @@ openscap:x64-windows-static=fail opensubdiv:x64-android=fail openturns:arm64-windows=fail openturns:arm64-windows-static-md=fail +# Incorrect use of arm64 intrinsics in in VS 2022 17.13 broke these with -Zc:arm64-aliased-neon-types- +openvino:arm64-windows=fail +openvino:arm64-windows-static-md=fail openvr:x64-windows-static=fail # Conflicts with optional-lite, by the same author optional-bare:arm-neon-android=skip From 2330f238273034a1efe34d60054d1b8900f7ce25 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 19 Feb 2025 13:49:34 -0800 Subject: [PATCH 20/24] Skip popsift due to https://github.com/alicevision/popsift/issues/161 --- scripts/ci.baseline.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 5d06b99b1e9e97..e7c27a55ba57c8 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -907,7 +907,11 @@ plplot:arm64-windows-static-md=fail pmdk:x64-android=fail pmdk:x64-osx=fail pmdk:x64-windows-static=fail +# popsift is broken with CUDA 12.6 and later, and we test with 12.8, see https://github.com/alicevision/popsift/issues/161 +popsift:x64-windows-release=fail popsift:x64-windows-static-md=fail +popsift:x64-windows-static=fail +popsift:x64-windows=fail ptex:arm-neon-android=fail ptex:arm64-android=fail ptex:x64-android=fail From 5ce628916c9cd82dd7a274e9e5d870963a04f28f Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 19 Feb 2025 15:08:46 -0800 Subject: [PATCH 21/24] Skip libxt due to clang 19 saying inline asm is malformed. --- scripts/ci.baseline.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index e7c27a55ba57c8..d68e3bb440bc55 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -686,6 +686,10 @@ libwandio:arm-neon-android=fail libwandio:arm64-android=fail libwandio:x64-android=fail libxaw:x64-windows-static=skip +# Clang 19 thinks inline asm in this port is malformed: +libxt:x64-windows-release=fail +libxt:x64-windows=fail +# Inline asm used doesn't appear to support arm64-windows: libxt:arm64-windows=fail libxt:arm64-windows-static-md=fail libzen:arm-neon-android=fail From e0ebe2e0f5b1c44986478f9893bea7a2fb0dcae8 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 24 Feb 2025 22:15:41 -0800 Subject: [PATCH 22/24] [opencv4] Disable Python test on Linux due to Python/CUDA/CUDNN bug ``` FAILED: lib/python3/cv2d.cpython-310-x86_64-linux-gnu.so : && /usr/bin/c++ -fPIC -fPIC -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -fopenmp -Wno-unused-function -Wno-deprecated-declarations -Wno-overloaded-virtual -Wno-undef -g -O0 -DDEBUG -D_DEBUG -Wl,--gc-sections -Wl,--as-needed -Wl,--exclude-libs=ALL -shared -o lib/python3/cv2d.cpython-310-x86_64-linux-gnu.so modules/python3/CMakeFiles/opencv_python3.dir/opencv_python3_autogen/mocs_compilation.cpp.o modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_util.cpp.o modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_numpy.cpp.o modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_convert.cpp.o modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2_highgui.cpp.o -L/usr/local/cuda/targets/x86_64-linux/lib/stubs -L/usr/local/cuda/targets/x86_64-linux/lib -Wl,-rpath,/home/bion/vcpkg/installed/x64-linux/debug/lib:/usr/local/cuda-12.8/targets/x86_64-linux/lib:::::::::::::::::::::::::::::::::::::::::::::::::::::: /home/bion/vcpkg/installed/x64-linux/debug/lib/objects-Debug/Gui_resources_1/.qt/rcc/qrc_qpdf_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/lib/objects-Debug/Gui_resources_2/.qt/rcc/qrc_gui_shaders_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/lib/objects-Debug/Widgets_resources_1/.qt/rcc/qrc_qstyle_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/lib/objects-Debug/Widgets_resources_2/.qt/rcc/qrc_qstyle1_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/lib/objects-Debug/Widgets_resources_3/.qt/rcc/qrc_qstyle_fusion_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/lib/objects-Debug/Widgets_resources_4/.qt/rcc/qrc_qmessagebox_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/egldeviceintegrations/objects-Debug/QEglFSEmulatorIntegrationPlugin_init/QEglFSEmulatorIntegrationPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/egldeviceintegrations/objects-Debug/QEglFSX11IntegrationPlugin_init/QEglFSX11IntegrationPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/objects-Debug/QGifPlugin_init/QGifPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/objects-Debug/QICOPlugin_init/QICOPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/objects-Debug/QJpegPlugin_init/QJpegPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/iconengines/objects-Debug/QSvgIconPlugin_init/QSvgIconPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/objects-Debug/QSvgPlugin_init/QSvgPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/xcbglintegrations/objects-Debug/QXcbEglIntegrationPlugin_init/QXcbEglIntegrationPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/xcbglintegrations/objects-Debug/QXcbGlxIntegrationPlugin_init/QXcbGlxIntegrationPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/platforms/objects-Debug/QXcbIntegrationPlugin_init/QXcbIntegrationPlugin_init.cpp.o /home/bion/vcpkg/installed/x64-linux/debug/lib/objects-Debug/EglFSDeviceIntegrationPrivate_resources_1/.qt/rcc/qrc_cursor_init.cpp.o lib/libopencv_cudev4d.a lib/libopencv_core4d.a lib/libopencv_cudaarithm4d.a lib/libopencv_flann4d.a lib/libopencv_hdf4d.a lib/libopencv_imgproc4d.a lib/libopencv_intensity_transform4d.a lib/libopencv_ml4d.a lib/libopencv_phase_unwrapping4d.a lib/libopencv_plot4d.a lib/libopencv_reg4d.a lib/libopencv_signal4d.a lib/libopencv_surface_matching4d.a lib/libopencv_viz4d.a lib/libopencv_alphamat4d.a lib/libopencv_cudafilters4d.a lib/libopencv_cudaimgproc4d.a lib/libopencv_cudawarping4d.a lib/libopencv_dnn4d.a lib/libopencv_dnn_superres4d.a lib/libopencv_features2d4d.a lib/libopencv_freetype4d.a lib/libopencv_fuzzy4d.a lib/libopencv_hfs4d.a lib/libopencv_img_hash4d.a lib/libopencv_imgcodecs4d.a lib/libopencv_line_descriptor4d.a lib/libopencv_photo4d.a lib/libopencv_saliency4d.a lib/libopencv_text4d.a lib/libopencv_videoio4d.a lib/libopencv_xphoto4d.a lib/libopencv_calib3d4d.a lib/libopencv_cudacodec4d.a lib/libopencv_cudafeatures2d4d.a lib/libopencv_cudastereo4d.a lib/libopencv_cvv4d.a lib/libopencv_datasets4d.a lib/libopencv_highgui4d.a lib/libopencv_mcc4d.a lib/libopencv_objdetect4d.a lib/libopencv_ovis4d.a lib/libopencv_rapid4d.a lib/libopencv_shape4d.a lib/libopencv_structured_light4d.a lib/libopencv_video4d.a lib/libopencv_wechat_qrcode4d.a lib/libopencv_xfeatures2d4d.a lib/libopencv_ximgproc4d.a lib/libopencv_xobjdetect4d.a lib/libopencv_aruco4d.a lib/libopencv_bgsegm4d.a lib/libopencv_bioinspired4d.a lib/libopencv_ccalib4d.a lib/libopencv_cudabgsegm4d.a lib/libopencv_cudalegacy4d.a lib/libopencv_cudaobjdetect4d.a lib/libopencv_dpm4d.a lib/libopencv_face4d.a lib/libopencv_gapi4d.a lib/libopencv_optflow4d.a lib/libopencv_sfm4d.a lib/libopencv_stitching4d.a lib/libopencv_tracking4d.a lib/libopencv_cudaoptflow4d.a lib/libopencv_stereo4d.a lib/libopencv_superres4d.a lib/libopencv_videostab4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libhdf5_debug.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Core5Compat.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgreBitesStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libPlugin_DotSceneStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libCodec_AssimpStatic.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libassimpd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libpolyclipping.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libpoly2tri.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libminizip.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libkubazip.a /usr/lib/x86_64-linux-gnu/libXt.so /usr/lib/x86_64-linux-gnu/libXaw.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libSDL2d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgreMeshLodGeneratorStatic.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgreOverlayStatic.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libimguid.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvulkan.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgrePropertyStatic.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgreTerrainStatic.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgrePagingStatic.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgreRTShaderSystemStatic.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgreVolumeStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libPlugin_BSPSceneManagerStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libPlugin_OctreeSceneManagerStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libPlugin_PCZSceneManagerStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libPlugin_ParticleFXStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libRenderSystem_GLStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libRenderSystem_GL3PlusStatic.a /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libCodec_STBIStatic.a -lgcc /home/bion/vcpkg/installed/x64-linux/debug/plugins/ogre/libCodec_FreeImageStatic.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libFreeImaged.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebpdemux.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebpdecoder.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libjxrglued.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libjpegxrd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/manual-link/libraw.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libjasperd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/liblcms2.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgreGLSupportStatic.a /usr/lib/x86_64-linux-gnu/libXrandr.so /usr/lib/x86_64-linux-gnu/libEGL.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libOgreMainStatic.a lib/libopencv_phase_unwrapping4d.a lib/libopencv_viz4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersTexture-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkIOExport-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingContext2D-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingFreeType-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingVtkJS-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingSceneGraph-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libjsoncpp.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkDomainsChemistry-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkIOGeometry-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkIOPLY-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkInteractionStyle-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersExtraction-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersStatistics-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkParallelDIY-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkIOXML-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkIOXMLParser-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkParallelMPI-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkParallelCore-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkIOLegacy-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkIOCore-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libmpi.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingLOD-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersModeling-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingOpenGL2-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkIOImage-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkDICOMParser-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkmetaio-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libtiffd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libLerc.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingHyperTreeGrid-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersHyperTree-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersHybrid-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkImagingSources-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkImagingCore-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingUI-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkRenderingCore-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersSources-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersGeneral-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersVerdict-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libverdict.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libfmtd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonComputationalGeometry-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersGeometry-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkFiltersCore-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonExecutionModel-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonColor-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonDataModel-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonTransforms-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonMisc-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonMath-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkkissfft-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonSystem-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkCommonCore-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtktoken-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtkloguru-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvtksys-9.3.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libpugixml.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libGLEWd.a /usr/lib/x86_64-linux-gnu/libSM.so /usr/lib/x86_64-linux-gnu/libICE.so /usr/lib/x86_64-linux-gnu/libXext.so /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libOpenGL.so /usr/lib/x86_64-linux-gnu/libXcursor.so /usr/lib/x86_64-linux-gnu/libXrender.so /usr/lib/x86_64-linux-gnu/libXfixes.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libaded.a lib/libopencv.sfm.correspondenced.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgflags_debug.a lib/libopencv.sfm.simple_pipelined.a lib/libopencv.sfm.multiviewd.a lib/libopencv.sfm.numericd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libceres-debug.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libglog.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgflags_debug.a /home/bion/vcpkg/installed/x64-linux/debug/lib/liblapack.a /usr/lib/x86_64-linux-gnu/libgfortran.so.5 /home/bion/vcpkg/installed/x64-linux/debug/lib/libopenblas.a lib/libopencv_cudafeatures2d4d.a lib/libopencv_xfeatures2d4d.a lib/libopencv_shape4d.a lib/libopencv_tracking4d.a lib/libopencv_plot4d.a lib/libopencv_datasets4d.a lib/libopencv_text4d.a lib/libopencv_ml4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libtesseract.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libarchive.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libxml2.a /home/bion/vcpkg/installed/x64-linux/debug/lib/liblz4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/liblzma.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libcurl-d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libssl.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libcrypto.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libleptonica.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebpmux.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebp.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libsharpyuv.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgif.a lib/libopencv_highgui4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Test.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Concurrent.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6OpenGLWidgets.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Widgets.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Gui.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6OpenGL.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/egldeviceintegrations/libqeglfs-emu-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/egldeviceintegrations/libqeglfs-x11-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqgif.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqico.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqjpeg.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/iconengines/libqsvgicon.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqsvg.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/xcbglintegrations/libqxcb-egl-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/xcbglintegrations/libqxcb-glx-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/platforms/libqxcb.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6EglFSDeviceIntegration.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Svg.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6XcbQpa.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6FbSupport.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6InputSupport.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Gui.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6OpenGL.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/egldeviceintegrations/libqeglfs-emu-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/egldeviceintegrations/libqeglfs-x11-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqgif.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqico.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqjpeg.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/iconengines/libqsvgicon.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqsvg.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/xcbglintegrations/libqxcb-egl-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/xcbglintegrations/libqxcb-glx-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/platforms/libqxcb.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6EglFSDeviceIntegration.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Svg.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6XcbQpa.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6FbSupport.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6InputSupport.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Gui.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6OpenGL.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/egldeviceintegrations/libqeglfs-emu-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/egldeviceintegrations/libqeglfs-x11-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqgif.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqico.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqjpeg.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/iconengines/libqsvgicon.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/imageformats/libqsvg.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/xcbglintegrations/libqxcb-egl-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/xcbglintegrations/libqxcb-glx-integration.a /home/bion/vcpkg/installed/x64-linux/debug/Qt6/plugins/platforms/libqxcb.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6EglFSDeviceIntegration.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Svg.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6XcbQpa.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6FbSupport.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6InputSupport.a /usr/lib/x86_64-linux-gnu/libGL.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libharfbuzz.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libfontconfig.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libexpat.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libuuid.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6DBus.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libdbus-1.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libjpeg.a /usr/lib/x86_64-linux-gnu/libxcb-glx.so /usr/lib/x86_64-linux-gnu/libEGL.so /usr/lib/x86_64-linux-gnu/libX11.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libfreetyped.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libpng16d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libbz2d.a /usr/lib/x86_64-linux-gnu/libxkbcommon.so /usr/lib/x86_64-linux-gnu/libX11-xcb.so /usr/lib/x86_64-linux-gnu/libxkbcommon-x11.so /usr/lib/x86_64-linux-gnu/libxkbcommon.so /usr/lib/x86_64-linux-gnu/libxcb-cursor.so /usr/lib/x86_64-linux-gnu/libxcb-icccm.so /usr/lib/x86_64-linux-gnu/libxcb-image.so /usr/lib/x86_64-linux-gnu/libxcb-keysyms.so /usr/lib/x86_64-linux-gnu/libxcb-randr.so /usr/lib/x86_64-linux-gnu/libxcb-render-util.so /usr/lib/x86_64-linux-gnu/libxcb-shm.so /usr/lib/x86_64-linux-gnu/libxcb-sync.so /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so /usr/lib/x86_64-linux-gnu/libxcb-render.so /usr/lib/x86_64-linux-gnu/libxcb-shape.so /usr/lib/x86_64-linux-gnu/libxcb-xkb.so /usr/lib/x86_64-linux-gnu/libSM.so /usr/lib/x86_64-linux-gnu/libICE.so /usr/lib/x86_64-linux-gnu/libXrender.so /usr/lib/x86_64-linux-gnu/libX11.so /usr/lib/x86_64-linux-gnu/libxcb-xinput.so /usr/lib/x86_64-linux-gnu/libxcb.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6DeviceDiscoverySupport.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libQt6Core.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libicuuc.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libdouble-conversion.a /home/bion/vcpkg/installed/x64-linux/lib/libb2.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libicui18n.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libicudata.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libpcre2-16.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libzstd.a lib/libopencv_cudacodec4d.a lib/libopencv_photo4d.a lib/libopencv_videoio4d.a /home/bion/vcpkg/installed/x64-linux/lib/libgstbase-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstreamer-1.0.a /usr/lib/x86_64-linux-gnu/libnsl.so /home/bion/vcpkg/installed/x64-linux/lib/libgobject-2.0.a /home/bion/vcpkg/installed/x64-linux/lib/libffi.a /home/bion/vcpkg/installed/x64-linux/lib/libgmodule-2.0.a /home/bion/vcpkg/installed/x64-linux/lib/libglib-2.0.a /home/bion/vcpkg/installed/x64-linux/lib/libpcre2-8.a /home/bion/vcpkg/installed/x64-linux/lib/libgstapp-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstriff-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstaudio-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgsttag-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libz.a /home/bion/vcpkg/installed/x64-linux/lib/libgstpbutils-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstvideo-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstbase-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstreamer-1.0.a /usr/lib/x86_64-linux-gnu/libnsl.so /home/bion/vcpkg/installed/x64-linux/lib/libgobject-2.0.a /home/bion/vcpkg/installed/x64-linux/lib/libffi.a /home/bion/vcpkg/installed/x64-linux/lib/libgmodule-2.0.a /home/bion/vcpkg/installed/x64-linux/lib/libglib-2.0.a /home/bion/vcpkg/installed/x64-linux/lib/libpcre2-8.a /home/bion/vcpkg/installed/x64-linux/lib/libgstapp-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstriff-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstaudio-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgsttag-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libz.a /home/bion/vcpkg/installed/x64-linux/lib/libgstpbutils-1.0.a /home/bion/vcpkg/installed/x64-linux/lib/libgstvideo-1.0.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libavdevice.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libavfilter.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libavformat.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libavcodec.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libpostproc.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libswresample.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libswscale.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libavutil.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libasound.a /usr/lib/x86_64-linux-gnu/libGL.so /home/bion/vcpkg/installed/x64-linux/debug/lib/libSDL2d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libass.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libharfbuzz.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libglib-2.0.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libpcre2-8.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libfribidi.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libfontconfig.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libexpat.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libfreetyped.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libbrotlidec.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libbrotlicommon.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libxml2.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libbz2d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libmodplug.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libopenmpt.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvorbisfile.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libmpg123.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libsrt.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libssh.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvpx.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libdav1d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libsnappy.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libaom.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libfdk-aac.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libilbc.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libmp3lame.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libopenjp2.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libopus.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libspeex.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libtheoraenc.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libtheoradec.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvorbisenc.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libvorbis.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libogg.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libx264.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libx265.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libopenh264.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libsoxr.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libmfx.a -lstdc++ /home/bion/vcpkg/installed/x64-linux/debug/lib/libOpenCL.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libssl.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libcrypto.a /usr/lib/x86_64-linux-gnu/libdl.a -pthread -latomic lib/libopencv_cudaoptflow4d.a lib/libopencv_cudawarping4d.a lib/libopencv_cudalegacy4d.a lib/libopencv_cudaimgproc4d.a lib/libopencv_cudafilters4d.a lib/libopencv_cudaarithm4d.a lib/libopencv_objdetect4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libquirc.a lib/libopencv_optflow4d.a lib/libopencv_ximgproc4d.a lib/libopencv_imgcodecs4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmMSFF.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmDICT.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmIOD.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libexpat.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmDSED.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmCommon.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmjpeg8.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmjpeg12.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmjpeg16.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmcharls.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libgdcmuuid.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libjpeg.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebpdecoder.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebpdemux.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libtiffd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libjpeg.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebpdecoder.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebpdemux.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libtiffd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libpng16d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebp.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libwebpmux.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libsharpyuv.a /home/bion/vcpkg/installed/x64-linux/debug/lib/liblzma.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libzstd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libLerc.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libdeflate.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libopenjp2.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOpenEXR-3_3_d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libIlmThread-3_3_d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libIex-3_3_d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libOpenEXRCore-3_3_d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libImath-3_1_d.a -lm /home/bion/vcpkg/installed/x64-linux/debug/lib/libdeflate.a lib/libopencv_video4d.a lib/libopencv_dnn4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libprotobufd.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libz.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_check_op.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_die_if_null.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_conditions.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_message.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_nullguard.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_examine_stack.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_format.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_structured_proto.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_proto.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_log_sink_set.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_sink.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_entry.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_flags_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_flags_marshalling.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_flags_reflection.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_flags_config.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_flags_program_name.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_flags_private_handle_accessor.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_flags_commandlineflag.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_flags_commandlineflag_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_initialize.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_globals.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_globals.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_vlog_config_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_internal_fnmatch.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_raw_hash_set.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_hash.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_city.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_low_level_hash.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_hashtablez_sampler.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_distributions.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_seed_sequences.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_internal_pool_urbg.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_internal_randen.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_internal_randen_hwaes.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_internal_randen_hwaes_impl.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_internal_randen_slow.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_internal_platform.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_internal_seed_material.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_random_seed_gen_exception.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_statusor.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_status.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_cord.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_cordz_info.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_cord_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_cordz_functions.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_exponential_biased.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_cordz_handle.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_crc_cord_state.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_crc32c.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_crc_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_crc_cpu_detect.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_bad_optional_access.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_leak_check.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_strerror.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_str_format_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_synchronization.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_stacktrace.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_symbolize.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_debugging_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_demangle_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_demangle_rust.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_decode_rust_punycode.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_utf8_for_code_point.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_graphcycles_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_kernel_timeout_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_malloc_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_tracing_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_time.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_civil_time.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_time_zone.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_bad_variant_access.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libutf8_validity.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_strings.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_int128.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_strings_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_string_view.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_base.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_spinlock_wait.a -lrt /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_throw_delegate.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_raw_logging_internal.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libabsl_log_severity.a /usr/lib/x86_64-linux-gnu/libcudnn.so lib/libopencv_calib3d4d.a lib/libopencv_features2d4d.a lib/libopencv_flann4d.a lib/libopencv_imgproc4d.a lib/libopencv_core4d.a lib/libopencv_cudev4d.a /home/bion/vcpkg/installed/x64-linux/debug/lib/libz.a /usr/lib/x86_64-linux-gnu/libOpenGL.so /usr/lib/x86_64-linux-gnu/libGLX.so /usr/lib/x86_64-linux-gnu/libGLU.so /usr/lib/gcc/x86_64-linux-gnu/11/libgomp.so /usr/lib/x86_64-linux-gnu/libpthread.a -lm -lpthread -lrt 3rdparty/lib/libippiwd.a 3rdparty/ippicv/ippicv_lnx/icv/lib/intel64/libippicv.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcudart_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppial_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppitc_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppig_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppist_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppidei_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcublas_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcublasLt_static.a -ldl /usr/lib/x86_64-linux-gnu/librt.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcufft.so /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppif_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppim_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppicc_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppc_static.a /usr/local/cuda-12.8/targets/x86_64-linux/lib/libculibos.a -lcudadevrt -lcudart_static -lrt -lpthread -ldl && : /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppial_static.a(ImageLogicalCAndShiftC.o): in function `__sti____cudaRegisterAll()': ImageLogicalCAndShiftC.compute_120.cudafe1.cpp:(.text.startup+0x38): relocation truncated to fit: R_X86_64_PC32 against `.bss' ImageLogicalCAndShiftC.compute_120.cudafe1.cpp:(.text.startup+0x1dbc): relocation truncated to fit: R_X86_64_PC32 against `.bss' /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppial_static.a(ImageLogicalCAndShiftC.o): in function `_GLOBAL__sub_I_ImageLogicalCAndShiftC.compute_120.cudafe1.cpp': ImageLogicalCAndShiftC.compute_120.cudafe1.cpp:(.text.startup+0x1de7): relocation truncated to fit: R_X86_64_PC32 against `.bss' ImageLogicalCAndShiftC.compute_120.cudafe1.cpp:(.text.startup+0x1e05): relocation truncated to fit: R_X86_64_PC32 against `.bss' /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppial_static.a(ImageAlpha.o): in function `__sti____cudaRegisterAll()': ImageAlpha.compute_120.cudafe1.cpp:(.text.startup+0x38): relocation truncated to fit: R_X86_64_PC32 against `.bss' ImageAlpha.compute_120.cudafe1.cpp:(.text.startup+0x2576): relocation truncated to fit: R_X86_64_PC32 against `.bss' /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppial_static.a(ImageAlpha.o): in function `_GLOBAL__sub_I_ImageAlpha.compute_120.cudafe1.cpp': ImageAlpha.compute_120.cudafe1.cpp:(.text.startup+0x2597): relocation truncated to fit: R_X86_64_PC32 against `.bss' ImageAlpha.compute_120.cudafe1.cpp:(.text.startup+0x25b5): relocation truncated to fit: R_X86_64_PC32 against `.bss' /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppitc_static.a(ImageThreshold.o): in function `__sti____cudaRegisterAll()': ImageThreshold.compute_120.cudafe1.cpp:(.text.startup+0x38): relocation truncated to fit: R_X86_64_PC32 against `.bss' ImageThreshold.compute_120.cudafe1.cpp:(.text.startup+0x15a6): relocation truncated to fit: R_X86_64_PC32 against `.bss' /usr/local/cuda-12.8/targets/x86_64-linux/lib/libnppitc_static.a(ImageThreshold.o): in function `_GLOBAL__sub_I_ImageThreshold.compute_120.cudafe1.cpp': ImageThreshold.compute_120.cudafe1.cpp:(.text.startup+0x15c7): additional relocation overflows omitted from the output /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcublasLt_static.a(_2_445_cublas_syr2k.cu.o):(.text.unlikely._ZN22cask_plugin__5x_cublas15xmma__5x_cublas20cublas_syr2k_context14initKernelInfoEPNS0_24cublas_syr2k_kernel_infoEPKNS0_26cublas_syr2k_config_valuesE+0x54): failed to convert GOTPCREL relocation against 'libcublasLt_24ac38656232a36c578866808fa047b47a803260'; relink with --no-relax collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. ``` --- scripts/test_ports/vcpkg-ci-opencv/vcpkg.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json b/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json index 5c114bb061c456..09163cf5903dc7 100644 --- a/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json +++ b/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json @@ -74,11 +74,18 @@ "default-features": false, "features": [ "gapi", - "gstreamer", - "python" + "gstreamer" ], "platform": "!uwp & !(windows & static) & !android" }, + { + "name": "opencv", + "default-features": false, + "features": [ + "python" + ], + "platform": "!uwp & !(windows & static) & !android & !linux" + }, { "name": "opencv", "default-features": false, From 7b6fba9eb989e2a8618a9ed2068c463443be95cd Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 25 Feb 2025 11:04:39 -0800 Subject: [PATCH 23/24] Remove duplicate ci.baseline.txt lines. --- scripts/ci.baseline.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 1b735ae7680933..80db4211272e07 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -1371,10 +1371,8 @@ vcpkg-ci-opencv:x86-windows=pass vcpkg-ci-openimageio:x64-windows-release=pass vcpkg-ci-openimageio:x64-windows-static-md=pass vcpkg-ci-openimageio:x64-windows-static=pass -vcpkg-ci-openimageio:x64-windows-static=pass vcpkg-ci-openimageio:x64-windows=pass vcpkg-ci-openimageio:x86-windows=pass -vcpkg-ci-openimageio:x86-windows=pass vcpkg-ci-paraview:arm64-osx=pass vcpkg-ci-paraview:x64-linux=pass vcpkg-ci-paraview:x64-osx=pass From 276fe5e81633819b8d8d0e669b7431ddfde30075 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 25 Feb 2025 11:05:02 -0800 Subject: [PATCH 24/24] Add note that next month we should put back --no-install-recommends . --- scripts/azure-pipelines/linux/provision-image.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/azure-pipelines/linux/provision-image.sh b/scripts/azure-pipelines/linux/provision-image.sh index e253d64966ece6..06454be80ab1e5 100755 --- a/scripts/azure-pipelines/linux/provision-image.sh +++ b/scripts/azure-pipelines/linux/provision-image.sh @@ -127,6 +127,7 @@ else APT_PACKAGES="$APT_PACKAGES libkrb5-3 zlib1g libicu70 debsums liblttng-ust1" fi -apt-get -y --no-install-recommends install $APT_PACKAGES +# Put --no-install-recommends back next month +apt-get -y install $APT_PACKAGES az --version