From 2e3db93c0ae5f087a06476b17dd6223bb367ca03 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 13:08:45 -0700 Subject: [PATCH 01/30] In deployment .ps1s, fix printing the source of content when local copies are used. --- .../azure-pipelines/windows/deploy-azcopy.ps1 | 2 - .../windows/deploy-azure-cli.ps1 | 2 - .../azure-pipelines/windows/deploy-cuda.ps1 | 2 - .../azure-pipelines/windows/deploy-cudnn.ps1 | 2 - .../windows/deploy-inteloneapi.ps1 | 131 ++++--- .../azure-pipelines/windows/deploy-mpi.ps1 | 2 - .../azure-pipelines/windows/deploy-pwsh.ps1 | 2 - .../windows/utility-prefix.ps1 | 347 ++++++++++-------- 8 files changed, 256 insertions(+), 234 deletions(-) diff --git a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 index 582a4dd643cbba..f1ae79745ee854 100644 --- a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 @@ -9,10 +9,8 @@ if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { [string]$AzCopyUrl if ([string]::IsNullOrEmpty($SasToken)) { - Write-Host 'Downloading from the Internet' $AzCopyUrl = 'https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_amd64_10.32.3.zip' } else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' $SasToken = $SasToken.Replace('"', '') $AzCopyUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/azcopy_windows_amd64_10.32.3.zip?$SasToken" } diff --git a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 index c096141e3ee5cb..4ffa9cc3889507 100644 --- a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 @@ -9,10 +9,8 @@ if (Test-Path "$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.85.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.85.0-x64.msi?$SasToken" } diff --git a/scripts/azure-pipelines/windows/deploy-cuda.ps1 b/scripts/azure-pipelines/windows/deploy-cuda.ps1 index 594512dd68d7c8..a18e21293b52ea 100644 --- a/scripts/azure-pipelines/windows/deploy-cuda.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cuda.ps1 @@ -9,10 +9,8 @@ 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/13.2.0/local_installers/cuda_13.2.0_windows.exe' } else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' $SasToken = $SasToken.Replace('"', '') $CudaUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cuda_13.2.0_windows.exe?$SasToken" } diff --git a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 index 9199894390e04a..3d23ec8da2f054 100644 --- a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 @@ -9,10 +9,8 @@ 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.20.0.48_cuda13-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.20.0.48_cuda13-archive.zip?$SasToken" } diff --git a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 index 4e140d154ac463..215ca541a19776 100644 --- a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 @@ -1,66 +1,65 @@ -# 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/36f868e9-84b3-4b4f-90ef-ca84092cae6a/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' -} else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' - $SasToken = $SasToken.Replace('"', '') - $oneAPIBaseUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe?$SasToken" -} - -$oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' - -$LocalName = 'intel-oneapi-hpc-toolkit-2025.3.1.54_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)) { + $oneAPIBaseUrl = 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' +} else { + $SasToken = $SasToken.Replace('"', '') + $oneAPIBaseUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe?$SasToken" +} + +$oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' + +$LocalName = 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' + +try { + [bool]$doRemove = $false + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $oneAPIBaseUrl + if ($contentSource) { + Write-Host "Downloading Intel oneAPI from $contentSource..." + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force + $LocalPath = Join-Path $tempPath $LocalName + curl.exe -L -o $LocalPath $oneAPIBaseUrl + $doRemove = $true + } else { + Write-Host 'Using local copy of Intel oneAPI...' + } + + [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 920bd09caea52f..08062e1f4dd4fc 100644 --- a/scripts/azure-pipelines/windows/deploy-mpi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-mpi.ps1 @@ -9,10 +9,8 @@ if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { [string]$MpiUrl if ([string]::IsNullOrEmpty($SasToken)) { - Write-Host 'Downloading from the Internet' $MpiUrl = 'https://download.microsoft.com/download/7/2/7/72731ebb-b63c-4170-ade7-836966263a8f/msmpisetup.exe' } else { - Write-Host 'Downloading from vcpkgimageminting using SAS token' $SasToken = $SasToken.Replace('"', '') $MpiUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/msmpisetup-10.1.12498.52.exe?$SasToken" } diff --git a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 index 8231a4f7e6d265..71ad6504633d4f 100644 --- a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 +++ b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 @@ -9,10 +9,8 @@ if (Test-Path "$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.6.1/PowerShell-7.6.1-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.6.1-win-x64.msi?$SasToken" } diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index 2e0b0f0ad2e92b..a892d716f4864b 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -1,156 +1,191 @@ -# 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 +Describes where installation content will be sourced from. + +.DESCRIPTION +Get-ContentSourceDescription returns $null for a local copy, or a short string +describing the remote source when the content must be downloaded. + +.PARAMETER LocalPath +The path to a local copy of the content, if present. + +.PARAMETER Url +The URL to download when no local copy is available. +#> +Function Get-ContentSourceDescription { + [CmdletBinding(PositionalBinding=$false)] + Param( + [Parameter(Mandatory)][String]$LocalPath, + [Parameter(Mandatory)][String]$Url + ) + + if (Test-Path $LocalPath) { + return $null + } + + $uri = [uri]::new($Url) + if ($uri.Host -ieq 'vcpkgimageminting.blob.core.windows.net') { + return 'vcpkgimageminting using SAS token' + } + + return 'the internet' +} + +<# +.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 + $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url + if ($contentSource) { + Write-Host "Downloading $Name from $contentSource..." + $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 + } else { + Write-Host "Using local copy of $Name..." + } + + 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 + $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url + if ($contentSource) { + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force | Out-Null + $zipPath = Join-Path $tempPath $LocalName + Write-Host "Downloading $Name from $contentSource ( $Url -> $zipPath )..." + curl.exe --fail -L -o $zipPath $Url + if (-Not $?) { + Write-Error 'Download failed!' + } + $doRemove = $true + } else { + Write-Host "Using local copy of $Name..." + $zipPath = $LocalPath + } + + 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)" + } +} From 5f45a2d1df69c82206ff77d7aed9a1819da09992 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 13:30:09 -0700 Subject: [PATCH 02/30] Deduplicate URL selection. --- .../azure-pipelines/windows/deploy-azcopy.ps1 | 35 +++-- .../windows/deploy-azure-cli.ps1 | 33 +++-- .../azure-pipelines/windows/deploy-cuda.ps1 | 127 +++++++++--------- .../azure-pipelines/windows/deploy-cudnn.ps1 | 45 +++---- .../windows/deploy-inteloneapi.ps1 | 11 +- .../azure-pipelines/windows/deploy-mpi.ps1 | 33 +++-- .../azure-pipelines/windows/deploy-pwsh.ps1 | 33 +++-- .../windows/utility-prefix.ps1 | 33 +++++ 8 files changed, 181 insertions(+), 169 deletions(-) diff --git a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 index f1ae79745ee854..1575f56eb45a2c 100644 --- a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 @@ -1,19 +1,16 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -[string]$AzCopyUrl -if ([string]::IsNullOrEmpty($SasToken)) { - $AzCopyUrl = 'https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_amd64_10.32.3.zip' -} else { - $SasToken = $SasToken.Replace('"', '') - $AzCopyUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/azcopy_windows_amd64_10.32.3.zip?$SasToken" -} - -mkdir -Force "C:\AzCopy10" -DownloadAndUnzip -Name 'azcopy' -Url $AzCopyUrl -Destination "C:\AzCopy10" +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$AzCopyUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_amd64_10.32.3.zip' ` + -BlobAssetName 'azcopy_windows_amd64_10.32.3.zip' + +mkdir -Force "C:\AzCopy10" +DownloadAndUnzip -Name 'azcopy' -Url $AzCopyUrl -Destination "C:\AzCopy10" diff --git a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 index 4ffa9cc3889507..6fa8e6a05f86d1 100644 --- a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 @@ -1,18 +1,15 @@ -# 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)) { - $AzCliUrl = 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.85.0-x64.msi' -} else { - $SasToken = $SasToken.Replace('"', '') - $AzCliUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/azure-cli-2.85.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" +} + +$AzCliUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.85.0-x64.msi' ` + -BlobAssetName 'azure-cli-2.85.0-x64.msi' + +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 a18e21293b52ea..ea964235db1ab4 100644 --- a/scripts/azure-pipelines/windows/deploy-cuda.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cuda.ps1 @@ -1,65 +1,62 @@ -# 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)) { - $CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/13.2.0/local_installers/cuda_13.2.0_windows.exe' -} else { - $SasToken = $SasToken.Replace('"', '') - $CudaUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cuda_13.2.0_windows.exe?$SasToken" -} - -# https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html -# Intentionally omitted: -# ctadvisor_13.2 -# documentation_13.2 -# nsight_compute_13.2 -# nsight_systems_13.2 -# nsight_vse_13.2 -# occupancy_calculator_13.2 (this is named like a tool but listed as 'documentation' in the installer) -# visual_studio_integration_13.2 -DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( - '-s', - 'crt_13.2', - 'cublas_13.2', - 'cublas_dev_13.2', - 'cuda_profiler_api_13.2', - 'cudart_13.2', - 'cufft_13.2', - 'cufft_dev_13.2', - 'cuobjdump_13.2', - 'cupti_13.2', - 'curand_13.2', - 'curand_dev_13.2', - 'cusolver_13.2', - 'cusolver_dev_13.2', - 'cusparse_13.2', - 'cusparse_dev_13.2', - 'cuxxfilt_13.2', - 'npp_13.2', - 'npp_dev_13.2', - 'nvcc_13.2', - 'nvdisasm_13.2', - 'nvfatbin_13.2', - 'nvjitlink_13.2', - 'nvjpeg_13.2', - 'nvjpeg_dev_13.2', - 'nvml_dev_13.2', - 'nvprune_13.2', - 'nvptxcompiler_13.2', - 'nvrtc_13.2', - 'nvrtc_dev_13.2', - 'nvtx_13.2', - 'nvvm_13.2', - 'opencl_13.2', - 'sanitizer_13.2', - 'thrust_13.2', - 'tileiras_13.2', - '-n' -) +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$CudaUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://developer.download.nvidia.com/compute/cuda/13.2.0/local_installers/cuda_13.2.0_windows.exe' ` + -BlobAssetName 'cuda_13.2.0_windows.exe' + +# https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html +# Intentionally omitted: +# ctadvisor_13.2 +# documentation_13.2 +# nsight_compute_13.2 +# nsight_systems_13.2 +# nsight_vse_13.2 +# occupancy_calculator_13.2 (this is named like a tool but listed as 'documentation' in the installer) +# visual_studio_integration_13.2 +DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( + '-s', + 'crt_13.2', + 'cublas_13.2', + 'cublas_dev_13.2', + 'cuda_profiler_api_13.2', + 'cudart_13.2', + 'cufft_13.2', + 'cufft_dev_13.2', + 'cuobjdump_13.2', + 'cupti_13.2', + 'curand_13.2', + 'curand_dev_13.2', + 'cusolver_13.2', + 'cusolver_dev_13.2', + 'cusparse_13.2', + 'cusparse_dev_13.2', + 'cuxxfilt_13.2', + 'npp_13.2', + 'npp_dev_13.2', + 'nvcc_13.2', + 'nvdisasm_13.2', + 'nvfatbin_13.2', + 'nvjitlink_13.2', + 'nvjpeg_13.2', + 'nvjpeg_dev_13.2', + 'nvml_dev_13.2', + 'nvprune_13.2', + 'nvptxcompiler_13.2', + 'nvrtc_13.2', + 'nvrtc_dev_13.2', + 'nvtx_13.2', + 'nvvm_13.2', + 'opencl_13.2', + 'sanitizer_13.2', + 'thrust_13.2', + 'tileiras_13.2', + '-n' +) diff --git a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 index 3d23ec8da2f054..c25a6271469156 100644 --- a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 @@ -1,24 +1,21 @@ -# 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)) { - $CudnnUrl = 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' -} else { - $SasToken = $SasToken.Replace('"', '') - $CudnnUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip?$SasToken" -} - -DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2" - -if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2\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" +} + +$CudnnUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' ` + -BlobAssetName 'cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' + +DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2" + +if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2\include\cudnn.h") { + Write-Host 'cudnn appears correctly installed' +} else { + Write-Error 'cudnn appears broken!' +} diff --git a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 index 215ca541a19776..b6860540ac8ced 100644 --- a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 @@ -8,13 +8,10 @@ if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { } -[string]$oneAPIBaseUrl -if ([string]::IsNullOrEmpty($SasToken)) { - $oneAPIBaseUrl = 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' -} else { - $SasToken = $SasToken.Replace('"', '') - $oneAPIBaseUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe?$SasToken" -} +$oneAPIBaseUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' ` + -BlobAssetName 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' $oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' diff --git a/scripts/azure-pipelines/windows/deploy-mpi.ps1 b/scripts/azure-pipelines/windows/deploy-mpi.ps1 index 08062e1f4dd4fc..1e08b3384d5307 100644 --- a/scripts/azure-pipelines/windows/deploy-mpi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-mpi.ps1 @@ -1,18 +1,15 @@ -# 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)) { - $MpiUrl = 'https://download.microsoft.com/download/7/2/7/72731ebb-b63c-4170-ade7-836966263a8f/msmpisetup.exe' -} else { - $SasToken = $SasToken.Replace('"', '') - $MpiUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/msmpisetup-10.1.12498.52.exe?$SasToken" -} - -DownloadAndInstall -Name 'MSMPI' -LocalName 'msmpisetup.exe' -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" +} + +$MpiUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://download.microsoft.com/download/7/2/7/72731ebb-b63c-4170-ade7-836966263a8f/msmpisetup.exe' ` + -BlobAssetName 'msmpisetup-10.1.12498.52.exe' + +DownloadAndInstall -Name 'MSMPI' -LocalName 'msmpisetup.exe' -Url $MpiUrl -Args @('-force', '-unattend') diff --git a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 index 71ad6504633d4f..83d6f6ab423985 100644 --- a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 +++ b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 @@ -1,18 +1,15 @@ -# 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)) { - $PwshUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-x64.msi' -} else { - $SasToken = $SasToken.Replace('"', '') - $PwshUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/PowerShell-7.6.1-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" +} + +$PwshUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-x64.msi' ` + -BlobAssetName 'PowerShell-7.6.1-win-x64.msi' + +DownloadAndInstall -Url $PwshUrl -Name 'PowerShell Core' -Args @('/quiet', '/norestart') diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index a892d716f4864b..3464d7470e73c8 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -25,6 +25,39 @@ Function Get-TempFilePath { return Join-Path $tempPath $tempName } +<# +.SYNOPSIS +Gets the download URL for an image asset. + +.DESCRIPTION +Get-AssetUrl returns the upstream URL when no SAS token is provided, or the +vcpkgimageminting asset URL when a SAS token is available. + +.PARAMETER SasToken +The optional SAS token for accessing vcpkgimageminting assets. + +.PARAMETER InternetUrl +The upstream download URL. + +.PARAMETER BlobAssetName +The asset file name in the vcpkgimageminting blob container. +#> +Function Get-AssetUrl { + [CmdletBinding(PositionalBinding=$false)] + Param( + [String]$SasToken, + [Parameter(Mandatory)][String]$InternetUrl, + [Parameter(Mandatory)][String]$BlobAssetName + ) + + if ([string]::IsNullOrEmpty($SasToken)) { + return $InternetUrl + } + + $SasToken = $SasToken.Replace('"', '') + return "https://vcpkgimageminting.blob.core.windows.net/assets/$BlobAssetName?$SasToken" +} + <# .SYNOPSIS Describes where installation content will be sourced from. From acde85b03d652f26b2c3155e0fa8b8477c72d8f4 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 13:34:20 -0700 Subject: [PATCH 03/30] LFize --- .../azure-pipelines/windows/deploy-azcopy.ps1 | 32 +- .../windows/deploy-azure-cli.ps1 | 30 +- .../azure-pipelines/windows/deploy-cuda.ps1 | 124 ++--- .../azure-pipelines/windows/deploy-cudnn.ps1 | 42 +- .../windows/deploy-inteloneapi.ps1 | 124 ++--- .../azure-pipelines/windows/deploy-mpi.ps1 | 30 +- .../azure-pipelines/windows/deploy-pwsh.ps1 | 30 +- .../windows/utility-prefix.ps1 | 448 +++++++++--------- 8 files changed, 430 insertions(+), 430 deletions(-) diff --git a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 index 1575f56eb45a2c..f0c6504b153a4e 100644 --- a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 @@ -1,16 +1,16 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -$AzCopyUrl = Get-AssetUrl ` - -SasToken $SasToken ` - -InternetUrl 'https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_amd64_10.32.3.zip' ` - -BlobAssetName 'azcopy_windows_amd64_10.32.3.zip' - -mkdir -Force "C:\AzCopy10" -DownloadAndUnzip -Name 'azcopy' -Url $AzCopyUrl -Destination "C:\AzCopy10" +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$AzCopyUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_amd64_10.32.3.zip' ` + -BlobAssetName 'azcopy_windows_amd64_10.32.3.zip' + +mkdir -Force "C:\AzCopy10" +DownloadAndUnzip -Name 'azcopy' -Url $AzCopyUrl -Destination "C:\AzCopy10" diff --git a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 index 6fa8e6a05f86d1..8cb40611ff8aa5 100644 --- a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 @@ -1,15 +1,15 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -$AzCliUrl = Get-AssetUrl ` - -SasToken $SasToken ` - -InternetUrl 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.85.0-x64.msi' ` - -BlobAssetName 'azure-cli-2.85.0-x64.msi' - -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" +} + +$AzCliUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.85.0-x64.msi' ` + -BlobAssetName 'azure-cli-2.85.0-x64.msi' + +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 ea964235db1ab4..5880875053afcb 100644 --- a/scripts/azure-pipelines/windows/deploy-cuda.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cuda.ps1 @@ -1,62 +1,62 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -$CudaUrl = Get-AssetUrl ` - -SasToken $SasToken ` - -InternetUrl 'https://developer.download.nvidia.com/compute/cuda/13.2.0/local_installers/cuda_13.2.0_windows.exe' ` - -BlobAssetName 'cuda_13.2.0_windows.exe' - -# https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html -# Intentionally omitted: -# ctadvisor_13.2 -# documentation_13.2 -# nsight_compute_13.2 -# nsight_systems_13.2 -# nsight_vse_13.2 -# occupancy_calculator_13.2 (this is named like a tool but listed as 'documentation' in the installer) -# visual_studio_integration_13.2 -DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( - '-s', - 'crt_13.2', - 'cublas_13.2', - 'cublas_dev_13.2', - 'cuda_profiler_api_13.2', - 'cudart_13.2', - 'cufft_13.2', - 'cufft_dev_13.2', - 'cuobjdump_13.2', - 'cupti_13.2', - 'curand_13.2', - 'curand_dev_13.2', - 'cusolver_13.2', - 'cusolver_dev_13.2', - 'cusparse_13.2', - 'cusparse_dev_13.2', - 'cuxxfilt_13.2', - 'npp_13.2', - 'npp_dev_13.2', - 'nvcc_13.2', - 'nvdisasm_13.2', - 'nvfatbin_13.2', - 'nvjitlink_13.2', - 'nvjpeg_13.2', - 'nvjpeg_dev_13.2', - 'nvml_dev_13.2', - 'nvprune_13.2', - 'nvptxcompiler_13.2', - 'nvrtc_13.2', - 'nvrtc_dev_13.2', - 'nvtx_13.2', - 'nvvm_13.2', - 'opencl_13.2', - 'sanitizer_13.2', - 'thrust_13.2', - 'tileiras_13.2', - '-n' -) +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$CudaUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://developer.download.nvidia.com/compute/cuda/13.2.0/local_installers/cuda_13.2.0_windows.exe' ` + -BlobAssetName 'cuda_13.2.0_windows.exe' + +# https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html +# Intentionally omitted: +# ctadvisor_13.2 +# documentation_13.2 +# nsight_compute_13.2 +# nsight_systems_13.2 +# nsight_vse_13.2 +# occupancy_calculator_13.2 (this is named like a tool but listed as 'documentation' in the installer) +# visual_studio_integration_13.2 +DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( + '-s', + 'crt_13.2', + 'cublas_13.2', + 'cublas_dev_13.2', + 'cuda_profiler_api_13.2', + 'cudart_13.2', + 'cufft_13.2', + 'cufft_dev_13.2', + 'cuobjdump_13.2', + 'cupti_13.2', + 'curand_13.2', + 'curand_dev_13.2', + 'cusolver_13.2', + 'cusolver_dev_13.2', + 'cusparse_13.2', + 'cusparse_dev_13.2', + 'cuxxfilt_13.2', + 'npp_13.2', + 'npp_dev_13.2', + 'nvcc_13.2', + 'nvdisasm_13.2', + 'nvfatbin_13.2', + 'nvjitlink_13.2', + 'nvjpeg_13.2', + 'nvjpeg_dev_13.2', + 'nvml_dev_13.2', + 'nvprune_13.2', + 'nvptxcompiler_13.2', + 'nvrtc_13.2', + 'nvrtc_dev_13.2', + 'nvtx_13.2', + 'nvvm_13.2', + 'opencl_13.2', + 'sanitizer_13.2', + 'thrust_13.2', + 'tileiras_13.2', + '-n' +) diff --git a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 index c25a6271469156..bb9d1abe971f02 100644 --- a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 @@ -1,21 +1,21 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -$CudnnUrl = Get-AssetUrl ` - -SasToken $SasToken ` - -InternetUrl 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' ` - -BlobAssetName 'cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' - -DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2" - -if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2\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" +} + +$CudnnUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' ` + -BlobAssetName 'cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' + +DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2" + +if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2\include\cudnn.h") { + Write-Host 'cudnn appears correctly installed' +} else { + Write-Error 'cudnn appears broken!' +} diff --git a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 index b6860540ac8ced..cb0ab4900d7bf9 100644 --- a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 @@ -1,62 +1,62 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - - -$oneAPIBaseUrl = Get-AssetUrl ` - -SasToken $SasToken ` - -InternetUrl 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' ` - -BlobAssetName 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' - -$oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' - -$LocalName = 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' - -try { - [bool]$doRemove = $false - [string]$LocalPath = Join-Path $PSScriptRoot $LocalName - $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $oneAPIBaseUrl - if ($contentSource) { - Write-Host "Downloading Intel oneAPI from $contentSource..." - $tempPath = Get-TempFilePath - New-Item -ItemType Directory -Path $tempPath -Force - $LocalPath = Join-Path $tempPath $LocalName - curl.exe -L -o $LocalPath $oneAPIBaseUrl - $doRemove = $true - } else { - Write-Host 'Using local copy of Intel oneAPI...' - } - - [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" +} + + +$oneAPIBaseUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' ` + -BlobAssetName 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' + +$oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' + +$LocalName = 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' + +try { + [bool]$doRemove = $false + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $oneAPIBaseUrl + if ($contentSource) { + Write-Host "Downloading Intel oneAPI from $contentSource..." + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force + $LocalPath = Join-Path $tempPath $LocalName + curl.exe -L -o $LocalPath $oneAPIBaseUrl + $doRemove = $true + } else { + Write-Host 'Using local copy of Intel oneAPI...' + } + + [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 1e08b3384d5307..925c8617787111 100644 --- a/scripts/azure-pipelines/windows/deploy-mpi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-mpi.ps1 @@ -1,15 +1,15 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -$MpiUrl = Get-AssetUrl ` - -SasToken $SasToken ` - -InternetUrl 'https://download.microsoft.com/download/7/2/7/72731ebb-b63c-4170-ade7-836966263a8f/msmpisetup.exe' ` - -BlobAssetName 'msmpisetup-10.1.12498.52.exe' - -DownloadAndInstall -Name 'MSMPI' -LocalName 'msmpisetup.exe' -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" +} + +$MpiUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://download.microsoft.com/download/7/2/7/72731ebb-b63c-4170-ade7-836966263a8f/msmpisetup.exe' ` + -BlobAssetName 'msmpisetup-10.1.12498.52.exe' + +DownloadAndInstall -Name 'MSMPI' -LocalName 'msmpisetup.exe' -Url $MpiUrl -Args @('-force', '-unattend') diff --git a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 index 83d6f6ab423985..b03acb9d622b92 100644 --- a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 +++ b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 @@ -1,15 +1,15 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -$PwshUrl = Get-AssetUrl ` - -SasToken $SasToken ` - -InternetUrl 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-x64.msi' ` - -BlobAssetName 'PowerShell-7.6.1-win-x64.msi' - -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" +} + +$PwshUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-x64.msi' ` + -BlobAssetName 'PowerShell-7.6.1-win-x64.msi' + +DownloadAndInstall -Url $PwshUrl -Name 'PowerShell Core' -Args @('/quiet', '/norestart') diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index 3464d7470e73c8..f11d928d176494 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -1,224 +1,224 @@ -# 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 -Gets the download URL for an image asset. - -.DESCRIPTION -Get-AssetUrl returns the upstream URL when no SAS token is provided, or the -vcpkgimageminting asset URL when a SAS token is available. - -.PARAMETER SasToken -The optional SAS token for accessing vcpkgimageminting assets. - -.PARAMETER InternetUrl -The upstream download URL. - -.PARAMETER BlobAssetName -The asset file name in the vcpkgimageminting blob container. -#> -Function Get-AssetUrl { - [CmdletBinding(PositionalBinding=$false)] - Param( - [String]$SasToken, - [Parameter(Mandatory)][String]$InternetUrl, - [Parameter(Mandatory)][String]$BlobAssetName - ) - - if ([string]::IsNullOrEmpty($SasToken)) { - return $InternetUrl - } - - $SasToken = $SasToken.Replace('"', '') - return "https://vcpkgimageminting.blob.core.windows.net/assets/$BlobAssetName?$SasToken" -} - -<# -.SYNOPSIS -Describes where installation content will be sourced from. - -.DESCRIPTION -Get-ContentSourceDescription returns $null for a local copy, or a short string -describing the remote source when the content must be downloaded. - -.PARAMETER LocalPath -The path to a local copy of the content, if present. - -.PARAMETER Url -The URL to download when no local copy is available. -#> -Function Get-ContentSourceDescription { - [CmdletBinding(PositionalBinding=$false)] - Param( - [Parameter(Mandatory)][String]$LocalPath, - [Parameter(Mandatory)][String]$Url - ) - - if (Test-Path $LocalPath) { - return $null - } - - $uri = [uri]::new($Url) - if ($uri.Host -ieq 'vcpkgimageminting.blob.core.windows.net') { - return 'vcpkgimageminting using SAS token' - } - - return 'the internet' -} - -<# -.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 - $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url - if ($contentSource) { - Write-Host "Downloading $Name from $contentSource..." - $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 - } else { - Write-Host "Using local copy of $Name..." - } - - 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 - $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url - if ($contentSource) { - $tempPath = Get-TempFilePath - New-Item -ItemType Directory -Path $tempPath -Force | Out-Null - $zipPath = Join-Path $tempPath $LocalName - Write-Host "Downloading $Name from $contentSource ( $Url -> $zipPath )..." - curl.exe --fail -L -o $zipPath $Url - if (-Not $?) { - Write-Error 'Download failed!' - } - $doRemove = $true - } else { - Write-Host "Using local copy of $Name..." - $zipPath = $LocalPath - } - - 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 +Gets the download URL for an image asset. + +.DESCRIPTION +Get-AssetUrl returns the upstream URL when no SAS token is provided, or the +vcpkgimageminting asset URL when a SAS token is available. + +.PARAMETER SasToken +The optional SAS token for accessing vcpkgimageminting assets. + +.PARAMETER InternetUrl +The upstream download URL. + +.PARAMETER BlobAssetName +The asset file name in the vcpkgimageminting blob container. +#> +Function Get-AssetUrl { + [CmdletBinding(PositionalBinding=$false)] + Param( + [String]$SasToken, + [Parameter(Mandatory)][String]$InternetUrl, + [Parameter(Mandatory)][String]$BlobAssetName + ) + + if ([string]::IsNullOrEmpty($SasToken)) { + return $InternetUrl + } + + $SasToken = $SasToken.Replace('"', '') + return "https://vcpkgimageminting.blob.core.windows.net/assets/$BlobAssetName?$SasToken" +} + +<# +.SYNOPSIS +Describes where installation content will be sourced from. + +.DESCRIPTION +Get-ContentSourceDescription returns $null for a local copy, or a short string +describing the remote source when the content must be downloaded. + +.PARAMETER LocalPath +The path to a local copy of the content, if present. + +.PARAMETER Url +The URL to download when no local copy is available. +#> +Function Get-ContentSourceDescription { + [CmdletBinding(PositionalBinding=$false)] + Param( + [Parameter(Mandatory)][String]$LocalPath, + [Parameter(Mandatory)][String]$Url + ) + + if (Test-Path $LocalPath) { + return $null + } + + $uri = [uri]::new($Url) + if ($uri.Host -ieq 'vcpkgimageminting.blob.core.windows.net') { + return 'vcpkgimageminting using SAS token' + } + + return 'the internet' +} + +<# +.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 + $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url + if ($contentSource) { + Write-Host "Downloading $Name from $contentSource..." + $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 + } else { + Write-Host "Using local copy of $Name..." + } + + 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 + $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url + if ($contentSource) { + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force | Out-Null + $zipPath = Join-Path $tempPath $LocalName + Write-Host "Downloading $Name from $contentSource ( $Url -> $zipPath )..." + curl.exe --fail -L -o $zipPath $Url + if (-Not $?) { + Write-Error 'Download failed!' + } + $doRemove = $true + } else { + Write-Host "Using local copy of $Name..." + $zipPath = $LocalPath + } + + 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)" + } +} From d3b8cec5faf8cac96e16a84985c1d474b5fa9535 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 14:40:52 -0700 Subject: [PATCH 04/30] Add CMake, Ninja, and Git. --- .../azure-pipelines/windows/create-image.ps1 | 11 +- .../windows/deploy-azure-cli.ps1 | 2 +- .../azure-pipelines/windows/deploy-cmake.ps1 | 22 ++++ .../azure-pipelines/windows/deploy-cuda.ps1 | 2 +- .../azure-pipelines/windows/deploy-git.ps1 | 71 +++++++++++ .../windows/deploy-inteloneapi.ps1 | 18 +-- .../azure-pipelines/windows/deploy-mpi.ps1 | 2 +- .../azure-pipelines/windows/deploy-ninja.ps1 | 28 +++++ .../azure-pipelines/windows/deploy-pwsh.ps1 | 2 +- .../windows/deploy-visual-studio.ps1 | 2 +- .../windows/provision-entire-image.ps1 | 3 + .../windows/utility-prefix.ps1 | 118 ++++++++++-------- 12 files changed, 205 insertions(+), 76 deletions(-) create mode 100644 scripts/azure-pipelines/windows/deploy-cmake.ps1 create mode 100644 scripts/azure-pipelines/windows/deploy-git.ps1 create mode 100644 scripts/azure-pipelines/windows/deploy-ninja.ps1 diff --git a/scripts/azure-pipelines/windows/create-image.ps1 b/scripts/azure-pipelines/windows/create-image.ps1 index d4e02b2362d269..543d76d6d4090b 100644 --- a/scripts/azure-pipelines/windows/create-image.ps1 +++ b/scripts/azure-pipelines/windows/create-image.ps1 @@ -24,7 +24,7 @@ $WindowsServerSku = '2025-datacenter-azure-edition' $ErrorActionPreference = 'Stop' $ProgressActivity = 'Creating Windows Image' -$TotalProgress = 18 +$TotalProgress = 21 $CurrentProgress = 1 # Assigning this to another variable helps when running the commands in this script manually for @@ -202,6 +202,15 @@ Start-Sleep -Seconds 60 #################################################################################################### Invoke-ScriptWithPrefix -ScriptName 'deploy-visual-studio.ps1' +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-git.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-cmake.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-ninja.ps1' + #################################################################################################### Invoke-ScriptWithPrefix -ScriptName 'deploy-mpi.ps1' diff --git a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 index 8cb40611ff8aa5..6f36797e71ccc2 100644 --- a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 @@ -12,4 +12,4 @@ $AzCliUrl = Get-AssetUrl ` -InternetUrl 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.85.0-x64.msi' ` -BlobAssetName 'azure-cli-2.85.0-x64.msi' -DownloadAndInstall -Url $AzCliUrl -Name 'Azure CLI' -Args @('/quiet', '/norestart') +DownloadAndInstall -Url $AzCliUrl -Args @('/quiet', '/norestart') diff --git a/scripts/azure-pipelines/windows/deploy-cmake.ps1 b/scripts/azure-pipelines/windows/deploy-cmake.ps1 new file mode 100644 index 00000000000000..6127503c1925e1 --- /dev/null +++ b/scripts/azure-pipelines/windows/deploy-cmake.ps1 @@ -0,0 +1,22 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$CMakeUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-windows-x86_64.msi' ` + -BlobAssetName 'cmake-4.3.2-windows-x86_64.msi' + +DownloadAndInstall -Url $CMakeUrl -Args @('/quiet', '/norestart', 'ADD_CMAKE_TO_PATH=System') + +$cmakeExePath = Join-Path $env:ProgramFiles 'CMake\bin\cmake.exe' +if (Test-Path $cmakeExePath) { + Write-Host 'CMake appears correctly installed.' +} else { + Write-Error "CMake appears broken! Missing $cmakeExePath." +} diff --git a/scripts/azure-pipelines/windows/deploy-cuda.ps1 b/scripts/azure-pipelines/windows/deploy-cuda.ps1 index 5880875053afcb..8dc1a2a8d733f2 100644 --- a/scripts/azure-pipelines/windows/deploy-cuda.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cuda.ps1 @@ -21,7 +21,7 @@ $CudaUrl = Get-AssetUrl ` # nsight_vse_13.2 # occupancy_calculator_13.2 (this is named like a tool but listed as 'documentation' in the installer) # visual_studio_integration_13.2 -DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( +DownloadAndInstall -Url $CudaUrl -Args @( '-s', 'crt_13.2', 'cublas_13.2', diff --git a/scripts/azure-pipelines/windows/deploy-git.ps1 b/scripts/azure-pipelines/windows/deploy-git.ps1 new file mode 100644 index 00000000000000..cb858f24dbf195 --- /dev/null +++ b/scripts/azure-pipelines/windows/deploy-git.ps1 @@ -0,0 +1,71 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$GitUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/git-for-windows/git/releases/download/v2.54.0.windows.1/Git-2.54.0-64-bit.exe' ` + -BlobAssetName 'Git-2.54.0-64-bit.exe' + +$GitInfContent = @" +[Setup] +Lang=default +Dir=C:\Program Files\Git +Group=Git +NoIcons=0 +SetupType=default +Components=gitlfs,assoc,assoc_sh,scalar +Tasks= +EditorOption=VIM +CustomEditorPath= +DefaultBranchOption= +PathOption=Cmd +SSHOption=OpenSSH +TortoiseOption=false +CURLOption=WinSSL +CRLFOption=CRLFCommitAsIs +BashTerminalOption=ConHost +GitPullBehaviorOption=FFOnly +UseCredentialManager=Enabled +PerformanceTweaksFSCache=Enabled +EnableSymlinks=Disabled +EnableFSMonitor=Disabled +"@ + +try { + $installer = Get-LocalOrDownloadedFile -Url $GitUrl + $gitInfPath = Join-Path (Split-Path -Parent $installer.Path) 'git.inf' + [System.IO.File]::WriteAllText($gitInfPath, $gitInfContent, [System.Text.UTF8Encoding]::new($false)) + + Write-Host 'Installing Git for Windows...' + $proc = Start-Process -FilePath $installer.Path -ArgumentList @( + '/VERYSILENT', + '/NORESTART', + '/NOCANCEL', + '/SP-', + '/SUPPRESSMSGBOXES', + "/LOADINF=`"$gitInfPath`"" + ) -Wait -PassThru + $exitCode = $proc.ExitCode + + if ($exitCode -eq 0) { + Write-Host 'Installation successful!' + } else { + Write-Error "Installation failed! Exited with $exitCode." + } +} catch { + Write-Error "Installation failed! Exception: $($_.Exception.Message)" +} finally { + if ($null -ne $gitInfPath -and (Test-Path $gitInfPath)) { + Remove-Item -Path $gitInfPath -Force + } + + if ($null -ne $installer -and $installer.Temporary) { + Remove-Item -Path $installer.Path -Force + } +} diff --git a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 index cb0ab4900d7bf9..a76ee2d6f0bab6 100644 --- a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 @@ -7,7 +7,6 @@ if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } - $oneAPIBaseUrl = Get-AssetUrl ` -SasToken $SasToken ` -InternetUrl 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' ` @@ -18,19 +17,8 @@ $oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' $LocalName = 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' try { - [bool]$doRemove = $false - [string]$LocalPath = Join-Path $PSScriptRoot $LocalName - $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $oneAPIBaseUrl - if ($contentSource) { - Write-Host "Downloading Intel oneAPI from $contentSource..." - $tempPath = Get-TempFilePath - New-Item -ItemType Directory -Path $tempPath -Force - $LocalPath = Join-Path $tempPath $LocalName - curl.exe -L -o $LocalPath $oneAPIBaseUrl - $doRemove = $true - } else { - Write-Host 'Using local copy of Intel oneAPI...' - } + $installer = Get-LocalOrDownloadedFile -Url $oneAPIBaseUrl -LocalName $LocalName + [string]$LocalPath = $installer.Path [string]$extractionPath = Get-TempFilePath Write-Host 'Extracting Intel oneAPI...to folder: ' $extractionPath @@ -54,7 +42,7 @@ try { Write-Error "Installation failed! Exited with $exitCode." } - if ($doRemove) { + if ($installer.Temporary) { Remove-Item -Path $LocalPath -Force } } catch { diff --git a/scripts/azure-pipelines/windows/deploy-mpi.ps1 b/scripts/azure-pipelines/windows/deploy-mpi.ps1 index 925c8617787111..fc96c914b19b73 100644 --- a/scripts/azure-pipelines/windows/deploy-mpi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-mpi.ps1 @@ -12,4 +12,4 @@ $MpiUrl = Get-AssetUrl ` -InternetUrl 'https://download.microsoft.com/download/7/2/7/72731ebb-b63c-4170-ade7-836966263a8f/msmpisetup.exe' ` -BlobAssetName 'msmpisetup-10.1.12498.52.exe' -DownloadAndInstall -Name 'MSMPI' -LocalName 'msmpisetup.exe' -Url $MpiUrl -Args @('-force', '-unattend') +DownloadAndInstall -LocalName 'msmpisetup.exe' -Url $MpiUrl -Args @('-force', '-unattend') diff --git a/scripts/azure-pipelines/windows/deploy-ninja.ps1 b/scripts/azure-pipelines/windows/deploy-ninja.ps1 new file mode 100644 index 00000000000000..4b5f80a772c392 --- /dev/null +++ b/scripts/azure-pipelines/windows/deploy-ninja.ps1 @@ -0,0 +1,28 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$NinjaUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip' ` + -BlobAssetName 'ninja-win-1.13.2.zip' + +$CMakeBinPath = Join-Path $env:ProgramFiles 'CMake\bin' +if (-not (Test-Path $CMakeBinPath)) { + Write-Error "CMake bin directory not found at $CMakeBinPath." + throw +} + +DownloadAndUnzip -Name 'Ninja' -Url $NinjaUrl -LocalName 'ninja-win-1.13.2.zip' -Destination $CMakeBinPath + +$ninjaExePath = Join-Path $CMakeBinPath 'ninja.exe' +if (Test-Path $ninjaExePath) { + Write-Host 'Ninja appears correctly installed.' +} else { + Write-Error "Ninja appears broken! Missing $ninjaExePath." +} diff --git a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 index b03acb9d622b92..153677f7a32367 100644 --- a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 +++ b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 @@ -12,4 +12,4 @@ $PwshUrl = Get-AssetUrl ` -InternetUrl 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-x64.msi' ` -BlobAssetName 'PowerShell-7.6.1-win-x64.msi' -DownloadAndInstall -Url $PwshUrl -Name 'PowerShell Core' -Args @('/quiet', '/norestart') +DownloadAndInstall -Url $PwshUrl -Args @('/quiet', '/norestart') diff --git a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 index 0d6a93d2f96df7..b5e0b83cb2bb8f 100644 --- a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 +++ b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 @@ -36,4 +36,4 @@ foreach ($workload in $Workloads) { $vsArgs += $workload } -DownloadAndInstall -Name 'Visual Studio' -Url $VisualStudioBootstrapperUrl -Args $vsArgs +DownloadAndInstall -Url $VisualStudioBootstrapperUrl -Args $vsArgs diff --git a/scripts/azure-pipelines/windows/provision-entire-image.ps1 b/scripts/azure-pipelines/windows/provision-entire-image.ps1 index 7adc13ffa6ab09..a6323cf1519730 100644 --- a/scripts/azure-pipelines/windows/provision-entire-image.ps1 +++ b/scripts/azure-pipelines/windows/provision-entire-image.ps1 @@ -6,6 +6,9 @@ . "$PSScriptRoot\deploy-tlssettings.ps1" -RebootIfRequired 0 . "$PSScriptRoot\deploy-visual-studio.ps1" +. "$PSScriptRoot\deploy-git.ps1" +. "$PSScriptRoot\deploy-cmake.ps1" +. "$PSScriptRoot\deploy-ninja.ps1" . "$PSScriptRoot\deploy-mpi.ps1" . "$PSScriptRoot\deploy-cuda.ps1" . "$PSScriptRoot\deploy-cudnn.ps1" diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index f11d928d176494..0b0a885eee2d10 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -91,6 +91,57 @@ Function Get-ContentSourceDescription { return 'the internet' } +<# +.SYNOPSIS +Gets a local file path for an asset, downloading it if necessary. + +.DESCRIPTION +Get-LocalOrDownloadedFile returns a local file when it exists next to the +script, or downloads the content to a temporary location and returns that +path instead. + +.PARAMETER Url +The URL of the asset to acquire. + +.PARAMETER LocalName +The optional local file name to look for next to the script. +#> +Function Get-LocalOrDownloadedFile { + [CmdletBinding(PositionalBinding=$false)] + Param( + [Parameter(Mandatory)][String]$Url, + [String]$LocalName = $null + ) + + if ([string]::IsNullOrWhiteSpace($LocalName)) { + $LocalName = [uri]::new($Url).Segments[-1] + } + + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url + if ($contentSource) { + Write-Host "Downloading $LocalName from $contentSource..." + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force | Out-Null + $downloadPath = Join-Path $tempPath $LocalName + curl.exe --fail -L -o $downloadPath $Url + if (-Not $?) { + Write-Error 'Download failed!' + } + + return [pscustomobject]@{ + Path = $downloadPath + Temporary = $true + } + } + + Write-Host "Using local copy of $LocalName..." + return [pscustomobject]@{ + Path = $LocalPath + Temporary = $false + } +} + <# .SYNOPSIS Download and install a component. @@ -98,9 +149,6 @@ 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. @@ -110,36 +158,17 @@ 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] - } + $installer = Get-LocalOrDownloadedFile -Url $Url -LocalName $LocalName + $installerName = Split-Path -Path $installer.Path -Leaf - [bool]$doRemove = $false - [string]$LocalPath = Join-Path $PSScriptRoot $LocalName - $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url - if ($contentSource) { - Write-Host "Downloading $Name from $contentSource..." - $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 - } else { - Write-Host "Using local copy of $Name..." - } - - Write-Host "Installing $Name..." - $proc = Start-Process -FilePath $LocalPath -ArgumentList $Args -Wait -PassThru + Write-Host "Installing $installerName..." + $proc = Start-Process -FilePath $installer.Path -ArgumentList $Args -Wait -PassThru $exitCode = $proc.ExitCode if ($exitCode -eq 0) { @@ -150,8 +179,8 @@ Function DownloadAndInstall { Write-Error "Installation failed! Exited with $exitCode." } - if ($doRemove) { - Remove-Item -Path $LocalPath -Force + if ($installer.Temporary) { + Remove-Item -Path $installer.Path -Force } } catch { Write-Error "Installation failed! Exception: $($_.Exception.Message)" @@ -179,44 +208,23 @@ Function DownloadAndUnzip { Param( [Parameter(Mandatory)][String]$Name, [Parameter(Mandatory)][String]$Url, - [Parameter(Mandatory)][String]$Destination + [Parameter(Mandatory)][String]$Destination, + [String]$LocalName = $null ) try { - $fileName = [uri]::new($Url).Segments[-1] - if ([string]::IsNullOrWhiteSpace($LocalName)) { - $LocalName = $fileName - } - - [string]$zipPath - [bool]$doRemove = $false - [string]$LocalPath = Join-Path $PSScriptRoot $LocalName - $contentSource = Get-ContentSourceDescription -LocalPath $LocalPath -Url $Url - if ($contentSource) { - $tempPath = Get-TempFilePath - New-Item -ItemType Directory -Path $tempPath -Force | Out-Null - $zipPath = Join-Path $tempPath $LocalName - Write-Host "Downloading $Name from $contentSource ( $Url -> $zipPath )..." - curl.exe --fail -L -o $zipPath $Url - if (-Not $?) { - Write-Error 'Download failed!' - } - $doRemove = $true - } else { - Write-Host "Using local copy of $Name..." - $zipPath = $LocalPath - } + $zip = Get-LocalOrDownloadedFile -Url $Url -LocalName $LocalName Write-Host "Installing $Name to $Destination..." - & tar.exe -xvf $zipPath --strip 1 --directory $Destination + & tar.exe -xvf $zip.Path --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 + if ($zip.Temporary) { + Remove-Item -Path $zip.Path -Force } } catch { Write-Error "Installation failed! Exception: $($_.Exception.Message)" From 49fdd9a1b8065139e13d5e0dabdfa6e161a9da30 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 15:15:50 -0700 Subject: [PATCH 05/30] PowerShell nitpicks: LiteralPath, remove needless Names, etc. --- .../azure-pipelines/windows/create-image.ps1 | 12 ++-- .../azure-pipelines/windows/deploy-azcopy.ps1 | 4 +- .../windows/deploy-azure-cli.ps1 | 2 +- .../azure-pipelines/windows/deploy-cmake.ps1 | 4 +- .../azure-pipelines/windows/deploy-cuda.ps1 | 2 +- .../azure-pipelines/windows/deploy-cudnn.ps1 | 9 ++- .../azure-pipelines/windows/deploy-git.ps1 | 10 ++-- .../windows/deploy-install-disk.ps1 | 8 +-- .../windows/deploy-inteloneapi.ps1 | 4 +- .../azure-pipelines/windows/deploy-mpi.ps1 | 2 +- .../azure-pipelines/windows/deploy-ninja.ps1 | 56 +++++++++---------- .../azure-pipelines/windows/deploy-pwsh.ps1 | 2 +- .../windows/deploy-visual-studio.ps1 | 2 +- .../windows/provision-entire-image.ps1 | 4 +- .../windows/utility-prefix.ps1 | 17 +++--- 15 files changed, 69 insertions(+), 69 deletions(-) diff --git a/scripts/azure-pipelines/windows/create-image.ps1 b/scripts/azure-pipelines/windows/create-image.ps1 index 543d76d6d4090b..7e45dfada9fb49 100644 --- a/scripts/azure-pipelines/windows/create-image.ps1 +++ b/scripts/azure-pipelines/windows/create-image.ps1 @@ -163,18 +163,18 @@ function Invoke-ScriptWithPrefix { -Status "Running provisioning script $ScriptName in VM" ` -PercentComplete (100 / $TotalProgress * $CurrentProgress++) - $UtilityPrefixContent = Get-Content "$Root\utility-prefix.ps1" -Encoding utf8NoBOM -Raw + $UtilityPrefixContent = Get-Content -LiteralPath "$Root\utility-prefix.ps1" -Encoding utf8NoBOM -Raw - $tempScriptFilename = "$env:TEMP\temp-script.txt" + [System.IO.FileInfo]$tempScriptFilename = "$env:TEMP\temp-script.txt" try { - $script = Get-Content "$Root\$ScriptName" -Encoding utf8NoBOM -Raw + $script = Get-Content -LiteralPath "$Root\$ScriptName" -Encoding utf8NoBOM -Raw $replacement = @" -if (Test-Path "`$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "`$PSScriptRoot/utility-prefix.ps1") { . "`$PSScriptRoot/utility-prefix.ps1" } "@ $script = $script.Replace($replacement, $UtilityPrefixContent); - Set-Content -Path $tempScriptFilename -Value $script -Encoding utf8NoBOM + Set-Content -LiteralPath $tempScriptFilename -Value $script -Encoding utf8NoBOM $parameter = $null if (-not $SkipSas) { @@ -190,7 +190,7 @@ if (Test-Path "`$PSScriptRoot/utility-prefix.ps1") { Write-Host "$ScriptName output: $($InvokeResult.value.Message)" } finally { - Remove-Item $tempScriptFilename -Force + Remove-Item -LiteralPath $tempScriptFilename -Force } } diff --git a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 index f0c6504b153a4e..d8d615b7b62f8c 100644 --- a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } @@ -13,4 +13,4 @@ $AzCopyUrl = Get-AssetUrl ` -BlobAssetName 'azcopy_windows_amd64_10.32.3.zip' mkdir -Force "C:\AzCopy10" -DownloadAndUnzip -Name 'azcopy' -Url $AzCopyUrl -Destination "C:\AzCopy10" +DownloadAndUnzip -Url $AzCopyUrl -Destination "C:\AzCopy10" diff --git a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 index 6f36797e71ccc2..a3674c635e214a 100644 --- a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } diff --git a/scripts/azure-pipelines/windows/deploy-cmake.ps1 b/scripts/azure-pipelines/windows/deploy-cmake.ps1 index 6127503c1925e1..bfcaebbe4cda13 100644 --- a/scripts/azure-pipelines/windows/deploy-cmake.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cmake.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } @@ -15,7 +15,7 @@ $CMakeUrl = Get-AssetUrl ` DownloadAndInstall -Url $CMakeUrl -Args @('/quiet', '/norestart', 'ADD_CMAKE_TO_PATH=System') $cmakeExePath = Join-Path $env:ProgramFiles 'CMake\bin\cmake.exe' -if (Test-Path $cmakeExePath) { +if (Test-Path -LiteralPath $cmakeExePath) { Write-Host 'CMake appears correctly installed.' } else { Write-Error "CMake appears broken! Missing $cmakeExePath." diff --git a/scripts/azure-pipelines/windows/deploy-cuda.ps1 b/scripts/azure-pipelines/windows/deploy-cuda.ps1 index 8dc1a2a8d733f2..b8155ceebf21ed 100644 --- a/scripts/azure-pipelines/windows/deploy-cuda.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cuda.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } diff --git a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 index bb9d1abe971f02..6430712877511c 100644 --- a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } @@ -12,9 +12,12 @@ $CudnnUrl = Get-AssetUrl ` -InternetUrl 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' ` -BlobAssetName 'cudnn-windows-x86_64-9.20.0.48_cuda13-archive.zip' -DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2" +[System.IO.DirectoryInfo]$CudnnInstallDir = "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2" -if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2\include\cudnn.h") { +DownloadAndUnzip -Url $CudnnUrl -Destination $CudnnInstallDir + +$CudnnHeaderPath = Join-Path $CudnnInstallDir "include\cudnn.h" +if (Test-Path -LiteralPath $CudnnHeaderPath) { Write-Host 'cudnn appears correctly installed' } else { Write-Error 'cudnn appears broken!' diff --git a/scripts/azure-pipelines/windows/deploy-git.ps1 b/scripts/azure-pipelines/windows/deploy-git.ps1 index cb858f24dbf195..c8da3d9592dc14 100644 --- a/scripts/azure-pipelines/windows/deploy-git.ps1 +++ b/scripts/azure-pipelines/windows/deploy-git.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } @@ -40,7 +40,7 @@ EnableFSMonitor=Disabled try { $installer = Get-LocalOrDownloadedFile -Url $GitUrl $gitInfPath = Join-Path (Split-Path -Parent $installer.Path) 'git.inf' - [System.IO.File]::WriteAllText($gitInfPath, $gitInfContent, [System.Text.UTF8Encoding]::new($false)) + Set-Content -LiteralPath $gitInfPath -Value $gitInfContent -Encoding utf8NoBOM Write-Host 'Installing Git for Windows...' $proc = Start-Process -FilePath $installer.Path -ArgumentList @( @@ -61,11 +61,11 @@ try { } catch { Write-Error "Installation failed! Exception: $($_.Exception.Message)" } finally { - if ($null -ne $gitInfPath -and (Test-Path $gitInfPath)) { - Remove-Item -Path $gitInfPath -Force + if ($null -ne $gitInfPath) { + Remove-Item -LiteralPath $gitInfPath -Force -ErrorAction SilentlyContinue } if ($null -ne $installer -and $installer.Temporary) { - Remove-Item -Path $installer.Path -Force + Remove-Item -LiteralPath $installer.Path -Force } } diff --git a/scripts/azure-pipelines/windows/deploy-install-disk.ps1 b/scripts/azure-pipelines/windows/deploy-install-disk.ps1 index c98190055f3924..3fdfb6f36394cf 100644 --- a/scripts/azure-pipelines/windows/deploy-install-disk.ps1 +++ b/scripts/azure-pipelines/windows/deploy-install-disk.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } @@ -32,14 +32,14 @@ Param( try { Write-Host "Attempting to online physical disk $DiskNumber" - [string]$diskpartScriptPath = Get-TempFilePath -Extension 'txt' + [System.IO.FileInfo]$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 + Set-Content -LiteralPath $diskpartScriptPath -Value $diskpartScriptContent Write-Host 'Invoking DISKPART...' & diskpart.exe /s $diskpartScriptPath @@ -52,7 +52,7 @@ Param( "ASSIGN LETTER=$Letter`r`n" Write-Host "Writing diskpart script to $diskpartScriptPath with content:" Write-Host $diskpartScriptContent - Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent + Set-Content -LiteralPath $diskpartScriptPath -Value $diskpartScriptContent Write-Host 'Invoking DISKPART...' & diskpart.exe /s $diskpartScriptPath } diff --git a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 index a76ee2d6f0bab6..d13f7f2f2f3dfe 100644 --- a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } @@ -43,7 +43,7 @@ try { } if ($installer.Temporary) { - Remove-Item -Path $LocalPath -Force + Remove-Item -LiteralPath $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 fc96c914b19b73..54ac2871992c22 100644 --- a/scripts/azure-pipelines/windows/deploy-mpi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-mpi.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } diff --git a/scripts/azure-pipelines/windows/deploy-ninja.ps1 b/scripts/azure-pipelines/windows/deploy-ninja.ps1 index 4b5f80a772c392..28336e7c404fa9 100644 --- a/scripts/azure-pipelines/windows/deploy-ninja.ps1 +++ b/scripts/azure-pipelines/windows/deploy-ninja.ps1 @@ -1,28 +1,28 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: MIT - -param([string]$SasToken) - -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { - . "$PSScriptRoot/utility-prefix.ps1" -} - -$NinjaUrl = Get-AssetUrl ` - -SasToken $SasToken ` - -InternetUrl 'https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip' ` - -BlobAssetName 'ninja-win-1.13.2.zip' - -$CMakeBinPath = Join-Path $env:ProgramFiles 'CMake\bin' -if (-not (Test-Path $CMakeBinPath)) { - Write-Error "CMake bin directory not found at $CMakeBinPath." - throw -} - -DownloadAndUnzip -Name 'Ninja' -Url $NinjaUrl -LocalName 'ninja-win-1.13.2.zip' -Destination $CMakeBinPath - -$ninjaExePath = Join-Path $CMakeBinPath 'ninja.exe' -if (Test-Path $ninjaExePath) { - Write-Host 'Ninja appears correctly installed.' -} else { - Write-Error "Ninja appears broken! Missing $ninjaExePath." -} +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$NinjaUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip' ` + -BlobAssetName 'ninja-win-1.13.2.zip' + +$CMakeBinPath = Join-Path $env:ProgramFiles 'CMake\bin' +if (-not (Test-Path -LiteralPath $CMakeBinPath)) { + Write-Error "CMake bin directory not found at $CMakeBinPath." + throw +} + +DownloadAndUnzip -Url $NinjaUrl -LocalName 'ninja-win-1.13.2.zip' -Destination $CMakeBinPath + +$ninjaExePath = Join-Path $CMakeBinPath 'ninja.exe' +if (Test-Path -LiteralPath $ninjaExePath) { + Write-Host 'Ninja appears correctly installed.' +} else { + Write-Error "Ninja appears broken! Missing $ninjaExePath." +} diff --git a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 index 153677f7a32367..2d272d8a419b5c 100644 --- a/scripts/azure-pipelines/windows/deploy-pwsh.ps1 +++ b/scripts/azure-pipelines/windows/deploy-pwsh.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } diff --git a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 index b5e0b83cb2bb8f..f85f790f6f472b 100644 --- a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 +++ b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 @@ -3,7 +3,7 @@ param([string]$SasToken) -if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } diff --git a/scripts/azure-pipelines/windows/provision-entire-image.ps1 b/scripts/azure-pipelines/windows/provision-entire-image.ps1 index a6323cf1519730..3ce52f73c14cab 100644 --- a/scripts/azure-pipelines/windows/provision-entire-image.ps1 +++ b/scripts/azure-pipelines/windows/provision-entire-image.ps1 @@ -17,8 +17,8 @@ . "$PSScriptRoot\deploy-azure-cli.ps1" . "$PSScriptRoot\deploy-azcopy.ps1" try { - Copy-Item "$PSScriptRoot\deploy-settings.txt" "$PSScriptRoot\deploy-settings.ps1" + Copy-Item -LiteralPath "$PSScriptRoot\deploy-settings.txt" -Destination "$PSScriptRoot\deploy-settings.ps1" . "$PSScriptRoot\deploy-settings.ps1" } finally { - Remove-Item "$PSScriptRoot\deploy-settings.ps1" + Remove-Item -LiteralPath "$PSScriptRoot\deploy-settings.ps1" } diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index 0b0a885eee2d10..bc7b3a99f54b71 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -75,11 +75,11 @@ The URL to download when no local copy is available. Function Get-ContentSourceDescription { [CmdletBinding(PositionalBinding=$false)] Param( - [Parameter(Mandatory)][String]$LocalPath, + [Parameter(Mandatory)][System.IO.FileInfo]$LocalPath, [Parameter(Mandatory)][String]$Url ) - if (Test-Path $LocalPath) { + if (Test-Path -LiteralPath $LocalPath) { return $null } @@ -180,7 +180,7 @@ Function DownloadAndInstall { } if ($installer.Temporary) { - Remove-Item -Path $installer.Path -Force + Remove-Item -LiteralPath $installer.Path -Force } } catch { Write-Error "Installation failed! Exception: $($_.Exception.Message)" @@ -194,9 +194,6 @@ 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. @@ -206,16 +203,16 @@ 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, + [Parameter(Mandatory)][System.IO.DirectoryInfo]$Destination, [String]$LocalName = $null ) try { $zip = Get-LocalOrDownloadedFile -Url $Url -LocalName $LocalName + $zipName = Split-Path -Path $zip.Path -Leaf - Write-Host "Installing $Name to $Destination..." + Write-Host "Installing $zipName to $Destination..." & tar.exe -xvf $zip.Path --strip 1 --directory $Destination if ($LASTEXITCODE -eq 0) { Write-Host 'Installation successful!' @@ -224,7 +221,7 @@ Function DownloadAndUnzip { } if ($zip.Temporary) { - Remove-Item -Path $zip.Path -Force + Remove-Item -LiteralPath $zip.Path -Force } } catch { Write-Error "Installation failed! Exception: $($_.Exception.Message)" From 7b00c948e8f9a9a300dc0609359383de8f62dab5 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 15:19:09 -0700 Subject: [PATCH 06/30] Python 3.14.5, Azure-CLI 2.86.0 --- .../windows/deploy-azure-cli.ps1 | 4 +- scripts/vcpkg-tools.json | 1122 ++++++++--------- 2 files changed, 563 insertions(+), 563 deletions(-) diff --git a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 index a3674c635e214a..ee01557cf3812b 100644 --- a/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 @@ -9,7 +9,7 @@ if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { $AzCliUrl = Get-AssetUrl ` -SasToken $SasToken ` - -InternetUrl 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.85.0-x64.msi' ` - -BlobAssetName 'azure-cli-2.85.0-x64.msi' + -InternetUrl 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.86.0-x64.msi' ` + -BlobAssetName 'azure-cli-2.86.0-x64.msi' DownloadAndInstall -Url $AzCliUrl -Args @('/quiet', '/norestart') diff --git a/scripts/vcpkg-tools.json b/scripts/vcpkg-tools.json index fdbf18de5a5a74..1d86a8814f0af0 100644 --- a/scripts/vcpkg-tools.json +++ b/scripts/vcpkg-tools.json @@ -1,561 +1,561 @@ -{ - "schema-version": 1, - "tools": [ - { - "name": "python3", - "os": "windows", - "version": "3.14.4", - "executable": "python.exe", - "url": "https://www.python.org/ftp/python/3.14.4/python-3.14.4-embed-win32.zip", - "sha512": "0d5cdb41bf3a9081a93dd6f80a6761fee4f145ac397f73b7b15669d35da9c780d98e18bf71af71c164bf5ce3c6d8540a7c1775455ff9f0142c17ce0d47aac40a", - "archive": "python-3.14.4-embed-win32.zip" - }, - { - "name": "python3", - "os": "windows", - "arch": "amd64", - "version": "3.14.4", - "executable": "python.exe", - "url": "https://www.python.org/ftp/python/3.14.4/python-3.14.4-embed-amd64.zip", - "sha512": "232d245cecdf2ef697e01925ea50317911f7d97dec83e6c7d21f3d8112f0ca424d315f901588de9246797eb1bc51f725b3736790af62753e186395f3878ac68c", - "archive": "python-3.14.4-embed-amd64.zip" - }, - { - "name": "python3", - "os": "windows", - "arch": "arm64", - "version": "3.14.4", - "executable": "python.exe", - "url": "https://www.python.org/ftp/python/3.14.4/python-3.14.4-embed-arm64.zip", - "sha512": "9e88d8f1ea1137b43ae7b655731f89bea9874841c88fda8a3519e1e20a598e0f1c7daeccd16f3cf7c8e77e5febc30cf990db8919fce86337ab1751655a77fe57", - "archive": "python-3.14.4-embed-arm64.zip" - }, - { - "name": "cmake", - "os": "windows", - "arch": "amd64", - "version": "4.3.2", - "executable": "cmake-4.3.2-windows-x86_64/bin/cmake.exe", - "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-windows-x86_64.zip", - "sha512": "4484c3a27505e54604129e778069268a711ada3583e6cd516797e35d581e5caf96a3246d9666ab6ab7d7f297720d1a17a8c70ee65e09027023025bb454a48971", - "archive": "cmake-4.3.2-windows-x86_64.zip" - }, - { - "name": "cmake", - "os": "windows", - "arch": "arm64", - "version": "4.3.2", - "executable": "cmake-4.3.2-windows-arm64/bin/cmake.exe", - "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-windows-arm64.zip", - "sha512": "b3e88db93a1a1cd9a024f4923394dc95b7200c819c27a091a577ec90c53a0465abf024c57384b332235779a3b342e761c20ab83ff9b55c9460695bb38f6594ad", - "archive": "cmake-4.3.2-windows-arm64.zip" - }, - { - "name": "cmake", - "os": "osx", - "version": "4.3.2", - "executable": "cmake-4.3.2-macos-universal/CMake.app/Contents/bin/cmake", - "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-macos-universal.tar.gz", - "sha512": "e7503a37db108290252196cd0f348e49ab9b889eacdac1ab08ab12d397be2d1b12820cdb430a467ed4717e25f1e9fea828b51cab068ff7d0ccba1a9e584441b1", - "archive": "cmake-4.3.2-macos-universal.tar.gz" - }, - { - "name": "cmake", - "os": "linux", - "arch": "arm64", - "version": "4.3.2", - "executable": "cmake-4.3.2-linux-aarch64/bin/cmake", - "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-linux-aarch64.tar.gz", - "sha512": "ef03707e0e7514768ee34dca20fe69ab4a5c0671de6978a03f72b3242a4242f776c1a821ad367613841554ebcc3f5df392a77835c8acfe82d53b999b2ef8c062", - "archive": "cmake-4.3.2-linux-aarch64.tar.gz" - }, - { - "name": "cmake", - "os": "linux", - "arch": "amd64", - "version": "4.3.2", - "executable": "cmake-4.3.2-linux-x86_64/bin/cmake", - "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-linux-x86_64.tar.gz", - "sha512": "00ccdcc0520a6cdfa1b61fe4740d0e8da891a7887f0928de2e5f98b0062cc39b7b53fca5cb8a20430c0c4a5be5fb164a6b03120c2073c67118d7b6419f2857b9", - "archive": "cmake-4.3.2-linux-x86_64.tar.gz" - }, - { - "name": "git", - "os": "windows", - "arch": "arm64", - "version": "2.7.4", - "executable": "clangarm64/bin/git.exe", - "url": "https://github.com/git-for-windows/git/releases/download/v2.54.0.windows.1/PortableGit-2.54.0-arm64.7z.exe", - "sha512": "ba335e5f2334aad4bcef17837486505b2d79346057d18b54b669c0e07e3bbeaa194cf5ea20232fb578fbb1fe6a822a427c2db42b5e0a099dbc4003e9c1af4954", - "archive": "PortableGit-2.54.0-arm64.7z.exe" - }, - { - "name": "git", - "os": "windows", - "arch": "amd64", - "version": "2.7.4", - "executable": "mingw64/bin/git.exe", - "url": "https://github.com/git-for-windows/git/releases/download/v2.54.0.windows.1/PortableGit-2.54.0-64-bit.7z.exe", - "sha512": "0783e36b8809b55c2786d68af1e8de732d9121ad7e55b50a24c4779b2431adce0e4234d79db1ec83b4d8b300924b2b325459fb11da53ef9b114239340ccb4a9e", - "archive": "PortableGit-2.54.0-64-bit.7z.exe" - }, - { - "name": "git", - "os": "linux", - "version": "2.7.4", - "executable": "" - }, - { - "name": "git", - "os": "osx", - "version": "2.7.4", - "executable": "" - }, - { - "name": "git", - "os": "freebsd", - "version": "2.7.4", - "executable": "" - }, - { - "name": "gsutil", - "os": "windows", - "version": "5.37", - "executable": "google-cloud-sdk/bin/gsutil.cmd", - "url": "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-567.0.0-windows-x86_64-bundled-python.zip", - "sha512": "5829f8991bd1a5d07daf2e101425c4483a5c93c4526ab410b6f21e8b603f8e5ee6d899ccc9f48f6835c5f8786ed46d111bffc6488af11198dc255891f0726e52", - "archive": "google-cloud-sdk-567.0.0-windows-x86_64-bundled-python.zip" - }, - { - "name": "gsutil", - "os": "osx", - "version": "5.37", - "executable": "gsutil/gsutil", - "url": "https://storage.googleapis.com/pub/gsutil_5.37.tar.gz", - "sha512": "9c00ef800ae4f7c188a97e995147e47d699b37658e00c67003315a8db495a619476489c4c8f505b0758c8a59f29a46f0bb24ec6f3e4238c842d5704bee287051", - "archive": "gsutil_5.37.tar.gz" - }, - { - "name": "gsutil", - "os": "linux", - "version": "5.37", - "executable": "gsutil/gsutil", - "url": "https://storage.googleapis.com/pub/gsutil_5.37.tar.gz", - "sha512": "9c00ef800ae4f7c188a97e995147e47d699b37658e00c67003315a8db495a619476489c4c8f505b0758c8a59f29a46f0bb24ec6f3e4238c842d5704bee287051", - "archive": "gsutil_5.37.tar.gz" - }, - { - "name": "vswhere", - "os": "windows", - "version": "3.1.7", - "executable": "vswhere.exe", - "url": "https://github.com/microsoft/vswhere/releases/download/3.1.7/vswhere.exe", - "sha512": "40c534eb27f079c15c9782f53f82c12dabfede4d3d85f0edf8a855c2b0d5e12921a96506b37c210beab3c33220f8ff098447ad054e82d8c2603964975fc12076" - }, - { - "name": "nuget", - "os": "windows", - "version": "7.3.1", - "executable": "nuget.exe", - "url": "https://dist.nuget.org/win-x86-commandline/v7.3.1/nuget.exe", - "sha512": "f882d5dd56282391f37229c8d009c5be6a2e494951345ea389d96f6dbb35698eb296e03a57675c8acdf7540d5a8e8992eae5fffa7eba8a74fa2f7b86a6a0155a" - }, - { - "name": "nuget", - "os": "linux", - "version": "7.3.1", - "executable": "nuget.exe", - "url": "https://dist.nuget.org/win-x86-commandline/v7.3.1/nuget.exe", - "sha512": "f882d5dd56282391f37229c8d009c5be6a2e494951345ea389d96f6dbb35698eb296e03a57675c8acdf7540d5a8e8992eae5fffa7eba8a74fa2f7b86a6a0155a" - }, - { - "name": "nuget", - "os": "osx", - "version": "7.3.1", - "executable": "nuget.exe", - "url": "https://dist.nuget.org/win-x86-commandline/v7.3.1/nuget.exe", - "sha512": "f882d5dd56282391f37229c8d009c5be6a2e494951345ea389d96f6dbb35698eb296e03a57675c8acdf7540d5a8e8992eae5fffa7eba8a74fa2f7b86a6a0155a" - }, - { - "name": "coscli", - "os": "windows", - "version": "1.0.8", - "arch": "amd64", - "executable": "coscli-v1.0.8-windows-amd64.exe", - "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-windows-amd64.exe", - "sha512": "5edee25daed9e0b829b5e391ee78663d431375dd8c6f22e21a9929e730dde3cd0591dacb19067724d55f5e01f8bc3f9b12735d8f8fa1af6a58fde04fd6474ac8" - }, - { - "name": "coscli", - "os": "linux", - "version": "1.0.8", - "arch": "arm", - "executable": "coscli-v1.0.8-linux-arm", - "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-linux-arm", - "sha512": "9998843bc99fc277c882b24b848c88586ec1f03abe771f4dec7fa8ce22546ed7e6ef8d5e5f16170fa9d926809dd380c4a71d2ed867a96ce509d9487d3c85359b" - }, - { - "name": "coscli", - "os": "linux", - "version": "1.0.8", - "arch": "arm64", - "executable": "coscli-v1.0.8-linux-arm64", - "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-linux-arm64", - "sha512": "21a60f62ba7450363ec7ee4bf54fcafd60562ac715e99434872b0a35e5852111223a216bc3a714df7b32effdd149fb9040b43bc8eb6a62308fc27f6ce7faa2be" - }, - { - "name": "coscli", - "os": "linux", - "version": "1.0.8", - "arch": "amd64", - "executable": "coscli-v1.0.8-linux-amd64", - "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-linux-amd64", - "sha512": "2d7b0235204c35bcab58aeeb5526181e09d9951bb3be7c18f79faaa233e52e1249f801712129e0af3fbae124fb55cd7969c39c7de3b1d9adf07fd298699f8086" - }, - { - "name": "coscli", - "os": "osx", - "version": "1.0.8", - "arch": "arm64", - "executable": "coscli-v1.0.8-darwin-arm64", - "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-darwin-arm64", - "sha512": "ffdda882d4e78a0fca06ab767a09e563276cf9ef693dfc20f35122720a3121cc210793dc512b48f7f6ed4c6f31c2f4c371c59723e9aecccb3a51542a2b7458f1" - }, - { - "name": "coscli", - "os": "osx", - "version": "1.0.8", - "arch": "amd64", - "executable": "coscli-v1.0.8-darwin-amd64", - "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-darwin-amd64", - "sha512": "9b025da7830a875195c3f7232497b76adb78650fb5c9c7cd279d0938e3c496ed699cd763501c8f28ba5b9fcfe689aa21bea098f801204c5cbdbfd38dbd27b72f" - }, - { - "name": "7zip", - "os": "windows", - "arch": "amd64", - "version": "26.01", - "executable": "7z.exe", - "url": "https://github.com/ip7z/7zip/releases/download/26.01/7z2601-x64.exe", - "sha512": "e52d5050c8fe4c0a09bd482d36eb1377cf342c4739060d94094c4acb5aab1e53fa3842f64dec7b5df3b3bdc7394a8bc9a9cd7a88808342c1136dd9ce9fe5a0a2", - "archive": "7z2601-x64.7z.exe" - }, - { - "name": "7zip", - "os": "windows", - "arch": "arm64", - "version": "26.01", - "executable": "7z.exe", - "url": "https://github.com/ip7z/7zip/releases/download/26.01/7z2601-arm64.exe", - "sha512": "57d2fb50a28952daf31407ce3f4b05356309f7dd93f24752f9ee56b57642dbdde93a5e3577e4c8833383ced699ab514ea7c1bc12f626a686b3f266c018223bdd", - "archive": "7z2601-arm64.7z.exe" - }, - { - "name": "7zr", - "os": "windows", - "version": "26.01", - "executable": "7zr.exe", - "url": "https://github.com/ip7z/7zip/releases/download/26.01/7zr.exe", - "sha512": "f798fab87c2bcdeeb43c1ec2f1976fcc6213f1cecb88d7da6410c6a0f4db3ffda4794f462af3525cb4c86ade0bf6ba410cd4c6a96299c4e695dfeb3b05d06baa" - }, - { - "name": "ninja", - "os": "windows", - "arch": "arm64", - "version": "1.13.2", - "executable": "ninja.exe", - "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-winarm64.zip", - "sha512": "11541733eede64fe928ad645cd6e5c06cfc2fb7d8c2225aea270a6ed91ffd17c3a13332a348af236e6732cb9f1972fca088cab186439907ca2455b79709d70f6", - "archive": "ninja-winarm64-1.13.2.zip" - }, - { - "name": "ninja", - "os": "windows", - "arch": "x64", - "version": "1.13.2", - "executable": "ninja.exe", - "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip", - "sha512": "55d3d891e8fc6c8ad7f92e172125319896761e57c5125944613d9bbfa5b9374387e9fc1468ad5bcb31464f43fb1c455ea251343942595f42955dc67090aa12ee", - "archive": "ninja-win-1.13.2.zip" - }, - { - "name": "ninja", - "os": "linux", - "arch": "arm64", - "version": "1.13.2", - "executable": "ninja", - "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-linux-aarch64.zip", - "sha512": "318714ef0f7cb81fe5aab99032d19cfec07035e784ec9a1de63825ce8bed70f9ad6c5801b84bb7130a0b7acb6d5ed960b2953b27256ff51e18dfd720840faa39", - "archive": "ninja-linux-aarch64-1.13.2.zip" - }, - { - "name": "ninja", - "os": "linux", - "arch": "x64", - "version": "1.13.2", - "executable": "ninja", - "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-linux.zip", - "sha512": "714b900cf10b7ecb1b641c91f4ef696250c64984e5955a8088e4a538d6e8077f43e55f6da47efcedbe316c68d51a9e98feff51734eb0eac1b17aa85af5698753", - "archive": "ninja-linux-1.13.2.zip" - }, - { - "name": "ninja", - "os": "osx", - "version": "1.13.2", - "executable": "ninja", - "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-mac.zip", - "sha512": "bf71f820791bb2ef97da6e7f8376aaa1c51f3860884df1acde692d2df4c0747a2e167d843dcd5537813da2e5d14457d6ee3f48df13cdd678cea87e68fe73e9f0", - "archive": "ninja-mac-1.13.2.zip" - }, - { - "name": "powershell-core", - "os": "windows", - "arch": "x64", - "version": "7.5.4", - "executable": "pwsh.exe", - "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-x64.zip", - "sha512": "ad3190e3dda022b35e459193c5544583cfd111aa0dd462a76cffc029a61df027164650ccd4133bbe9b5b8db74e99b5e08ca9c930837dacb8e8b7b87f3ed1e20d", - "archive": "PowerShell-7.6.1-win-x64.zip" - }, - { - "name": "powershell-core", - "os": "windows", - "arch": "arm64", - "version": "7.5.4", - "executable": "pwsh.exe", - "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-arm64.zip", - "sha512": "c50309e3b48e7c37536429c4a4df746a04b89fed049983d39ae2a2e29cdd32b05e0c63c0de6b130459d41956039c325c5f7e2ae669128c57c0d471bc4805e0fb", - "archive": "PowerShell-7.6.1-win-arm64.zip" - }, - { - "name": "powershell-core", - "os": "linux", - "arch": "x64", - "version": "7.5.4", - "executable": "pwsh", - "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell-7.6.1-linux-x64.tar.gz", - "sha512": "2a0670a70d02dd1cb0481483a45cebde818afd93970b2a787efd2adbc94c8a54496dc20ab4b2bdb52110eedb4266cf3e44a2b868b132ffc6b98232175a0bec52", - "archive": "powershell-7.6.1-linux-x64.tar.gz" - }, - { - "name": "powershell-core", - "os": "linux", - "arch": "arm64", - "version": "7.5.4", - "executable": "pwsh", - "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell-7.6.1-linux-arm64.tar.gz", - "sha512": "f165e34db2fe6799583a6847871f30c1096404b3637306a2ec8a1e646569810f5f78eff2bddc37eff36e85755a86cff4b00a147b975a5eb020fb6f8b240223f3", - "archive": "powershell-7.6.1-linux-arm64.tar.gz" - }, - { - "name": "powershell-core", - "os": "osx", - "arch": "x64", - "version": "7.5.4", - "executable": "pwsh", - "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell-7.6.1-osx-x64.tar.gz", - "sha512": "6923052c23b1faeba784f9fe440a5319b17ff23170263369ea808eb9df3893031408fdd30986f42206de5cb6c187a6844757a2da457afd5a1d09b1cc90ba01c6", - "archive": "powershell-7.6.1-osx-x64.tar.gz" - }, - { - "name": "powershell-core", - "os": "osx", - "arch": "arm64", - "version": "7.5.4", - "executable": "pwsh", - "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell-7.6.1-osx-arm64.tar.gz", - "sha512": "5a4daadc9fa85ae55a47a5a701c7c9e14552b09f03f4b709b1d7c83f71e7f89af1a5bfb900718637a3d1ed8e5cb2f829ca14481ff8634ca0b2e44c04a3394061", - "archive": "powershell-7.6.1-osx-arm64.tar.gz" - }, - { - "name": "node", - "os": "windows", - "arch": "x64", - "version": "24.15.0", - "executable": "node-v24.15.0-win-x64/node.exe", - "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-win-x64.7z", - "sha512": "f768ab4dc00459c8a20cd58feb9cc0a9dcd6331418fffe3cffc8cf1a8f5b387c2bb43bb9c6b00f57518245d7224ae26f5977df779f4d50dca8272a2ed4b59111", - "archive": "node-v24.15.0-win-x64.7z" - }, - { - "name": "node", - "os": "windows", - "arch": "arm64", - "version": "24.15.0", - "executable": "node-v24.15.0-win-arm64/node.exe", - "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-win-arm64.7z", - "sha512": "f0b43279c97d59eb2213555d143c8f60c564555179fa9d46716ee95ed3ab36536324ffe7dece40b8b14043506e53d7a77b2d4bad93014ee5d1aa4cbb6970ff8c", - "archive": "node-v24.15.0-win-arm64.7z" - }, - { - "name": "node", - "os": "linux", - "arch": "x64", - "version": "24.15.0", - "executable": "node-v24.15.0-linux-x64/bin/node", - "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-linux-x64.tar.gz", - "sha512": "455150401b5e2ca49fd38a913e1a58fa993111853aaeeac5f793407d14e93548270ae267564d083bd4d4f77d23518124644cff873bf04ab8af663be03f71e099", - "archive": "node-v24.15.0-linux-x64.tar.gz" - }, - { - "name": "node", - "os": "linux", - "arch": "arm64", - "version": "24.15.0", - "executable": "node-v24.15.0-linux-arm64/bin/node", - "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-linux-arm64.tar.gz", - "sha512": "91edde7e3374121e83283d7097d082d5ec70d2702f552ef6a6d034e3ac74a56605bad8c173ca9b070266b7282484c89c23eb505135ea6932bc12ba03b0252fea", - "archive": "node-v24.15.0-linux-arm64.tar.gz" - }, - { - "name": "node", - "os": "osx", - "arch": "x64", - "version": "24.15.0", - "executable": "node-v24.15.0-darwin-x64/bin/node", - "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-darwin-x64.tar.gz", - "sha512": "505149f8bc6650445db9993334ea1b1099d442690b6c804b4a1de80fff22bc744a4f786ea3aee8d6f33f08711aad5d4621e8241bd9fef5748c05463620709cef", - "archive": "node-v24.15.0-darwin-x64.tar.gz" - }, - { - "name": "node", - "os": "osx", - "arch": "arm64", - "version": "24.15.0", - "executable": "node-v24.15.0-darwin-arm64/bin/node", - "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-darwin-arm64.tar.gz", - "sha512": "95e717b3653d37579cceb9012c25da2471b77603d1920599cd2693e04b642031bf991cd465b0d8fe1f3e782ec4a1d4cdd8f3f39b76018c8c9aecb70d6d65743f", - "archive": "node-v24.15.0-darwin-arm64.tar.gz" - }, - { - "name": "dotnet", - "os": "windows", - "arch": "x64", - "version": "10.0.203", - "executable": "dotnet.exe", - "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-win-x64.zip", - "sha512": "41486bb422746154171e0ede7c1d0021605430728e71b83e94368184e8c97802f9cb5151be2cd1285936b11e452ddc0728ee3766db187d428e50531ac0c2161c", - "archive": "dotnet-sdk-10.0.203-win-x64.zip" - }, - { - "name": "dotnet", - "os": "windows", - "arch": "arm64", - "version": "10.0.203", - "executable": "dotnet.exe", - "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-win-arm64.zip", - "sha512": "66e0939ce13b22267c19465060b522e940a61b6dc51c007a95ee6ccfc92def823ff7ff69f2120f1dde56c9ace2c0b687ec43547a5e50f82a9f5ca35c144bd9f7", - "archive": "dotnet-sdk-10.0.203-win-arm64.zip" - }, - { - "name": "dotnet", - "os": "windows", - "arch": "x86", - "version": "10.0.203", - "executable": "dotnet.exe", - "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-win-x86.zip", - "sha512": "825ff0fd32dcecd4f0c76d19cad308c8462b9a29f3028b79560ba71e772b126a448bdad0c0411aa99d73b65a42893361c3b2815d28700e5640d3612fb862b1c4", - "archive": "dotnet-sdk-10.0.203-win-x86.zip" - }, - { - "name": "dotnet", - "os": "linux", - "arch": "x64", - "version": "10.0.203", - "executable": "dotnet", - "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-linux-x64.tar.gz", - "sha512": "fdc36a27285b6f39b625814454f4dd3e76f2259c1279d0317d7fa297514bba607de323290d42caf67f62b9081ab26b6edb079e00f2b8c709c5826d3349a451d9", - "archive": "dotnet-sdk-10.0.203-linux-x64.tar.gz" - }, - { - "name": "dotnet", - "os": "linux", - "arch": "arm64", - "version": "10.0.203", - "executable": "dotnet", - "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-linux-arm64.tar.gz", - "sha512": "7fbc8e8b20b6d6cb40269544ea4b5e919dd7fc7b066b429f32e7fa9087224f17445b90c7807c46745cc42f299dd7ef65abd023bec03fc341ce07a5bb52a59218", - "archive": "dotnet-sdk-10.0.203-linux-arm64.tar.gz" - }, - { - "name": "dotnet", - "os": "osx", - "arch": "x64", - "version": "10.0.203", - "executable": "dotnet", - "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-osx-x64.tar.gz", - "sha512": "f324adf04eac222df3ebb9be1b824306ccc112bd9caed0657ec65a1d2e47dcf52f863c5e124a58d7aeff5f4fdb9a186562aafecc9a1ac5ee4cc61f462628ea0e", - "archive": "dotnet-sdk-10.0.203-osx-x64.tar.gz" - }, - { - "name": "dotnet", - "os": "osx", - "arch": "arm64", - "version": "10.0.203", - "executable": "dotnet", - "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-osx-arm64.tar.gz", - "sha512": "73de158cf9578c97d6aaec645457f7539615228a9974f8854816833fbc33861f31ef48d47786387eea2c1e45d7ce96c98ab760ec9f5b76009d91d83e3b87c035", - "archive": "dotnet-sdk-10.0.203-osx-arm64.tar.gz" - }, - { - "name": "azcopy", - "os": "linux", - "arch": "amd64", - "version": "10.32.3", - "executable": "azcopy_linux_amd64_10.32.3/azcopy", - "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_linux_amd64_10.32.3.tar.gz", - "sha512": "66a81fcf996c561d3316bb22df7552537504f139cfdb9e5aefdaa6f26838b56d26965f30e856a2399b50ff2a3258a199f7093072f157f78fb210cd38858fb26a", - "archive": "azcopy_linux_amd64_10.32.3.tar.gz" - }, - { - "name": "azcopy", - "os": "linux", - "arch": "arm64", - "version": "10.32.3", - "executable": "azcopy_linux_arm64_10.32.3/azcopy", - "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_linux_arm64_10.32.3.tar.gz", - "sha512": "fc65652097f82f76e8175d344ba4eee920aca14522d6c974796ac1dc2559a7fdbe845d857cd3908b7b4b2e294d5a8eee4280747479d1af6271f078ee98f29523", - "archive": "azcopy_linux_arm64_10.32.3.tar.gz" - }, - { - "name": "azcopy", - "os": "osx", - "arch": "amd64", - "version": "10.32.3", - "executable": "azcopy_darwin_amd64_10.32.3/azcopy", - "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_darwin_amd64_10.32.3.zip", - "sha512": "f50223fea93f4b249b245c6dede4643b07bacd6eac1708ec324b9b12690f20d83af3e9d8244ee6b79b9562fda605454b14715ef953f51c6f5b94ae5f37b62d01", - "archive": "azcopy_darwin_amd64_10.32.3.zip" - }, - { - "name": "azcopy", - "os": "osx", - "arch": "arm64", - "version": "10.32.3", - "executable": "azcopy_darwin_arm64_10.32.3/azcopy", - "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_darwin_arm64_10.32.3.zip", - "sha512": "f75e678abed47fb7dddf92e25baf6223cdfdd080921024baed588123eb8ed81f665c217c6cdb4fc957c0d7d1728e7bdcfe1bb3a9cc9a36e8ddd4f392adc708f0", - "archive": "azcopy_darwin_arm64_10.32.3.zip" - }, - { - "name": "azcopy", - "os": "windows", - "arch": "amd64", - "version": "10.32.3", - "executable": "azcopy_windows_amd64_10.32.3/azcopy.exe", - "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_amd64_10.32.3.zip", - "sha512": "9294d2dcbc310ddce9c6d697a396cb564c8bb0d1f531f353e98d73273e5af78bd992e5c2d8706f9132d07bea819243c17d90f39e9bbb5b40d48de57f07740096", - "archive": "azcopy_windows_amd64_10.32.3.zip" - }, - { - "name": "azcopy", - "os": "windows", - "arch": "arm64", - "version": "10.32.3", - "executable": "azcopy_windows_arm64_10.32.3/azcopy.exe", - "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_arm64_10.32.3.zip", - "sha512": "9f794442fb632959ff840ef1ab183e155f1079c004912f21aad80229a9033e1e2f1d4a60f31cc8780542e2a4c2fe08b6f651ed14906f5d62369afc4601328d4c", - "archive": "azcopy_windows_arm64_10.32.3.zip" - } - ] -} +{ + "schema-version": 1, + "tools": [ + { + "name": "python3", + "os": "windows", + "version": "3.14.5", + "executable": "python.exe", + "url": "https://www.python.org/ftp/python/3.14.5/python-3.14.5-embed-win32.zip", + "sha512": "71c1ce33aa484935306b1a24c75b26193463bb475aa6e1c0f94767649caa22a862c49b2eb341d21f3d8428ae0e4243d5cae1488a83f9f598e23678ee8c548ad8", + "archive": "python-3.14.5-embed-win32.zip" + }, + { + "name": "python3", + "os": "windows", + "arch": "amd64", + "version": "3.14.5", + "executable": "python.exe", + "url": "https://www.python.org/ftp/python/3.14.5/python-3.14.5-embed-amd64.zip", + "sha512": "c74f2c52afde12742d914740a25de5f2921474cc3d347d15ff98e9ee55d261516c291d5cc9179d9bcef370a310798ba6254685ae0a6d25a1f6acf12eac01bbde", + "archive": "python-3.14.5-embed-amd64.zip" + }, + { + "name": "python3", + "os": "windows", + "arch": "arm64", + "version": "3.14.5", + "executable": "python.exe", + "url": "https://www.python.org/ftp/python/3.14.5/python-3.14.5-embed-arm64.zip", + "sha512": "fac1c50a74bd00e3f80f655d1ab2e319a97ba131ee3eaeed37248dacc3ee650561b1acf2df159d9ed984d9bd195a4f238bfea438d7bd156e5e61438073b94c90", + "archive": "python-3.14.5-embed-arm64.zip" + }, + { + "name": "cmake", + "os": "windows", + "arch": "amd64", + "version": "4.3.2", + "executable": "cmake-4.3.2-windows-x86_64/bin/cmake.exe", + "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-windows-x86_64.zip", + "sha512": "4484c3a27505e54604129e778069268a711ada3583e6cd516797e35d581e5caf96a3246d9666ab6ab7d7f297720d1a17a8c70ee65e09027023025bb454a48971", + "archive": "cmake-4.3.2-windows-x86_64.zip" + }, + { + "name": "cmake", + "os": "windows", + "arch": "arm64", + "version": "4.3.2", + "executable": "cmake-4.3.2-windows-arm64/bin/cmake.exe", + "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-windows-arm64.zip", + "sha512": "b3e88db93a1a1cd9a024f4923394dc95b7200c819c27a091a577ec90c53a0465abf024c57384b332235779a3b342e761c20ab83ff9b55c9460695bb38f6594ad", + "archive": "cmake-4.3.2-windows-arm64.zip" + }, + { + "name": "cmake", + "os": "osx", + "version": "4.3.2", + "executable": "cmake-4.3.2-macos-universal/CMake.app/Contents/bin/cmake", + "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-macos-universal.tar.gz", + "sha512": "e7503a37db108290252196cd0f348e49ab9b889eacdac1ab08ab12d397be2d1b12820cdb430a467ed4717e25f1e9fea828b51cab068ff7d0ccba1a9e584441b1", + "archive": "cmake-4.3.2-macos-universal.tar.gz" + }, + { + "name": "cmake", + "os": "linux", + "arch": "arm64", + "version": "4.3.2", + "executable": "cmake-4.3.2-linux-aarch64/bin/cmake", + "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-linux-aarch64.tar.gz", + "sha512": "ef03707e0e7514768ee34dca20fe69ab4a5c0671de6978a03f72b3242a4242f776c1a821ad367613841554ebcc3f5df392a77835c8acfe82d53b999b2ef8c062", + "archive": "cmake-4.3.2-linux-aarch64.tar.gz" + }, + { + "name": "cmake", + "os": "linux", + "arch": "amd64", + "version": "4.3.2", + "executable": "cmake-4.3.2-linux-x86_64/bin/cmake", + "url": "https://github.com/Kitware/CMake/releases/download/v4.3.2/cmake-4.3.2-linux-x86_64.tar.gz", + "sha512": "00ccdcc0520a6cdfa1b61fe4740d0e8da891a7887f0928de2e5f98b0062cc39b7b53fca5cb8a20430c0c4a5be5fb164a6b03120c2073c67118d7b6419f2857b9", + "archive": "cmake-4.3.2-linux-x86_64.tar.gz" + }, + { + "name": "git", + "os": "windows", + "arch": "arm64", + "version": "2.7.4", + "executable": "clangarm64/bin/git.exe", + "url": "https://github.com/git-for-windows/git/releases/download/v2.54.0.windows.1/PortableGit-2.54.0-arm64.7z.exe", + "sha512": "ba335e5f2334aad4bcef17837486505b2d79346057d18b54b669c0e07e3bbeaa194cf5ea20232fb578fbb1fe6a822a427c2db42b5e0a099dbc4003e9c1af4954", + "archive": "PortableGit-2.54.0-arm64.7z.exe" + }, + { + "name": "git", + "os": "windows", + "arch": "amd64", + "version": "2.7.4", + "executable": "mingw64/bin/git.exe", + "url": "https://github.com/git-for-windows/git/releases/download/v2.54.0.windows.1/PortableGit-2.54.0-64-bit.7z.exe", + "sha512": "0783e36b8809b55c2786d68af1e8de732d9121ad7e55b50a24c4779b2431adce0e4234d79db1ec83b4d8b300924b2b325459fb11da53ef9b114239340ccb4a9e", + "archive": "PortableGit-2.54.0-64-bit.7z.exe" + }, + { + "name": "git", + "os": "linux", + "version": "2.7.4", + "executable": "" + }, + { + "name": "git", + "os": "osx", + "version": "2.7.4", + "executable": "" + }, + { + "name": "git", + "os": "freebsd", + "version": "2.7.4", + "executable": "" + }, + { + "name": "gsutil", + "os": "windows", + "version": "5.37", + "executable": "google-cloud-sdk/bin/gsutil.cmd", + "url": "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-567.0.0-windows-x86_64-bundled-python.zip", + "sha512": "5829f8991bd1a5d07daf2e101425c4483a5c93c4526ab410b6f21e8b603f8e5ee6d899ccc9f48f6835c5f8786ed46d111bffc6488af11198dc255891f0726e52", + "archive": "google-cloud-sdk-567.0.0-windows-x86_64-bundled-python.zip" + }, + { + "name": "gsutil", + "os": "osx", + "version": "5.37", + "executable": "gsutil/gsutil", + "url": "https://storage.googleapis.com/pub/gsutil_5.37.tar.gz", + "sha512": "9c00ef800ae4f7c188a97e995147e47d699b37658e00c67003315a8db495a619476489c4c8f505b0758c8a59f29a46f0bb24ec6f3e4238c842d5704bee287051", + "archive": "gsutil_5.37.tar.gz" + }, + { + "name": "gsutil", + "os": "linux", + "version": "5.37", + "executable": "gsutil/gsutil", + "url": "https://storage.googleapis.com/pub/gsutil_5.37.tar.gz", + "sha512": "9c00ef800ae4f7c188a97e995147e47d699b37658e00c67003315a8db495a619476489c4c8f505b0758c8a59f29a46f0bb24ec6f3e4238c842d5704bee287051", + "archive": "gsutil_5.37.tar.gz" + }, + { + "name": "vswhere", + "os": "windows", + "version": "3.1.7", + "executable": "vswhere.exe", + "url": "https://github.com/microsoft/vswhere/releases/download/3.1.7/vswhere.exe", + "sha512": "40c534eb27f079c15c9782f53f82c12dabfede4d3d85f0edf8a855c2b0d5e12921a96506b37c210beab3c33220f8ff098447ad054e82d8c2603964975fc12076" + }, + { + "name": "nuget", + "os": "windows", + "version": "7.3.1", + "executable": "nuget.exe", + "url": "https://dist.nuget.org/win-x86-commandline/v7.3.1/nuget.exe", + "sha512": "f882d5dd56282391f37229c8d009c5be6a2e494951345ea389d96f6dbb35698eb296e03a57675c8acdf7540d5a8e8992eae5fffa7eba8a74fa2f7b86a6a0155a" + }, + { + "name": "nuget", + "os": "linux", + "version": "7.3.1", + "executable": "nuget.exe", + "url": "https://dist.nuget.org/win-x86-commandline/v7.3.1/nuget.exe", + "sha512": "f882d5dd56282391f37229c8d009c5be6a2e494951345ea389d96f6dbb35698eb296e03a57675c8acdf7540d5a8e8992eae5fffa7eba8a74fa2f7b86a6a0155a" + }, + { + "name": "nuget", + "os": "osx", + "version": "7.3.1", + "executable": "nuget.exe", + "url": "https://dist.nuget.org/win-x86-commandline/v7.3.1/nuget.exe", + "sha512": "f882d5dd56282391f37229c8d009c5be6a2e494951345ea389d96f6dbb35698eb296e03a57675c8acdf7540d5a8e8992eae5fffa7eba8a74fa2f7b86a6a0155a" + }, + { + "name": "coscli", + "os": "windows", + "version": "1.0.8", + "arch": "amd64", + "executable": "coscli-v1.0.8-windows-amd64.exe", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-windows-amd64.exe", + "sha512": "5edee25daed9e0b829b5e391ee78663d431375dd8c6f22e21a9929e730dde3cd0591dacb19067724d55f5e01f8bc3f9b12735d8f8fa1af6a58fde04fd6474ac8" + }, + { + "name": "coscli", + "os": "linux", + "version": "1.0.8", + "arch": "arm", + "executable": "coscli-v1.0.8-linux-arm", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-linux-arm", + "sha512": "9998843bc99fc277c882b24b848c88586ec1f03abe771f4dec7fa8ce22546ed7e6ef8d5e5f16170fa9d926809dd380c4a71d2ed867a96ce509d9487d3c85359b" + }, + { + "name": "coscli", + "os": "linux", + "version": "1.0.8", + "arch": "arm64", + "executable": "coscli-v1.0.8-linux-arm64", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-linux-arm64", + "sha512": "21a60f62ba7450363ec7ee4bf54fcafd60562ac715e99434872b0a35e5852111223a216bc3a714df7b32effdd149fb9040b43bc8eb6a62308fc27f6ce7faa2be" + }, + { + "name": "coscli", + "os": "linux", + "version": "1.0.8", + "arch": "amd64", + "executable": "coscli-v1.0.8-linux-amd64", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-linux-amd64", + "sha512": "2d7b0235204c35bcab58aeeb5526181e09d9951bb3be7c18f79faaa233e52e1249f801712129e0af3fbae124fb55cd7969c39c7de3b1d9adf07fd298699f8086" + }, + { + "name": "coscli", + "os": "osx", + "version": "1.0.8", + "arch": "arm64", + "executable": "coscli-v1.0.8-darwin-arm64", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-darwin-arm64", + "sha512": "ffdda882d4e78a0fca06ab767a09e563276cf9ef693dfc20f35122720a3121cc210793dc512b48f7f6ed4c6f31c2f4c371c59723e9aecccb3a51542a2b7458f1" + }, + { + "name": "coscli", + "os": "osx", + "version": "1.0.8", + "arch": "amd64", + "executable": "coscli-v1.0.8-darwin-amd64", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.8/coscli-v1.0.8-darwin-amd64", + "sha512": "9b025da7830a875195c3f7232497b76adb78650fb5c9c7cd279d0938e3c496ed699cd763501c8f28ba5b9fcfe689aa21bea098f801204c5cbdbfd38dbd27b72f" + }, + { + "name": "7zip", + "os": "windows", + "arch": "amd64", + "version": "26.01", + "executable": "7z.exe", + "url": "https://github.com/ip7z/7zip/releases/download/26.01/7z2601-x64.exe", + "sha512": "e52d5050c8fe4c0a09bd482d36eb1377cf342c4739060d94094c4acb5aab1e53fa3842f64dec7b5df3b3bdc7394a8bc9a9cd7a88808342c1136dd9ce9fe5a0a2", + "archive": "7z2601-x64.7z.exe" + }, + { + "name": "7zip", + "os": "windows", + "arch": "arm64", + "version": "26.01", + "executable": "7z.exe", + "url": "https://github.com/ip7z/7zip/releases/download/26.01/7z2601-arm64.exe", + "sha512": "57d2fb50a28952daf31407ce3f4b05356309f7dd93f24752f9ee56b57642dbdde93a5e3577e4c8833383ced699ab514ea7c1bc12f626a686b3f266c018223bdd", + "archive": "7z2601-arm64.7z.exe" + }, + { + "name": "7zr", + "os": "windows", + "version": "26.01", + "executable": "7zr.exe", + "url": "https://github.com/ip7z/7zip/releases/download/26.01/7zr.exe", + "sha512": "f798fab87c2bcdeeb43c1ec2f1976fcc6213f1cecb88d7da6410c6a0f4db3ffda4794f462af3525cb4c86ade0bf6ba410cd4c6a96299c4e695dfeb3b05d06baa" + }, + { + "name": "ninja", + "os": "windows", + "arch": "arm64", + "version": "1.13.2", + "executable": "ninja.exe", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-winarm64.zip", + "sha512": "11541733eede64fe928ad645cd6e5c06cfc2fb7d8c2225aea270a6ed91ffd17c3a13332a348af236e6732cb9f1972fca088cab186439907ca2455b79709d70f6", + "archive": "ninja-winarm64-1.13.2.zip" + }, + { + "name": "ninja", + "os": "windows", + "arch": "x64", + "version": "1.13.2", + "executable": "ninja.exe", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip", + "sha512": "55d3d891e8fc6c8ad7f92e172125319896761e57c5125944613d9bbfa5b9374387e9fc1468ad5bcb31464f43fb1c455ea251343942595f42955dc67090aa12ee", + "archive": "ninja-win-1.13.2.zip" + }, + { + "name": "ninja", + "os": "linux", + "arch": "arm64", + "version": "1.13.2", + "executable": "ninja", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-linux-aarch64.zip", + "sha512": "318714ef0f7cb81fe5aab99032d19cfec07035e784ec9a1de63825ce8bed70f9ad6c5801b84bb7130a0b7acb6d5ed960b2953b27256ff51e18dfd720840faa39", + "archive": "ninja-linux-aarch64-1.13.2.zip" + }, + { + "name": "ninja", + "os": "linux", + "arch": "x64", + "version": "1.13.2", + "executable": "ninja", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-linux.zip", + "sha512": "714b900cf10b7ecb1b641c91f4ef696250c64984e5955a8088e4a538d6e8077f43e55f6da47efcedbe316c68d51a9e98feff51734eb0eac1b17aa85af5698753", + "archive": "ninja-linux-1.13.2.zip" + }, + { + "name": "ninja", + "os": "osx", + "version": "1.13.2", + "executable": "ninja", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-mac.zip", + "sha512": "bf71f820791bb2ef97da6e7f8376aaa1c51f3860884df1acde692d2df4c0747a2e167d843dcd5537813da2e5d14457d6ee3f48df13cdd678cea87e68fe73e9f0", + "archive": "ninja-mac-1.13.2.zip" + }, + { + "name": "powershell-core", + "os": "windows", + "arch": "x64", + "version": "7.5.4", + "executable": "pwsh.exe", + "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-x64.zip", + "sha512": "ad3190e3dda022b35e459193c5544583cfd111aa0dd462a76cffc029a61df027164650ccd4133bbe9b5b8db74e99b5e08ca9c930837dacb8e8b7b87f3ed1e20d", + "archive": "PowerShell-7.6.1-win-x64.zip" + }, + { + "name": "powershell-core", + "os": "windows", + "arch": "arm64", + "version": "7.5.4", + "executable": "pwsh.exe", + "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/PowerShell-7.6.1-win-arm64.zip", + "sha512": "c50309e3b48e7c37536429c4a4df746a04b89fed049983d39ae2a2e29cdd32b05e0c63c0de6b130459d41956039c325c5f7e2ae669128c57c0d471bc4805e0fb", + "archive": "PowerShell-7.6.1-win-arm64.zip" + }, + { + "name": "powershell-core", + "os": "linux", + "arch": "x64", + "version": "7.5.4", + "executable": "pwsh", + "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell-7.6.1-linux-x64.tar.gz", + "sha512": "2a0670a70d02dd1cb0481483a45cebde818afd93970b2a787efd2adbc94c8a54496dc20ab4b2bdb52110eedb4266cf3e44a2b868b132ffc6b98232175a0bec52", + "archive": "powershell-7.6.1-linux-x64.tar.gz" + }, + { + "name": "powershell-core", + "os": "linux", + "arch": "arm64", + "version": "7.5.4", + "executable": "pwsh", + "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell-7.6.1-linux-arm64.tar.gz", + "sha512": "f165e34db2fe6799583a6847871f30c1096404b3637306a2ec8a1e646569810f5f78eff2bddc37eff36e85755a86cff4b00a147b975a5eb020fb6f8b240223f3", + "archive": "powershell-7.6.1-linux-arm64.tar.gz" + }, + { + "name": "powershell-core", + "os": "osx", + "arch": "x64", + "version": "7.5.4", + "executable": "pwsh", + "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell-7.6.1-osx-x64.tar.gz", + "sha512": "6923052c23b1faeba784f9fe440a5319b17ff23170263369ea808eb9df3893031408fdd30986f42206de5cb6c187a6844757a2da457afd5a1d09b1cc90ba01c6", + "archive": "powershell-7.6.1-osx-x64.tar.gz" + }, + { + "name": "powershell-core", + "os": "osx", + "arch": "arm64", + "version": "7.5.4", + "executable": "pwsh", + "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.6.1/powershell-7.6.1-osx-arm64.tar.gz", + "sha512": "5a4daadc9fa85ae55a47a5a701c7c9e14552b09f03f4b709b1d7c83f71e7f89af1a5bfb900718637a3d1ed8e5cb2f829ca14481ff8634ca0b2e44c04a3394061", + "archive": "powershell-7.6.1-osx-arm64.tar.gz" + }, + { + "name": "node", + "os": "windows", + "arch": "x64", + "version": "24.15.0", + "executable": "node-v24.15.0-win-x64/node.exe", + "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-win-x64.7z", + "sha512": "f768ab4dc00459c8a20cd58feb9cc0a9dcd6331418fffe3cffc8cf1a8f5b387c2bb43bb9c6b00f57518245d7224ae26f5977df779f4d50dca8272a2ed4b59111", + "archive": "node-v24.15.0-win-x64.7z" + }, + { + "name": "node", + "os": "windows", + "arch": "arm64", + "version": "24.15.0", + "executable": "node-v24.15.0-win-arm64/node.exe", + "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-win-arm64.7z", + "sha512": "f0b43279c97d59eb2213555d143c8f60c564555179fa9d46716ee95ed3ab36536324ffe7dece40b8b14043506e53d7a77b2d4bad93014ee5d1aa4cbb6970ff8c", + "archive": "node-v24.15.0-win-arm64.7z" + }, + { + "name": "node", + "os": "linux", + "arch": "x64", + "version": "24.15.0", + "executable": "node-v24.15.0-linux-x64/bin/node", + "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-linux-x64.tar.gz", + "sha512": "455150401b5e2ca49fd38a913e1a58fa993111853aaeeac5f793407d14e93548270ae267564d083bd4d4f77d23518124644cff873bf04ab8af663be03f71e099", + "archive": "node-v24.15.0-linux-x64.tar.gz" + }, + { + "name": "node", + "os": "linux", + "arch": "arm64", + "version": "24.15.0", + "executable": "node-v24.15.0-linux-arm64/bin/node", + "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-linux-arm64.tar.gz", + "sha512": "91edde7e3374121e83283d7097d082d5ec70d2702f552ef6a6d034e3ac74a56605bad8c173ca9b070266b7282484c89c23eb505135ea6932bc12ba03b0252fea", + "archive": "node-v24.15.0-linux-arm64.tar.gz" + }, + { + "name": "node", + "os": "osx", + "arch": "x64", + "version": "24.15.0", + "executable": "node-v24.15.0-darwin-x64/bin/node", + "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-darwin-x64.tar.gz", + "sha512": "505149f8bc6650445db9993334ea1b1099d442690b6c804b4a1de80fff22bc744a4f786ea3aee8d6f33f08711aad5d4621e8241bd9fef5748c05463620709cef", + "archive": "node-v24.15.0-darwin-x64.tar.gz" + }, + { + "name": "node", + "os": "osx", + "arch": "arm64", + "version": "24.15.0", + "executable": "node-v24.15.0-darwin-arm64/bin/node", + "url": "https://nodejs.org/dist/v24.15.0/node-v24.15.0-darwin-arm64.tar.gz", + "sha512": "95e717b3653d37579cceb9012c25da2471b77603d1920599cd2693e04b642031bf991cd465b0d8fe1f3e782ec4a1d4cdd8f3f39b76018c8c9aecb70d6d65743f", + "archive": "node-v24.15.0-darwin-arm64.tar.gz" + }, + { + "name": "dotnet", + "os": "windows", + "arch": "x64", + "version": "10.0.203", + "executable": "dotnet.exe", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-win-x64.zip", + "sha512": "41486bb422746154171e0ede7c1d0021605430728e71b83e94368184e8c97802f9cb5151be2cd1285936b11e452ddc0728ee3766db187d428e50531ac0c2161c", + "archive": "dotnet-sdk-10.0.203-win-x64.zip" + }, + { + "name": "dotnet", + "os": "windows", + "arch": "arm64", + "version": "10.0.203", + "executable": "dotnet.exe", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-win-arm64.zip", + "sha512": "66e0939ce13b22267c19465060b522e940a61b6dc51c007a95ee6ccfc92def823ff7ff69f2120f1dde56c9ace2c0b687ec43547a5e50f82a9f5ca35c144bd9f7", + "archive": "dotnet-sdk-10.0.203-win-arm64.zip" + }, + { + "name": "dotnet", + "os": "windows", + "arch": "x86", + "version": "10.0.203", + "executable": "dotnet.exe", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-win-x86.zip", + "sha512": "825ff0fd32dcecd4f0c76d19cad308c8462b9a29f3028b79560ba71e772b126a448bdad0c0411aa99d73b65a42893361c3b2815d28700e5640d3612fb862b1c4", + "archive": "dotnet-sdk-10.0.203-win-x86.zip" + }, + { + "name": "dotnet", + "os": "linux", + "arch": "x64", + "version": "10.0.203", + "executable": "dotnet", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-linux-x64.tar.gz", + "sha512": "fdc36a27285b6f39b625814454f4dd3e76f2259c1279d0317d7fa297514bba607de323290d42caf67f62b9081ab26b6edb079e00f2b8c709c5826d3349a451d9", + "archive": "dotnet-sdk-10.0.203-linux-x64.tar.gz" + }, + { + "name": "dotnet", + "os": "linux", + "arch": "arm64", + "version": "10.0.203", + "executable": "dotnet", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-linux-arm64.tar.gz", + "sha512": "7fbc8e8b20b6d6cb40269544ea4b5e919dd7fc7b066b429f32e7fa9087224f17445b90c7807c46745cc42f299dd7ef65abd023bec03fc341ce07a5bb52a59218", + "archive": "dotnet-sdk-10.0.203-linux-arm64.tar.gz" + }, + { + "name": "dotnet", + "os": "osx", + "arch": "x64", + "version": "10.0.203", + "executable": "dotnet", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-osx-x64.tar.gz", + "sha512": "f324adf04eac222df3ebb9be1b824306ccc112bd9caed0657ec65a1d2e47dcf52f863c5e124a58d7aeff5f4fdb9a186562aafecc9a1ac5ee4cc61f462628ea0e", + "archive": "dotnet-sdk-10.0.203-osx-x64.tar.gz" + }, + { + "name": "dotnet", + "os": "osx", + "arch": "arm64", + "version": "10.0.203", + "executable": "dotnet", + "url": "https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.203/dotnet-sdk-10.0.203-osx-arm64.tar.gz", + "sha512": "73de158cf9578c97d6aaec645457f7539615228a9974f8854816833fbc33861f31ef48d47786387eea2c1e45d7ce96c98ab760ec9f5b76009d91d83e3b87c035", + "archive": "dotnet-sdk-10.0.203-osx-arm64.tar.gz" + }, + { + "name": "azcopy", + "os": "linux", + "arch": "amd64", + "version": "10.32.3", + "executable": "azcopy_linux_amd64_10.32.3/azcopy", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_linux_amd64_10.32.3.tar.gz", + "sha512": "66a81fcf996c561d3316bb22df7552537504f139cfdb9e5aefdaa6f26838b56d26965f30e856a2399b50ff2a3258a199f7093072f157f78fb210cd38858fb26a", + "archive": "azcopy_linux_amd64_10.32.3.tar.gz" + }, + { + "name": "azcopy", + "os": "linux", + "arch": "arm64", + "version": "10.32.3", + "executable": "azcopy_linux_arm64_10.32.3/azcopy", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_linux_arm64_10.32.3.tar.gz", + "sha512": "fc65652097f82f76e8175d344ba4eee920aca14522d6c974796ac1dc2559a7fdbe845d857cd3908b7b4b2e294d5a8eee4280747479d1af6271f078ee98f29523", + "archive": "azcopy_linux_arm64_10.32.3.tar.gz" + }, + { + "name": "azcopy", + "os": "osx", + "arch": "amd64", + "version": "10.32.3", + "executable": "azcopy_darwin_amd64_10.32.3/azcopy", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_darwin_amd64_10.32.3.zip", + "sha512": "f50223fea93f4b249b245c6dede4643b07bacd6eac1708ec324b9b12690f20d83af3e9d8244ee6b79b9562fda605454b14715ef953f51c6f5b94ae5f37b62d01", + "archive": "azcopy_darwin_amd64_10.32.3.zip" + }, + { + "name": "azcopy", + "os": "osx", + "arch": "arm64", + "version": "10.32.3", + "executable": "azcopy_darwin_arm64_10.32.3/azcopy", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_darwin_arm64_10.32.3.zip", + "sha512": "f75e678abed47fb7dddf92e25baf6223cdfdd080921024baed588123eb8ed81f665c217c6cdb4fc957c0d7d1728e7bdcfe1bb3a9cc9a36e8ddd4f392adc708f0", + "archive": "azcopy_darwin_arm64_10.32.3.zip" + }, + { + "name": "azcopy", + "os": "windows", + "arch": "amd64", + "version": "10.32.3", + "executable": "azcopy_windows_amd64_10.32.3/azcopy.exe", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_amd64_10.32.3.zip", + "sha512": "9294d2dcbc310ddce9c6d697a396cb564c8bb0d1f531f353e98d73273e5af78bd992e5c2d8706f9132d07bea819243c17d90f39e9bbb5b40d48de57f07740096", + "archive": "azcopy_windows_amd64_10.32.3.zip" + }, + { + "name": "azcopy", + "os": "windows", + "arch": "arm64", + "version": "10.32.3", + "executable": "azcopy_windows_arm64_10.32.3/azcopy.exe", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.32.3/azcopy_windows_arm64_10.32.3.zip", + "sha512": "9f794442fb632959ff840ef1ab183e155f1079c004912f21aad80229a9033e1e2f1d4a60f31cc8780542e2a4c2fe08b6f651ed14906f5d62369afc4601328d4c", + "archive": "azcopy_windows_arm64_10.32.3.zip" + } + ] +} From abca05cdefb10076eb374369b10a540cb4a97317 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 15:40:43 -0700 Subject: [PATCH 07/30] Dedupe LocalName --- scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 | 7 +++---- scripts/azure-pipelines/windows/deploy-mpi.ps1 | 5 +++-- scripts/azure-pipelines/windows/deploy-ninja.ps1 | 5 +++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 index d13f7f2f2f3dfe..a28dda5b34cca5 100644 --- a/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 @@ -7,15 +7,14 @@ if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } +$LocalName = 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' $oneAPIBaseUrl = Get-AssetUrl ` -SasToken $SasToken ` - -InternetUrl 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' ` - -BlobAssetName 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' + -InternetUrl "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/36f868e9-84b3-4b4f-90ef-ca84092cae6a/$LocalName" ` + -BlobAssetName $LocalName $oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' -$LocalName = 'intel-oneapi-hpc-toolkit-2025.3.1.54_offline.exe' - try { $installer = Get-LocalOrDownloadedFile -Url $oneAPIBaseUrl -LocalName $LocalName [string]$LocalPath = $installer.Path diff --git a/scripts/azure-pipelines/windows/deploy-mpi.ps1 b/scripts/azure-pipelines/windows/deploy-mpi.ps1 index 54ac2871992c22..a1bf10cca05c01 100644 --- a/scripts/azure-pipelines/windows/deploy-mpi.ps1 +++ b/scripts/azure-pipelines/windows/deploy-mpi.ps1 @@ -7,9 +7,10 @@ if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } +$LocalName = 'msmpisetup-10.1.12498.52.exe' $MpiUrl = Get-AssetUrl ` -SasToken $SasToken ` -InternetUrl 'https://download.microsoft.com/download/7/2/7/72731ebb-b63c-4170-ade7-836966263a8f/msmpisetup.exe' ` - -BlobAssetName 'msmpisetup-10.1.12498.52.exe' + -BlobAssetName $LocalName -DownloadAndInstall -LocalName 'msmpisetup.exe' -Url $MpiUrl -Args @('-force', '-unattend') +DownloadAndInstall -LocalName $LocalName -Url $MpiUrl -Args @('-force', '-unattend') diff --git a/scripts/azure-pipelines/windows/deploy-ninja.ps1 b/scripts/azure-pipelines/windows/deploy-ninja.ps1 index 28336e7c404fa9..5460c40be100d9 100644 --- a/scripts/azure-pipelines/windows/deploy-ninja.ps1 +++ b/scripts/azure-pipelines/windows/deploy-ninja.ps1 @@ -7,10 +7,11 @@ if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } +$LocalName = 'ninja-win-1.13.2.zip' $NinjaUrl = Get-AssetUrl ` -SasToken $SasToken ` -InternetUrl 'https://github.com/ninja-build/ninja/releases/download/v1.13.2/ninja-win.zip' ` - -BlobAssetName 'ninja-win-1.13.2.zip' + -BlobAssetName $LocalName $CMakeBinPath = Join-Path $env:ProgramFiles 'CMake\bin' if (-not (Test-Path -LiteralPath $CMakeBinPath)) { @@ -18,7 +19,7 @@ if (-not (Test-Path -LiteralPath $CMakeBinPath)) { throw } -DownloadAndUnzip -Url $NinjaUrl -LocalName 'ninja-win-1.13.2.zip' -Destination $CMakeBinPath +DownloadAndUnzip -Url $NinjaUrl -LocalName $LocalName -Destination $CMakeBinPath $ninjaExePath = Join-Path $CMakeBinPath 'ninja.exe' if (Test-Path -LiteralPath $ninjaExePath) { From d48b58ee7c3cb76a01d5ebc4e569e49dcbb9bd8f Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 15:41:11 -0700 Subject: [PATCH 08/30] VS 2026 18.6.0 --- .../rearrange-msvc-drop-layout.ps1 | 2 +- .../windows/bootstrap-from-source.cmd | 2 +- .../windows/deploy-visual-studio.ps1 | 20 +++++++++---------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 b/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 index 53692532e31c7e..06b731ab7f8ea8 100644 --- a/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 +++ b/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 @@ -20,7 +20,7 @@ param( Set-StrictMode -Version Latest -$MSVCRoot = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC" +$MSVCRoot = "C:\Program Files\Microsoft Visual Studio\2026\Build Tools\VC\Tools\MSVC" $ErrorActionPreference = "Stop" diff --git a/scripts/azure-pipelines/windows/bootstrap-from-source.cmd b/scripts/azure-pipelines/windows/bootstrap-from-source.cmd index 73a03ff7e75c4d..7aeded4a6b5603 100644 --- a/scripts/azure-pipelines/windows/bootstrap-from-source.cmd +++ b/scripts/azure-pipelines/windows/bootstrap-from-source.cmd @@ -1,4 +1,4 @@ -call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x86 -host_arch=x86 +call "C:\Program Files\Microsoft Visual Studio\2026\Build Tools\Common7\Tools\VsDevCmd.bat" -arch=x86 -host_arch=x86 git clone --depth 1 https://github.com/microsoft/vcpkg-tool vcpkg-tool git -C vcpkg-tool fetch --depth 1 origin %1 git -C vcpkg-tool switch -d FETCH_HEAD diff --git a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 index f85f790f6f472b..b9ecac615336b3 100644 --- a/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 +++ b/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 @@ -7,26 +7,24 @@ if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { . "$PSScriptRoot/utility-prefix.ps1" } -# See https://learn.microsoft.com/visualstudio/releases/2022/release-history -# 17.14.30 -$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/e8db5368-d542-4208-ab91-ea2ac11f00b8/b6341ef1f07ba0f857a18c59665065929348609b1d924787f8f104bed65a51a3/vs_Enterprise.exe' +# See https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-history +# 18.6.0 +$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/c40d2503-2e56-4f54-96c2-d886056cfedb/44f811a46b7556514b4fadc906ccc9685f96b63eeb8a36333425b3b315999c22/vs_BuildTools.exe' $Workloads = @( - 'Microsoft.VisualStudio.Workload.NativeDesktop', - 'Microsoft.VisualStudio.Workload.Universal', + 'Microsoft.VisualStudio.Workload.VCTools', + 'Microsoft.VisualStudio.Workload.MSBuildTools', 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64', 'Microsoft.VisualStudio.Component.VC.Tools.ARM64', + 'Microsoft.VisualStudio.Component.VC.Tools.ARM64EC', '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', - # 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.Windows11SDK.28000', + 'Microsoft.VisualStudio.Component.VC.CLI.Support', # .NET parts are needed for easyhook, openni2 'Microsoft.VisualStudio.Component.VC.Llvm.Clang', + 'Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset', 'Microsoft.VisualStudio.Component.VC.CMake.Project' ) From 632d9e656a509ac4b290c6d68c867765c97a9314 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 15:51:35 -0700 Subject: [PATCH 09/30] Use ascii because it's enough for what we're doing and works on older PowerShells. --- scripts/azure-pipelines/windows/create-image.ps1 | 6 +++--- scripts/azure-pipelines/windows/deploy-git.ps1 | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/azure-pipelines/windows/create-image.ps1 b/scripts/azure-pipelines/windows/create-image.ps1 index 7e45dfada9fb49..45cd34911924e8 100644 --- a/scripts/azure-pipelines/windows/create-image.ps1 +++ b/scripts/azure-pipelines/windows/create-image.ps1 @@ -163,18 +163,18 @@ function Invoke-ScriptWithPrefix { -Status "Running provisioning script $ScriptName in VM" ` -PercentComplete (100 / $TotalProgress * $CurrentProgress++) - $UtilityPrefixContent = Get-Content -LiteralPath "$Root\utility-prefix.ps1" -Encoding utf8NoBOM -Raw + $UtilityPrefixContent = Get-Content -LiteralPath "$Root\utility-prefix.ps1" -Encoding ascii -Raw [System.IO.FileInfo]$tempScriptFilename = "$env:TEMP\temp-script.txt" try { - $script = Get-Content -LiteralPath "$Root\$ScriptName" -Encoding utf8NoBOM -Raw + $script = Get-Content -LiteralPath "$Root\$ScriptName" -Encoding ascii -Raw $replacement = @" if (Test-Path -LiteralPath "`$PSScriptRoot/utility-prefix.ps1") { . "`$PSScriptRoot/utility-prefix.ps1" } "@ $script = $script.Replace($replacement, $UtilityPrefixContent); - Set-Content -LiteralPath $tempScriptFilename -Value $script -Encoding utf8NoBOM + Set-Content -LiteralPath $tempScriptFilename -Value $script -Encoding ascii $parameter = $null if (-not $SkipSas) { diff --git a/scripts/azure-pipelines/windows/deploy-git.ps1 b/scripts/azure-pipelines/windows/deploy-git.ps1 index c8da3d9592dc14..c029d70051f869 100644 --- a/scripts/azure-pipelines/windows/deploy-git.ps1 +++ b/scripts/azure-pipelines/windows/deploy-git.ps1 @@ -40,7 +40,7 @@ EnableFSMonitor=Disabled try { $installer = Get-LocalOrDownloadedFile -Url $GitUrl $gitInfPath = Join-Path (Split-Path -Parent $installer.Path) 'git.inf' - Set-Content -LiteralPath $gitInfPath -Value $gitInfContent -Encoding utf8NoBOM + Set-Content -LiteralPath $gitInfPath -Value $gitInfContent -Encoding ascii Write-Host 'Installing Git for Windows...' $proc = Start-Process -FilePath $installer.Path -ArgumentList @( From 5f45e30830d6f760cd33801c3a4b33881f3c3c5f Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 16:27:03 -0700 Subject: [PATCH 10/30] Add 7z and fix ninja installation. --- .../azure-pipelines/windows/create-image.ps1 | 5 +- .../azure-pipelines/windows/deploy-azcopy.ps1 | 2 +- .../azure-pipelines/windows/deploy-cudnn.ps1 | 2 +- .../windows/deploy-sevenzip.ps1 | 15 ++++++ .../windows/provision-entire-image.ps1 | 49 ++++++++++--------- .../windows/utility-prefix.ps1 | 8 ++- 6 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 scripts/azure-pipelines/windows/deploy-sevenzip.ps1 diff --git a/scripts/azure-pipelines/windows/create-image.ps1 b/scripts/azure-pipelines/windows/create-image.ps1 index 45cd34911924e8..3a1ed0e2ee45ec 100644 --- a/scripts/azure-pipelines/windows/create-image.ps1 +++ b/scripts/azure-pipelines/windows/create-image.ps1 @@ -24,7 +24,7 @@ $WindowsServerSku = '2025-datacenter-azure-edition' $ErrorActionPreference = 'Stop' $ProgressActivity = 'Creating Windows Image' -$TotalProgress = 21 +$TotalProgress = 22 $CurrentProgress = 1 # Assigning this to another variable helps when running the commands in this script manually for @@ -199,6 +199,9 @@ Invoke-ScriptWithPrefix -ScriptName 'deploy-tlssettings.ps1' -SkipSas Write-Host 'Waiting 1 minute for VM to reboot...' Start-Sleep -Seconds 60 +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-sevenzip.ps1' + #################################################################################################### Invoke-ScriptWithPrefix -ScriptName 'deploy-visual-studio.ps1' diff --git a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 index d8d615b7b62f8c..23b8cf132d3578 100644 --- a/scripts/azure-pipelines/windows/deploy-azcopy.ps1 +++ b/scripts/azure-pipelines/windows/deploy-azcopy.ps1 @@ -13,4 +13,4 @@ $AzCopyUrl = Get-AssetUrl ` -BlobAssetName 'azcopy_windows_amd64_10.32.3.zip' mkdir -Force "C:\AzCopy10" -DownloadAndUnzip -Url $AzCopyUrl -Destination "C:\AzCopy10" +DownloadAndUnzip -Url $AzCopyUrl -Destination "C:\AzCopy10" -StripRootDirectory diff --git a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 index 6430712877511c..599da3beafe934 100644 --- a/scripts/azure-pipelines/windows/deploy-cudnn.ps1 +++ b/scripts/azure-pipelines/windows/deploy-cudnn.ps1 @@ -14,7 +14,7 @@ $CudnnUrl = Get-AssetUrl ` [System.IO.DirectoryInfo]$CudnnInstallDir = "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v13.2" -DownloadAndUnzip -Url $CudnnUrl -Destination $CudnnInstallDir +DownloadAndUnzip -Url $CudnnUrl -Destination $CudnnInstallDir -StripRootDirectory $CudnnHeaderPath = Join-Path $CudnnInstallDir "include\cudnn.h" if (Test-Path -LiteralPath $CudnnHeaderPath) { diff --git a/scripts/azure-pipelines/windows/deploy-sevenzip.ps1 b/scripts/azure-pipelines/windows/deploy-sevenzip.ps1 new file mode 100644 index 00000000000000..7072e2de7ab7a2 --- /dev/null +++ b/scripts/azure-pipelines/windows/deploy-sevenzip.ps1 @@ -0,0 +1,15 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path -LiteralPath "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +$SevenZipUrl = Get-AssetUrl ` + -SasToken $SasToken ` + -InternetUrl 'https://github.com/ip7z/7zip/releases/download/26.01/7z2601-x64.exe' ` + -BlobAssetName '7z2601-x64.exe' + +DownloadAndInstall -Url $SevenZipUrl -Args @('/S') diff --git a/scripts/azure-pipelines/windows/provision-entire-image.ps1 b/scripts/azure-pipelines/windows/provision-entire-image.ps1 index 3ce52f73c14cab..ea29c168d50572 100644 --- a/scripts/azure-pipelines/windows/provision-entire-image.ps1 +++ b/scripts/azure-pipelines/windows/provision-entire-image.ps1 @@ -1,24 +1,25 @@ -# 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-git.ps1" -. "$PSScriptRoot\deploy-cmake.ps1" -. "$PSScriptRoot\deploy-ninja.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" -. "$PSScriptRoot\deploy-azcopy.ps1" -try { - Copy-Item -LiteralPath "$PSScriptRoot\deploy-settings.txt" -Destination "$PSScriptRoot\deploy-settings.ps1" - . "$PSScriptRoot\deploy-settings.ps1" -} finally { - Remove-Item -LiteralPath "$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-sevenzip.ps1" +. "$PSScriptRoot\deploy-visual-studio.ps1" +. "$PSScriptRoot\deploy-git.ps1" +. "$PSScriptRoot\deploy-cmake.ps1" +. "$PSScriptRoot\deploy-ninja.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" +. "$PSScriptRoot\deploy-azcopy.ps1" +try { + Copy-Item -LiteralPath "$PSScriptRoot\deploy-settings.txt" -Destination "$PSScriptRoot\deploy-settings.ps1" + . "$PSScriptRoot\deploy-settings.ps1" +} finally { + Remove-Item -LiteralPath "$PSScriptRoot\deploy-settings.ps1" +} diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index bc7b3a99f54b71..18c3d780f72663 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -205,6 +205,7 @@ Function DownloadAndUnzip { Param( [Parameter(Mandatory)][String]$Url, [Parameter(Mandatory)][System.IO.DirectoryInfo]$Destination, + [switch]$StripRootDirectory, [String]$LocalName = $null ) @@ -213,7 +214,12 @@ Function DownloadAndUnzip { $zipName = Split-Path -Path $zip.Path -Leaf Write-Host "Installing $zipName to $Destination..." - & tar.exe -xvf $zip.Path --strip 1 --directory $Destination + if ($StripRootDirectory) { + & tar.exe -xvf $zip.Path --strip 1 --directory $Destination + } else { + & tar.exe -xvf $zip.Path --directory $Destination + } + if ($LASTEXITCODE -eq 0) { Write-Host 'Installation successful!' } else { From c95941bcf9dafa709355d0cb2a48bb0f33d21f4a Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 17:34:36 -0700 Subject: [PATCH 11/30] Remove FileInfo use from ConstrainedLanguage mode. --- scripts/azure-pipelines/windows/create-image.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/azure-pipelines/windows/create-image.ps1 b/scripts/azure-pipelines/windows/create-image.ps1 index 3a1ed0e2ee45ec..08a7627164229d 100644 --- a/scripts/azure-pipelines/windows/create-image.ps1 +++ b/scripts/azure-pipelines/windows/create-image.ps1 @@ -165,7 +165,7 @@ function Invoke-ScriptWithPrefix { $UtilityPrefixContent = Get-Content -LiteralPath "$Root\utility-prefix.ps1" -Encoding ascii -Raw - [System.IO.FileInfo]$tempScriptFilename = "$env:TEMP\temp-script.txt" + $tempScriptFilename = "$env:TEMP\temp-script.txt" try { $script = Get-Content -LiteralPath "$Root\$ScriptName" -Encoding ascii -Raw $replacement = @" From 48a578f6b170624282b8cb0d26eb55b74eb78067 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 17:47:17 -0700 Subject: [PATCH 12/30] Fix LocalName extraction when a SAS token is used. --- scripts/azure-pipelines/windows/utility-prefix.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index 18c3d780f72663..e89d91cc936467 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -114,7 +114,7 @@ Function Get-LocalOrDownloadedFile { ) if ([string]::IsNullOrWhiteSpace($LocalName)) { - $LocalName = [uri]::new($Url).Segments[-1] + $LocalName = [System.IO.Path]::GetFileName([uri]::new($Url).AbsolutePath) } [string]$LocalPath = Join-Path $PSScriptRoot $LocalName From 190ce5c4ca02000059185aff9ab6ddc05dde6b26 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 17:53:36 -0700 Subject: [PATCH 13/30] Actually fix ConstrainedLanguage mode. --- scripts/azure-pipelines/windows/utility-prefix.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index e89d91cc936467..b1c2a898ce202f 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -114,7 +114,7 @@ Function Get-LocalOrDownloadedFile { ) if ([string]::IsNullOrWhiteSpace($LocalName)) { - $LocalName = [System.IO.Path]::GetFileName([uri]::new($Url).AbsolutePath) + $LocalName = Split-Path -Leaf ([uri]::new($Url).LocalPath) } [string]$LocalPath = Join-Path $PSScriptRoot $LocalName From 1ae1b69b524831cea7bb08ecad93e3140586303e Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 12 May 2026 19:10:23 -0700 Subject: [PATCH 14/30] =?UTF-8?q?=F0=9F=90=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../azure-pipelines/windows/utility-prefix.ps1 | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index b1c2a898ce202f..8082d279f0ce99 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -46,7 +46,7 @@ Function Get-AssetUrl { [CmdletBinding(PositionalBinding=$false)] Param( [String]$SasToken, - [Parameter(Mandatory)][String]$InternetUrl, + [Parameter(Mandatory)][uri]$InternetUrl, [Parameter(Mandatory)][String]$BlobAssetName ) @@ -55,7 +55,7 @@ Function Get-AssetUrl { } $SasToken = $SasToken.Replace('"', '') - return "https://vcpkgimageminting.blob.core.windows.net/assets/$BlobAssetName?$SasToken" + return [uri]"https://vcpkgimageminting.blob.core.windows.net/assets/$($BlobAssetName)?$($SasToken)" } <# @@ -76,14 +76,13 @@ Function Get-ContentSourceDescription { [CmdletBinding(PositionalBinding=$false)] Param( [Parameter(Mandatory)][System.IO.FileInfo]$LocalPath, - [Parameter(Mandatory)][String]$Url + [Parameter(Mandatory)][uri]$Url ) if (Test-Path -LiteralPath $LocalPath) { return $null } - $uri = [uri]::new($Url) if ($uri.Host -ieq 'vcpkgimageminting.blob.core.windows.net') { return 'vcpkgimageminting using SAS token' } @@ -109,12 +108,12 @@ The optional local file name to look for next to the script. Function Get-LocalOrDownloadedFile { [CmdletBinding(PositionalBinding=$false)] Param( - [Parameter(Mandatory)][String]$Url, + [Parameter(Mandatory)][uri]$Url, [String]$LocalName = $null ) if ([string]::IsNullOrWhiteSpace($LocalName)) { - $LocalName = Split-Path -Leaf ([uri]::new($Url).LocalPath) + $LocalName = Split-Path -Leaf ($Url.LocalPath) } [string]$LocalPath = Join-Path $PSScriptRoot $LocalName @@ -158,7 +157,7 @@ The command-line arguments to pass to the installer. Function DownloadAndInstall { [CmdletBinding(PositionalBinding=$false)] Param( - [Parameter(Mandatory)][String]$Url, + [Parameter(Mandatory)][uri]$Url, [Parameter(Mandatory)][String[]]$Args, [String]$LocalName = $null ) @@ -203,7 +202,7 @@ The location to which the zip should be extracted Function DownloadAndUnzip { [CmdletBinding(PositionalBinding=$false)] Param( - [Parameter(Mandatory)][String]$Url, + [Parameter(Mandatory)][uri]$Url, [Parameter(Mandatory)][System.IO.DirectoryInfo]$Destination, [switch]$StripRootDirectory, [String]$LocalName = $null From ee80593f7b06d19e4afaa19599068a8806346b56 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Thu, 14 May 2026 21:28:03 -0700 Subject: [PATCH 15/30] [opencv2] Disable on Windows. MSVC 19.51 removes all std::tr1 and there are hundreds of references in ~84 files to that in opencv2. The resulting patch would not meet vcpkg's requirements. The last opencv2 release is from 2019 and it is unlikely that they will ever fix this. Skips rather than fails because this will never be fixed. It still works on non-Windows and older Windows compilers so no reason to deindex it right now, but we have to disable testing of it in our lab. (Sorry @cenit :( ) --- scripts/ci.baseline.txt | 7 +++++++ scripts/ci.feature.baseline.txt | 10 +++++++--- scripts/test_ports/vcpkg-ci-opencv/vcpkg.json | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 9f5f3058b9926a..c8e6d8501f6a4c 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -987,6 +987,13 @@ onnxruntime:x64-windows=fail openblas:x64-windows-static-md=pass openblas:x64-windows-static=pass opencc:x64-android=fail # opencc/deps/rapidjson-1.1.0/rapidjson.h: Unknown machine endianess detected +opencv2:arm64-windows-static-md=skip # broken by MSVC 19.51 removal of std::tr1, no point in "passing remove from fail" testing +opencv2:arm64-windows=skip +opencv2:x64-windows-release=skip +opencv2:x64-windows-static-md=skip +opencv2:x64-windows-static=skip +opencv2:x64-windows=skip +opencv2:x86-windows=skip openldap:arm64-linux=fail openmama:arm64-windows-static-md=fail openmama:x64-windows-static-md=fail diff --git a/scripts/ci.feature.baseline.txt b/scripts/ci.feature.baseline.txt index 6cd1ee118e9677..48d8989d2a8ff6 100644 --- a/scripts/ci.feature.baseline.txt +++ b/scripts/ci.feature.baseline.txt @@ -872,11 +872,15 @@ opencc:arm64-windows=fail # opencc/deps/rapidjson-1.1.0/rapidjson.h: Unknown mac opencc:x64-android=fail opencsg:arm64-linux=cascade opencv:arm64-linux=cascade +opencv2:arm64-windows-static-md=skip # broken by MSVC 19.51 removal of std::tr1 +opencv2:arm64-windows=skip +opencv2:x64-windows-release=skip +opencv2:x64-windows-static-md=skip +opencv2:x64-windows-static=skip +opencv2:x64-windows=skip +opencv2:x86-windows=skip opencv2[dc1394]:arm64-linux=cascade -opencv2[dc1394](windows & !arm)=cascade opencv2[ffmpeg](!windows)=feature-fails # ffmpeg5+ is not supported under opencv2. See https://github.com/microsoft/vcpkg/issues/32151 -opencv2[gtk]:x64-windows-static-md=cascade -opencv2[gtk]:x64-windows-static=cascade opencv2[python]:arm64-osx=feature-fails # requires python2 opencv2[qt]:arm64-linux=cascade opencv2[world]=feature-fails # See https://github.com/microsoft/vcpkg/issues/29943 diff --git a/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json b/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json index 77c4aace1f653e..3aa53cde79a81e 100644 --- a/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json +++ b/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json @@ -149,7 +149,7 @@ "qt", "tiff" ], - "platform": "!android & !uwp & !(windows & arm)" + "platform": "!android & !windows" }, { "name": "opencv3", From 74d8fece2a2e485ebfcb65360ce3b59ded83b66f Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 15 May 2026 20:26:13 -0700 Subject: [PATCH 16/30] Strip extra ? from SAS tokens. --- scripts/azure-pipelines/windows/utility-prefix.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index 8082d279f0ce99..9bd9d2c63821a4 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -54,7 +54,7 @@ Function Get-AssetUrl { return $InternetUrl } - $SasToken = $SasToken.Replace('"', '') + $SasToken = $SasToken.Replace('"', '').TrimStart('?') return [uri]"https://vcpkgimageminting.blob.core.windows.net/assets/$($BlobAssetName)?$($SasToken)" } From 68e6a3dbf926cf1444927b6506a5c7f4423f5a32 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 15 May 2026 21:18:27 -0700 Subject: [PATCH 17/30] Update Windows pools. --- 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 28025cbd8184eb..e2756af6151f9f 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 2026.04.24 + demands: ImageVersionOverride -equals 2026.05.15 timeoutInMinutes: 2880 # 2 days variables: - name: WORKING_ROOT diff --git a/scripts/azure-pipelines/windows/azure-pipelines.yml b/scripts/azure-pipelines/windows/azure-pipelines.yml index a23948d9e7c31e..3cdf954acf563c 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 2026.04.24 + demands: ImageVersionOverride -equals 2026.05.15 timeoutInMinutes: 2880 # 2 days variables: - name: WORKING_ROOT From 3ffb79509f24b9a3a0a65acb690e47b55b422315 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 18 May 2026 15:11:36 -0700 Subject: [PATCH 18/30] Fixup drop layout --- .../windows-unstable/rearrange-msvc-drop-layout.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 b/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 index 06b731ab7f8ea8..be6e1d8ad0f2e0 100644 --- a/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 +++ b/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 @@ -20,7 +20,7 @@ param( Set-StrictMode -Version Latest -$MSVCRoot = "C:\Program Files\Microsoft Visual Studio\2026\Build Tools\VC\Tools\MSVC" +$MSVCRoot = "C:\Program Files (x86)\Microsoft Visual Studio\2026\Build Tools\VC\Tools\MSVC" $ErrorActionPreference = "Stop" From 420b951e3eef531e0db62ddf4ec9cea087d88f0f Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 18 May 2026 15:12:32 -0700 Subject: [PATCH 19/30] Fixup bootstrap from source --- scripts/azure-pipelines/windows/bootstrap-from-source.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/azure-pipelines/windows/bootstrap-from-source.cmd b/scripts/azure-pipelines/windows/bootstrap-from-source.cmd index 7aeded4a6b5603..d225e61b584e5c 100644 --- a/scripts/azure-pipelines/windows/bootstrap-from-source.cmd +++ b/scripts/azure-pipelines/windows/bootstrap-from-source.cmd @@ -1,4 +1,4 @@ -call "C:\Program Files\Microsoft Visual Studio\2026\Build Tools\Common7\Tools\VsDevCmd.bat" -arch=x86 -host_arch=x86 +call "C:\Program Files (x86)\Microsoft Visual Studio\2026\Build Tools\Common7\Tools\VsDevCmd.bat" -arch=x86 -host_arch=x86 git clone --depth 1 https://github.com/microsoft/vcpkg-tool vcpkg-tool git -C vcpkg-tool fetch --depth 1 origin %1 git -C vcpkg-tool switch -d FETCH_HEAD From 89003b527c7526d879fb256724d0b93e55332513 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Mon, 18 May 2026 15:14:12 -0700 Subject: [PATCH 20/30] Provision all CRLFs. --- .../windows/provision-entire-image.ps1 | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/scripts/azure-pipelines/windows/provision-entire-image.ps1 b/scripts/azure-pipelines/windows/provision-entire-image.ps1 index ea29c168d50572..20dba761c143d0 100644 --- a/scripts/azure-pipelines/windows/provision-entire-image.ps1 +++ b/scripts/azure-pipelines/windows/provision-entire-image.ps1 @@ -1,25 +1,25 @@ -# 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-sevenzip.ps1" -. "$PSScriptRoot\deploy-visual-studio.ps1" -. "$PSScriptRoot\deploy-git.ps1" -. "$PSScriptRoot\deploy-cmake.ps1" -. "$PSScriptRoot\deploy-ninja.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" -. "$PSScriptRoot\deploy-azcopy.ps1" -try { - Copy-Item -LiteralPath "$PSScriptRoot\deploy-settings.txt" -Destination "$PSScriptRoot\deploy-settings.ps1" - . "$PSScriptRoot\deploy-settings.ps1" -} finally { - Remove-Item -LiteralPath "$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-sevenzip.ps1" +. "$PSScriptRoot\deploy-visual-studio.ps1" +. "$PSScriptRoot\deploy-git.ps1" +. "$PSScriptRoot\deploy-cmake.ps1" +. "$PSScriptRoot\deploy-ninja.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" +. "$PSScriptRoot\deploy-azcopy.ps1" +try { + Copy-Item -LiteralPath "$PSScriptRoot\deploy-settings.txt" -Destination "$PSScriptRoot\deploy-settings.ps1" + . "$PSScriptRoot\deploy-settings.ps1" +} finally { + Remove-Item -LiteralPath "$PSScriptRoot\deploy-settings.ps1" +} From 10e7a4c3314f0b62f2cdaaddc26ed5a6e16631e0 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Tue, 19 May 2026 14:47:03 -0700 Subject: [PATCH 21/30] [zeroc-ice] Baseline. --- scripts/ci.baseline.txt | 7 +++++++ scripts/ci.feature.baseline.txt | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index c8e6d8501f6a4c..5d5241821fe242 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -1202,7 +1202,14 @@ yubico-piv-tool:x64-linux=fail # requires system libpcsclite-dev zeroc-ice:arm-neon-android=fail zeroc-ice:arm64-android=fail zeroc-ice:arm64-linux=fail +zeroc-ice:arm64-windows-static-md=fail +zeroc-ice:arm64-windows=fail zeroc-ice:x64-android=fail +zeroc-ice:x64-windows-release=fail +zeroc-ice:x64-windows-static-md=fail +zeroc-ice:x64-windows-static=fail +zeroc-ice:x64-windows=fail +zeroc-ice:x86-windows=fail zimpl:arm64-linux=fail zookeeper:arm64-linux=fail zookeeper:arm64-osx=fail # Needs Java runtime diff --git a/scripts/ci.feature.baseline.txt b/scripts/ci.feature.baseline.txt index 48d8989d2a8ff6..d7e49bb2a60ea6 100644 --- a/scripts/ci.feature.baseline.txt +++ b/scripts/ci.feature.baseline.txt @@ -1487,6 +1487,13 @@ yoctolib:arm64-linux=cascade yubico-piv-tool:arm64-linux=fail # requires system libpcsclite-dev yubico-piv-tool:x64-linux=fail # requires system libpcsclite-dev zeroc-ice:arm64-linux=fail +zeroc-ice:arm64-windows-static-md=fail +zeroc-ice:arm64-windows=fail +zeroc-ice:x64-windows-release=fail +zeroc-ice:x64-windows-static-md=fail +zeroc-ice:x64-windows-static=fail +zeroc-ice:x64-windows=fail +zeroc-ice:x86-windows=fail zeroc-ice[icediscovery]:x64-windows-static-md=cascade zeroc-ice[icediscovery]:x64-windows-static=cascade zeromq[sodium]:arm64-linux=cascade From 232532df05539868fda7c3c0b420dbdc3ac54d55 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 20 May 2026 12:12:12 -0700 Subject: [PATCH 22/30] zeroc-ice arm64-windows is unsupported. --- scripts/ci.baseline.txt | 2 -- scripts/ci.feature.baseline.txt | 2 -- 2 files changed, 4 deletions(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 5d5241821fe242..338f479e6926f5 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -1202,8 +1202,6 @@ yubico-piv-tool:x64-linux=fail # requires system libpcsclite-dev zeroc-ice:arm-neon-android=fail zeroc-ice:arm64-android=fail zeroc-ice:arm64-linux=fail -zeroc-ice:arm64-windows-static-md=fail -zeroc-ice:arm64-windows=fail zeroc-ice:x64-android=fail zeroc-ice:x64-windows-release=fail zeroc-ice:x64-windows-static-md=fail diff --git a/scripts/ci.feature.baseline.txt b/scripts/ci.feature.baseline.txt index d7e49bb2a60ea6..96953e354bed92 100644 --- a/scripts/ci.feature.baseline.txt +++ b/scripts/ci.feature.baseline.txt @@ -1487,8 +1487,6 @@ yoctolib:arm64-linux=cascade yubico-piv-tool:arm64-linux=fail # requires system libpcsclite-dev yubico-piv-tool:x64-linux=fail # requires system libpcsclite-dev zeroc-ice:arm64-linux=fail -zeroc-ice:arm64-windows-static-md=fail -zeroc-ice:arm64-windows=fail zeroc-ice:x64-windows-release=fail zeroc-ice:x64-windows-static-md=fail zeroc-ice:x64-windows-static=fail From b26682b775a3029fafcc7c811d4f87b0ffe49f75 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 20 May 2026 12:34:21 -0700 Subject: [PATCH 23/30] [hdf5] ICE --- scripts/ci.baseline.txt | 2 ++ scripts/ci.feature.baseline.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 338f479e6926f5..54d0d780bc18b1 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -249,6 +249,8 @@ gz-tools:arm-neon-android=fail gz-tools:arm64-android=fail gz-tools:x64-android=fail halide:x64-windows-static=fail +hdf5:arm64-windows-static-md=fail # 2.1.1-15941d9053.clean\src\H5Tinit_float.c(545) : fatal error C1001: Internal compiler error. -- already fixed in 19.52.36417 +hdf5:arm64-windows=fail hwloc:arm-neon-android=fail hwloc:arm64-android=fail hwloc:x64-android=fail diff --git a/scripts/ci.feature.baseline.txt b/scripts/ci.feature.baseline.txt index 96953e354bed92..3543d4105463c9 100644 --- a/scripts/ci.feature.baseline.txt +++ b/scripts/ci.feature.baseline.txt @@ -442,6 +442,8 @@ gz-tools:arm64-android=fail gz-tools:x64-android=fail hareflow:x64-windows-static=cascade harfbuzz[introspection]:arm64-windows=skip # needs arm64 host +hdf5:arm64-windows-static-md=fail # 2.1.1-15941d9053.clean\src\H5Tinit_float.c(545) : fatal error C1001: Internal compiler error. -- already fixed in 19.52.36417 +hdf5:arm64-windows=fail hdf5[core,fortran,parallel](linux | osx)=options # Fortran disabled in port openmpi hdf5[fortran]:arm64-linux=feature-fails hdf5[fortran](android | windows)=feature-fails # No fortran compiler From 9db36428f283074fba77e5ba552de1414d393900 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Wed, 20 May 2026 15:16:19 -0700 Subject: [PATCH 24/30] Fix claiming "the internet" when a SAS token is used. Resolves https://github.com/microsoft/vcpkg/pull/51854#discussion_r3262581667 --- scripts/azure-pipelines/windows/utility-prefix.ps1 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/azure-pipelines/windows/utility-prefix.ps1 b/scripts/azure-pipelines/windows/utility-prefix.ps1 index 9bd9d2c63821a4..2ee993b558163f 100644 --- a/scripts/azure-pipelines/windows/utility-prefix.ps1 +++ b/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -83,8 +83,12 @@ Function Get-ContentSourceDescription { return $null } - if ($uri.Host -ieq 'vcpkgimageminting.blob.core.windows.net') { - return 'vcpkgimageminting using SAS token' + if ($Url.Host -ieq 'vcpkgimageminting.blob.core.windows.net') { + if ($Url.Query -match '(^\?|&)sig=') { + return 'vcpkgimageminting using SAS token' + } + + return 'vcpkgimageminting' } return 'the internet' From 15da265331a36be9ef3fbbcfa05136080528690c Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Thu, 21 May 2026 14:05:32 -0700 Subject: [PATCH 25/30] [llfio] Baseline due to build failure. Filed https://github.com/ned14/llfio/pull/175 as a potential fix with upstream. --- scripts/ci.baseline.txt | 4 ++++ scripts/ci.feature.baseline.txt | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index 54d0d780bc18b1..eccfa7cfe310b6 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -865,6 +865,10 @@ libva:arm64-linux=fail libxt:x64-windows-release=fail # Appears to have broken races libxt:x64-windows=fail liquid-dsp:arm64-linux=fail +llfio:x64-windows-release=fail # https://github.com/ned14/llfio/pull/175 +llfio:x64-windows-static-md=fail +llfio:x64-windows-static=fail +llfio:x64-windows=fail llgl:arm-neon-android=fail llgl:arm64-android=fail llgl:x64-android=fail diff --git a/scripts/ci.feature.baseline.txt b/scripts/ci.feature.baseline.txt index 3543d4105463c9..4f9608824be523 100644 --- a/scripts/ci.feature.baseline.txt +++ b/scripts/ci.feature.baseline.txt @@ -709,6 +709,10 @@ libxt:x64-windows-release=fail # Appears to have broken races libxt:x64-windows=fail liquid-dsp:arm64-linux=fail llama-cpp[tools](arm & windows)=feature-fails # unresolved symbols +llfio[status-code]:x64-windows-release=feature-fails # https://github.com/ned14/llfio/pull/175 +llfio[status-code]:x64-windows-static-md=feature-fails +llfio[status-code]:x64-windows-static=feature-fails +llfio[status-code]:x64-windows=feature-fails llgl:arm-neon-android=fail llgl:arm64-android=fail llgl:x64-android=fail From 1e6f759ed796f6442f1849a1330a2bb729122601 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Thu, 21 May 2026 14:17:33 -0700 Subject: [PATCH 26/30] Remove =pass from arm64-windows cmake-user/opencv/gdal due to HDF5 ICE. --- scripts/ci.baseline.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index eccfa7cfe310b6..ac0bd8839454ae 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -1237,8 +1237,8 @@ cmake:x64-windows-static=pass cmake:x64-windows=pass cmake-user:arm-neon-android=pass cmake-user:arm64-android=pass -cmake-user:arm64-windows-static-md=pass -cmake-user:arm64-windows=pass +cmake-user:arm64-windows-static-md=fail # due to HDF5 ICE +cmake-user:arm64-windows=fail cmake-user:x64-android=pass cmake-user:x64-linux=pass cmake-user:x64-windows-release=pass @@ -1357,8 +1357,8 @@ vcpkg-ci-gdal:arm-neon-android=pass vcpkg-ci-gdal:arm64-android=pass vcpkg-ci-gdal:arm64-linux=pass vcpkg-ci-gdal:arm64-osx=pass -vcpkg-ci-gdal:arm64-windows-static-md=pass -vcpkg-ci-gdal:arm64-windows=pass +vcpkg-ci-gdal:arm64-windows-static-md=fail # due to the HDF5 ICE +vcpkg-ci-gdal:arm64-windows=fail vcpkg-ci-gdal:x64-android=pass vcpkg-ci-gdal:x64-linux=pass vcpkg-ci-gdal:x64-windows-release=pass @@ -1410,8 +1410,8 @@ 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-windows-static-md=pass -vcpkg-ci-opencv:arm64-windows=pass +vcpkg-ci-opencv:arm64-windows-static-md=fail # due to the HDF5 ICE +vcpkg-ci-opencv:arm64-windows=fail vcpkg-ci-opencv:x64-android=pass vcpkg-ci-opencv:x64-linux=pass vcpkg-ci-opencv:x64-windows-release=pass From afc33e50ffdedd7caf03a997e4e7538ed284f138 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Thu, 21 May 2026 17:59:07 -0700 Subject: [PATCH 27/30] [hdf5] Workaround ICE. Co-authored by GPT 5.5. --- ports/hdf5/arm64-msvc-ice.diff | 21 +++++++++++++++++++++ ports/hdf5/portfile.cmake | 1 + ports/hdf5/vcpkg.json | 1 + scripts/ci.baseline.txt | 14 ++++++-------- versions/baseline.json | 2 +- versions/h-/hdf5.json | 5 +++++ 6 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 ports/hdf5/arm64-msvc-ice.diff diff --git a/ports/hdf5/arm64-msvc-ice.diff b/ports/hdf5/arm64-msvc-ice.diff new file mode 100644 index 00000000000000..a03e88c1fc5e43 --- /dev/null +++ b/ports/hdf5/arm64-msvc-ice.diff @@ -0,0 +1,21 @@ +diff --git a/src/H5Tinit_float.c b/src/H5Tinit_float.c +index 01d6e89..7955811 100644 +--- a/src/H5Tinit_float.c ++++ b/src/H5Tinit_float.c +@@ -461,5 +461,9 @@ H5T__init_native_float_types(void) + *------------------------------------------------------------------------- + */ ++#if defined(_MSC_VER) && (_MSC_VER == 1951) && defined(_M_ARM64) ++#pragma optimize("", off) ++#endif ++ + herr_t H5_NO_UBSAN + H5T__init_native_float_types(void) + { +@@ -629,2 +633,6 @@ H5T__init_native_float_types(void) + FUNC_LEAVE_NOAPI(ret_value) + } /* end H5T__init_native_float_types() */ ++ ++#if defined(_MSC_VER) && (_MSC_VER == 1951) && defined(_M_ARM64) ++#pragma optimize("", on) ++#endif diff --git a/ports/hdf5/portfile.cmake b/ports/hdf5/portfile.cmake index e54779a8b187d5..5fc06604ebbd9c 100644 --- a/ports/hdf5/portfile.cmake +++ b/ports/hdf5/portfile.cmake @@ -11,6 +11,7 @@ vcpkg_from_github( libaec-config.diff mpi-flags.diff win-compile-flags.diff + arm64-msvc-ice.diff ) set(HDF5_ALLOW_UNSUPPORTED OFF) diff --git a/ports/hdf5/vcpkg.json b/ports/hdf5/vcpkg.json index 4464de77497262..0168a7dd8f96ba 100644 --- a/ports/hdf5/vcpkg.json +++ b/ports/hdf5/vcpkg.json @@ -1,6 +1,7 @@ { "name": "hdf5", "version": "2.1.1", + "port-version": 1, "description": "HDF5 is a data model, library, and file format for storing and managing data", "homepage": "https://www.hdfgroup.org/downloads/hdf5/", "license": "BSD-3-Clause", diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index ac0bd8839454ae..de0312b464a3b6 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -249,8 +249,6 @@ gz-tools:arm-neon-android=fail gz-tools:arm64-android=fail gz-tools:x64-android=fail halide:x64-windows-static=fail -hdf5:arm64-windows-static-md=fail # 2.1.1-15941d9053.clean\src\H5Tinit_float.c(545) : fatal error C1001: Internal compiler error. -- already fixed in 19.52.36417 -hdf5:arm64-windows=fail hwloc:arm-neon-android=fail hwloc:arm64-android=fail hwloc:x64-android=fail @@ -1237,8 +1235,8 @@ cmake:x64-windows-static=pass cmake:x64-windows=pass cmake-user:arm-neon-android=pass cmake-user:arm64-android=pass -cmake-user:arm64-windows-static-md=fail # due to HDF5 ICE -cmake-user:arm64-windows=fail +cmake-user:arm64-windows-static-md=pass +cmake-user:arm64-windows=pass cmake-user:x64-android=pass cmake-user:x64-linux=pass cmake-user:x64-windows-release=pass @@ -1357,8 +1355,8 @@ vcpkg-ci-gdal:arm-neon-android=pass vcpkg-ci-gdal:arm64-android=pass vcpkg-ci-gdal:arm64-linux=pass vcpkg-ci-gdal:arm64-osx=pass -vcpkg-ci-gdal:arm64-windows-static-md=fail # due to the HDF5 ICE -vcpkg-ci-gdal:arm64-windows=fail +vcpkg-ci-gdal:arm64-windows-static-md=pass +vcpkg-ci-gdal:arm64-windows=pass vcpkg-ci-gdal:x64-android=pass vcpkg-ci-gdal:x64-linux=pass vcpkg-ci-gdal:x64-windows-release=pass @@ -1410,8 +1408,8 @@ 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-windows-static-md=fail # due to the HDF5 ICE -vcpkg-ci-opencv:arm64-windows=fail +vcpkg-ci-opencv:arm64-windows-static-md=pass +vcpkg-ci-opencv:arm64-windows=pass vcpkg-ci-opencv:x64-android=pass vcpkg-ci-opencv:x64-linux=pass vcpkg-ci-opencv:x64-windows-release=pass diff --git a/versions/baseline.json b/versions/baseline.json index de38579cd2e9f9..1b2340d1882645 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -3774,7 +3774,7 @@ }, "hdf5": { "baseline": "2.1.1", - "port-version": 0 + "port-version": 1 }, "hdr-histogram": { "baseline": "0.11.9", diff --git a/versions/h-/hdf5.json b/versions/h-/hdf5.json index 242e9d74c3794f..73f324ab779de7 100644 --- a/versions/h-/hdf5.json +++ b/versions/h-/hdf5.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "488b04803484d74b9c630e43b0e6a86e9dd292f8", + "version": "2.1.1", + "port-version": 1 + }, { "git-tree": "0e7142ee89b78b29491b81ab810064e26c41c036", "version": "2.1.1", From e4aa296d44afb76d1a2bfc12f89075d5bc60e7eb Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Thu, 21 May 2026 18:13:38 -0700 Subject: [PATCH 28/30] Also remove feature baseline entries. --- scripts/ci.feature.baseline.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/ci.feature.baseline.txt b/scripts/ci.feature.baseline.txt index 4f9608824be523..f14eb35172ef17 100644 --- a/scripts/ci.feature.baseline.txt +++ b/scripts/ci.feature.baseline.txt @@ -442,8 +442,6 @@ gz-tools:arm64-android=fail gz-tools:x64-android=fail hareflow:x64-windows-static=cascade harfbuzz[introspection]:arm64-windows=skip # needs arm64 host -hdf5:arm64-windows-static-md=fail # 2.1.1-15941d9053.clean\src\H5Tinit_float.c(545) : fatal error C1001: Internal compiler error. -- already fixed in 19.52.36417 -hdf5:arm64-windows=fail hdf5[core,fortran,parallel](linux | osx)=options # Fortran disabled in port openmpi hdf5[fortran]:arm64-linux=feature-fails hdf5[fortran](android | windows)=feature-fails # No fortran compiler From 30a9e4db2631c69701455ebc8a65d640a691140e Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 22 May 2026 13:38:00 -0700 Subject: [PATCH 29/30] [libtorch] Baseline --- scripts/ci.baseline.txt | 1 + scripts/ci.feature.baseline.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index de0312b464a3b6..4f8685ea03c226 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -858,6 +858,7 @@ libtar:arm64-android=fail libtar:arm64-linux=fail libtomcrypt:arm64-windows-static-md=fail libtomcrypt:arm64-windows=fail +libtorch:x86-windows=fail libusb:arm64-linux=fail libva:arm64-linux=fail libxt:x64-windows-release=fail # Appears to have broken races diff --git a/scripts/ci.feature.baseline.txt b/scripts/ci.feature.baseline.txt index f14eb35172ef17..0a1eb6db0c60f4 100644 --- a/scripts/ci.feature.baseline.txt +++ b/scripts/ci.feature.baseline.txt @@ -677,6 +677,7 @@ libtcod[sdl]:arm64-linux=cascade libtomcrypt(arm & windows)=fail libtorch:arm64-linux=cascade libtorch:x86-windows=cascade +libtorch[cuda]=feature-fails # broken on CUDA 13 libtorch[dist](!x64 | !linux) = cascade libtorch(arm & windows)=cascade libtorrent[python]:arm64-linux=cascade From c227399031b836650cb9c13f17a6d080a8a29282 Mon Sep 17 00:00:00 2001 From: Billy Robert O'Neal III Date: Fri, 22 May 2026 14:15:23 -0700 Subject: [PATCH 30/30] [libfuse] Add missing numactl dependency. Resolves: ```console FAILED: [code=1] test/test_signals /usr/bin/aarch64-linux-gnu-gcc -fPIC -g -o test/test_signals test/test_signals.p/test_signals.c.o -L/mnt/vcpkg-ci/installed/arm64-linux/debug/lib -Wl,--as-needed -Wl,--no-undefined -Wl,-rpath,/usr/lib/x86_64-linux-gnu -Wl,--start-group lib/libfuse3.a -pthread /mnt/vcpkg-ci/installed/arm64-linux/debug/lib/pkgconfig/../../lib/liburing.a /usr/lib/x86_64-linux-gnu/libnuma.so -ldl -lrt -Wl,--end-group /usr/lib/gcc-cross/aarch64-linux-gnu/13/../../../../aarch64-linux-gnu/bin/ld: /usr/lib/x86_64-linux-gnu/libnuma.so: error adding symbols: file in wrong format ``` --- ports/libfuse/vcpkg.json | 5 +++++ versions/baseline.json | 2 +- versions/l-/libfuse.json | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/ports/libfuse/vcpkg.json b/ports/libfuse/vcpkg.json index 468be0a83265ce..8abd226742cf28 100644 --- a/ports/libfuse/vcpkg.json +++ b/ports/libfuse/vcpkg.json @@ -1,11 +1,16 @@ { "name": "libfuse", "version": "3.18.2", + "port-version": 1, "description": "The reference implementation of the Linux FUSE (Filesystem in Userspace) interface", "homepage": "https://github.com/libfuse/libfuse", "license": "LGPL-2.1-only AND GPL-2.0-only", "supports": "linux | freebsd", "dependencies": [ + { + "name": "numactl", + "platform": "linux" + }, { "name": "vcpkg-tool-meson", "host": true diff --git a/versions/baseline.json b/versions/baseline.json index 1b2340d1882645..b48089ceeec9a2 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -5026,7 +5026,7 @@ }, "libfuse": { "baseline": "3.18.2", - "port-version": 0 + "port-version": 1 }, "libgcrypt": { "baseline": "1.12.2", diff --git a/versions/l-/libfuse.json b/versions/l-/libfuse.json index 9422935fc1b9ad..f3913d23baefd1 100644 --- a/versions/l-/libfuse.json +++ b/versions/l-/libfuse.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "04fc25cf31a8af6a336e933807381b809e944bcc", + "version": "3.18.2", + "port-version": 1 + }, { "git-tree": "83a4c07d44b83a96192b9cd0e18d852221cbb768", "version": "3.18.2",