diff --git a/.github/ISSUE_TEMPLATE/announcement.yml b/.github/ISSUE_TEMPLATE/announcement.yml index 88e459125..4722c93a7 100644 --- a/.github/ISSUE_TEMPLATE/announcement.yml +++ b/.github/ISSUE_TEMPLATE/announcement.yml @@ -46,6 +46,7 @@ body: - label: macOS 26 Arm64 - label: Windows Server 2022 - label: Windows Server 2025 + - label: Windows Server 2025 with Visual Studio 2026 - type: textarea attributes: label: Mitigation ways diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index b26b7bfea..e4b8c5d77 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -29,6 +29,7 @@ body: - label: macOS 26 Arm64 - label: Windows Server 2022 - label: Windows Server 2025 + - label: Windows Server 2025 with Visual Studio 2026 - type: textarea attributes: label: Image version and build link diff --git a/.github/ISSUE_TEMPLATE/tool-request.yml b/.github/ISSUE_TEMPLATE/tool-request.yml index 4bae1f892..e73752d3f 100644 --- a/.github/ISSUE_TEMPLATE/tool-request.yml +++ b/.github/ISSUE_TEMPLATE/tool-request.yml @@ -67,6 +67,7 @@ body: - label: macOS 26 Arm64 - label: Windows Server 2022 - label: Windows Server 2025 + - label: Windows Server 2025 with Visual Studio 2026 - type: textarea attributes: label: Can this tool be installed during the build? diff --git a/.github/workflows/windows2025-vs2026.yml b/.github/workflows/windows2025-vs2026.yml new file mode 100644 index 000000000..7a2e127dc --- /dev/null +++ b/.github/workflows/windows2025-vs2026.yml @@ -0,0 +1,20 @@ +name: Trigger Windows25 with VS 2026 CI +run-name: Windows2025 with VS 2026 - ${{ github.event.pull_request.title }} + +on: + pull_request_target: + types: labeled + paths: + - 'images/windows/**' + +defaults: + run: + shell: pwsh + +jobs: + Windows_2025_vs_2026: + if: github.event.label.name == 'CI windows-all' || github.event.label.name == 'CI windows-2025-vs2026' + uses: ./.github/workflows/trigger-ubuntu-win-build.yml + with: + image_type: 'windows2025-vs2026' + secrets: inherit diff --git a/README.md b/README.md index c9fc7dc32..09621635e 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ To build a VM machine from this repo's source, see the [instructions](docs/creat | macOS 15 Arm64
![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fhosted-runners-images-bot%2F79267492faab096d04cdd25ce7014cec%2Fraw%2Fmacos-15-arm64.json) | arm64 | `macos-latest`, `macos-15`, or `macos-15-xlarge` | [macOS-15-arm64] | | macOS 14
![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fhosted-runners-images-bot%2F79267492faab096d04cdd25ce7014cec%2Fraw%2Fmacos-14.json) | x64 | `macos-14-large`| [macOS-14] | | macOS 14 Arm64
![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fhosted-runners-images-bot%2F79267492faab096d04cdd25ce7014cec%2Fraw%2Fmacos-14-arm64.json) | arm64 | `macos-14` or `macos-14-xlarge`| [macOS-14-arm64] | +| Windows Server 2025 with Visual Studio 2026 ![beta](https://img.shields.io/badge/beta-yellow) | x64 | `windows-2025-vs2026` | [windows-2025-vs2026] | | Windows Server 2025
![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fhosted-runners-images-bot%2F79267492faab096d04cdd25ce7014cec%2Fraw%2Fwin25.json) | x64 | `windows-latest` or `windows-2025` | [windows-2025] | | Windows Server 2022
![Endpoint Badge](https://img.shields.io/endpoint?url=https%3A%2F%2Fgist.githubusercontent.com%2Fhosted-runners-images-bot%2F79267492faab096d04cdd25ce7014cec%2Fraw%2Fwin22.json) | x64 | `windows-2022` | [windows-2022] | @@ -41,6 +42,7 @@ To build a VM machine from this repo's source, see the [instructions](docs/creat [ubuntu-22.04]: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md [ubuntu-slim]: https://github.com/actions/runner-images/blob/main/images/ubuntu-slim/ubuntu-slim-Readme.md [windows-2025]: https://github.com/actions/runner-images/blob/main/images/windows/Windows2025-Readme.md +[windows-2025-vs2026]: https://github.com/actions/runner-images/blob/main/images/windows/Windows2025-VS2026-Readme.md [windows-2022]: https://github.com/actions/runner-images/blob/main/images/windows/Windows2022-Readme.md [macOS-14]: https://github.com/actions/runner-images/blob/main/images/macos/macos-14-Readme.md [macOS-14-arm64]: https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md diff --git a/helpers/GenerateResourcesAndImage.ps1 b/helpers/GenerateResourcesAndImage.ps1 index 8e195e9a4..53cb9afbb 100644 --- a/helpers/GenerateResourcesAndImage.ps1 +++ b/helpers/GenerateResourcesAndImage.ps1 @@ -1,10 +1,11 @@ $ErrorActionPreference = 'Stop' enum ImageType { - Windows2022 = 1 - Windows2025 = 2 - Ubuntu2204 = 3 - Ubuntu2404 = 4 + Windows2022 = 1 + Windows2025 = 2 + Windows2025_vs2026 = 3 + Ubuntu2204 = 4 + Ubuntu2404 = 5 } Function Get-PackerTemplate { @@ -25,6 +26,10 @@ Function Get-PackerTemplate { $relativeTemplatePath = Join-Path (Join-Path "windows" "templates") "build.windows-2025.pkr.hcl" $imageOS = "win25" } + ([ImageType]::Windows2025_vs2026) { + $relativeTemplatePath = Join-Path (Join-Path "windows" "templates") "build.windows-2025-vs2026.pkr.hcl" + $imageOS = "win25-vs2026" + } ([ImageType]::Ubuntu2204) { $relativeTemplatePath = Join-Path (Join-Path "ubuntu" "templates") "build.ubuntu-22_04.pkr.hcl" $imageOS = "ubuntu22" @@ -83,7 +88,7 @@ Function GenerateResourcesAndImage { .PARAMETER ResourceGroupName The name of the resource group to store the resulting artifact. Resource group must already exist. .PARAMETER ImageType - The type of image to generate. Valid values are: Windows2022, Windows2025, Ubuntu2204, Ubuntu2404. + The type of image to generate. Valid values are: Windows2022, Windows2025, Windows2025_vs2026, Ubuntu2204, Ubuntu2404. .PARAMETER ManagedImageName The name of the managed image to create. The default is "Runner-Image-{{ImageType}}". .PARAMETER AzureLocation @@ -210,7 +215,7 @@ Function GenerateResourcesAndImage { Write-Host "Validating packer template..." & $PackerBinary validate ` - "-only=$($PackerTemplate.BuildName)*" ` + "-only=$($PackerTemplate.BuildName).*" ` "-var=client_id=fake" ` "-var=client_secret=fake" ` "-var=subscription_id=$($SubscriptionId)" ` @@ -280,7 +285,7 @@ Function GenerateResourcesAndImage { Write-Debug "Tenant id: $TenantId." & $PackerBinary build -on-error="$($OnError)" ` - -only "$($PackerTemplate.BuildName)*" ` + -only "$($PackerTemplate.BuildName).*" ` -var "client_id=$($ServicePrincipalAppId)" ` -var "client_secret=$($ServicePrincipalPassword)" ` -var "subscription_id=$($SubscriptionId)" ` diff --git a/images/windows/Windows2025-VS2026-Readme.md b/images/windows/Windows2025-VS2026-Readme.md new file mode 100644 index 000000000..05722da1f --- /dev/null +++ b/images/windows/Windows2025-VS2026-Readme.md @@ -0,0 +1,490 @@ +| Announcements | +|-| +| [[Windows/Ubuntu] Docker Server and Client will be updated to version 29.1.*, Docker Compose will be updated to version 2.40.3 on February 9th, 2026](https://github.com/actions/runner-images/issues/13474) | +*** +# Windows Server 2025 +- OS Version: 10.0.26100 Build 32230 +- Image Version: 20260203.4.1 + +## Windows features +- Windows Subsystem for Linux (WSLv1): Enabled +- Windows Subsystem for Linux (Default, WSLv2): 2.6.3.0 + +## Installed Software + +### Language and Runtime +- Bash 5.2.37(1)-release +- Go 1.24.12 +- Julia 1.12.0 +- Kotlin 2.3.0 +- LLVM 20.1.8 +- Node 22.22.0 +- Perl 5.42.0 +- PHP 8.5.2 +- Python 3.12.10 +- Ruby 3.3.10 + +### Package Management +- Chocolatey 2.6.0 +- Composer 2.9.5 +- Helm 4.1.0 +- Miniconda 25.11.1 (pre-installed on the image but not added to PATH) +- NPM 10.9.4 +- NuGet 7.0.1.1 +- pip 26.0 (python 3.12) +- Pipx 1.8.0 +- RubyGems 3.5.22 +- Vcpkg (build from commit cc73782a88) +- Yarn 1.22.22 + +#### Environment variables +| Name | Value | +| ----------------------- | ------------ | +| VCPKG_INSTALLATION_ROOT | C:\vcpkg | +| CONDA | C:\Miniconda | + +### Project Management +- Ant 1.10.15 +- Gradle 9.3 +- Maven 3.9.12 +- sbt 1.12.1 + +### Tools +- 7zip 25.01 +- aria2 1.37.0 +- azcopy 10.31.1 +- Bazel 9.0.0 +- Bazelisk 1.28.1 +- Bicep 0.40.2 +- Cabal 3.16.1.0 +- CMake 4.2.3 +- CodeQL Action Bundle 2.24.0 +- Docker 27.5.1 +- Docker Compose v2 2.32.2 +- Docker-wincred 0.9.5 +- ghc 9.14.1 +- Git 2.53.0.windows.1 +- Git LFS 3.7.1 +- ImageMagick 7.1.2-13 +- InnoSetup 6.7.0 +- jq 1.8.1 +- Kind 0.31.0 +- Kubectl 1.35.0 +- gcc 15.2.0 +- gdb 16.3 +- GNU Binutils 2.45 +- Newman 6.2.2 +- OpenSSL 3.6.1 +- Packer 1.14.2 +- Pulumi 3.218.0 +- R 4.5.2 +- Service Fabric SDK 10.1.2493.9590 +- Stack 3.9.1 +- Swig 4.3.1 +- VSWhere 3.1.7 +- WinAppDriver 1.2.2009.02003 +- WiX Toolset 3.14.1.8722 +- yamllint 1.38.0 +- zstd 1.5.7 +- Ninja 1.13.2 + +### CLI Tools +- AWS CLI 2.33.12 +- AWS SAM CLI 1.153.1 +- AWS Session Manager CLI 1.2.764.0 +- Azure CLI 2.83.0 +- Azure DevOps CLI extension 1.0.2 +- GitHub CLI 2.86.0 + +### Rust Tools +- Cargo 1.93.0 +- Rust 1.93.0 +- Rustdoc 1.93.0 +- Rustup 1.28.2 + +#### Packages +- Clippy 0.1.93 +- Rustfmt 1.8.0 + +### Browsers and Drivers +- Google Chrome 144.0.7559.110 +- Chrome Driver 144.0.7559.109 +- Microsoft Edge 144.0.3719.104 +- Microsoft Edge Driver 144.0.3719.104 +- Mozilla Firefox 147.0.2 +- Gecko Driver 0.36.0 +- IE Driver 4.14.0.0 +- Selenium server 4.40.0 + +#### Environment variables +| Name | Value | +| ----------------- | ---------------------------------- | +| CHROMEWEBDRIVER | C:\SeleniumWebDrivers\ChromeDriver | +| EDGEWEBDRIVER | C:\SeleniumWebDrivers\EdgeDriver | +| GECKOWEBDRIVER | C:\SeleniumWebDrivers\GeckoDriver | +| SELENIUM_JAR_PATH | C:\selenium\selenium-server.jar | + +### Java +| Version | Environment Variable | +| -------------------- | -------------------- | +| 8.0.472+8 | JAVA_HOME_8_X64 | +| 11.0.29+7 | JAVA_HOME_11_X64 | +| 17.0.17+10 (default) | JAVA_HOME_17_X64 | +| 21.0.9+10.0 | JAVA_HOME_21_X64 | +| 25.0.2+10.0 | JAVA_HOME_25_X64 | + +### Shells +| Name | Target | +| ------------- | --------------------------------- | +| gitbash.exe | C:\Program Files\Git\bin\bash.exe | +| msys2bash.cmd | C:\msys64\usr\bin\bash.exe | +| wslbash.exe | C:\Windows\System32\bash.exe | + +### MSYS2 +- Pacman 6.1.0 + +#### Notes +``` +Location: C:\msys64 + +Note: MSYS2 is pre-installed on image but not added to PATH. +``` + +### Cached Tools + +#### Go +- 1.22.12 +- 1.23.12 +- 1.24.12 +- 1.25.6 + +#### Node.js +- 20.20.0 +- 22.22.0 +- 24.13.0 + +#### Python +- 3.10.11 +- 3.11.9 +- 3.12.10 +- 3.13.11 +- 3.14.2 + +#### PyPy +- 3.9.19 [PyPy 7.3.16] +- 3.10.16 [PyPy 7.3.19] + +#### Ruby +- 3.2.10 +- 3.3.10 +- 3.4.8 +- 4.0.1 + +### Databases + +#### PostgreSQL +| Property | Value | +| -------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| ServiceName | postgresql-x64-17 | +| Version | 17.7 | +| ServiceStatus | Stopped | +| ServiceStartType | Disabled | +| EnvironmentVariables | PGBIN=C:\Program Files\PostgreSQL\17\bin
PGDATA=C:\PostgreSQL\17\data
PGROOT=C:\Program Files\PostgreSQL\17 | +| Path | C:\Program Files\PostgreSQL\17 | +| UserName | postgres | +| Password | root | + +#### MongoDB +| Version | ServiceName | ServiceStatus | ServiceStartType | +| -------- | ----------- | ------------- | ---------------- | +| 7.0.29.0 | MongoDB | Stopped | Disabled | + +### Database tools +- Azure CosmosDb Emulator 2.14.25.0 +- DacFx 170.2.70.1 +- MySQL 8.0.45.0 +- SQL OLEDB Driver 18 18.7.5.0 +- SQL OLEDB Driver 19 19.4.1.0 +- SQLPS 1.0 +- MongoDB Shell (mongosh) 2.6.0 + +### Web Servers +| Name | Version | ConfigFile | ServiceName | ServiceStatus | ListenPort | +| ------ | ------- | ------------------------------------- | ----------- | ------------- | ---------- | +| Apache | 2.4.55 | C:\tools\Apache24\conf\httpd.conf | Apache | Stopped | 80 | +| Nginx | 1.29.4 | C:\tools\nginx-1.29.4\conf\nginx.conf | nginx | Stopped | 80 | + +### Visual Studio Enterprise 2026 +| Name | Version | Path | +| ----------------------------- | -------------- | ------------------------------------------------------ | +| Visual Studio Enterprise 2026 | 18.2.11415.280 | C:\Program Files\Microsoft Visual Studio\18\Enterprise | + +#### Workloads, components and extensions +| Package | Version | +| ------------------------------------------------------------------------- | --------------- | +| android | 36.1.2.0 | +| Component.Android.NDK.R27C | 18.0.11101.84 | +| Component.Android.SDK.MAUI | 18.0.11101.84 | +| Component.Linux.CMake | 18.0.11101.84 | +| Component.Linux.RemoteFileExplorer | 18.0.11101.84 | +| Component.MDD.Android | 18.1.11302.112 | +| Component.MDD.Linux | 18.0.11101.78 | +| Component.Microsoft.VisualStudio.RazorExtension | 18.0.11101.84 | +| Component.Microsoft.VisualStudio.Tools.Applications.amd64 | 17.0.36522.0 | +| Component.Microsoft.VisualStudio.Web.AzureFunctions | 18.0.11101.84 | +| Component.Microsoft.Web.LibraryManager | 18.0.11101.84 | +| Component.Microsoft.Windows.DriverKit | 10.0.26100.12 | +| Component.OpenJDK | 18.0.11101.84 | +| Component.UnityEngine.x64 | 18.0.11101.78 | +| Component.Unreal.Debugger | 18.2.11407.205 | +| Component.Unreal.Ide | 18.0.11101.78 | +| Component.VisualStudio.GitHub.Copilot | 18.2.11414.340 | +| Component.VSInstallerProjects2022 | 3.0.0 | +| Component.WixToolset.VisualStudioExtension.Dev17 | 1.0.0.22 | +| Component.WixToolset.VisualStudioExtension.Schemas3 | 1.0.0.22 | +| ComponentGroup.Microsoft.NET.AppModernization | 18.0.11217.1 | +| ios | 26.1.10502 | +| maccatalyst | 26.1.10502 | +| maui.blazor | 10.0.1.7412 | +| maui.core | 10.0.1.7412 | +| maui.windows | 10.0.1.7412 | +| Microsoft.Component.Azure.DataLake.Tools | 18.1.11302.112 | +| Microsoft.Component.ClickOnce | 18.0.11101.78 | +| Microsoft.Component.CodeAnalysis.SDK | 18.0.11101.84 | +| Microsoft.Component.MSBuild | 18.0.11101.78 | +| Microsoft.Component.NetFX.Native | 18.0.11101.78 | +| Microsoft.Component.PythonTools | 18.0.11101.78 | +| Microsoft.Component.PythonTools.Web | 18.0.11101.78 | +| Microsoft.Component.VC.Runtime.UCRTSDK | 18.0.11101.78 | +| Microsoft.ComponentGroup.Blend | 18.0.11101.84 | +| Microsoft.ComponentGroup.ClickOnce.Publish | 18.0.11101.84 | +| Microsoft.Net.Component.4.6.2.TargetingPack | 18.0.11101.78 | +| Microsoft.Net.Component.4.6.TargetingPack | 18.0.11101.84 | +| Microsoft.Net.Component.4.7.1.TargetingPack | 18.0.11101.78 | +| Microsoft.Net.Component.4.7.2.TargetingPack | 18.0.11101.84 | +| Microsoft.Net.Component.4.7.TargetingPack | 18.0.11101.84 | +| Microsoft.Net.Component.4.8.1.SDK | 18.0.11101.78 | +| Microsoft.Net.Component.4.8.1.TargetingPack | 18.0.11101.78 | +| Microsoft.Net.Component.4.8.SDK | 18.0.11101.84 | +| Microsoft.Net.Component.4.8.TargetingPack | 18.0.11101.84 | +| Microsoft.Net.ComponentGroup.4.8.DeveloperTools | 18.0.11101.84 | +| Microsoft.Net.ComponentGroup.DevelopmentPrerequisites | 18.0.11101.84 | +| Microsoft.Net.ComponentGroup.TargetingPacks.Common | 18.0.11101.84 | +| microsoft.net.runtime.android | 10.1.225.61305 | +| microsoft.net.runtime.android.aot | 10.1.225.61305 | +| microsoft.net.runtime.android.aot.net9 | 10.1.225.61305 | +| microsoft.net.runtime.android.net9 | 10.1.225.61305 | +| microsoft.net.runtime.ios | 10.1.225.61305 | +| microsoft.net.runtime.ios.net9 | 10.1.225.61305 | +| microsoft.net.runtime.maccatalyst | 10.1.225.61305 | +| microsoft.net.runtime.maccatalyst.net9 | 10.1.225.61305 | +| microsoft.net.runtime.mono.tooling | 10.1.225.61305 | +| microsoft.net.runtime.mono.tooling.net9 | 10.1.225.61305 | +| microsoft.net.sdk.emscripten | 10.1.225.61305 | +| Microsoft.NetCore.Component.DevelopmentTools | 18.0.11101.78 | +| Microsoft.NetCore.Component.Runtime.10.0 | 18.2.11407.205 | +| Microsoft.NetCore.Component.Runtime.8.0 | 18.2.11407.205 | +| Microsoft.NetCore.Component.SDK | 18.2.11407.205 | +| Microsoft.NetCore.Component.Web | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.AppInsights.Tools | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.AspNet | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.AspNet45 | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.ClassDesigner | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.CodeMap | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.CoreEditor | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.CppBuildInsights | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Debugger.JustInTime | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.DiagnosticTools | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.DockerTools | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.DotNetModelBuilder | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.DslTools | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.EntityFramework | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.FSharp | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.FSharp.Desktop | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.FSharp.WebTemplates | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.GraphDocument | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Graphics | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Graphics.Tools | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.HLSL | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.IISExpress | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.IntelliCode | 18.0.11121.172 | +| Microsoft.VisualStudio.Component.IntelliTrace.FrontEnd | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.JavaScript.Diagnostics | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.JavaScript.TypeScript | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.LinqToSql | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.LiveUnitTesting | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.ManagedDesktop.Core | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.MSODBC.SQL | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.Node.Tools | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.NuGet | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.NuGet.BuildTools | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.PortableLibrary | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Roslyn.Compiler | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Roslyn.LanguageServices | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Sharepoint.Tools | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.SQL.CLR | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.SQL.DataSources | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.SQL.SSDT | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.TeamOffice | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.TextTemplating | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.TypeScript.TSServer | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Unity | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.UWP.VC.ARM64 | 18.0.11123.170 | +| Microsoft.VisualStudio.Component.UWP.VC.ARM64EC | 18.0.11123.170 | +| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.VC.14.29.16.11.ARM64 | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.VC.14.44.17.14.x86.x64 | 18.2.11414.340 | +| Microsoft.VisualStudio.Component.VC.ASAN | 18.0.11123.170 | +| Microsoft.VisualStudio.Component.VC.ATL | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM64 | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.ATL.ARM64.Spectre | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.ATL.Spectre | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.ATLMFC | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.CLI.Support | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.CMake.Project | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.VC.CoreIde | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.VC.DiagnosticTools | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.VC.Llvm.Clang | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM64 | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.MFC.ARM64.Spectre | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.Redist.14.Latest | 18.0.11123.170 | +| Microsoft.VisualStudio.Component.VC.Redist.MSM | 18.0.11123.170 | +| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.Runtimes.ARM64EC.Spectre | 18.0.11123.170 | +| Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.TestAdapterForBoostTest | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.VC.TestAdapterForGoogleTest | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.VC.Tools.ARM64 | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.VC.Tools.ARM64EC | 18.0.11123.170 | +| Microsoft.VisualStudio.Component.VC.Tools.x86.x64 | 18.1.11302.112 | +| Microsoft.VisualStudio.Component.Vcpkg | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.VSSDK | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Wcf.Tooling | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Web | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.WebDeploy | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.Windows10SDK | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Windows11SDK.26100 | 18.2.11407.205 | +| Microsoft.VisualStudio.Component.Windows11Sdk.WindowsPerformanceToolkit | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.WindowsAppSdkSupport.CSharp | 18.0.11101.84 | +| Microsoft.VisualStudio.Component.Workflow | 18.0.11101.78 | +| Microsoft.VisualStudio.Component.WslDebugging | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Native | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.AzureFunctions | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Maui.All | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Android | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Blazor | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Maui.iOS | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Maui.MacCatalyst | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Shared | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Maui.Windows | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang | 18.1.11302.112 | +| Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142 | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64 | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.VisualStudioExtension.Prerequisites | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.Web | 18.0.11111.16 | +| Microsoft.VisualStudio.ComponentGroup.Web.CloudTools | 18.0.11123.170 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine | 18.0.11101.84 | +| Microsoft.VisualStudio.ComponentGroup.WindowsAppDevelopment.Prerequisites | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.Azure | 18.2.11406.125 | +| Microsoft.VisualStudio.Workload.CoreEditor | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.Data | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.DataScience | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.ManagedDesktop | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.ManagedGame | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.NativeCrossPlat | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.NativeDesktop | 18.0.11123.170 | +| Microsoft.VisualStudio.Workload.NativeGame | 18.0.11123.170 | +| Microsoft.VisualStudio.Workload.NativeMobile | 18.1.11302.112 | +| Microsoft.VisualStudio.Workload.NetCrossPlat | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.NetWeb | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.Node | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.Office | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.Python | 18.0.11101.84 | +| Microsoft.VisualStudio.Workload.Universal | 18.0.11123.170 | +| Microsoft.VisualStudio.Workload.VisualStudioExtension | 18.0.11101.84 | +| runtimes.ios | 10.1.225.61305 | +| runtimes.ios.net9 | 10.1.225.61305 | +| runtimes.maccatalyst | 10.1.225.61305 | +| runtimes.maccatalyst.net9 | 10.1.225.61305 | +| wasm.tools | 10.1.225.61305 | +| ProBITools.MicrosoftAnalysisServicesModelingProjects2022 | 4.0.0 | +| ProBITools.MicrosoftReportProjectsforVisualStudio2022 | 4.0.0 | +| SSIS.MicrosoftDataToolsIntegrationServices | 2.1.2 | +| VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects | 3.0.0 | +| Windows Driver Kit Visual Studio Extension | 10.0.26100.12 | +| Windows Software Development Kit | 10.1.26100.7175 | +| WixToolset.WixToolsetVisualStudio2022Extension | 1.0.0.22 | + +#### Microsoft Visual C++ +| Name | Architecture | Version | +| -------------------------------------------- | ------------ | ----------- | +| Microsoft Visual C++ 2013 Additional Runtime | x64 | 12.0.40660 | +| Microsoft Visual C++ 2013 Minimum Runtime | x64 | 12.0.40660 | +| Microsoft Visual C++ 2022 Additional Runtime | x64 | 14.50.35719 | +| Microsoft Visual C++ 2022 Debug Runtime | x64 | 14.50.35719 | +| Microsoft Visual C++ 2022 Minimum Runtime | x64 | 14.50.35719 | +| Microsoft Visual C++ 2022 Additional Runtime | x86 | 14.50.35719 | +| Microsoft Visual C++ 2022 Debug Runtime | x86 | 14.50.35719 | +| Microsoft Visual C++ 2022 Minimum Runtime | x86 | 14.50.35719 | + +#### Installed Windows SDKs +- 10.0.26100.0 + +### .NET Core Tools +- .NET Core SDK: 8.0.123, 8.0.206, 8.0.319, 8.0.417, 9.0.113, 9.0.205, 9.0.310, 10.0.102 +- .NET Framework: 4.8, 4.8.1 +- Microsoft.AspNetCore.App: 8.0.6, 8.0.22, 8.0.23, 9.0.6, 9.0.12, 10.0.2 +- Microsoft.NETCore.App: 8.0.6, 8.0.22, 8.0.23, 9.0.6, 9.0.12, 10.0.2 +- Microsoft.WindowsDesktop.App: 8.0.6, 8.0.22, 8.0.23, 9.0.6, 9.0.12, 10.0.2 +- nbgv 3.9.50+6feeb89450 + +### PowerShell Tools +- PowerShell 7.4.13 + +#### Powershell Modules +- Az: 14.6.0 +- AWSPowershell: 5.0.146 +- DockerMsftProvider: 1.0.0.8 +- MarkdownPS: 1.10 +- Microsoft.Graph: 2.35.0 +- Pester: 3.4.0, 5.7.1 +- PowerShellGet: 1.0.0.1, 2.2.5 +- PSScriptAnalyzer: 1.24.0 +- PSWindowsUpdate: 2.2.1.5 +- SqlServer: 22.3.0 +- VSSetup: 2.2.16 + +### Android +| Package Name | Version | +| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Android Command Line Tools | 19.0 | +| Android Emulator | 36.3.10 | +| Android SDK Build-tools | 36.0.0 36.1.0
35.0.0 35.0.1
34.0.0 | +| Android SDK Platforms | android-36.1 (rev 1)
android-36-ext19 (rev 1)
android-36-ext18 (rev 1)
android-36 (rev 2)
android-35-ext15 (rev 1)
android-35-ext14 (rev 1)
android-35 (rev 2)
android-34-ext8 (rev 1)
android-34-ext12 (rev 1)
android-34-ext11 (rev 1)
android-34-ext10 (rev 1)
android-34 (rev 3) | +| Android SDK Platform-Tools | 36.0.2 | +| Android Support Repository | 47.0.0 | +| CMake | 3.30.5
3.31.5
4.1.2 | +| Google Play services | 49 | +| Google Repository | 58 | +| NDK | 27.3.13750724
28.2.13676358
29.0.14206865 | + +#### Environment variables +| Name | Value | +| ----------------------- | ---------------------------------------- | +| ANDROID_HOME | C:\Android\android-sdk | +| ANDROID_NDK | C:\Android\android-sdk\ndk\27.3.13750724 | +| ANDROID_NDK_HOME | C:\Android\android-sdk\ndk\27.3.13750724 | +| ANDROID_NDK_LATEST_HOME | C:\Android\android-sdk\ndk\29.0.14206865 | +| ANDROID_NDK_ROOT | C:\Android\android-sdk\ndk\27.3.13750724 | +| ANDROID_SDK_ROOT | C:\Android\android-sdk | diff --git a/images/windows/scripts/build/Configure-ImageDataFile.ps1 b/images/windows/scripts/build/Configure-ImageDataFile.ps1 index eace1ec9a..d0b73effa 100644 --- a/images/windows/scripts/build/Configure-ImageDataFile.ps1 +++ b/images/windows/scripts/build/Configure-ImageDataFile.ps1 @@ -15,10 +15,14 @@ $imageMinorVersion = $imageVersionComponents[1] $imageDataFile = $env:IMAGEDATA_FILE $githubUrl = "https://github.com/actions/runner-images/blob" -if (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" +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) { + $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) { $imageLabel = "windows-2022" $softwareUrl = "${githubUrl}/win22/$imageMajorVersion.$imageMinorVersion/images/windows/Windows2022-Readme.md" diff --git a/images/windows/scripts/build/Install-AndroidSDK.ps1 b/images/windows/scripts/build/Install-AndroidSDK.ps1 index 1d5668d65..853fa25e0 100644 --- a/images/windows/scripts/build/Install-AndroidSDK.ps1 +++ b/images/windows/scripts/build/Install-AndroidSDK.ps1 @@ -65,7 +65,13 @@ $cmdlineToolsArchPath = Invoke-DownloadWithRetry $cmdlineToolsUrl Test-FileChecksum $cmdlineToolsArchPath -ExpectedSHA256Sum $androidToolset.hash -Expand-7ZipArchive -Path $cmdlineToolsArchPath -DestinationPath "${SDKInstallRoot}\cmdline-tools" +$cmdlineToolsPath = Join-Path -Path $SDKInstallRoot -ChildPath "cmdline-tools" +if (Test-Path "$cmdlineToolsPath\latest") { + Write-Host "Removing previous cmdline-tools installation from Visual Studio workload" + Remove-Item "$cmdlineToolsPath\latest" -Recurse -Force +} + +Expand-7ZipArchive -Path $cmdlineToolsArchPath -DestinationPath $cmdlineToolsPath # cmdline tools should be installed in ${SDKInstallRoot}\cmdline-tools\latest\bin, but archive contains ${SDKInstallRoot}\cmdline-tools\bin # we need to create the proper folder structure diff --git a/images/windows/scripts/build/Install-VisualStudio.ps1 b/images/windows/scripts/build/Install-VisualStudio.ps1 index 9c3006841..0a81c779f 100644 --- a/images/windows/scripts/build/Install-VisualStudio.ps1 +++ b/images/windows/scripts/build/Install-VisualStudio.ps1 @@ -9,7 +9,7 @@ Install-VisualStudio ` -Version $vsToolset.subversion ` -Edition $vsToolset.edition ` -Channel $vsToolset.channel ` - -InstallChannel $vsToolset.installChannel ` + -InstallChannelUri $vsToolset.installChannelUri ` -RequiredComponents $vsToolset.workloads ` -ExtraArgs "--allWorkloads --includeRecommended --remove Component.CPython3.x64" diff --git a/images/windows/scripts/helpers/VisualStudioHelpers.ps1 b/images/windows/scripts/helpers/VisualStudioHelpers.ps1 index c4a99f1bd..fba6e189f 100644 --- a/images/windows/scripts/helpers/VisualStudioHelpers.ps1 +++ b/images/windows/scripts/helpers/VisualStudioHelpers.ps1 @@ -14,9 +14,9 @@ Function Install-VisualStudio { .PARAMETER Channel The channel of Visual Studio that will be installed. Required parameter. - - .PARAMETER InstallChannel - The InstallChannelUri of Visual Studio that will be installed. Required parameter. + + .PARAMETER InstallChannelUri + The InstallChannelUri of Visual Studio that will be installed. Optional parameter. .PARAMETER RequiredComponents The list of required components. Required parameter. @@ -30,17 +30,24 @@ Function Install-VisualStudio { [Parameter(Mandatory)] [String] $Version, [Parameter(Mandatory)] [String] $Edition, [Parameter(Mandatory)] [String] $Channel, - [String] $InstallChannel = "", + [String] $InstallChannelUri = "", [Parameter(Mandatory)] [String[]] $RequiredComponents, [String] $ExtraArgs = "" ) - - - $bootstrapperUrl = "https://aka.ms/vs/${Version}/postGRO-${Channel}/vs_${Edition}.exe" + + if (-not $env:INSTALL_VS_2026) { + $bootstrapperUrl = "https://aka.ms/vs/${Version}/postGRO-${Channel}/vs_${Edition}.exe" + } else { + $bootstrapperUrl = "https://aka.ms/vs/${Version}/${Channel}/vs_${Edition}.exe" + } $channelUri = "https://aka.ms/vs/${Version}/${Channel}/channel" $channelId = "VisualStudio.${Version}.Release" $productId = "Microsoft.VisualStudio.Product.${Edition}" - $installChannelUri = "https://aka.ms/vs/${Version}/${Channel}/${installchannel}/channel" + if (-not [string]::IsNullOrEmpty($InstallChannelUri)) { + $installChannelUri = $InstallChannelUri + } else { + $installChannelUri = $channelUri + } Write-Host "Downloading Bootstrapper ..." $bootstrapperFilePath = Invoke-DownloadWithRetry $BootstrapperUrl @@ -51,11 +58,11 @@ Function Install-VisualStudio { try { $responseData = @{ "installChannelUri" = $installChannelUri - "channelUri" = $channelUri - "channelId" = $channelId - "productId" = $productId - "arch" = "x64" - "add" = $RequiredComponents | ForEach-Object { "$_;includeRecommended" } + "channelUri" = $channelUri + "channelId" = $channelId + "productId" = $productId + "arch" = "x64" + "add" = $RequiredComponents | ForEach-Object { "$_;includeRecommended" } } # Create json file with response data diff --git a/images/windows/templates/build.windows-2025-vs2026.pkr.hcl b/images/windows/templates/build.windows-2025-vs2026.pkr.hcl new file mode 100644 index 000000000..2824b79ed --- /dev/null +++ b/images/windows/templates/build.windows-2025-vs2026.pkr.hcl @@ -0,0 +1,270 @@ +build { + sources = ["source.azure-arm.image"] + name = "windows-2025-vs2026" + + 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-2025-vs2026.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 }"] + } + + 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-WSL2.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-Docker.ps1", + "${path.root}/../scripts/build/Install-DockerWinCred.ps1", + "${path.root}/../scripts/build/Install-DockerCompose.ps1", + "${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-Wix.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-JavaTools.ps1", + "${path.root}/../scripts/build/Install-Kotlin.ps1", + "${path.root}/../scripts/build/Install-OpenSSL.ps1" + ] + } + + provisioner "powershell" { + execution_policy = "remotesigned" + environment_vars = ["IMAGE_FOLDER=${var.image_folder}", "TEMP_DIR=${var.temp_dir}"] + scripts = ["${path.root}/../scripts/build/Install-ServiceFabricSDK.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-PyPy.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-AndroidSDK.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-Msys2.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-Haskell.ps1", + "${path.root}/../scripts/build/Install-Stack.ps1", + "${path.root}/../scripts/build/Install-Miniconda.ps1", + "${path.root}/../scripts/build/Install-AzureCosmosDbEmulator.ps1", + "${path.root}/../scripts/build/Install-Zstd.ps1", + "${path.root}/../scripts/build/Install-Vcpkg.ps1", + "${path.root}/../scripts/build/Install-Bazel.ps1", + "${path.root}/../scripts/build/Install-RootCA.ps1", + "${path.root}/../scripts/build/Install-MongoDB.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-PostgreSQL.ps1", + "${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", + "${path.root}/../scripts/build/Install-LLVM.ps1" + ] + } + + 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}/../Windows2025-VS2026-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 } }" + ] + } + +} diff --git a/images/windows/templates/build.windows-2025.pkr.hcl b/images/windows/templates/build.windows-2025.pkr.hcl index 97d7c5e6e..59e45e672 100644 --- a/images/windows/templates/build.windows-2025.pkr.hcl +++ b/images/windows/templates/build.windows-2025.pkr.hcl @@ -51,7 +51,7 @@ build { inline = ["if (-not ((net localgroup Administrators) -contains '${var.install_user}')) { exit 1 }"] } -provisioner "powershell" { + provisioner "powershell" { elevated_password = "${var.install_password}" elevated_user = "${var.install_user}" inline = ["bcdedit.exe /set TESTSIGNING ON"] diff --git a/images/windows/templates/locals.windows.pkr.hcl b/images/windows/templates/locals.windows.pkr.hcl index e5250f0ba..6cca76993 100644 --- a/images/windows/templates/locals.windows.pkr.hcl +++ b/images/windows/templates/locals.windows.pkr.hcl @@ -7,6 +7,10 @@ locals { "win25" = { source_image_marketplace_sku = "MicrosoftWindowsServer:WindowsServer:2025-Datacenter-g2" os_disk_size_gb = 150 + }, + "win25-vs2026" = { + source_image_marketplace_sku = "MicrosoftWindowsServer:WindowsServer:2025-Datacenter-g2" + os_disk_size_gb = 150 } } diff --git a/images/windows/toolsets/toolset-2022.json b/images/windows/toolsets/toolset-2022.json index 07ec59da5..fac15dd6e 100644 --- a/images/windows/toolsets/toolset-2022.json +++ b/images/windows/toolsets/toolset-2022.json @@ -147,7 +147,7 @@ "subversion" : "17", "edition" : "Enterprise", "channel": "release", - "installChannel": "", + "installChannelUri": "", "workloads": [ "Component.Dotfuscator", "Component.Linux.CMake", diff --git a/images/windows/toolsets/toolset-2025-vs2026.json b/images/windows/toolsets/toolset-2025-vs2026.json new file mode 100644 index 000000000..e2815bb18 --- /dev/null +++ b/images/windows/toolsets/toolset-2025-vs2026.json @@ -0,0 +1,315 @@ +{ + "toolcache": [ + { + "name": "Ruby", + "arch": "x64", + "platform" : "win32", + "versions": [ + "3.2", + "3.3", + "3.4", + "4.0" + ], + "default": "3.3" + }, + { + "name": "Python", + "url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json", + "arch": "x64", + "platform" : "win32", + "versions": [ + "3.10.*", + "3.11.*", + "3.12.*", + "3.13.*", + "3.14.*" + ], + "default": "3.12.*" + }, + { + "name": "PyPy", + "arch": "x86", + "platform" : "win64", + "versions": [ + "3.9", + "3.10" + ] + }, + { + "name": "node", + "url" : "https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json", + "arch": "x64", + "platform" : "win32", + "versions": [ + "20.*", + "22.*", + "24.*" + ] + }, + { + "name": "go", + "url" : "https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json", + "arch": "x64", + "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", "versions": [ "22.3.0" ] }, + { "name": "VSSetup" }, + { "name": "Microsoft.Graph" }, + {"name": "AWSPowershell"} + ], + "azureModules": [ + { + "name": "az", + "versions": [ + "14.6.0" + ] + } + ], + "java": { + "default": "17", + "versions": [ "8", "11", "17", "21", "25"] + }, + "android": { + "commandline_tools_url": "https://dl.google.com/android/repository/commandlinetools-win-13114758_latest.zip", + "hash": "98B565CB657B012DAE6794CEFC0F66AE1EFB4690C699B78A614B4A6A3505B003", + "platform_min_version": "34", + "build_tools_min_version": "34.0.0", + "extras": [ + "android;m2repository", + "google;m2repository", + "google;google_play_services" + ], + "addons": [], + "additional_tools": [ + "cmake;3.30.5", + "cmake;3.31.5", + "cmake;4.1.2" + ], + "ndk": { + "default": "27", + "versions": [ + "27", "28", "29" + ] + } + }, + "mingw": { + "version": "15.*", + "runtime": "ucrt" + }, + "MsysPackages": { + "msys2": [], + "mingw": [] + }, + "windowsFeatures": [ + { "name": "Containers" }, + { "name": "Microsoft-Windows-Subsystem-Linux", "optionalFeature": true }, + { "name": "VirtualMachinePlatform", "optionalFeature": true }, + { "name": "NET-Framework-45-Features", "includeAllSubFeatures": true }, + { "name": "Client-ProjFS", "optionalFeature": true }, + { "name": "NET-Framework-Features", "includeAllSubFeatures": true }, + { "name": "Hyper-V", "includeAllSubFeatures": true }, + { "name": "HypervisorPlatform", "optionalFeature": true }, + { "name": "Hyper-V-PowerShell" }, + { "name": "Wireless-Networking" } + ], + "visualStudio": { + "version" : "2026", + "subversion" : "18", + "edition" : "Enterprise", + "channel": "stable", + "installChannelUri": "", + "workloads": [ + "Component.Linux.CMake", + "Component.UnityEngine.x64", + "Microsoft.Component.VC.Runtime.UCRTSDK", + "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.LinqToSql", + "Microsoft.VisualStudio.Component.SQL.SSDT", + "Microsoft.VisualStudio.Component.Sharepoint.Tools", + "Microsoft.VisualStudio.Component.PortableLibrary", + "Microsoft.VisualStudio.Component.TeamOffice", + "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.Tools.x86.x64", + "Microsoft.VisualStudio.Component.VC.Redist.MSM", + "Microsoft.VisualStudio.Component.VC.Runtimes.ARM64.Spectre", + "Microsoft.VisualStudio.Component.VC.Runtimes.ARM64EC.Spectre", + "Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.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.x86.x64", + "Microsoft.VisualStudio.Component.Windows11SDK.26100", + "Microsoft.VisualStudio.Component.Workflow", + "Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang", + "Microsoft.VisualStudio.ComponentGroup.UWP.VC.v142", + "Microsoft.VisualStudio.ComponentGroup.Web.CloudTools", + "Microsoft.VisualStudio.Workload.Azure", + "Microsoft.VisualStudio.Workload.Data", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.ManagedGame", + "Microsoft.VisualStudio.Workload.NativeCrossPlat", + "Microsoft.VisualStudio.Workload.NativeDesktop", + "Microsoft.VisualStudio.Workload.NativeGame", + "Microsoft.VisualStudio.Workload.NativeMobile", + "Microsoft.VisualStudio.Workload.NetCrossPlat", + "Microsoft.VisualStudio.Workload.NetWeb", + "Microsoft.VisualStudio.Workload.Node", + "Microsoft.VisualStudio.Workload.Office", + "Microsoft.VisualStudio.Workload.Python", + "Microsoft.VisualStudio.Workload.Universal", + "Microsoft.VisualStudio.Workload.VisualStudioExtension", + "Component.MDD.Linux", + "Component.Microsoft.Windows.DriverKit", + "wasm.tools", + "Microsoft.Component.MSBuild" + ], + "vsix": [ + "SSIS.MicrosoftDataToolsIntegrationServices", + "VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects", + "WixToolset.WixToolsetVisualStudio2022Extension", + "ProBITools.MicrosoftReportProjectsforVisualStudio2022", + "ProBITools.MicrosoftAnalysisServicesModelingProjects2022" + ] + }, + "docker": { + "images": [], + "components": { + "docker": "27.5.1", + "compose": "2.32.2" + } + }, + "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": [ + "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": "pulumi" }, + { "name": "swig" }, + { "name": "vswhere" }, + { + "name": "julia", + "args": [ "--ia", "/DIR=C:\\Julia" ] + }, + { + "name": "cmake.install", + "args": [ "--installargs", "ADD_CMAKE_TO_PATH=\"System\"" ] + }, + { + "name": "strawberryperl" , + "args": [ "--version", "5.42.0.1" ] + }, + { "name": "imagemagick" }, + { "name": "ninja" } + ] + }, + "node": { + "default": "22.*" + }, + "maven": { + "version": "3.9" + }, + "mysql": { + "version": "8.0" + }, + "mongodb": { + "version": "7.0" + }, + "llvm": { + "version": "20" + }, + "php": { + "version": "8.5" + }, + "postgresql": { + "version": "17" + }, + "kotlin": { + "version": "latest" + }, + "openssl": { + "version": "3.*" + }, + "pwsh": { + "version": "7.4" + } +} diff --git a/images/windows/toolsets/toolset-2025.json b/images/windows/toolsets/toolset-2025.json index a464978ca..513235353 100644 --- a/images/windows/toolsets/toolset-2025.json +++ b/images/windows/toolsets/toolset-2025.json @@ -132,7 +132,7 @@ "subversion" : "17", "edition" : "Enterprise", "channel": "release", - "installChannel": "", + "installChannelUri": "", "workloads": [ "Component.Dotfuscator", "Component.Linux.CMake",