Compare commits

..
63 changed files with 211 additions and 1792 deletions
+13 -13
View File
@@ -6,7 +6,7 @@
# macOS 14
- OS Version: macOS 14.8.5 (23J423)
- Kernel Version: Darwin 23.6.0
- Image Version: 20260330.0199.1
- Image Version: 20260407.0213.1
## Installed Software
@@ -24,7 +24,7 @@
- Kotlin 2.3.20-release-208
- Mono 6.12.0.188
- Node.js 20.20.2
- Perl 5.42.1
- Perl 5.42.2
- Python3 3.14.3
- Ruby 3.3.11
@@ -32,17 +32,17 @@
- Bundler 4.0.9
- Carthage 0.40.0
- CocoaPods 1.16.2
- Homebrew 5.1.1
- Homebrew 5.1.4
- NPM 10.8.2
- NuGet 6.3.1.1
- Pip3 26.0 (python 3.14)
- Pipx 1.11.0
- Pipx 1.11.1
- RubyGems 4.0.9
- Vcpkg 2026 (build from commit b5d1a94fb7)
- Vcpkg 2026 (build from commit 81e3c888ef)
- Yarn 1.22.22
### Project Management
- Apache Ant 1.10.15
- Apache Ant 1.10.16
- Apache Maven 3.9.14
- Gradle 9.4.1
@@ -70,28 +70,28 @@
- Ninja 1.13.2
### Tools
- AWS CLI 2.34.19
- AWS CLI 2.34.25
- AWS SAM CLI 1.157.1
- AWS Session Manager CLI 1.2.792.0
- Azure CLI 2.84.0
- Azure CLI (azure-devops) 1.0.2
- Bicep CLI 0.41.2
- Bicep CLI 0.42.1
- Cmake 4.3.1
- CodeQL Action Bundle 2.25.1
- Fastlane 2.232.2
- SwiftFormat 0.60.1
- Xcbeautify 3.1.4
- Xcbeautify 3.2.1
- Xcode Command Line Tools 16.2.0.0.1.1733547573
- Xcodes 1.6.2
### Browsers
- Safari 26.4 (19624.1.16.18.2)
- SafariDriver 26.4 (19624.1.16.18.2)
- Google Chrome 146.0.7680.165
- Google Chrome 146.0.7680.178
- Google Chrome for Testing 146.0.7680.165
- ChromeDriver 146.0.7680.165
- Microsoft Edge 146.0.3856.84
- Microsoft Edge WebDriver 146.0.3856.84
- Microsoft Edge 146.0.3856.97
- Microsoft Edge WebDriver 146.0.3856.97
- Mozilla Firefox 149.0
- geckodriver 0.36.0
- Selenium server 4.41.0
@@ -258,7 +258,7 @@
| Package Name | Version |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 11.0 |
| Android Emulator | 36.4.10 |
| Android Emulator | 36.5.10 |
| Android SDK Build-tools | 37.0.0<br>36.0.0 36.1.0<br>35.0.0 35.0.1<br>34.0.0 |
| Android SDK Platforms | android-37.0 (rev 1)<br>android-36.1 (rev 1)<br>android-36-ext19 (rev 1)<br>android-36-ext18 (rev 1)<br>android-36 (rev 2)<br>android-35-ext15 (rev 1)<br>android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3) |
| Android SDK Platform-Tools | 37.0.0 |
-16
View File
@@ -3,14 +3,6 @@
"default": "26.2",
"x64": {
"versions": [
{
"link": "26.5_beta",
"filename": "Xcode_26.5_beta_Universal",
"version": "26.5+17F5012f",
"symlinks": ["26.5"],
"sha256": "1342821cc2b93a64dfe06c4697617208df537cbfde4b66c4548e2310e4cb374e",
"install_runtimes": "none"
},
{
"link": "26.4",
"filename": "Xcode_26.4_Universal",
@@ -56,14 +48,6 @@
},
"arm64": {
"versions": [
{
"link": "26.5_beta",
"filename": "Xcode_26.5_beta_Universal",
"version": "26.5+17F5012f",
"symlinks": ["26.5"],
"sha256": "1342821cc2b93a64dfe06c4697617208df537cbfde4b66c4548e2310e4cb374e",
"install_runtimes": "none"
},
{
"link": "26.4",
"filename": "Xcode_26.4_Universal",
+19 -19
View File
@@ -5,7 +5,7 @@
***
# Windows Server 2025
- OS Version: 10.0.26100 Build 32522
- Image Version: 20260406.66.1
- Image Version: 20260329.58.1
## Windows features
- Windows Subsystem for Linux (WSLv1): Enabled
@@ -26,16 +26,16 @@
- Ruby 3.3.11
### Package Management
- Chocolatey 2.7.1
- Chocolatey 2.7.0
- Composer 2.9.5
- Helm 4.1.3
- Miniconda 26.1.1 (pre-installed on the image but not added to PATH)
- NPM 10.9.7
- NuGet 7.3.0.70
- pip 26.0.1 (python 3.12)
- Pipx 1.11.1
- Pipx 1.11.0
- RubyGems 3.5.22
- Vcpkg (build from commit 81e3c888ef)
- Vcpkg (build from commit b5d1a94fb7)
- Yarn 1.22.22
#### Environment variables
@@ -45,7 +45,7 @@
| CONDA | C:\Miniconda |
### Project Management
- Ant 1.10.16
- Ant 1.10.15
- Gradle 9.4
- Maven 3.9.14
- sbt 1.12.8
@@ -56,7 +56,7 @@
- azcopy 10.32.2
- Bazel 9.0.1
- Bazelisk 1.28.1
- Bicep 0.42.1
- Bicep 0.41.2
- Cabal 3.16.1.0
- CMake 4.3.1
- CodeQL Action Bundle 2.25.1
@@ -77,7 +77,7 @@
- Newman 6.2.2
- OpenSSL 3.6.1
- Packer 1.15.0
- Pulumi 3.229.0
- Pulumi 3.228.0
- R 4.5.3
- Service Fabric SDK 10.1.2493.9590
- Stack 3.9.3
@@ -90,9 +90,9 @@
- Ninja 1.13.2
### CLI Tools
- AWS CLI 2.34.24
- AWS CLI 2.34.19
- AWS SAM CLI 1.157.1
- AWS Session Manager CLI 1.2.804.0
- AWS Session Manager CLI 1.2.792.0
- Azure CLI 2.84.0
- Azure DevOps CLI extension 1.0.2
- GitHub CLI 2.89.0
@@ -108,10 +108,10 @@
- Rustfmt 1.8.0
### Browsers and Drivers
- Google Chrome 146.0.7680.178
- Google Chrome 146.0.7680.165
- Chrome Driver 146.0.7680.165
- Microsoft Edge 146.0.3856.97
- Microsoft Edge Driver 146.0.3856.97
- Microsoft Edge 146.0.3856.84
- Microsoft Edge Driver 146.0.3856.84
- Mozilla Firefox 149.0
- Gecko Driver 0.36.0
- IE Driver 4.14.0.0
@@ -216,9 +216,9 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| Nginx | 1.29.7 | C:\tools\nginx-1.29.7\conf\nginx.conf | nginx | Stopped | 80 |
### Visual Studio Enterprise 2026
| Name | Version | Path |
| ----------------------------- | ------------- | ------------------------------------------------------ |
| Visual Studio Enterprise 2026 | 18.4.11626.88 | C:\Program Files\Microsoft Visual Studio\18\Enterprise |
| Name | Version | Path |
| ----------------------------- | -------------- | ------------------------------------------------------ |
| Visual Studio Enterprise 2026 | 18.4.11620.152 | C:\Program Files\Microsoft Visual Studio\18\Enterprise |
#### Workloads, components and extensions
| Package | Version |
@@ -231,7 +231,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| Component.MDD.Linux | 18.4.11505.171 |
| Component.Microsoft.NET.AppModernization | 18.4.11602.120 |
| Component.Microsoft.VisualStudio.RazorExtension | 18.4.11505.171 |
| Component.Microsoft.VisualStudio.Tools.Applications.amd64 | 17.1.37110.1 |
| Component.Microsoft.VisualStudio.Tools.Applications.amd64 | 17.0.36522.0 |
| Component.Microsoft.VisualStudio.Web.AzureFunctions | 18.4.11505.171 |
| Component.Microsoft.Web.LibraryManager | 18.4.11505.171 |
| Component.Microsoft.Windows.DriverKit | 10.0.26100.16 |
@@ -421,7 +421,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| wasm.tools | 10.1.526.15411 |
| ProBITools.MicrosoftAnalysisServicesModelingProjects2022 | 4.0.0 |
| ProBITools.MicrosoftReportProjectsforVisualStudio2022 | 4.0.0 |
| SSIS.MicrosoftDataToolsIntegrationServices | 2.2 |
| SSIS.MicrosoftDataToolsIntegrationServices | 2.1.2 |
| VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects | 3.0.0 |
| Windows Driver Kit Visual Studio Extension | 10.0.26100.16 |
| Windows Software Development Kit | 10.1.26100.7705 |
@@ -455,7 +455,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
#### Powershell Modules
- Az: 14.6.0
- AWSPowershell: 5.0.190
- AWSPowershell: 5.0.184
- DockerMsftProvider: 1.0.0.8
- MarkdownPS: 1.10
- Microsoft.Graph: 2.36.1
@@ -470,7 +470,7 @@ Note: MSYS2 is pre-installed on image but not added to PATH.
| Package Name | Version |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Android Command Line Tools | 19.0 |
| Android Emulator | 36.5.10 |
| Android Emulator | 36.4.10 |
| Android SDK Build-tools | 37.0.0<br>36.0.0 36.1.0<br>35.0.0 35.0.1<br>34.0.0 |
| Android SDK Platforms | android-37.0 (rev 1)<br>android-36.1 (rev 1)<br>android-36-ext19 (rev 1)<br>android-36-ext18 (rev 1)<br>android-36 (rev 2)<br>android-35-ext15 (rev 1)<br>android-35-ext14 (rev 1)<br>android-35 (rev 2)<br>android-34-ext8 (rev 1)<br>android-34-ext12 (rev 1)<br>android-34-ext11 (rev 1)<br>android-34-ext10 (rev 1)<br>android-34 (rev 3) |
| Android SDK Platform-Tools | 37.0.0 |
@@ -44,7 +44,7 @@ function Disable-WindowsUpdate {
Add-Content -Path $profile.AllUsersAllHosts -Value '$ErrorActionPreference="Stop"'
Write-Host "Disable Server Manager on Logon"
Get-ScheduledTask -TaskName ServerManager -ErrorAction SilentlyContinue | Disable-ScheduledTask
Get-ScheduledTask -TaskName ServerManager | Disable-ScheduledTask
Write-Host "Disable 'Allow your PC to be discoverable by other PCs' popup"
New-Item -Path HKLM:\System\CurrentControlSet\Control\Network -Name NewNetworkWindowOff -Force
@@ -15,28 +15,20 @@ $imageMinorVersion = $imageVersionComponents[1]
$imageDataFile = $env:IMAGEDATA_FILE
$githubUrl = "https://github.com/actions/runner-images/blob"
if ((Test-IsWin25-X64) -and $env:INSTALL_VS_2026) {
if ((Test-IsWin25) -and $env:INSTALL_VS_2026) {
$imageLabel = "windows-2025-vs2026"
$softwareUrl = "${githubUrl}/win25-vs2026/$imageMajorVersion.$imageMinorVersion/images/windows/Windows2025-VS2026-Readme.md"
$releaseUrl = "https://github.com/actions/runner-images/releases/tag/win25-vs2026%2F$imageMajorVersion.$imageMinorVersion"
} elseif (Test-IsWin25-X64) {
} elseif (Test-IsWin25) {
$imageLabel = "windows-2025"
$softwareUrl = "${githubUrl}/win25/$imageMajorVersion.$imageMinorVersion/images/windows/Windows2025-Readme.md"
$releaseUrl = "https://github.com/actions/runner-images/releases/tag/win25%2F$imageMajorVersion.$imageMinorVersion"
} elseif (Test-IsWin22-X64) {
} elseif (Test-IsWin22) {
$imageLabel = "windows-2022"
$softwareUrl = "${githubUrl}/win22/$imageMajorVersion.$imageMinorVersion/images/windows/Windows2022-Readme.md"
$releaseUrl = "https://github.com/actions/runner-images/releases/tag/win22%2F$imageMajorVersion.$imageMinorVersion"
} elseif ((Test-IsWin11-Arm64) -and $env:INSTALL_VS_2026) {
$imageLabel = "windows-11-vs2026-arm64"
$softwareUrl = "${githubUrl}/win11-vs2026-arm64/$imageMajorVersion.$imageMinorVersion/images/windows/Windows11-VS2026-Arm64-Readme.md"
$releaseUrl = "https://github.com/actions/runner-images/releases/tag/win11-vs2026-arm64%2F$imageMajorVersion.$imageMinorVersion"
} elseif (Test-IsWin11-Arm64) {
$imageLabel = "windows-11-arm64"
$softwareUrl = "${githubUrl}/win11-arm64/$imageMajorVersion.$imageMinorVersion/images/windows/Windows11-Arm64-Readme.md"
$releaseUrl = "https://github.com/actions/runner-images/releases/tag/win11-arm64%2F$imageMajorVersion.$imageMinorVersion"
} else {
throw "Invalid platform version is found. Either Windows Server 2022, 2025 or Windows 11 are required"
throw "Invalid platform version is found. Either Windows Server 2022 or 2025 are required"
}
$json = @"
@@ -2,8 +2,7 @@
$shellPath = "C:\shells"
New-Item -Path $shellPath -ItemType Directory | Out-Null
if (Test-IsX64) {
# add a wrapper for C:\msys64\usr\bin\bash.exe
# add a wrapper for C:\msys64\usr\bin\bash.exe
@'
@echo off
setlocal
@@ -12,7 +11,6 @@ IF NOT DEFINED MSYSTEM set MSYSTEM=mingw64
set CHERE_INVOKING=1
C:\msys64\usr\bin\bash.exe -leo pipefail %*
'@ | Out-File -FilePath "$shellPath\msys2bash.cmd" -Encoding ascii
}
# gitbash <--> C:\Program Files\Git\bin\bash.exe
New-Item -ItemType SymbolicLink -Path "$shellPath\gitbash.exe" -Target "$env:ProgramFiles\Git\bin\bash.exe" | Out-Null
@@ -6,7 +6,7 @@
# Set default version to 1 for WSL (aka LXSS - Linux Subsystem)
# The value should be set in the default user registry hive
# https://github.com/actions/runner-images/issues/5760
if (Test-IsWin22-X64) {
if (Test-IsWin22) {
Write-Host "Setting WSL default version to 1"
Mount-RegistryHive `
@@ -37,7 +37,7 @@ if ($LASTEXITCODE -ne 0) {
}
# Enable inheritance for the entire C:\ drive
if (Test-IsWin25-X64) {
if (Test-IsWin25) {
cmd /c "icacls C:\ /inheritance:e /c /q 2>&1" | Out-Null
if ($LASTEXITCODE -ne 0) {
throw "Failed to enable inheritance for C:\ drive"
@@ -101,11 +101,11 @@ $servicesToDisable = @(
'wuauserv'
'DiagTrack'
'dmwappushservice'
$(if(-not (Test-IsWin25-X64)){'PcaSvc'})
$(if(-not (Test-IsWin25)){'PcaSvc'})
'SysMain'
'gupdate'
'gupdatem'
$(if(-not (Test-IsWin25-X64)){'StorSvc'})
$(if(-not (Test-IsWin25)){'StorSvc'})
) | Get-Service -ErrorAction SilentlyContinue
Stop-Service $servicesToDisable
$servicesToDisable.WaitForStatus('Stopped', "00:01:00")
@@ -4,12 +4,6 @@
## Desc: Configure Toolset
################################################################################
if ( Test-IsArm64 ) {
$envVarTemplate = "GOROOT_{0}_{1}_AARCH64"
} else {
$envVarTemplate = "GOROOT_{0}_{1}_X64"
}
$toolEnvConfigs = @{
Python = @{
pathTemplates = @(
@@ -21,7 +15,7 @@ $toolEnvConfigs = @{
pathTemplates = @(
"{0}\bin"
)
envVarTemplate = $envVarTemplate
envVarTemplate = "GOROOT_{0}_{1}_X64"
}
}
@@ -27,8 +27,8 @@ if ($LASTEXITCODE -ne 0) {
throw "Failed to copy HKCU\Software\Microsoft\VisualStudio to HKLM\DEFAULT\Software\Microsoft\VisualStudio"
}
# TortoiseSVN not installed on Windows 2025 and Windows 11 due to Sysprep issues
if (Test-IsWin22-X64) {
# TortoiseSVN not installed on Windows 2025 image due to Sysprep issues
if (-not (Test-IsWin25)) {
# disable TSVNCache.exe
$registryKeyPath = 'HKCU:\Software\TortoiseSVN'
if (-not(Test-Path -Path $registryKeyPath)) {
@@ -42,7 +42,7 @@ if (Test-IsWin22-X64) {
}
}
# Accept by default "Send Diagnostic data to Microsoft" consent.
if (Test-IsWin25-X64) {
if (Test-IsWin25) {
$registryKeyPath = 'HKLM:\DEFAULT\SOFTWARE\Microsoft\Windows\CurrentVersion\Privacy'
New-ItemProperty -Path $registryKeyPath -Name PrivacyConsentPresentationVersion -PropertyType DWORD -Value 3 | Out-Null
New-ItemProperty -Path $registryKeyPath -Name PrivacyConsentSettingsValidMask -PropertyType DWORD -Value 4 | Out-Null
@@ -52,7 +52,7 @@ if (Test-IsWin25-X64) {
Dismount-RegistryHive "HKLM\DEFAULT"
# Remove the "installer" (var.install_user) user profile for Windows 2025 image
if (Test-IsWin25-X64) {
if (Test-IsWin25) {
Get-CimInstance -ClassName Win32_UserProfile | where-object {$_.LocalPath -match $env:INSTALL_USER} | Remove-CimInstance -Confirm:$false
& net user $env:INSTALL_USER /DELETE
}
@@ -4,10 +4,7 @@
################################################################################
# Stop w3svc service
$w3svcService = Get-Service -Name "w3svc" -ErrorAction SilentlyContinue
if ($w3svcService) {
Stop-Service $w3svcService
}
Stop-Service -Name w3svc
# Install latest apache in chocolatey
$installDir = "C:\tools"
@@ -18,10 +15,7 @@ Stop-Service -Name Apache
Set-Service -Name Apache -StartupType Disabled
# Start w3svc service
$w3svcService = Get-Service -Name "w3svc" -ErrorAction SilentlyContinue
if ($w3svcService) {
Start-Service $w3svcService
}
Start-Service -Name w3svc
# Invoke Pester Tests
Invoke-PesterTests -TestFile "Apache"
@@ -1,31 +0,0 @@
################################################################################
## File: Install-CMake.ps1
## Desc: Install CMake (ARM64 only; x64 is installed via Choco)
## Supply chain security: CMake - checksum validation
################################################################################
# Install CMake
$downloadUrl = Resolve-GithubReleaseAssetUrl `
-Repo "Kitware/CMake" `
-Version "latest" `
-UrlMatchPattern "cmake-*-windows-arm64.msi"
#region Supply chain security - CMake
$packageName = Split-Path $downloadUrl -Leaf
$checksumsUrl = Resolve-GithubReleaseAssetUrl `
-Repo "Kitware/CMake" `
-Version "latest" `
-UrlMatchPattern "cmake-*-SHA-256.txt"
$externalHash = Get-ChecksumFromUrl -Type "SHA256" `
-Url $checksumsUrl `
-FileName $packageName
#endregion
Install-Binary `
-Url $downloadUrl `
-ExtraInstallArgs @("ADD_CMAKE_TO_PATH=System") `
-ExpectedSHA256Sum $externalHash
Update-Environment
Invoke-PesterTests -TestFile "Tools" -TestName "CMake"
@@ -3,15 +3,9 @@
## Desc: Install Google Chrome browser and Chrome WebDriver
################################################################################
if (Test-IsArm64) {
$browserDownloadUrl = "https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise_arm64.msi"
} else {
$browserDownloadUrl = "https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise64.msi"
}
# Download and install latest Chrome browser
Install-Binary `
-Url $browserDownloadUrl `
-Url 'https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise64.msi' `
-ExpectedSubject 'CN=Google LLC, O=Google LLC, L=Mountain View, S=California, C=US, SERIALNUMBER=3582691, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.2=Delaware, OID.1.3.6.1.4.1.311.60.2.1.3=US'
# Prepare firewall rules
@@ -41,7 +41,7 @@ if ($LastExitCode -ne 0) {
# https://github.com/Azure/azure-cli/issues/18766
New-Item -ItemType SymbolicLink -Path "C:\Windows\SysWOW64\docker.exe" -Target "C:\Windows\System32\docker.exe"
if (-not (Test-IsWin25-X64)) {
if (-not (Test-IsWin25)) {
Write-Host "Download docker images"
$dockerImages = (Get-ToolsetContent).docker.images
foreach ($dockerImage in $dockerImages) {
@@ -82,14 +82,9 @@ function Install-DotnetSDK {
# If installation failed, tests will fail anyway
#region Supply chain security
if (Test-IsArm64) {
$dotnetArch = "arm64"
} else {
$dotnetArch = "x64"
}
$releasesJsonUri = "https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/${DotnetVersion}/releases.json"
$releasesData = (Invoke-DownloadWithRetry $releasesJsonUri) | Get-Item | Get-Content | ConvertFrom-Json
$distributorFileHash = $releasesData.releases.sdks.Where({ $_.version -eq $SDKVersion }).files.Where({ $_.name -eq "dotnet-sdk-win-$dotnetArch.zip" }).hash
$distributorFileHash = $releasesData.releases.sdks.Where({ $_.version -eq $SDKVersion }).files.Where({ $_.name -eq 'dotnet-sdk-win-x64.zip' }).hash
Test-FileChecksum $zipPath -ExpectedSHA512Sum $distributorFileHash
#endregion
}
@@ -102,9 +97,11 @@ $installScriptPath = Invoke-DownloadWithRetry -Url "https://dot.net/v1/dotnet-in
# Visual Studio 2022 pre-creates sdk-manifests/8.0.100 folder, causing dotnet-install to skip manifests creation
# https://github.com/actions/runner-images/issues/11402
$sdkManifestPath = "C:\Program Files\dotnet\sdk-manifests\8.0.100"
if (Test-Path $sdkManifestPath) {
Move-Item -Path $sdkManifestPath -Destination $env:TEMP_DIR -ErrorAction Stop
if ((Test-IsWin22) -or (Test-IsWin25)) {
$sdkManifestPath = "C:\Program Files\dotnet\sdk-manifests\8.0.100"
if (Test-Path $sdkManifestPath) {
Move-Item -Path $sdkManifestPath -Destination $env:TEMP_DIR -ErrorAction Stop
}
}
# Install and warm up dotnet
@@ -125,10 +122,12 @@ foreach ($dotnetVersion in $dotnetToolset.versions) {
# Replace manifests inside sdk-manifests/8.0.100 folder with ones from Visual Studio
# https://github.com/actions/runner-images/issues/11402
if (Test-Path "${env:TEMP_DIR}\8.0.100") {
Get-ChildItem -Path "${env:TEMP_DIR}\8.0.100" | ForEach-Object {
Remove-Item -Path "$sdkManifestPath\$($_.BaseName)" -Recurse -Force | Out-Null
Move-Item -Path $_.FullName -Destination $sdkManifestPath -Force -ErrorAction Stop
if ((Test-IsWin22) -or (Test-IsWin25)) {
if (Test-Path "${env:TEMP_DIR}\8.0.100") {
Get-ChildItem -Path "${env:TEMP_DIR}\8.0.100" | ForEach-Object {
Remove-Item -Path "$sdkManifestPath\$($_.BaseName)" -Recurse -Force | Out-Null
Move-Item -Path $_.FullName -Destination $sdkManifestPath -Force -ErrorAction Stop
}
}
}
@@ -3,12 +3,6 @@
## Desc: Install Edge WebDriver and configure Microsoft Edge
################################################################################
if (Test-IsArm64) {
$driverArch = "arm64"
} else {
$driverArch = "win64"
}
# Disable Edge auto-updates
Rename-Item -Path "C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" -NewName "Disabled_MicrosoftEdgeUpdate.exe" -ErrorAction Stop
@@ -26,7 +20,7 @@ $versionInfoFile = Invoke-DownloadWithRetry -Url $versionInfoUrl -Path "$edgeDri
$latestVersion = Get-Content -Path $versionInfoFile
Write-Host "Download Microsoft Edge WebDriver..."
$downloadUrl = "https://msedgedriver.microsoft.com/$latestVersion/edgedriver_$driverArch.zip"
$downloadUrl = "https://msedgedriver.microsoft.com/$latestVersion/edgedriver_win64.zip"
$archivePath = Invoke-DownloadWithRetry $downloadUrl
Write-Host "Expand Microsoft Edge WebDriver archive..."
@@ -4,25 +4,17 @@
## Supply chain security: Firefox browser - checksum validation
################################################################################
if (Test-IsArm64) {
$browserArch = "win64-aarch64"
$driverArch = "win-aarch64"
} else {
$browserArch = "win64"
$driverArch = "win64"
}
# Install and configure Firefox browser
Write-Host "Get the latest Firefox version..."
$versionsManifest = Invoke-RestMethod "https://product-details.mozilla.org/1.0/firefox_versions.json"
Write-Host "Install Firefox browser..."
$installerUrl = "https://download.mozilla.org/?product=firefox-$($versionsManifest.LATEST_FIREFOX_VERSION)&os=$browserArch&lang=en-US"
$installerUrl = "https://download.mozilla.org/?product=firefox-$($versionsManifest.LATEST_FIREFOX_VERSION)&os=win64&lang=en-US"
$hashUrl = "https://archive.mozilla.org/pub/firefox/releases/$($versionsManifest.LATEST_FIREFOX_VERSION)/SHA256SUMS"
$externalHash = Get-ChecksumFromUrl -Type "SHA256" `
-Url $hashUrl `
-FileName "$browserArch/en-US/Firefox Setup*exe"
-FileName "win64/en-US/Firefox Setup*exe"
Install-Binary -Type EXE `
-Url $installerUrl `
@@ -54,7 +46,7 @@ Write-Host "Download Gecko WebDriver WebDriver..."
$geckoDriverDownloadUrl = Resolve-GithubReleaseAssetUrl `
-Repo "mozilla/geckodriver" `
-Version $geckoDriverVersion `
-UrlMatchPattern "geckodriver-*-$driverArch.zip"
-UrlMatchPattern "geckodriver-*-win64.zip"
$geckoDriverArchPath = Invoke-DownloadWithRetry $geckoDriverDownloadUrl
Write-Host "Expand Gecko WebDriver archive..."
+2 -7
View File
@@ -4,17 +4,12 @@
## Supply chain security: Git - checksum validation, Hub CLI - managed by package manager
################################################################################
if (Test-IsArm64) {
$gitArch = "arm64"
} else {
$gitArch = "64-bit"
}
# Install the latest version of Git for Windows
$downloadUrl = Resolve-GithubReleaseAssetUrl `
-Repo "git-for-windows/git" `
-Version "latest" `
-UrlMatchPattern "Git-*-$gitArch.exe"
-UrlMatchPattern "Git-*-64-bit.exe"
$externalHash = Get-ChecksumFromGithubRelease `
-Repo "git-for-windows/git" `
@@ -4,17 +4,12 @@
## Supply chain security: GitHub CLI - checksum validation
################################################################################
if (Test-IsArm64) {
$ghArch = "arm64"
} else {
$ghArch = "amd64"
}
Write-Host "Get the latest gh version..."
$downloadUrl = Resolve-GithubReleaseAssetUrl `
-Repo "cli/cli" `
-Version "latest" `
-UrlMatchPattern "gh_*_windows_$ghArch.msi"
-UrlMatchPattern "gh_*_windows_amd64.msi"
$checksumsUrl = Resolve-GithubReleaseAssetUrl `
-Repo "cli/cli" `
@@ -30,7 +30,7 @@ Add-MachinePathItem "$cabalDir\bin"
Update-Environment
# Get 1 or 3 latest versions of GHC depending on the OS version
If (Test-IsWin25-X64) {
If (Test-IsWin25) {
$numberOfVersions = 1
} else {
$numberOfVersions = 3
@@ -19,8 +19,8 @@ function Set-JavaPath {
exit 1
}
Write-Host "Set 'JAVA_HOME_${Version}_$($Architecture.ToUpper())' environmental variable as $javaPath"
[Environment]::SetEnvironmentVariable("JAVA_HOME_${Version}_$($Architecture.ToUpper())", $javaPath, "Machine")
Write-Host "Set 'JAVA_HOME_${Version}_X64' environmental variable as $javaPath"
[Environment]::SetEnvironmentVariable("JAVA_HOME_${Version}_X64", $javaPath, "Machine")
if ($Default) {
# Clean up any other Java folders from PATH to make sure that they won't conflict with each other
@@ -91,12 +91,6 @@ function Install-JavaJDK {
New-Item -ItemType File -Path $javaVersionPath -Name "$Architecture.complete" | Out-Null
}
if (Test-IsArm64) {
$javaArch = "aarch64"
} else {
$javaArch = "x64"
}
$toolsetJava = (Get-ToolsetContent).java
$defaultVersion = $toolsetJava.default
$jdkVersionsToInstall = $toolsetJava.versions
@@ -104,12 +98,12 @@ $jdkVersionsToInstall = $toolsetJava.versions
foreach ($jdkVersionToInstall in $jdkVersionsToInstall) {
$isDefaultVersion = $jdkVersionToInstall -eq $defaultVersion
Install-JavaJDK -JDKVersion $jdkVersionToInstall -Architecture $javaArch
Install-JavaJDK -JDKVersion $jdkVersionToInstall
if ($isDefaultVersion) {
Set-JavaPath -Version $jdkVersionToInstall -Architecture $javaArch -Default
Set-JavaPath -Version $jdkVersionToInstall -Default
} else {
Set-JavaPath -Version $jdkVersionToInstall -Architecture $javaArch
Set-JavaPath -Version $jdkVersionToInstall
}
}
+3 -29
View File
@@ -1,36 +1,10 @@
################################################################################
## File: Install-LLVM.ps1
## Desc: Install the stable version of llvm and clang compilers
## Desc: Install the latest stable version of llvm and clang compilers
################################################################################
$llvmVersion = (Get-ToolsetContent).llvm.version
if (Test-IsArm64) {
$installDir = "C:\Program Files\LLVM"
Write-Host "Resolve LLVM $llvmVersion ARM64 download URL"
$downloadUrl = Resolve-GithubReleaseAssetUrl `
-Repository "llvm/llvm-project" `
-Version $llvmVersion `
-UrlMatchPattern "clang*llvm-*-aarch64-pc-windows-msvc.tar.xz"
Write-Host "Download LLVM $llvmVersion ARM64 archive"
$archivePath = Invoke-DownloadWithRetry $downloadUrl
Write-Host "Extract LLVM archive"
$tarPath = $archivePath -replace '\.xz$'
Expand-7ZipArchive -Path $archivePath -DestinationPath (Split-Path $archivePath)
Expand-7ZipArchive -Path $tarPath -DestinationPath $env:TEMP_DIR
Write-Host "Install LLVM to $installDir"
$extractedDir = Get-ChildItem -Path $env:TEMP_DIR -Directory -Filter "clang+llvm-*" | Select-Object -First 1
Move-Item -Path $extractedDir.FullName -Destination $installDir -Force
Add-MachinePathItem (Join-Path $installDir "bin")
Update-Environment
} else {
$latestChocoVersion = Resolve-ChocoPackageVersion -PackageName "llvm" -TargetVersion $llvmVersion
Install-ChocoPackage llvm -ArgumentList '--version', $latestChocoVersion
}
$latestChocoVersion = Resolve-ChocoPackageVersion -PackageName "llvm" -TargetVersion $llvmVersion
Install-ChocoPackage llvm -ArgumentList '--version', $latestChocoVersion
Invoke-PesterTests -TestFile "LLVM"
@@ -9,16 +9,14 @@ if ($LASTEXITCODE -ne 0) {
throw "Installation of Microsoft.PowerShell.Utility.Activities failed with exit code $LASTEXITCODE"
}
if (Test-IsX64) {
Write-Host "NGen: update x64 native images..."
& $env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\ngen.exe update | Out-Null
if ($LASTEXITCODE -ne 0) {
throw "Update of x64 native images failed with exit code $LASTEXITCODE"
}
Write-Host "NGen: update x64 native images..."
& $env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\ngen.exe update | Out-Null
if ($LASTEXITCODE -ne 0) {
throw "Update of x64 native images failed with exit code $LASTEXITCODE"
}
Write-Host "NGen: update x86 native images..."
& $env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\ngen.exe update | Out-Null
if ($LASTEXITCODE -ne 0) {
throw "Update of x86 native images failed with exit code $LASTEXITCODE"
}
Write-Host "NGen: update x86 native images..."
& $env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\ngen.exe update | Out-Null
if ($LASTEXITCODE -ne 0) {
throw "Update of x86 native images failed with exit code $LASTEXITCODE"
}
@@ -4,10 +4,7 @@
################################################################################
# Stop w3svc service
$w3svcService = Get-Service -Name "w3svc" -ErrorAction SilentlyContinue
if ($w3svcService) {
Stop-Service $w3svcService
}
Stop-Service -Name w3svc
# Install latest nginx in chocolatey
$installDir = "C:\tools"
@@ -18,10 +15,7 @@ Stop-Service -Name nginx
Set-Service -Name nginx -StartupType Disabled
# Start w3svc service
$w3svcService = Get-Service -Name "w3svc" -ErrorAction SilentlyContinue
if ($w3svcService) {
Start-Service $w3svcService
}
Start-Service -Name w3svc
# Invoke Pester Tests
Invoke-PesterTests -TestFile "Nginx"
@@ -1,24 +0,0 @@
################################################################################
## File: Install-Ninja.ps1
## Desc: Install Ninja build system (ARM64 only; x64 is installed via Choco)
################################################################################
$installDir = "C:\Tools\Ninja"
Write-Host "Resolve Ninja latest ARM64 download URL"
$downloadUrl = Resolve-GithubReleaseAssetUrl `
-Repository "ninja-build/ninja" `
-Version "latest" `
-UrlMatchPattern "ninja-winarm64.zip"
Write-Host "Download Ninja ARM64 archive"
$zipPath = Invoke-DownloadWithRetry $downloadUrl
Write-Host "Install Ninja to $installDir"
New-Item -ItemType Directory -Path $installDir -Force | Out-Null
Expand-7ZipArchive -Path $zipPath -DestinationPath $installDir
Add-MachinePathItem $installDir
Update-Environment
Invoke-PesterTests -TestFile "Tools" -TestName "Ninja"
@@ -7,18 +7,12 @@
$prefixPath = 'C:\npm\prefix'
$cachePath = 'C:\npm\cache'
if (Test-IsArm64) {
$nodeArch = "arm64"
} else {
$nodeArch = "x64"
}
New-Item -Path $prefixPath -Force -ItemType Directory
New-Item -Path $cachePath -Force -ItemType Directory
$defaultVersion = (Get-ToolsetContent).node.default
$nodeVersion = (Get-GithubReleasesByVersion -Repo "nodejs/node" -Version "${defaultVersion}").version | Select-Object -First 1
$downloadUrl = "https://nodejs.org/dist/v${nodeVersion}/node-v${nodeVersion}-${nodeArch}.msi"
$downloadUrl = "https://nodejs.org/dist/v${nodeVersion}/node-v${nodeVersion}-x64.msi"
$packageName = Split-Path $downloadUrl -Leaf
$externalHash = Get-ChecksumFromUrl -Type "SHA256" `
@@ -4,12 +4,7 @@
## Supply chain security: checksum validation
################################################################################
if (Test-IsArm64) {
$openSSLArch = "ARM"
} else {
$openSSLArch = "INTEL"
}
$arch = 'INTEL'
$bits = '64'
$light = $false
$installerType = "exe"
@@ -27,7 +22,7 @@ $installerHash = $null
foreach ($key in $installerNames) {
$installer = $installersAvailable.$key
if (($installer.light -eq $light) -and ($installer.arch -eq $openSSLArch) -and ($installer.bits -eq $bits) -and ($installer.installer -eq $installerType) -and ($installer.basever -like $version)) {
if (($installer.light -eq $light) -and ($installer.arch -eq $arch) -and ($installer.bits -eq $bits) -and ($installer.installer -eq $installerType) -and ($installer.basever -like $version)) {
$installerUrl = $installer.url
$installerHash = $installer.sha512
}
@@ -6,12 +6,6 @@
$ErrorActionPreference = "Stop"
if (Test-IsArm64) {
$pwshArch = "arm64"
} else {
$pwshArch = "x64"
}
$tempDir = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())
New-Item -ItemType Directory -Path $tempDir -Force -ErrorAction SilentlyContinue | Out-Null
try {
@@ -24,7 +18,7 @@ try {
$releases = $metadata.LTSReleaseTag -replace '^v'
foreach ($release in $releases) {
if ($release -like "${pwshMajorMinor}*") {
$downloadUrl = "https://github.com/PowerShell/PowerShell/releases/download/v${release}/PowerShell-${release}-win-${pwshArch}.msi"
$downloadUrl = "https://github.com/PowerShell/PowerShell/releases/download/v${release}/PowerShell-${release}-win-x64.msi"
break
}
}
+1 -8
View File
@@ -6,13 +6,6 @@
Install-ChocoPackage R.Project
Install-ChocoPackage rtools
if (Test-IsArm64) {
$rscriptPathPattern = "C:\Program Files (x86)\R\*\bin\x64"
} else {
$rscriptPathPattern = "C:\Program Files\R\*\bin\x64"
}
$rscriptPath = Resolve-Path $rscriptPathPattern
$rscriptPath = Resolve-Path "C:\Program Files\R\*\bin\x64"
Add-MachinePathItem $rscriptPath
Invoke-PesterTests -TestFile "Tools" -TestName "R"
+2 -15
View File
@@ -63,14 +63,6 @@ function Set-DefaultRubyVersion {
Add-MachinePathItem -PathItem $rubyDir | Out-Null
}
if (Test-IsArm64) {
$downloadArch = "arm"
$toolcacheArch = "aarch64"
} else {
$downloadArch = "x64"
$toolcacheArch = "x64"
}
# Install Ruby
$rubyTools = (Get-ToolsetContent).toolcache | Where-Object { $_.name -eq "Ruby" }
$rubyToolVersions = $rubyTools.versions
@@ -81,14 +73,9 @@ foreach ($rubyVersion in $rubyToolVersions) {
$downloadUrl = Resolve-GithubReleaseAssetUrl `
-Repo "oneclick/rubyinstaller2" `
-Version "$rubyVersion*" `
-UrlMatchPattern "*-${downloadArch}.7z"
-UrlMatchPattern "*-x64.7z"
$packagePath = Invoke-DownloadWithRetry $downloadUrl
if (Test-IsArm64) {
Install-Ruby -PackagePath $packagePath -Architecture $toolcacheArch
} else {
Install-Ruby -PackagePath $packagePath -Architecture $toolcacheArch
}
Install-Ruby -PackagePath $packagePath
}
Set-DefaultRubyVersion -Version $rubyTools.default -Arch $rubyTools.arch
+8 -19
View File
@@ -4,22 +4,16 @@
## Supply chain security: checksum validation for bootstrap, managed by rustup for workloads
################################################################################
if (Test-IsArm64) {
$rustArch = "aarch64"
} else {
$rustArch = "x86_64"
}
# Rust Env
$env:RUSTUP_HOME = "C:\Users\Default\.rustup"
$env:CARGO_HOME = "C:\Users\Default\.cargo"
# Download the latest rustup-init.exe for Windows
# Download the latest rustup-init.exe for Windows x64
# See https://rustup.rs/#
$rustupPath = Invoke-DownloadWithRetry "https://static.rust-lang.org/rustup/dist/${rustArch}-pc-windows-msvc/rustup-init.exe"
$rustupPath = Invoke-DownloadWithRetry "https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe"
#region Supply chain security
$distributorFileHash = (Invoke-RestMethod -Uri "https://static.rust-lang.org/rustup/dist/${rustArch}-pc-windows-msvc/rustup-init.exe.sha256").Trim()
$distributorFileHash = (Invoke-RestMethod -Uri 'https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe.sha256').Trim()
Test-FileChecksum $rustupPath -ExpectedSHA256Sum $distributorFileHash
#endregion
@@ -34,23 +28,18 @@ Add-DefaultPathItem "%USERPROFILE%\.cargo\bin"
# Add Rust binaries to the path
$env:Path += ";$env:CARGO_HOME\bin"
if (Test-IsArm64) {
rustup target add aarch64-pc-windows-msvc
} else {
# Add i686 target for building 32-bit binaries
rustup target add i686-pc-windows-msvc
# Add i686 target for building 32-bit binaries
rustup target add i686-pc-windows-msvc
# Add target for building mingw-w64 binaries
rustup target add x86_64-pc-windows-gnu
}
# Add target for building mingw-w64 binaries
rustup target add x86_64-pc-windows-gnu
# Install common tools
rustup component add rustfmt clippy
if ($LASTEXITCODE -ne 0) {
throw "Rust component installation failed with exit code $LASTEXITCODE"
}
if ((Test-IsWin22-X64) -or (Test-IsWin11-Arm64)) {
if (-not (Test-IsWin25)) {
cargo install --locked bindgen-cli cbindgen cargo-audit cargo-outdated
if ($LASTEXITCODE -ne 0) {
throw "Rust tools installation failed with exit code $LASTEXITCODE"
@@ -4,12 +4,6 @@
################################################################################
$vsToolset = (Get-ToolsetContent).visualStudio
if (Test-IsArm64) {
$vsArch = "arm64"
} else {
$vsArch = "x64"
}
# Install Visual Studio for Windows 22 and 25 with InstallChannel
Install-VisualStudio `
-Version $vsToolset.subversion `
@@ -17,8 +11,7 @@ Install-VisualStudio `
-Channel $vsToolset.channel `
-InstallChannelUri $vsToolset.installChannelUri `
-RequiredComponents $vsToolset.workloads `
-ExtraArgs "--allWorkloads --includeRecommended --remove Component.CPython3.x64" `
-Architecture $vsArch
-ExtraArgs "--allWorkloads --includeRecommended --remove Component.CPython3.x64"
# Find the version of VS installed for this instance
# Only supports a single instance
@@ -34,7 +27,7 @@ $vsInstallRoot = (Get-VisualStudioInstance).InstallationPath
$newContent = '{"Extensions":[{"Key":"1e906ff5-9da8-4091-a299-5c253c55fdc9","Value":{"ShouldAutoUpdate":false}},{"Key":"Microsoft.VisualStudio.Web.AzureFunctions","Value":{"ShouldAutoUpdate":false}}],"ShouldAutoUpdate":false,"ShouldCheckForUpdates":false}'
Set-Content -Path "$vsInstallRoot\Common7\IDE\Extensions\MachineState.json" -Value $newContent
if (Test-IsWin22-X64) {
if (Test-IsWin22) {
# Install Windows 10 SDK version 10.0.17763
Install-Binary -Type EXE `
-Url 'https://go.microsoft.com/fwlink/p/?LinkID=2033908' `
@@ -49,7 +42,7 @@ Install-Binary -Type EXE `
-ExpectedSubject $(Get-MicrosoftPublisher)
# Enable Windows Desktop Debuggers (cdb.exe) on Windows Server 2025
if (Test-IsWin25-X64) {
if (Test-IsWin25) {
$installerEntry = Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* `
| Where-Object { $_.DisplayName -match "Windows Software Development Kit" } `
| Sort-Object DisplayVersion -Descending | Select-Object -First 1
+1 -4
View File
@@ -4,12 +4,9 @@
################################################################################
# Requires Windows SDK with the same version number as the WDK
if (Test-IsWin22-X64) {
if (Test-IsWin22) {
# SDK is available through Visual Studio
$wdkUrl = "https://go.microsoft.com/fwlink/?linkid=2324617"
} elseif (Test-IsWin11-Arm64) {
# SDK is available through Visual Studio
$wdkUrl = "https://go.microsoft.com/fwlink/?linkid=2335869"
} else {
throw "Invalid version of Visual Studio is found. Windows Server 2022 is required"
}
@@ -49,7 +49,7 @@ if ($LASTEXITCODE -ne 0) {
throw "Failed to clean npm cache"
}
if (Test-IsWin25-X64) {
if (Test-IsWin25) {
$directoriesToCompact = @(
"C:\Program Files (x86)\Android",
"C:\Program Files\dotnet",
@@ -21,7 +21,7 @@ Import-Module (Join-Path $PSScriptRoot "SoftwareReport.VisualStudio.psm1") -Disa
$softwareReport = [SoftwareReport]::new($(Build-OSInfoSection))
$optionalFeatures = $softwareReport.Root.AddHeader("Windows features")
$optionalFeatures.AddToolVersion("Windows Subsystem for Linux (WSLv1):", "Enabled")
if (Test-IsWin25-X64) {
if (Test-IsWin25) {
$optionalFeatures.AddToolVersion("Windows Subsystem for Linux (Default, WSLv2):", $(Get-WSL2Version))
}
$installedSoftware = $softwareReport.Root.AddHeader("Installed Software")
@@ -44,9 +44,7 @@ $packageManagement = $installedSoftware.AddHeader("Package Management")
$packageManagement.AddToolVersion("Chocolatey", $(Get-ChocoVersion))
$packageManagement.AddToolVersion("Composer", $(Get-ComposerVersion))
$packageManagement.AddToolVersion("Helm", $(Get-HelmVersion))
if (Test-IsX64) {
$packageManagement.AddToolVersion("Miniconda", $(Get-CondaVersion))
}
$packageManagement.AddToolVersion("Miniconda", $(Get-CondaVersion))
$packageManagement.AddToolVersion("NPM", $(Get-NPMVersion))
$packageManagement.AddToolVersion("NuGet", $(Get-NugetVersion))
$packageManagement.AddToolVersion("pip", $(Get-PipVersion))
@@ -72,17 +70,13 @@ $tools.AddToolVersion("azcopy", $(Get-AzCopyVersion))
$tools.AddToolVersion("Bazel", $(Get-BazelVersion))
$tools.AddToolVersion("Bazelisk", $(Get-BazeliskVersion))
$tools.AddToolVersion("Bicep", $(Get-BicepVersion))
if (Test-IsX64) {
$tools.AddToolVersion("Cabal", $(Get-CabalVersion))
}
$tools.AddToolVersion("Cabal", $(Get-CabalVersion))
$tools.AddToolVersion("CMake", $(Get-CMakeVersion))
$tools.AddToolVersion("CodeQL Action Bundle", $(Get-CodeQLBundleVersion))
if (Test-IsX64) {
$tools.AddToolVersion("Docker", $(Get-DockerVersion))
$tools.AddToolVersion("Docker Compose v2", $(Get-DockerComposeVersionV2))
$tools.AddToolVersion("Docker-wincred", $(Get-DockerWincredVersion))
$tools.AddToolVersion("ghc", $(Get-GHCVersion))
}
$tools.AddToolVersion("Docker", $(Get-DockerVersion))
$tools.AddToolVersion("Docker Compose v2", $(Get-DockerComposeVersionV2))
$tools.AddToolVersion("Docker-wincred", $(Get-DockerWincredVersion))
$tools.AddToolVersion("ghc", $(Get-GHCVersion))
$tools.AddToolVersion("Git", $(Get-GitVersion))
$tools.AddToolVersion("Git LFS", $(Get-GitLFSVersion))
$tools.AddToolVersion("ImageMagick", $(Get-ImageMagickVersion))
@@ -90,42 +84,36 @@ $tools.AddToolVersion("InnoSetup", $(Get-InnoSetupVersion))
$tools.AddToolVersion("jq", $(Get-JQVersion))
$tools.AddToolVersion("Kind", $(Get-KindVersion))
$tools.AddToolVersion("Kubectl", $(Get-KubectlVersion))
if (-not (Test-IsWin25-X64)) {
if (-not (Test-IsWin25)) {
$tools.AddToolVersion("Mercurial", $(Get-MercurialVersion))
}
$tools.AddToolVersion("gcc", $(Get-GCCVersion))
$tools.AddToolVersion("gdb", $(Get-GDBVersion))
$tools.AddToolVersion("GNU Binutils", $(Get-GNUBinutilsVersion))
$tools.AddToolVersion("Newman", $(Get-NewmanVersion))
if (-not (Test-IsWin25-X64)) {
if (-not (Test-IsWin25)) {
$tools.AddToolVersion("NSIS", $(Get-NSISVersion))
}
$tools.AddToolVersion("OpenSSL", $(Get-OpenSSLVersion))
$tools.AddToolVersion("Packer", $(Get-PackerVersion))
$tools.AddToolVersion("Pulumi", $(Get-PulumiVersion))
$tools.AddToolVersion("R", $(Get-RVersion))
if (Test-IsX64) {
$tools.AddToolVersion("Service Fabric SDK", $(Get-ServiceFabricSDKVersion))
}
$tools.AddToolVersion("Service Fabric SDK", $(Get-ServiceFabricSDKVersion))
$tools.AddToolVersion("Stack", $(Get-StackVersion))
if (Test-IsWin22-X64) {
if (-not (Test-IsWin25)) {
$tools.AddToolVersion("Subversion (SVN)", $(Get-SVNVersion))
}
$tools.AddToolVersion("Swig", $(Get-SwigVersion))
$tools.AddToolVersion("VSWhere", $(Get-VSWhereVersion))
$tools.AddToolVersion("WinAppDriver", $(Get-WinAppDriver))
if (Test-IsX64) {
$tools.AddToolVersion("WiX Toolset", $(Get-WixVersion))
}
$tools.AddToolVersion("WiX Toolset", $(Get-WixVersion))
$tools.AddToolVersion("yamllint", $(Get-YAMLLintVersion))
if (Test-IsX64) {
$tools.AddToolVersion("zstd", $(Get-ZstdVersion))
}
$tools.AddToolVersion("zstd", $(Get-ZstdVersion))
$tools.AddToolVersion("Ninja", $(Get-NinjaVersion))
# CLI Tools
$cliTools = $installedSoftware.AddHeader("CLI Tools")
if (-not (Test-IsWin25-X64)) {
if (-not (Test-IsWin25)) {
$cliTools.AddToolVersion("Alibaba Cloud CLI", $(Get-AlibabaCLIVersion))
}
$cliTools.AddToolVersion("AWS CLI", $(Get-AWSCLIVersion))
@@ -144,7 +132,7 @@ $rustTools.AddToolVersion("Rustdoc", $(Get-RustdocVersion))
$rustTools.AddToolVersion("Rustup", $(Get-RustupVersion))
$rustToolsPackages = $rustTools.AddHeader("Packages")
if (-not (Test-IsWin25-X64)) {
if (-not (Test-IsWin25)) {
$rustToolsPackages.AddToolVersion("bindgen", $(Get-BindgenVersion))
$rustToolsPackages.AddToolVersion("cargo-audit", $(Get-CargoAuditVersion))
$rustToolsPackages.AddToolVersion("cargo-outdated", $(Get-CargoOutdatedVersion))
@@ -162,32 +150,26 @@ $browsersAndWebdrivers.AddHeader("Environment variables").AddTable($(Build-Brows
$installedSoftware.AddHeader("Java").AddTable($(Get-JavaVersions))
# Shells
if (Test-IsX64) {
$installedSoftware.AddHeader("Shells").AddTable($(Get-ShellTarget))
}
$installedSoftware.AddHeader("Shells").AddTable($(Get-ShellTarget))
# MSYS2
if (Test-IsX64) {
$msys2 = $installedSoftware.AddHeader("MSYS2")
$msys2.AddToolVersion("Pacman", $(Get-PacmanVersion))
$msys2 = $installedSoftware.AddHeader("MSYS2")
$msys2.AddToolVersion("Pacman", $(Get-PacmanVersion))
$notes = @'
$notes = @'
Location: C:\msys64
Note: MSYS2 is pre-installed on image but not added to PATH.
'@
$msys2.AddHeader("Notes").AddNote($notes)
}
$msys2.AddHeader("Notes").AddNote($notes)
# Cached Tools
$installedSoftware.AddHeader("Cached Tools").AddNodes($(Build-CachedToolsSection))
# Databases
if (Test-IsX64) {
$databases = $installedSoftware.AddHeader("Databases")
$databases.AddHeader("PostgreSQL").AddTable($(Get-PostgreSQLTable))
$databases.AddHeader("MongoDB").AddTable($(Get-MongoDBTable))
}
$databases = $installedSoftware.AddHeader("Databases")
$databases.AddHeader("PostgreSQL").AddTable($(Get-PostgreSQLTable))
$databases.AddHeader("MongoDB").AddTable($(Get-MongoDBTable))
# Database tools
$databaseTools = $installedSoftware.AddHeader("Database tools")
@@ -196,10 +178,9 @@ $databaseTools.AddToolVersion("DacFx", $(Get-DacFxVersion))
$databaseTools.AddToolVersion("MySQL", $(Get-MySQLVersion))
$databaseTools.AddToolVersion("SQL OLEDB Driver 18", $(Get-SQLOLEDBDriver18Version))
$databaseTools.AddToolVersion("SQL OLEDB Driver 19", $(Get-SQLOLEDBDriver19Version))
if (Test-IsX64) {
$databaseTools.AddToolVersion("SQLPS", $(Get-SQLPSVersion))
$databaseTools.AddToolVersion("MongoDB Shell (mongosh)", $(Get-MongoshVersion))
}
$databaseTools.AddToolVersion("SQLPS", $(Get-SQLPSVersion))
$databaseTools.AddToolVersion("MongoDB Shell (mongosh)", $(Get-MongoshVersion))
# Web Servers
$installedSoftware.AddHeader("Web Servers").AddTable($(Build-WebServersSection))
@@ -235,15 +216,13 @@ $psModules.AddNodes($(Get-PowerShellModules))
# Android
if (Test-IsX64) {
$android = $installedSoftware.AddHeader("Android")
$android.AddTable($(Build-AndroidTable))
$android = $installedSoftware.AddHeader("Android")
$android.AddTable($(Build-AndroidTable))
$android.AddHeader("Environment variables").AddTable($(Build-AndroidEnvironmentTable))
}
$android.AddHeader("Environment variables").AddTable($(Build-AndroidEnvironmentTable))
# Cached Docker images
if (Test-IsWin22-X64) {
if (-not (Test-IsWin25)) {
$installedSoftware.AddHeader("Cached Docker images").AddTable($(Get-CachedDockerImagesTableData))
}
@@ -34,7 +34,7 @@ function Build-CachedToolsSection
[ToolVersionsListNode]::new("Go", $(Get-ToolcacheGoVersions), '^\d+\.\d+', 'List'),
[ToolVersionsListNode]::new("Node.js", $(Get-ToolcacheNodeVersions), '^\d+', 'List'),
[ToolVersionsListNode]::new("Python", $(Get-ToolcachePythonVersions), '^\d+\.\d+', 'List'),
$(if (-not (Test-IsWin11-Arm64)) { [ToolVersionsListNode]::new("PyPy", $(Get-ToolcachePyPyVersions), '^\d+\.\d+', 'List') }),
[ToolVersionsListNode]::new("PyPy", $(Get-ToolcachePyPyVersions), '^\d+\.\d+', 'List'),
[ToolVersionsListNode]::new("Ruby", $(Get-ToolcacheRubyVersions), '^\d+\.\d+', 'List')
) | Where-Object { $_ }
)
}
@@ -297,9 +297,9 @@ function Build-PackageManagementEnvironmentTable {
"Name" = "VCPKG_INSTALLATION_ROOT"
"Value" = $env:VCPKG_INSTALLATION_ROOT
},
$(if (-not (Test-IsWin11-Arm64)) { [PSCustomObject] @{
[PSCustomObject] @{
"Name" = "CONDA"
"Value" = $env:CONDA
} })
) | Where-Object { $_ }
}
)
}
@@ -1,10 +1,6 @@
function Get-JavaVersions {
$defaultJavaPath = $env:JAVA_HOME
if (Test-IsArm64) {
$javaVersions = Get-Item env:JAVA_HOME_*_AARCH64
} else {
$javaVersions = Get-Item env:JAVA_HOME_*_X64
}
$javaVersions = Get-Item env:JAVA_HOME_*_X64
$sortRules = @{
Expression = { [Int32] $_.Name.Split("_")[2] }
Descending = $false
@@ -43,7 +43,7 @@ function Get-VisualStudioExtensions {
)
# WDK
if (-not (Test-IsWin25-X64)) {
if (-not (Test-IsWin25)) {
$wdkVersion = Get-WDKVersion
$wdkPackages = @(
@{Package = 'Windows Driver Kit'; Version = $wdkVersion }
@@ -25,12 +25,6 @@ Export-ModuleMember -Function @(
'Get-TCToolVersionPath'
'Test-IsWin25'
'Test-IsWin22'
'Test-IsWin11'
'Test-IsArm64'
'Test-IsX64'
'Test-IsWin25-X64'
'Test-IsWin22-X64'
'Test-IsWin11-Arm64'
'Expand-7ZipArchive'
'Get-WindowsUpdateStates'
'Invoke-ScriptBlockWithRetry'
@@ -322,38 +322,6 @@ function Get-TCToolVersionPath {
return Join-Path $foundVersion $Arch
}
function Test-IsArm64 {
<#
.SYNOPSIS
Checks if the current Windows operating system is running on an ARM64 architecture.
.DESCRIPTION
This function uses the Get-CimInstance cmdlet to retrieve information
about the current Windows operating system. It then checks if the OSArchitecture
property of the Win32_OperatingSystem class contains the string "ARM 64-bit",
indicating that the operating system is running on an ARM64 processor.
.OUTPUTS
Returns $true if the current Windows operating system is running on ARM64.
Otherwise, returns $false.
#>
(Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -match "ARM 64-bit"
}
function Test-IsX64 {
<#
.SYNOPSIS
Checks if the current Windows operating system is running on an x64 architecture.
.DESCRIPTION
This function uses the Get-CimInstance cmdlet to retrieve information
about the current Windows operating system. It then checks if the OSArchitecture
property of the Win32_OperatingSystem class contains the string "x64",
indicating that the operating system is running on an x64 processor.
.OUTPUTS
Returns $true if the current Windows operating system is running on x64.
Otherwise, returns $false.
#>
(Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -eq "64-bit"
}
function Test-IsWin25 {
<#
.SYNOPSIS
@@ -388,63 +356,6 @@ function Test-IsWin22 {
(Get-CimInstance -ClassName Win32_OperatingSystem).Caption -match "2022"
}
function Test-IsWin11 {
<#
.SYNOPSIS
Checks if the current Windows operating system is Windows 11.
.DESCRIPTION
This function uses the Get-CimInstance cmdlet to retrieve information
about the current Windows operating system. It then checks if the Caption
property of the Win32_OperatingSystem class contains the string "Windows 11",
indicating that the operating system is Windows 11.
.OUTPUTS
Returns $true if the current Windows operating system is Windows 11.
Otherwise, returns $false.
#>
(Get-CimInstance -ClassName Win32_OperatingSystem).Caption -match "Windows 11"
}
function Test-IsWin25-X64 {
<#
.SYNOPSIS
Checks if the current Windows operating system is Windows Server 2025 running on x64 architecture.
.DESCRIPTION
This function combines the checks from Test-IsWin25 and Test-IsX64 functions to determine if the current Windows operating system is Windows Server 2025 running on an x64 architecture.
.OUTPUTS
Returns $true if the current Windows operating system is Windows Server 2025 running on x64 architecture.
Otherwise, returns $false.
#>
(Test-IsWin25) -and (Test-IsX64)
}
function Test-IsWin22-X64 {
<#
.SYNOPSIS
Checks if the current Windows operating system is Windows Server 2022 running on x64 architecture.
.DESCRIPTION
This function combines the checks from Test-IsWin22 and Test-IsX64 functions to determine if the current Windows operating system is Windows Server 2022 running on an x64 architecture.
.OUTPUTS
Returns $true if the current Windows operating system is Windows Server 2022 running on x64 architecture.
Otherwise, returns $false.
#>
(Test-IsWin22) -and (Test-IsX64)
}
function Test-IsWin11-Arm64 {
<#
.SYNOPSIS
Checks if the current Windows operating system is Windows 11 running on ARM64 architecture.
.DESCRIPTION
This function combines the checks from Test-IsWin11 and Test-IsArm64 functions to determine if the current Windows operating system is Windows 11 running on an ARM64 architecture.
.OUTPUTS
Returns $true if the current Windows operating system is Windows 11 running on ARM64 architecture.
Otherwise, returns $false.
#>
(Test-IsWin11) -and (Test-IsArm64)
}
function Expand-7ZipArchive {
<#
.SYNOPSIS
@@ -32,8 +32,7 @@ Function Install-VisualStudio {
[Parameter(Mandatory)] [String] $Channel,
[String] $InstallChannelUri = "",
[Parameter(Mandatory)] [String[]] $RequiredComponents,
[String] $ExtraArgs = "",
[String] $Architecture = "x64"
[String] $ExtraArgs = ""
)
if ($env:INSTALL_VS_2026) {
@@ -62,7 +61,7 @@ Function Install-VisualStudio {
"channelUri" = $channelUri
"channelId" = $channelId
"productId" = $productId
"arch" = $Architecture
"arch" = "x64"
"add" = $RequiredComponents | ForEach-Object { "$_;includeRecommended" }
}
@@ -1,4 +1,4 @@
Describe "Android SDK" -Skip:(Test-IsArm64) {
Describe "Android SDK" {
$androidToolset = (Get-ToolsetContent).android
$androidInstalledPackages = Get-AndroidInstalledPackages
@@ -11,7 +11,7 @@ Describe "Azure DevOps CLI" {
}
}
Describe "Aliyun CLI" -Skip:(Test-IsWin25-X64) {
Describe "Aliyun CLI" -Skip:(Test-IsWin25) {
It "Aliyun CLI" {
"aliyun version" | Should -ReturnZeroExitCode
}
@@ -58,7 +58,7 @@ Describe "Pulumi" {
}
}
Describe "Svn" -Skip:(-not(Test-IsWin22-X64)) {
Describe "Svn" -Skip:(Test-IsWin25) {
It "svn" {
"svn --version --quiet" | Should -ReturnZeroExitCode
}
@@ -86,7 +86,7 @@ Describe "Julia" {
}
}
Describe "CMake" -Skip:(Test-IsArm64) {
Describe "CMake" {
It "cmake" {
"cmake --version" | Should -ReturnZeroExitCode
}
@@ -98,7 +98,7 @@ Describe "ImageMagick" {
}
}
Describe "Ninja" -Skip:(Test-IsArm64) {
Describe "Ninja" {
BeforeAll {
$ninjaProjectPath = $(Join-Path $env:TEMP_DIR "ninjaproject")
New-item -Path $ninjaProjectPath -ItemType Directory -Force
@@ -1,4 +1,4 @@
Describe "MongoDB" -Skip:(Test-IsWin11-Arm64) {
Describe "MongoDB" {
Context "Version" {
It "<ToolName>" -TestCases @(
@{ ToolName = "mongos" }
@@ -33,7 +33,7 @@ Describe "MongoDB" -Skip:(Test-IsWin11-Arm64) {
}
}
Describe "PostgreSQL" -Skip:(Test-IsWin11-Arm64) {
Describe "PostgreSQL" {
$psqlTests = @(
@{envVar = "PGROOT"; pgPath = Get-EnvironmentVariable "PGROOT" }
@{envVar = "PGBIN"; pgPath = Get-EnvironmentVariable "PGBIN" }
@@ -1,4 +1,4 @@
Describe "Docker" -Skip:(Test-IsWin11-Arm64) {
Describe "Docker" {
It "docker is installed" {
"docker --version" | Should -ReturnZeroExitCode
}
@@ -12,20 +12,20 @@ Describe "Docker" -Skip:(Test-IsWin11-Arm64) {
}
}
Describe "DockerCompose" -Skip:(Test-IsWin11-Arm64) {
Describe "DockerCompose" {
It "docker compose v2" {
"docker compose version" | Should -ReturnZeroExitCode
}
}
Describe "DockerWinCred" -Skip:(Test-IsWin11-Arm64) {
Describe "DockerWinCred" {
It "docker-wincred" {
"docker-credential-wincred version" | Should -ReturnZeroExitCode
}
}
Describe "DockerImages" -Skip:((Test-IsWin25-X64) -or (Test-IsWin11-Arm64)) {
Describe "DockerImages" -Skip:(Test-IsWin25) {
Context "docker images" {
$testCases = (Get-ToolsetContent).docker.images | ForEach-Object { @{ ImageName = $_ } }
+29 -25
View File
@@ -1,29 +1,33 @@
Describe "Haskell" -Skip:(Test-IsWin11-Arm64) {
BeforeDiscovery {
if (Test-IsWin11-Arm64) { return }
$ghcPackagesPath = "c:\ghcup\ghc"
[array] $ghcVersionList = Get-ChildItem -Path $ghcPackagesPath -Filter "*" | ForEach-Object { $_.Name.Trim() }
$ghcCount = $ghcVersionList.Count
$defaultGhcVersion = $ghcVersionList | Sort-Object { [Version] $_ } | Select-Object -Last 1
$ghcDefaultCases = @{
defaultGhcVersion = $defaultGhcVersion
defaultGhcShortVersion = ([version] $defaultGhcVersion).ToString(3)
Describe "Haskell" {
$ghcPackagesPath = "c:\ghcup\ghc"
[array] $ghcVersionList = Get-ChildItem -Path $ghcPackagesPath -Filter "*" | ForEach-Object { $_.Name.Trim() }
$ghcCount = $ghcVersionList.Count
$defaultGhcVersion = $ghcVersionList | Sort-Object {[Version] $_} | Select-Object -Last 1
$ghcDefaultCases = @{
defaultGhcVersion = $defaultGhcVersion
defaultGhcShortVersion = ([version] $defaultGhcVersion).ToString(3)
}
$ghcTestCases = $ghcVersionList | ForEach-Object {
$ghcVersion = $_
$ghcShortVersion = ([version] $ghcVersion).ToString(3)
$binGhcPath = Join-Path $ghcPackagesPath "$ghcShortVersion\bin\ghc.exe"
@{
ghcVersion = $ghcVersion
ghcShortVersion = $ghcShortVersion
binGhcPath = $binGhcPath
}
$ghcTestCases = $ghcVersionList | ForEach-Object {
$ghcVersion = $_
$ghcShortVersion = ([version] $ghcVersion).ToString(3)
$binGhcPath = Join-Path $ghcPackagesPath "$ghcShortVersion\bin\ghc.exe"
@{
ghcVersion = $ghcVersion
ghcShortVersion = $ghcShortVersion
binGhcPath = $binGhcPath
}
}
$ghcupEnvExists = @(
@{envVar = "GHCUP_INSTALL_BASE_PREFIX"}
@{envVar = "GHCUP_MSYS2"}
)
$numberOfVersions = if (Test-IsWin25-X64) { 1 } else { 3 }
}
$ghcupEnvExists = @(
@{envVar = "GHCUP_INSTALL_BASE_PREFIX"}
@{envVar = "GHCUP_MSYS2"}
)
If (Test-IsWin25) {
$numberOfVersions = 1
} else {
$numberOfVersions = 3
}
It "<envVar> environment variable exists" -TestCases $ghcupEnvExists {
+2 -10
View File
@@ -5,17 +5,9 @@ Describe "Java" {
[array] $testCases = $jdkVersions | ForEach-Object { @{Version = $_ } }
BeforeAll {
if (Test-IsArm64) {
$expectedArch = "AARCH64"
} else {
$expectedArch = "X64"
}
}
It "Java <DefaultJavaVersion> is default" -TestCases @(@{ DefaultJavaVersion = $defaultVersion }) {
$actualJavaPath = Get-EnvironmentVariable "JAVA_HOME"
$expectedJavaPath = Get-EnvironmentVariable "JAVA_HOME_${DefaultJavaVersion}_${expectedArch}"
$expectedJavaPath = Get-EnvironmentVariable "JAVA_HOME_${DefaultJavaVersion}_X64"
$actualJavaPath | Should -Not -BeNullOrEmpty
$expectedJavaPath | Should -Not -BeNullOrEmpty
@@ -32,7 +24,7 @@ Describe "Java" {
}
It "Java <Version>" -TestCases $testCases {
$javaVariableValue = Get-EnvironmentVariable "JAVA_HOME_${Version}_${expectedArch}"
$javaVariableValue = Get-EnvironmentVariable "JAVA_HOME_${Version}_X64"
$javaVariableValue | Should -Not -BeNullOrEmpty
$javaPath = Join-Path $javaVariableValue "bin\java"
+2 -2
View File
@@ -3,7 +3,7 @@ BeforeAll {
$originalPath = $env:PATH
}
Describe "MSYS2 packages" -Skip:(Test-IsWin11-Arm64) {
Describe "MSYS2 packages" {
BeforeEach {
$env:PATH = "$msys2Dir;$env:PATH"
}
@@ -31,7 +31,7 @@ Describe "MSYS2 packages" -Skip:(Test-IsWin11-Arm64) {
$mingwTypes = (Get-ToolsetContent).MsysPackages.mingw
foreach ($mingwType in $mingwTypes) {
Describe "$($mingwType.arch) packages" -Skip:(Test-IsWin11-Arm64) {
Describe "$($mingwType.arch) packages" {
$tools = $mingwType.runtime_packages
$execDir = Join-Path "C:\msys64" $mingwType.exec_dir | Join-Path -ChildPath "bin"
@@ -1,4 +1,4 @@
Describe "Miniconda" -Skip:(Test-IsWin11-Arm64) {
Describe "Miniconda" {
It "Miniconda Environment variables is set. " {
${env:CONDA} | Should -Not -BeNullOrEmpty
}
@@ -11,4 +11,4 @@ Describe "Miniconda" -Skip:(Test-IsWin11-Arm64) {
$condaPath | Should -Exist
"$condaPath --version" | Should -ReturnZeroExitCode
}
}
}
+1 -1
View File
@@ -5,7 +5,7 @@ Describe "Rust" {
$env:Path += ";$env:CARGO_HOME\bin"
}
if (Test-IsWin25-X64) {
if (Test-IsWin25) {
$rustTools = @(
@{ToolName = "rustup"; binPath = "C:\Users\Default\.cargo\bin\rustup.exe"}
@{ToolName = "rustc"; binPath = "C:\Users\Default\.cargo\bin\rustc.exe"}
+2 -2
View File
@@ -1,9 +1,9 @@
Describe "Shell" {
$shellTestCases = @(
@{Name = "C:\shells\gitbash.exe"; Target = "$env:ProgramFiles\Git\bin\bash.exe"},
$(if (-not (Test-IsWin11-Arm64)) { @{Name = "C:\shells\msys2bash.cmd"; Target = $null} }),
@{Name = "C:\shells\msys2bash.cmd"; Target = $null}
@{Name = "C:\shells\wslbash.exe"; Target = "$env:SystemRoot\System32\bash.exe"}
) | Where-Object { $_ }
)
It "<Name> target to <Target>" -TestCases $shellTestCases {
(Get-Item $Name).Target | Should -BeExactly $Target
+4 -38
View File
@@ -56,7 +56,7 @@ Describe "DACFx" {
}
}
Describe "Mercurial" -Skip:(Test-IsWin25-X64) {
Describe "Mercurial" -Skip:(Test-IsWin25) {
It "Mercurial" {
"hg --version" | Should -ReturnZeroExitCode
}
@@ -96,7 +96,7 @@ Describe "NET48" {
}
}
Describe "NSIS" -Skip:(Test-IsWin25-X64) {
Describe "NSIS" -Skip:(Test-IsWin25) {
It "NSIS" {
"makensis /VERSION" | Should -ReturnZeroExitCode
}
@@ -118,7 +118,7 @@ Describe "Sbt" {
}
}
Describe "ServiceFabricSDK" -Skip:(Test-IsWin11-Arm64) {
Describe "ServiceFabricSDK" {
It "PowerShell Module" {
# Ignore PowerShell version check if running in PowerShell Core
# https://github.com/microsoft/service-fabric/issues/1343
@@ -160,7 +160,7 @@ Describe "WebPlatformInstaller" {
}
}
Describe "Zstd" -Skip:(Test-IsWin11-Arm64) {
Describe "Zstd" {
It "zstd" {
"zstd -V" | Should -ReturnZeroExitCode
}
@@ -213,37 +213,3 @@ Describe "OpenSSL" {
Get-ChildItem -Path "$env:SystemRoot\System32" -Filter "libssl-*.dll" -File -ErrorAction SilentlyContinue | Should -BeNullOrEmpty
}
}
Describe "CMake" {
It "cmake" {
"cmake --version" | Should -ReturnZeroExitCode
}
}
Describe "Ninja" {
BeforeAll {
$ninjaProjectPath = $(Join-Path $env:TEMP_DIR "ninjaproject")
New-item -Path $ninjaProjectPath -ItemType Directory -Force
@'
cmake_minimum_required(VERSION 3.10)
project(NinjaTest NONE)
'@ | Out-File -FilePath "$ninjaProjectPath/CMakeLists.txt" -Encoding utf8
$ninjaProjectBuildPath = $(Join-Path $ninjaProjectPath "build")
New-item -Path $ninjaProjectBuildPath -ItemType Directory -Force
Set-Location $ninjaProjectBuildPath
}
It "Make a simple ninja project" {
"cmake -GNinja $ninjaProjectPath" | Should -ReturnZeroExitCode
}
It "build.ninja file should exist" {
$buildFilePath = $(Join-Path $ninjaProjectBuildPath "build.ninja")
$buildFilePath | Should -Exist
}
It "Ninja" {
"ninja --version" | Should -ReturnZeroExitCode
}
}
@@ -3,6 +3,10 @@ $toolsExecutables = @{
@{ Binary = "python.exe"; Arguments = "--version" },
@{ Binary = "Scripts\pip.exe"; Arguments = "--version" }
)
PyPy = @(
@{ Binary = "python.exe"; Arguments = "--version" },
@{ Binary = "Scripts\pip.exe"; Arguments = "--version" }
)
Node = @(
@{ Binary = "node.exe"; Arguments = "--version" },
@{ Binary = "npm"; Arguments = "--version" }
@@ -15,13 +19,6 @@ $toolsExecutables = @{
)
}
if (Test-IsX64) {
$toolsExecutables.Add("PyPy", @(
@{ Binary = "python.exe"; Arguments = "--version" },
@{ Binary = "Scripts\pip.exe"; Arguments = "--version" }
))
}
function Get-ToolExecutables {
Param ([String] $Name)
if ($toolsExecutables.ContainsKey($Name)) { $toolsExecutables[$Name] } else { @() }
@@ -25,7 +25,7 @@ Describe "Visual Studio" {
}
}
Describe "Windows 10 SDK" -Skip:((Test-IsWin25-X64) -or (Test-IsWin11-Arm64)) {
Describe "Windows 10 SDK" -Skip:(Test-IsWin25) {
It "Verifies 17763 SDK is installed" {
"${env:ProgramFiles(x86)}\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.17763.0\UAP.props" | Should -Exist
}
+1 -1
View File
@@ -1,4 +1,4 @@
Describe "WDK" -Skip:(Test-IsWin25-X64) {
Describe "WDK" -Skip:(Test-IsWin25) {
It "WDK exists" {
$regKey = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
$installedApplications = Get-ItemProperty -Path $regKey
@@ -79,15 +79,12 @@ Describe "Windows Updates" {
if ( $Title -match "Microsoft Defender Antivirus" ) {
$expect = "Installed", "Failed", "Running"
}
if ( $Title -match "MicrosoftWindows.Client.WebExperience" ) {
$expect = "Installed", "Failed", "Running"
}
$State | Should -BeIn $expect
}
}
Describe "WSL2" -Skip:((Test-IsWin22-X64) -or (Test-IsWin11-Arm64)) {
Describe "WSL2" -Skip:(Test-IsWin22) {
It "WSL status should return zero exit code" {
"wsl --status" | Should -ReturnZeroExitCode
}
+1 -1
View File
@@ -1,4 +1,4 @@
Describe "Wix" -Skip:(Test-IsWin11-Arm64) {
Describe "Wix" {
BeforeAll {
$regKey = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
$installedApplications = Get-ItemProperty -Path $regKey
@@ -1,282 +0,0 @@
build {
sources = ["source.azure-arm.image"]
name = "windows-11-arm64"
provisioner "powershell" {
inline = [
"New-Item -Path ${var.image_folder} -ItemType Directory -Force",
"New-Item -Path ${var.temp_dir} -ItemType Directory -Force"
]
}
provisioner "file" {
destination = "${var.image_folder}\\"
sources = [
"${path.root}/../assets",
"${path.root}/../scripts",
"${path.root}/../toolsets"
]
}
provisioner "file" {
destination = "${var.image_folder}\\scripts\\docs-gen\\"
source = "${path.root}/../../../helpers/software-report-base"
}
provisioner "powershell" {
inline = [
"Move-Item '${var.image_folder}\\assets\\post-gen' 'C:\\post-generation'",
"Remove-Item -Recurse '${var.image_folder}\\assets'",
"Move-Item '${var.image_folder}\\scripts\\docs-gen' '${var.image_folder}\\SoftwareReport'",
"Move-Item '${var.image_folder}\\scripts\\helpers' '${var.helper_script_folder}\\ImageHelpers'",
"New-Item -Type Directory -Path '${var.helper_script_folder}\\TestsHelpers\\'",
"Move-Item '${var.image_folder}\\scripts\\tests\\Helpers.psm1' '${var.helper_script_folder}\\TestsHelpers\\TestsHelpers.psm1'",
"Move-Item '${var.image_folder}\\scripts\\tests' '${var.image_folder}\\tests'",
"Remove-Item -Recurse '${var.image_folder}\\scripts'",
"Move-Item '${var.image_folder}\\toolsets\\toolset-win-11-arm64.json' '${var.image_folder}\\toolset.json'",
"Remove-Item -Recurse '${var.image_folder}\\toolsets'"
]
}
provisioner "windows-shell" {
inline = [
"net user ${var.install_user} ${var.install_password} /add /passwordchg:no /passwordreq:yes /active:yes /Y",
"net localgroup Administrators ${var.install_user} /add",
"winrm set winrm/config/service/auth @{Basic=\"true\"}",
"winrm get winrm/config/service/auth"
]
}
provisioner "powershell" {
inline = ["if (-not ((net localgroup Administrators) -contains '${var.install_user}')) { exit 1 }"]
}
# Scheduled tasks spawned when using elevated_user provisioners requires the user to log in interactively on Windows Desktop
# Set AutoAdminLogon for elevated_user and reboot as a workaround
provisioner "powershell" {
inline = [
"Set-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name AutoAdminLogon -Value 1 -type String",
"Set-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name DefaultUsername -Value \"${var.install_user}\" -type String",
"Set-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name DefaultPassword -Value \"${var.install_password}\" -type String",
]
}
provisioner "windows-restart" {
check_registry = true
restart_timeout = "10m"
}
provisioner "powershell" {
elevated_password = "${var.install_password}"
elevated_user = "${var.install_user}"
inline = ["bcdedit.exe /set TESTSIGNING ON"]
}
provisioner "powershell" {
environment_vars = ["IMAGE_VERSION=${var.image_version}", "IMAGE_OS=${var.image_os}", "AGENT_TOOLSDIRECTORY=${var.agent_tools_directory}", "IMAGEDATA_FILE=${var.imagedata_file}", "IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
execution_policy = "unrestricted"
scripts = [
"${path.root}/../scripts/build/Configure-WindowsDefender.ps1",
"${path.root}/../scripts/build/Configure-PowerShell.ps1",
"${path.root}/../scripts/build/Install-PowerShellModules.ps1",
"${path.root}/../scripts/build/Install-WindowsFeatures.ps1",
"${path.root}/../scripts/build/Install-Chocolatey.ps1",
"${path.root}/../scripts/build/Configure-BaseImage.ps1",
"${path.root}/../scripts/build/Configure-ImageDataFile.ps1",
"${path.root}/../scripts/build/Configure-SystemEnvironment.ps1",
"${path.root}/../scripts/build/Configure-DotnetSecureChannel.ps1"
]
}
provisioner "windows-restart" {
check_registry = true
restart_check_command = "powershell -command \"& {while ( (Get-WindowsOptionalFeature -Online -FeatureName Containers -ErrorAction SilentlyContinue).State -ne 'Enabled' ) { Start-Sleep 30; Write-Output 'InProgress' }}\""
restart_timeout = "10m"
}
provisioner "powershell" {
inline = ["Set-Service -Name wlansvc -StartupType Manual", "if ($(Get-Service -Name wlansvc).Status -eq 'Running') { Stop-Service -Name wlansvc}"]
}
provisioner "powershell" {
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-PowershellCore.ps1",
"${path.root}/../scripts/build/Install-WebPlatformInstaller.ps1"
]
}
provisioner "windows-restart" {
restart_timeout = "30m"
}
provisioner "powershell" {
elevated_password = "${var.install_password}"
elevated_user = "${var.install_user}"
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-VisualStudio.ps1",
"${path.root}/../scripts/build/Install-KubernetesTools.ps1"
]
valid_exit_codes = [0, 3010]
}
provisioner "windows-restart" {
check_registry = true
restart_timeout = "10m"
}
provisioner "powershell" {
pause_before = "2m0s"
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-WDK.ps1",
"${path.root}/../scripts/build/Install-VSExtensions.ps1",
"${path.root}/../scripts/build/Install-AzureCli.ps1",
"${path.root}/../scripts/build/Install-AzureDevOpsCli.ps1",
"${path.root}/../scripts/build/Install-ChocolateyPackages.ps1",
"${path.root}/../scripts/build/Install-CMake.ps1",
"${path.root}/../scripts/build/Install-Ninja.ps1",
"${path.root}/../scripts/build/Install-JavaTools.ps1",
"${path.root}/../scripts/build/Install-Kotlin.ps1",
"${path.root}/../scripts/build/Install-OpenSSL.ps1",
"${path.root}/../scripts/build/Install-LLVM.ps1"
]
}
provisioner "windows-restart" {
restart_timeout = "10m"
}
provisioner "powershell" {
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-ActionsCache.ps1",
"${path.root}/../scripts/build/Install-Ruby.ps1",
"${path.root}/../scripts/build/Install-Toolset.ps1",
"${path.root}/../scripts/build/Configure-Toolset.ps1",
"${path.root}/../scripts/build/Install-NodeJS.ps1",
"${path.root}/../scripts/build/Install-PowershellAzModules.ps1",
"${path.root}/../scripts/build/Install-Pipx.ps1",
"${path.root}/../scripts/build/Install-Git.ps1",
"${path.root}/../scripts/build/Install-GitHub-CLI.ps1",
"${path.root}/../scripts/build/Install-PHP.ps1",
"${path.root}/../scripts/build/Install-Rust.ps1",
"${path.root}/../scripts/build/Install-Sbt.ps1",
"${path.root}/../scripts/build/Install-Chrome.ps1",
"${path.root}/../scripts/build/Install-EdgeDriver.ps1",
"${path.root}/../scripts/build/Install-Firefox.ps1",
"${path.root}/../scripts/build/Install-Selenium.ps1",
"${path.root}/../scripts/build/Install-IEWebDriver.ps1",
"${path.root}/../scripts/build/Install-Apache.ps1",
"${path.root}/../scripts/build/Install-Nginx.ps1",
"${path.root}/../scripts/build/Install-WinAppDriver.ps1",
"${path.root}/../scripts/build/Install-R.ps1",
"${path.root}/../scripts/build/Install-AWSTools.ps1",
"${path.root}/../scripts/build/Install-DACFx.ps1",
"${path.root}/../scripts/build/Install-MysqlCli.ps1",
"${path.root}/../scripts/build/Install-SQLPowerShellTools.ps1",
"${path.root}/../scripts/build/Install-SQLOLEDBDriver.ps1",
"${path.root}/../scripts/build/Install-DotnetSDK.ps1",
"${path.root}/../scripts/build/Install-Mingw64.ps1",
"${path.root}/../scripts/build/Install-Stack.ps1",
"${path.root}/../scripts/build/Install-AzureCosmosDbEmulator.ps1",
"${path.root}/../scripts/build/Install-Mercurial.ps1",
"${path.root}/../scripts/build/Install-NSIS.ps1",
"${path.root}/../scripts/build/Install-Vcpkg.ps1",
"${path.root}/../scripts/build/Install-Bazel.ps1",
"${path.root}/../scripts/build/Install-AliyunCli.ps1",
"${path.root}/../scripts/build/Install-RootCA.ps1",
"${path.root}/../scripts/build/Install-CodeQLBundle.ps1",
"${path.root}/../scripts/build/Configure-Diagnostics.ps1"
]
}
provisioner "powershell" {
elevated_password = "${var.install_password}"
elevated_user = "${var.install_user}"
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-WindowsUpdates.ps1",
"${path.root}/../scripts/build/Configure-DynamicPort.ps1",
"${path.root}/../scripts/build/Configure-GDIProcessHandleQuota.ps1",
"${path.root}/../scripts/build/Configure-Shell.ps1",
"${path.root}/../scripts/build/Configure-DeveloperMode.ps1"
]
}
# Scheduled tasks spawned when using elevated_user provisioners requires the user to log in interactively on Windows Desktop
# Remove AutoAdminLogon after all elevated_user tasks are completed and reboot
provisioner "powershell" {
inline = [
"Remove-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name AutoAdminLogon",
"Remove-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name DefaultUsername",
"Remove-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name DefaultPassword",
]
}
provisioner "windows-restart" {
check_registry = true
restart_check_command = "powershell -command \"& {if ((-not (Get-Process TiWorker.exe -ErrorAction SilentlyContinue)) -and (-not [System.Environment]::HasShutdownStarted) ) { Write-Output 'Restart complete' }}\""
restart_timeout = "30m"
}
provisioner "powershell" {
pause_before = "2m0s"
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-WindowsUpdatesAfterReboot.ps1",
"${path.root}/../scripts/build/Invoke-Cleanup.ps1",
"${path.root}/../scripts/tests/RunAll-Tests.ps1"
]
}
provisioner "powershell" {
inline = ["if (-not (Test-Path ${var.image_folder}\\tests\\testResults.xml)) { throw '${var.image_folder}\\tests\\testResults.xml not found' }"]
}
provisioner "powershell" {
environment_vars = ["IMAGE_VERSION=${var.image_version}", "IMAGE_FOLDER=${var.image_folder}"]
inline = ["pwsh -File '${var.image_folder}\\SoftwareReport\\Generate-SoftwareReport.ps1'"]
}
provisioner "powershell" {
inline = ["if (-not (Test-Path C:\\software-report.md)) { throw 'C:\\software-report.md not found' }", "if (-not (Test-Path C:\\software-report.json)) { throw 'C:\\software-report.json not found' }"]
}
provisioner "file" {
destination = "${path.root}/../Windows11-Arm64-Readme.md"
direction = "download"
source = "C:\\software-report.md"
}
provisioner "file" {
destination = "${path.root}/../software-report.json"
direction = "download"
source = "C:\\software-report.json"
}
provisioner "powershell" {
environment_vars = ["INSTALL_USER=${var.install_user}"]
scripts = [
"${path.root}/../scripts/build/Install-NativeImages.ps1",
"${path.root}/../scripts/build/Configure-System.ps1",
"${path.root}/../scripts/build/Configure-User.ps1",
"${path.root}/../scripts/build/Post-Build-Validation.ps1"
]
skip_clean = true
}
provisioner "windows-restart" {
restart_timeout = "10m"
}
provisioner "powershell" {
inline = [
"if( Test-Path $env:SystemRoot\\System32\\Sysprep\\unattend.xml ){ rm $env:SystemRoot\\System32\\Sysprep\\unattend.xml -Force}",
"& $env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /mode:vm /quiet /quit",
"while($true) { $imageState = Get-ItemProperty HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\State | Select ImageState; if($imageState.ImageState -ne 'IMAGE_STATE_GENERALIZE_RESEAL_TO_OOBE') { Write-Output $imageState.ImageState; Start-Sleep -s 10 } else { break } }"
]
}
}
@@ -1,282 +0,0 @@
build {
sources = ["source.azure-arm.image"]
name = "windows-11-vs2026-arm64"
provisioner "powershell" {
inline = [
"New-Item -Path ${var.image_folder} -ItemType Directory -Force",
"New-Item -Path ${var.temp_dir} -ItemType Directory -Force"
]
}
provisioner "file" {
destination = "${var.image_folder}\\"
sources = [
"${path.root}/../assets",
"${path.root}/../scripts",
"${path.root}/../toolsets"
]
}
provisioner "file" {
destination = "${var.image_folder}\\scripts\\docs-gen\\"
source = "${path.root}/../../../helpers/software-report-base"
}
provisioner "powershell" {
inline = [
"Move-Item '${var.image_folder}\\assets\\post-gen' 'C:\\post-generation'",
"Remove-Item -Recurse '${var.image_folder}\\assets'",
"Move-Item '${var.image_folder}\\scripts\\docs-gen' '${var.image_folder}\\SoftwareReport'",
"Move-Item '${var.image_folder}\\scripts\\helpers' '${var.helper_script_folder}\\ImageHelpers'",
"New-Item -Type Directory -Path '${var.helper_script_folder}\\TestsHelpers\\'",
"Move-Item '${var.image_folder}\\scripts\\tests\\Helpers.psm1' '${var.helper_script_folder}\\TestsHelpers\\TestsHelpers.psm1'",
"Move-Item '${var.image_folder}\\scripts\\tests' '${var.image_folder}\\tests'",
"Remove-Item -Recurse '${var.image_folder}\\scripts'",
"Move-Item '${var.image_folder}\\toolsets\\toolset-win-11-vs2026-arm64.json' '${var.image_folder}\\toolset.json'",
"Remove-Item -Recurse '${var.image_folder}\\toolsets'"
]
}
provisioner "windows-shell" {
inline = [
"net user ${var.install_user} ${var.install_password} /add /passwordchg:no /passwordreq:yes /active:yes /Y",
"net localgroup Administrators ${var.install_user} /add",
"winrm set winrm/config/service/auth @{Basic=\"true\"}",
"winrm get winrm/config/service/auth"
]
}
provisioner "powershell" {
inline = ["if (-not ((net localgroup Administrators) -contains '${var.install_user}')) { exit 1 }"]
}
# Scheduled tasks spawned when using elevated_user provisioners requires the user to log in interactively on Windows Desktop
# Set AutoAdminLogon for elevated_user and reboot as a workaround
provisioner "powershell" {
inline = [
"Set-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name AutoAdminLogon -Value 1 -type String",
"Set-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name DefaultUsername -Value \"${var.install_user}\" -type String",
"Set-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name DefaultPassword -Value \"${var.install_password}\" -type String",
]
}
provisioner "windows-restart" {
check_registry = true
restart_timeout = "10m"
}
provisioner "powershell" {
elevated_password = "${var.install_password}"
elevated_user = "${var.install_user}"
inline = ["bcdedit.exe /set TESTSIGNING ON"]
}
provisioner "powershell" {
environment_vars = ["IMAGE_VERSION=${var.image_version}", "IMAGE_OS=${var.image_os}", "AGENT_TOOLSDIRECTORY=${var.agent_tools_directory}", "IMAGEDATA_FILE=${var.imagedata_file}", "IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}", "INSTALL_VS_2026=true"]
execution_policy = "unrestricted"
scripts = [
"${path.root}/../scripts/build/Configure-WindowsDefender.ps1",
"${path.root}/../scripts/build/Configure-PowerShell.ps1",
"${path.root}/../scripts/build/Install-PowerShellModules.ps1",
"${path.root}/../scripts/build/Install-WindowsFeatures.ps1",
"${path.root}/../scripts/build/Install-Chocolatey.ps1",
"${path.root}/../scripts/build/Configure-BaseImage.ps1",
"${path.root}/../scripts/build/Configure-ImageDataFile.ps1",
"${path.root}/../scripts/build/Configure-SystemEnvironment.ps1",
"${path.root}/../scripts/build/Configure-DotnetSecureChannel.ps1"
]
}
provisioner "windows-restart" {
check_registry = true
restart_check_command = "powershell -command \"& {while ( (Get-WindowsOptionalFeature -Online -FeatureName Containers -ErrorAction SilentlyContinue).State -ne 'Enabled' ) { Start-Sleep 30; Write-Output 'InProgress' }}\""
restart_timeout = "10m"
}
provisioner "powershell" {
inline = ["Set-Service -Name wlansvc -StartupType Manual", "if ($(Get-Service -Name wlansvc).Status -eq 'Running') { Stop-Service -Name wlansvc}"]
}
provisioner "powershell" {
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-PowershellCore.ps1",
"${path.root}/../scripts/build/Install-WebPlatformInstaller.ps1"
]
}
provisioner "windows-restart" {
restart_timeout = "30m"
}
provisioner "powershell" {
elevated_password = "${var.install_password}"
elevated_user = "${var.install_user}"
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}", "INSTALL_VS_2026=true"]
scripts = [
"${path.root}/../scripts/build/Install-VisualStudio.ps1",
"${path.root}/../scripts/build/Install-KubernetesTools.ps1"
]
valid_exit_codes = [0, 3010]
}
provisioner "windows-restart" {
check_registry = true
restart_timeout = "10m"
}
provisioner "powershell" {
pause_before = "2m0s"
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-WDK.ps1",
"${path.root}/../scripts/build/Install-VSExtensions.ps1",
"${path.root}/../scripts/build/Install-AzureCli.ps1",
"${path.root}/../scripts/build/Install-AzureDevOpsCli.ps1",
"${path.root}/../scripts/build/Install-ChocolateyPackages.ps1",
"${path.root}/../scripts/build/Install-CMake.ps1",
"${path.root}/../scripts/build/Install-Ninja.ps1",
"${path.root}/../scripts/build/Install-JavaTools.ps1",
"${path.root}/../scripts/build/Install-Kotlin.ps1",
"${path.root}/../scripts/build/Install-OpenSSL.ps1",
"${path.root}/../scripts/build/Install-LLVM.ps1"
]
}
provisioner "windows-restart" {
restart_timeout = "10m"
}
provisioner "powershell" {
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-ActionsCache.ps1",
"${path.root}/../scripts/build/Install-Ruby.ps1",
"${path.root}/../scripts/build/Install-Toolset.ps1",
"${path.root}/../scripts/build/Configure-Toolset.ps1",
"${path.root}/../scripts/build/Install-NodeJS.ps1",
"${path.root}/../scripts/build/Install-PowershellAzModules.ps1",
"${path.root}/../scripts/build/Install-Pipx.ps1",
"${path.root}/../scripts/build/Install-Git.ps1",
"${path.root}/../scripts/build/Install-GitHub-CLI.ps1",
"${path.root}/../scripts/build/Install-PHP.ps1",
"${path.root}/../scripts/build/Install-Rust.ps1",
"${path.root}/../scripts/build/Install-Sbt.ps1",
"${path.root}/../scripts/build/Install-Chrome.ps1",
"${path.root}/../scripts/build/Install-EdgeDriver.ps1",
"${path.root}/../scripts/build/Install-Firefox.ps1",
"${path.root}/../scripts/build/Install-Selenium.ps1",
"${path.root}/../scripts/build/Install-IEWebDriver.ps1",
"${path.root}/../scripts/build/Install-Apache.ps1",
"${path.root}/../scripts/build/Install-Nginx.ps1",
"${path.root}/../scripts/build/Install-WinAppDriver.ps1",
"${path.root}/../scripts/build/Install-R.ps1",
"${path.root}/../scripts/build/Install-AWSTools.ps1",
"${path.root}/../scripts/build/Install-DACFx.ps1",
"${path.root}/../scripts/build/Install-MysqlCli.ps1",
"${path.root}/../scripts/build/Install-SQLPowerShellTools.ps1",
"${path.root}/../scripts/build/Install-SQLOLEDBDriver.ps1",
"${path.root}/../scripts/build/Install-DotnetSDK.ps1",
"${path.root}/../scripts/build/Install-Mingw64.ps1",
"${path.root}/../scripts/build/Install-Stack.ps1",
"${path.root}/../scripts/build/Install-AzureCosmosDbEmulator.ps1",
"${path.root}/../scripts/build/Install-Mercurial.ps1",
"${path.root}/../scripts/build/Install-NSIS.ps1",
"${path.root}/../scripts/build/Install-Vcpkg.ps1",
"${path.root}/../scripts/build/Install-Bazel.ps1",
"${path.root}/../scripts/build/Install-AliyunCli.ps1",
"${path.root}/../scripts/build/Install-RootCA.ps1",
"${path.root}/../scripts/build/Install-CodeQLBundle.ps1",
"${path.root}/../scripts/build/Configure-Diagnostics.ps1"
]
}
provisioner "powershell" {
elevated_password = "${var.install_password}"
elevated_user = "${var.install_user}"
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-WindowsUpdates.ps1",
"${path.root}/../scripts/build/Configure-DynamicPort.ps1",
"${path.root}/../scripts/build/Configure-GDIProcessHandleQuota.ps1",
"${path.root}/../scripts/build/Configure-Shell.ps1",
"${path.root}/../scripts/build/Configure-DeveloperMode.ps1"
]
}
# Scheduled tasks spawned when using elevated_user provisioners requires the user to log in interactively on Windows Desktop
# Remove AutoAdminLogon after all elevated_user tasks are completed and reboot
provisioner "powershell" {
inline = [
"Remove-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name AutoAdminLogon",
"Remove-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name DefaultUsername",
"Remove-ItemProperty 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon' -Name DefaultPassword",
]
}
provisioner "windows-restart" {
check_registry = true
restart_check_command = "powershell -command \"& {if ((-not (Get-Process TiWorker.exe -ErrorAction SilentlyContinue)) -and (-not [System.Environment]::HasShutdownStarted) ) { Write-Output 'Restart complete' }}\""
restart_timeout = "30m"
}
provisioner "powershell" {
pause_before = "2m0s"
environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"]
scripts = [
"${path.root}/../scripts/build/Install-WindowsUpdatesAfterReboot.ps1",
"${path.root}/../scripts/build/Invoke-Cleanup.ps1",
"${path.root}/../scripts/tests/RunAll-Tests.ps1"
]
}
provisioner "powershell" {
inline = ["if (-not (Test-Path ${var.image_folder}\\tests\\testResults.xml)) { throw '${var.image_folder}\\tests\\testResults.xml not found' }"]
}
provisioner "powershell" {
environment_vars = ["IMAGE_VERSION=${var.image_version}", "IMAGE_FOLDER=${var.image_folder}"]
inline = ["pwsh -File '${var.image_folder}\\SoftwareReport\\Generate-SoftwareReport.ps1'"]
}
provisioner "powershell" {
inline = ["if (-not (Test-Path C:\\software-report.md)) { throw 'C:\\software-report.md not found' }", "if (-not (Test-Path C:\\software-report.json)) { throw 'C:\\software-report.json not found' }"]
}
provisioner "file" {
destination = "${path.root}/../Windows11-VS2026-Arm64-Readme.md"
direction = "download"
source = "C:\\software-report.md"
}
provisioner "file" {
destination = "${path.root}/../software-report.json"
direction = "download"
source = "C:\\software-report.json"
}
provisioner "powershell" {
environment_vars = ["INSTALL_USER=${var.install_user}"]
scripts = [
"${path.root}/../scripts/build/Install-NativeImages.ps1",
"${path.root}/../scripts/build/Configure-System.ps1",
"${path.root}/../scripts/build/Configure-User.ps1",
"${path.root}/../scripts/build/Post-Build-Validation.ps1"
]
skip_clean = true
}
provisioner "windows-restart" {
restart_timeout = "10m"
}
provisioner "powershell" {
inline = [
"if( Test-Path $env:SystemRoot\\System32\\Sysprep\\unattend.xml ){ rm $env:SystemRoot\\System32\\Sysprep\\unattend.xml -Force}",
"& $env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /mode:vm /quiet /quit",
"while($true) { $imageState = Get-ItemProperty HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\State | Select ImageState; if($imageState.ImageState -ne 'IMAGE_STATE_GENERALIZE_RESEAL_TO_OOBE') { Write-Output $imageState.ImageState; Start-Sleep -s 10 } else { break } }"
]
}
}
@@ -11,14 +11,6 @@ locals {
"win25-vs2026" = {
source_image_marketplace_sku = "MicrosoftWindowsServer:WindowsServer:2025-Datacenter-g2"
os_disk_size_gb = 150
},
"win11-arm64" = {
source_image_marketplace_sku = "microsoftwindowsdesktop:windows11preview-arm64:win11-25h2-ent"
os_disk_size_gb = 256
},
"win11-vs2026-arm64" = {
source_image_marketplace_sku = "microsoftwindowsdesktop:windows11preview-arm64:win11-25h2-ent"
os_disk_size_gb = 256
}
}
@@ -1,315 +0,0 @@
{
"toolcache": [
{
"name": "Ruby",
"arch": "aarch64",
"platform" : "win32",
"versions": [
"3.4"
],
"default": "3.4"
},
{
"name": "Python",
"url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json",
"arch": "x64",
"platform" : "win32",
"versions": [
"3.13.*"
]
},
{
"name": "Python",
"url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json",
"arch": "arm64",
"platform" : "win32",
"versions": [
"3.12.*",
"3.13.*",
"3.14.*"
],
"default": "3.13.*"
},
{
"name": "node",
"url" : "https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json",
"arch": "arm64",
"platform" : "win32",
"versions": [
"20.*",
"22.*",
"24.*"
]
},
{
"name": "go",
"url" : "https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json",
"arch": "arm64",
"platform" : "win32",
"versions": [
"1.22.*",
"1.23.*",
"1.24.*",
"1.25.*"
],
"default": "1.24.*"
}
],
"powershellModules": [
{ "name": "DockerMsftProvider" },
{ "name": "MarkdownPS" },
{ "name": "Pester" },
{ "name": "PowerShellGet" },
{ "name": "PSScriptAnalyzer" },
{ "name": "PSWindowsUpdate" },
{ "name": "SqlServer" },
{ "name": "VSSetup" },
{ "name": "Microsoft.Graph" },
{ "name": "AWSPowershell" }
],
"azureModules": [
{
"name": "az",
"versions": [
"12.5.0"
],
"zip_versions": [
]
}
],
"java": {
"default": "21",
"versions": [ "21", "23" ]
},
"android": {
"commandline_tools_url": "https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip",
"hash": "8A90E6A3DEB2FA13229B2E335EFD07687DCC8A55A3C544DA9F40B41404993E7D",
"platform_min_version": "31",
"build_tools_min_version": "31.0.0",
"extras": [
"android;m2repository",
"google;m2repository",
"google;google_play_services"
],
"addons": [],
"additional_tools": [
"cmake;3.18.1",
"cmake;3.22.1"
],
"ndk": {
"default": "27",
"versions": [
"26", "27", "28"
]
}
},
"mingw": {
"version": "14.*",
"runtime": "ucrt"
},
"MsysPackages": {
"msys2": [],
"mingw": []
},
"windowsFeatures": [
{ "name": "Containers", "optionalFeature": true },
{ "name": "Microsoft-Windows-Subsystem-Linux", "optionalFeature": true },
{ "name": "VirtualMachinePlatform", "optionalFeature": true },
{ "name": "NetFx4-AdvSrvs", "optionalFeature": true },
{ "name": "Client-ProjFS", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V-All", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V-Tools-All", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V-Hypervisor", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V-Management-PowerShell", "optionalFeature": true }
],
"visualStudio": {
"version" : "2022",
"subversion" : "17",
"edition" : "Enterprise",
"channel": "release",
"installChannelUri": "",
"workloads": [
"Component.Dotfuscator",
"Component.Linux.CMake",
"Component.Unreal.Android",
"Component.Xamarin",
"Microsoft.Component.VC.Runtime.UCRTSDK",
"Microsoft.Net.Component.4.7.2.SDK",
"Microsoft.Net.Component.4.7.TargetingPack",
"Microsoft.Net.Component.4.7.2.TargetingPack",
"Microsoft.Net.Component.4.8.1.SDK",
"Microsoft.Net.Component.4.8.1.TargetingPack",
"Microsoft.VisualStudio.Component.AspNet45",
"Microsoft.VisualStudio.Component.Debugger.JustInTime",
"Microsoft.VisualStudio.Component.EntityFramework",
"Microsoft.VisualStudio.Component.DslTools",
"Microsoft.VisualStudio.Component.SQL.SSDT",
"Microsoft.VisualStudio.Component.PortableLibrary",
"Microsoft.VisualStudio.Component.TestTools.CodedUITest",
"Microsoft.VisualStudio.Component.TestTools.WebLoadTest",
"Microsoft.VisualStudio.Component.UWP.VC.ARM64",
"Microsoft.VisualStudio.Component.UWP.VC.ARM64EC",
"Microsoft.VisualStudio.Component.VC.CLI.Support",
"Microsoft.VisualStudio.Component.VC.CMake.Project",
"Microsoft.VisualStudio.Component.VC.DiagnosticTools",
"Microsoft.VisualStudio.Component.VC.Llvm.Clang",
"Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset",
"Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest",
"Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest",
"Microsoft.VisualStudio.Component.VC.Tools.ARM",
"Microsoft.VisualStudio.Component.VC.Tools.ARM64",
"Microsoft.VisualStudio.Component.VC.Tools.ARM64EC",
"Microsoft.VisualStudio.Component.VC.Redist.MSM",
"Microsoft.VisualStudio.Component.VC.Runtimes.ARM.Spectre",
"Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.Runtimes.ARM64EC.Spectre",
"Microsoft.VisualStudio.Component.VC.MFC.ARM64",
"Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.ATLMFC",
"Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre",
"Microsoft.VisualStudio.Component.VC.ATL",
"Microsoft.VisualStudio.Component.VC.ATL.Spectre",
"Microsoft.VisualStudio.Component.VC.ATL.ARM",
"Microsoft.VisualStudio.Component.VC.ATL.ARM.Spectre",
"Microsoft.VisualStudio.Component.VC.ATL.ARM64",
"Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.ASAN",
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
"Microsoft.VisualStudio.Component.Windows11SDK.22621",
"Microsoft.VisualStudio.Component.Windows11SDK.26100",
"Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang",
"Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142",
"Microsoft.VisualStudio.ComponentGroup.Web.CloudTools",
"Microsoft.VisualStudio.Workload.ManagedDesktop",
"Microsoft.VisualStudio.Workload.ManagedGame",
"Microsoft.VisualStudio.Workload.NativeCrossPlat",
"Microsoft.VisualStudio.Workload.NativeDesktop",
"Microsoft.VisualStudio.Workload.NativeGame",
"Microsoft.VisualStudio.Workload.NetCrossPlat",
"Microsoft.VisualStudio.Workload.NetWeb",
"Microsoft.VisualStudio.Workload.Node",
"Microsoft.VisualStudio.Workload.Universal",
"Microsoft.VisualStudio.Workload.VisualStudioExtension",
"Component.MDD.Linux",
"Component.Microsoft.Windows.DriverKit",
"wasm.tools",
"Microsoft.Component.MSBuild"
],
"vsix": [
"SSIS.MicrosoftDataToolsIntegrationServices",
"VisualStudioClient.MicrosoftVisualStudio2022InstallerProjectsArm64"
]
},
"docker": {
"images": [
"mcr.microsoft.com/windows/servercore:ltsc2022",
"mcr.microsoft.com/windows/nanoserver:ltsc2022",
"mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2022",
"mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2022",
"mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2022"
],
"components": {
"docker": "26.1.3",
"compose": "2.27.1"
}
},
"pipx": [
{
"package": "yamllint",
"cmd": "yamllint --version"
}
],
"selenium": {
"version": "4"
},
"npm": {
"global_packages": [
{ "name": "yarn", "test": "yarn --version" },
{ "name": "newman", "test": "newman --version" },
{ "name": "lerna", "test": "lerna --version" },
{ "name": "gulp-cli", "test": "gulp --version" },
{ "name": "grunt-cli", "test": "grunt --version" }
]
},
"serviceFabric": {
"runtime": {
"version": "10.1.2493.9590",
"checksum": "09C63A971BACDE338282C73B3C9174BED9AAD53E1D3A1B73D44515852C9C00CF"
},
"sdk": {
"version": "7.1.2493",
"checksum": "0CB1084156C75CF5075EA91ABA330CF10B58648B8E036C9C2F286805263C497F"
}
},
"dotnet": {
"versions": [
"6.0",
"8.0",
"9.0",
"10.0"
],
"tools": [
{ "name": "nbgv", "test": "nbgv --version", "getversion": "nbgv --version" }
],
"warmup": false
},
"choco": {
"common_packages": [
{ "name": "7zip.install" },
{ "name": "aria2" },
{ "name": "azcopy10" },
{ "name": "Bicep" },
{ "name": "innosetup" },
{ "name": "jq" },
{ "name": "NuGet.CommandLine" },
{ "name": "packer" },
{
"name": "strawberryperl" ,
"args": [ "--version", "5.32.1.1" ]
},
{ "name": "pulumi" },
{ "name": "swig" },
{ "name": "vswhere" },
{
"name": "julia",
"args": [ "--ia", "/DIR=C:\\Julia" ]
},
{ "name": "imagemagick" }
]
},
"node": {
"default": "24.*"
},
"maven": {
"version": "3.9"
},
"mysql": {
"version": "8.0"
},
"mongodb": {
"version": "5.0"
},
"nsis": {
"version": "3.10"
},
"llvm": {
"version": "20.1.6"
},
"php": {
"version": "8.4"
},
"postgresql": {
"version": "14"
},
"kotlin": {
"version": "latest"
},
"openssl": {
"version": "3.*"
},
"pwsh": {
"version": "7.4"
}
}
@@ -1,307 +0,0 @@
{
"toolcache": [
{
"name": "Ruby",
"arch": "aarch64",
"platform" : "win32",
"versions": [
"3.4"
],
"default": "3.4"
},
{
"name": "Python",
"url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json",
"arch": "x64",
"platform" : "win32",
"versions": [
"3.13.*"
]
},
{
"name": "Python",
"url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json",
"arch": "arm64",
"platform" : "win32",
"versions": [
"3.12.*",
"3.13.*",
"3.14.*"
],
"default": "3.13.*"
},
{
"name": "node",
"url" : "https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json",
"arch": "arm64",
"platform" : "win32",
"versions": [
"20.*",
"22.*",
"24.*"
]
},
{
"name": "go",
"url" : "https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json",
"arch": "arm64",
"platform" : "win32",
"versions": [
"1.22.*",
"1.23.*",
"1.24.*",
"1.25.*"
],
"default": "1.24.*"
}
],
"powershellModules": [
{ "name": "DockerMsftProvider" },
{ "name": "MarkdownPS" },
{ "name": "Pester" },
{ "name": "PowerShellGet" },
{ "name": "PSScriptAnalyzer" },
{ "name": "PSWindowsUpdate" },
{ "name": "SqlServer" },
{ "name": "VSSetup" },
{ "name": "Microsoft.Graph" },
{ "name": "AWSPowershell" }
],
"azureModules": [
{
"name": "az",
"versions": [
"12.5.0"
],
"zip_versions": [
]
}
],
"java": {
"default": "21",
"versions": [ "21", "23" ]
},
"android": {
"commandline_tools_url": "https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip",
"hash": "8A90E6A3DEB2FA13229B2E335EFD07687DCC8A55A3C544DA9F40B41404993E7D",
"platform_min_version": "31",
"build_tools_min_version": "31.0.0",
"extras": [
"android;m2repository",
"google;m2repository",
"google;google_play_services"
],
"addons": [],
"additional_tools": [
"cmake;3.18.1",
"cmake;3.22.1"
],
"ndk": {
"default": "27",
"versions": [
"26", "27", "28"
]
}
},
"mingw": {
"version": "14.*",
"runtime": "ucrt"
},
"MsysPackages": {
"msys2": [],
"mingw": []
},
"windowsFeatures": [
{ "name": "Containers", "optionalFeature": true },
{ "name": "Microsoft-Windows-Subsystem-Linux", "optionalFeature": true },
{ "name": "VirtualMachinePlatform", "optionalFeature": true },
{ "name": "NetFx4-AdvSrvs", "optionalFeature": true },
{ "name": "Client-ProjFS", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V-All", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V-Tools-All", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V-Hypervisor", "optionalFeature": true },
{ "name": "Microsoft-Hyper-V-Management-PowerShell", "optionalFeature": true }
],
"visualStudio": {
"version" : "2026",
"subversion" : "18",
"edition" : "Enterprise",
"channel": "stable",
"installChannelUri": "",
"workloads": [
"Component.Linux.CMake",
"Component.Unreal.Android",
"Microsoft.Component.VC.Runtime.UCRTSDK",
"Microsoft.Net.Component.4.7.2.SDK",
"Microsoft.Net.Component.4.7.TargetingPack",
"Microsoft.Net.Component.4.7.2.TargetingPack",
"Microsoft.Net.Component.4.8.1.SDK",
"Microsoft.Net.Component.4.8.1.TargetingPack",
"Microsoft.VisualStudio.Component.AspNet45",
"Microsoft.VisualStudio.Component.Debugger.JustInTime",
"Microsoft.VisualStudio.Component.EntityFramework",
"Microsoft.VisualStudio.Component.DslTools",
"Microsoft.VisualStudio.Component.SQL.SSDT",
"Microsoft.VisualStudio.Component.PortableLibrary",
"Microsoft.VisualStudio.Component.UWP.VC.ARM64",
"Microsoft.VisualStudio.Component.UWP.VC.ARM64EC",
"Microsoft.VisualStudio.Component.VC.CLI.Support",
"Microsoft.VisualStudio.Component.VC.CMake.Project",
"Microsoft.VisualStudio.Component.VC.DiagnosticTools",
"Microsoft.VisualStudio.Component.VC.Llvm.Clang",
"Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset",
"Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest",
"Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest",
"Microsoft.VisualStudio.Component.VC.Tools.ARM64",
"Microsoft.VisualStudio.Component.VC.Tools.ARM64EC",
"Microsoft.VisualStudio.Component.VC.Redist.MSM",
"Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.Runtimes.ARM64EC.Spectre",
"Microsoft.VisualStudio.Component.VC.MFC.ARM64",
"Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.ATLMFC",
"Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre",
"Microsoft.VisualStudio.Component.VC.ATL",
"Microsoft.VisualStudio.Component.VC.ATL.Spectre",
"Microsoft.VisualStudio.Component.VC.ATL.ARM64",
"Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre",
"Microsoft.VisualStudio.Component.VC.ASAN",
"Microsoft.VisualStudio.Component.VC.14.44.17.14.ARM64",
"Microsoft.VisualStudio.Component.Windows11SDK.22621",
"Microsoft.VisualStudio.Component.Windows11SDK.26100",
"Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang",
"Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142",
"Microsoft.VisualStudio.ComponentGroup.Web.CloudTools",
"Microsoft.VisualStudio.Workload.ManagedDesktop",
"Microsoft.VisualStudio.Workload.ManagedGame",
"Microsoft.VisualStudio.Workload.NativeCrossPlat",
"Microsoft.VisualStudio.Workload.NativeDesktop",
"Microsoft.VisualStudio.Workload.NativeGame",
"Microsoft.VisualStudio.Workload.NetCrossPlat",
"Microsoft.VisualStudio.Workload.NetWeb",
"Microsoft.VisualStudio.Workload.Node",
"Microsoft.VisualStudio.Workload.Universal",
"Microsoft.VisualStudio.Workload.VisualStudioExtension",
"Component.MDD.Linux",
"Component.Microsoft.Windows.DriverKit",
"wasm.tools",
"Microsoft.Component.MSBuild"
],
"vsix": [
"SSIS.MicrosoftDataToolsIntegrationServices",
"VisualStudioClient.MicrosoftVisualStudio2022InstallerProjectsArm64"
]
},
"docker": {
"images": [
"mcr.microsoft.com/windows/servercore:ltsc2022",
"mcr.microsoft.com/windows/nanoserver:ltsc2022",
"mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2022",
"mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2022",
"mcr.microsoft.com/dotnet/framework/sdk:4.8-windowsservercore-ltsc2022"
],
"components": {
"docker": "26.1.3",
"compose": "2.27.1"
}
},
"pipx": [
{
"package": "yamllint",
"cmd": "yamllint --version"
}
],
"selenium": {
"version": "4"
},
"npm": {
"global_packages": [
{ "name": "yarn", "test": "yarn --version" },
{ "name": "newman", "test": "newman --version" },
{ "name": "lerna", "test": "lerna --version" },
{ "name": "gulp-cli", "test": "gulp --version" },
{ "name": "grunt-cli", "test": "grunt --version" }
]
},
"serviceFabric": {
"runtime": {
"version": "10.1.2493.9590",
"checksum": "09C63A971BACDE338282C73B3C9174BED9AAD53E1D3A1B73D44515852C9C00CF"
},
"sdk": {
"version": "7.1.2493",
"checksum": "0CB1084156C75CF5075EA91ABA330CF10B58648B8E036C9C2F286805263C497F"
}
},
"dotnet": {
"versions": [
"6.0",
"8.0",
"9.0",
"10.0"
],
"tools": [
{ "name": "nbgv", "test": "nbgv --version", "getversion": "nbgv --version" }
],
"warmup": false
},
"choco": {
"common_packages": [
{ "name": "7zip.install" },
{ "name": "aria2" },
{ "name": "azcopy10" },
{ "name": "Bicep" },
{ "name": "innosetup" },
{ "name": "jq" },
{ "name": "NuGet.CommandLine" },
{ "name": "packer" },
{
"name": "strawberryperl" ,
"args": [ "--version", "5.32.1.1" ]
},
{ "name": "pulumi" },
{ "name": "swig" },
{ "name": "vswhere" },
{
"name": "julia",
"args": [ "--ia", "/DIR=C:\\Julia" ]
},
{ "name": "imagemagick" }
]
},
"node": {
"default": "24.*"
},
"maven": {
"version": "3.9"
},
"mysql": {
"version": "8.0"
},
"mongodb": {
"version": "5.0"
},
"nsis": {
"version": "3.10"
},
"llvm": {
"version": "20.1.6"
},
"php": {
"version": "8.4"
},
"postgresql": {
"version": "14"
},
"kotlin": {
"version": "latest"
},
"openssl": {
"version": "3.*"
},
"pwsh": {
"version": "7.4"
}
}