runner-images icon indicating copy to clipboard operation
runner-images copied to clipboard

Windows Server 2025 is now available

Open shamil-mubarakshin opened this issue 1 year ago • 32 comments

Breaking changes

Windows Server 2025 is now available for GitHub Actions and Azure DevOps users. You can use the windows-2025 image label in your YAML to select this image.

GitHub Actions

jobs:
  jobName:
    runs-on: windows-2025

Azure DevOps

pool:
  vmImage: windows-2025

The image is marked as "beta" for now. It means some software can be unstable on the new platform. Also, there could be queueing issues as the capacity will be balanced only throughout the next weeks. Please report any problems with the new image to this repository.

Platforms affected

  • [x] Azure DevOps
  • [X] GitHub Actions

Runner images affected

  • [ ] Ubuntu 20.04
  • [ ] Ubuntu 22.04
  • [ ] Ubuntu 24.04
  • [ ] macOS 11
  • [ ] macOS 12
  • [ ] macOS 13
  • [ ] macOS 13 Arm64
  • [ ] macOS 14
  • [ ] macOS 14 Arm64
  • [ ] Windows Server 2019
  • [ ] Windows Server 2022
  • [x] Windows Server 2025

Software difference between Windows Server 2022 and Windows Server 2025

Tool name Windows Server 2022 Windows Server 2025 Notes
Go
  • 1.20.* (cached)
  • 1.21.* (default)
  • 1.22.* (cached)
  • 1.23.* (cached)
  • 1.21.* (cached)
  • 1.22.* (cached)
  • 1.23.* (default)
If your use-case requires using any of these versions, consider using tasks to install Go on-flight:
Node.js
  • 16.* (cached)
  • 18.* (default)
  • 20.* (cached)
  • 22.* (cached)
  • 18.* (cached)
  • 20.* (cached)
  • 22.* (default)
If your use-case requires using any of these versions, consider using tasks to install Node.js on-flight:
Ruby
  • 3.0.* (default)
  • 3.1.* (cached)
  • 3.2.* (cached)
  • 3.1.* (cached)
  • 3.2.* (cached)
  • 3.3.* (default)
Python
  • 3.7.* (cached)
  • 3.8.* (cached)
  • 3.9.* (default)
  • 3.10.* (cached)
  • 3.11.* (cached)
  • 3.12.* (cached)
  • 3.9.* (default)
  • 3.10.* (cached)
  • 3.11.* (cached)
  • 3.12.* (cached)
  • 3.13.* (cached)
On GitHub Actions, actions/setup-python can install any version on-flight so this change doesn't impact users
PyPy
  • 2.7.* (cached)
  • 3.7.* (cached)
  • 3.8.* (cached)
  • 3.9.* (cached)
  • 3.10.* (cached)
  • 3.9.* (cached)
  • 3.10.* (cached)
Deprecated all the versions besides the most recent ones
LLVM 18.* 19.* Updated to the recent version
strawberryperl 5.32.1 5.40.0 Updated to the recent version
maven 3.8.* 3.9.* Updated to the recent version
InnoSetup latest available - Removed from the Windows Server 2025 image due to maintenance reasons.
Mercurial 5.0.0 - Removed from the Windows Server 2025 image due to maintenance reasons.
mingw 12.2.0 14.2.0 Includes updates to
  • gcc
  • GNU gdb
  • GNU Binutils
NSIS 3.10 - Removed from the Windows Server 2025 image due to maintenance reasons.
openssl 1.1.1 3.4.0 Updated to the recent version
Azure Service Fabric runtime 9.1.1436.9590 10.1.2493.9590 Updated to the recent version
Azure Service Fabric SDK 6.1.1436 7.0.2712 Updated to the recent version
svn (tortoisesvn) latest available - Removed from the Windows Server 2025 image due to maintenance reasons.
Alibaba Cloud CLI latest available - Removed from the Windows Server 2025 image due to maintenance reasons.
bindgen latest available - Removed from the Windows Server 2025 image due to maintenance reasons.
cargo-audit latest available - Removed from the Windows Server 2025 image due to maintenance reasons.
cargo-outdated latest available - Removed from the Windows Server 2025 image due to maintenance reasons.
cbindgen latest available - Removed from the Windows Server 2025 image due to maintenance reasons.
Java
  • 8.* (default)
  • 11.*
  • 17.*
  • 21.*
  • 8.*
  • 11.*
  • 17.* (default)
  • 21.*
Default Java switched to 17.* for Windows Server 2025 image.
PostgreSQL 14.12 17.* Updated to the recent version
MongoDB 5.0.* 7.0.* Updated to the recent version
Visual Studio components * Excluded
  • Component.Unreal.Android
  • Component.Xamarin
  • Microsoft.VisualStudio.Component.Windows10SDK.19041
  • Microsoft.VisualStudio.Component.Windows10SDK.20348
  • Microsoft.VisualStudio.Component.Windows11SDK.22000
Removed from the Windows Server 2025 image due to maintenance reasons.
.NET Core SDK
  • 6.*
  • 7.*
  • 8.*
  • 9*
  • 8.*
  • 9.*
Please consider using tasks to install any version on-flight:
PowerShell modules * Excluded
  • AzureRM
  • Azure
Removed from the Windows Server 2025 image due to maintenance reasons.
Android Command Line Tools 8.0 16.0 Updated to the recent version
Android SDK Build-tools
  • 34.0.0
  • 33.0.0
  • 33.0.1
  • 33.0.2
  • 33.0.3
  • 32.0.0
  • 31.0.0
  • 35.0.0
Updated to the recent version
Android cmake
    • 3.18.1
    • 3.22.1
    • 3.22.1
    • 3.30.5
Updated to the recent version
Cached 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
- Removed from the Windows Server 2025 image due to maintenance reasons.

Miscellaneous:

  • Standalone WDK installation was deprecated. Starting with Visual Studio 17.12, the recommended way to install the WDK is via nuget
  • Only the latest version of Haskell will be installed on the image
  • Temporary user installer and its profile were removed from the image
  • mongo.exe shell has been removed from MongoDB since version 6
  • The following directories were compressed:
    • C:\Windows\assembly
    • C:\Windows\WinSxS
    • C:\Program Files\dotnet
    • C:\Program Files (x86)\Android

shamil-mubarakshin avatar Dec 19 '24 14:12 shamil-mubarakshin

Is Windows SDK 10.0.22621 included in the Windows Server 2025 image? This issue says it is not but the README says it does.

dongle-the-gadget avatar Dec 19 '24 16:12 dongle-the-gadget

WSLv2 on GitHub Actions is now supported. https://github.com/vedantmgoyal9/setup-wsl2/issues/3

Is there any possibility WSLv2 can be enabled by default, instead of WSLv1?

vedantmgoyal9 avatar Dec 19 '24 17:12 vedantmgoyal9

Will you consider adding WMIC Feature on Demand to the windows-2025 runner?

For Microsoft Windows Servers, wmic has been deprecated since 2016 and it is not installed by default on Windows Server 2025 (see Features we're no longer developing).

Unfortunately there are some npm packages which rely on this deprecated facility and which have so far not followed migration advice from Microsoft.

The following issues have been raised for the respective npm modules:

  • https://github.com/simonepri/pidtree/issues/26
  • https://github.com/indexzero/ps-tree/issues/69

Although it is theoretically possible to execute the following, it is a massively sized package that would be installed, so it is not really a practical workaround:

DISM /Online /Add-Capability /CapabilityName:WMIC~~~~

MikeMcC399 avatar Dec 19 '24 19:12 MikeMcC399

Is there any possibility of having the ARM64 version in a separate image? (just like macos-15 / macos-15-arm64)

ifarbod avatar Dec 20 '24 17:12 ifarbod

I believe there should be only one default Python, not two, right?

3.9.* (default) 3.10.* (cached) 3.11.* (cached) 3.12.* (default) 3.13.* (cached)

janbrasna avatar Dec 27 '24 10:12 janbrasna

Is Windows SDK 10.0.22621 included in the Windows Server 2025 image?

I believe there should be only one default Python, not two, right?

@dongle-the-gadget, @janbrasna, thanks for highlighting the typos, updated software difference

Is there any possibility WSLv2 can be enabled by default, instead of WSLv1?

@vedantmgoyal9, image rollout with WSLv2 starts this week and will take a few days to complete.

Will you consider adding WMIC Feature on Demand to the windows-2025 runner?

@MikeMcC399, we have no plans on adding this particular deprecated feature to the image. The workaround you mentioned works in runtime via run: step (~8mins) or you could stick to the windows-2022, while package owners update the code.

Is there any possibility of having the ARM64 version in a separate image?

@ifarbod, there are no current plans on introducing Windows Server ARM64 images.

shamil-mubarakshin avatar Jan 08 '25 10:01 shamil-mubarakshin

Any possibility of enabling WSLv2 on Windows 2022 runners as well?

vedantmgoyal9 avatar Jan 08 '25 10:01 vedantmgoyal9

@shamil-mubarakshin

Will you consider adding WMIC Feature on Demand to the windows-2025 runner?

@MikeMcC399, we have no plans on adding this particular deprecated feature to the image. The workaround you mentioned works in runtime via run: step (~8mins) or you could stick to the windows-2022, while package owners update the code.

Many thanks for your response. 🙂 I think this is the right decision not to support this deprecated feature, however I needed to ask you guys before going back to the owners of the packages which need updating.

MikeMcC399 avatar Jan 08 '25 11:01 MikeMcC399

One of the best things about Windows Server 2025 is that it has Winget by default.

HotCakeX avatar Feb 09 '25 10:02 HotCakeX

May I piggyback a question on this issue regarding Runner Availability, I recall that i was tolled that you usually provide the latest and second to latest version, which as not 2025 is out makes me worried that 2019 may be discontinued soonisch. Which would be bad, VS 2022 can no Longer compile drivers for Windows 7 and well 5% of Sandboxie's user bases still uses windows 7 and i would not want to be forced to discontinue this.

So what are the plans for the 2019 runner and can we maybe keep it for many more years?

DavidXanatos avatar Feb 11 '25 09:02 DavidXanatos

So what are the plans for the 2019 runner and can we maybe keep it for many more years?

Sandboxie on Windows 7 user here. Please keep 2019 runner running.

paradoxicallist avatar Feb 11 '25 12:02 paradoxicallist

@DavidXanatos @paradoxicallist

Using an out of support and deprecated OS version with some sort of security focused product like sandboxie doesn't provide the security/isolation you're looking for. (i'm not talking about incompatible hardware, user choice etc., i'm just stating some general facts)

Security goes from lower layer to higher ones, not the other way around. You can never be secure on the higher layer if your underlaying layer isn't secure. Windows 7 is far from secure even with all extended updates when compared to latest Windows 11 build. You can read more about what i'm talking about in here, Clean Source Principle: https://learn.microsoft.com/en-us/security/privileged-access-workstations/privileged-access-success-criteria#clean-source-principle

Another thing is the fact that resources (humans, storage, time etc.) are limited. So the more GitHub staff spend on old obsolete stuff, the less resource they can spend on modern and newer things.

HotCakeX avatar Feb 11 '25 14:02 HotCakeX

@HotCakeX

Well people will not stop using windows 7 I think the past few years without updates made that clear enough. And with Sandboxie its at least somewhat less secure, if an application can only do a hand full of allowed hand picked syscalls its inherently more secure than if it can do all of them without restrictions.

Besides Sandboxie is not only for security, its also for compartmentalization, why junk your OS full of crappy software that will leave garbage behind, if you can instead install it in a sandbox and dispose of it in its entirety once you no longer want to use it.

PS: Just leave the old obsolete stuff in as is no updates no nothing, no work, and HDD space costs virtually nothing. Better then being Violent and forcing People to upgrade against their will. IMHO

DavidXanatos avatar Feb 11 '25 14:02 DavidXanatos

When can we expect windows-2025 in Azure DevOps?

sharpjs avatar Feb 11 '25 17:02 sharpjs

I just created https://github.com/microsoft/msquic/pull/4898 to try to move to using windows-2025 for our BVTs, but it's failing to build kernel mode drivers. Looking at your docs, I believe this is because of these missing components:

  • Windows Driver Kit 10.1.26100.2161
  • Windows Driver Kit Visual Studio Extension 10.0.26100.12

What's the status on these? This is blocking us from moving our builds (I will try to just move test execution for now).

nibanks avatar Mar 07 '25 13:03 nibanks

When can we expect windows-2025 in Azure DevOps?

For us, it became available yesterday.

FH-Inway avatar Mar 07 '25 15:03 FH-Inway

When can we expect windows-2025 in Azure DevOps?

@sharpjs, windows-2025 became available for Azure DevOps Pipelines, announcement has been updated accordingly

So what are the plans for the 2019 runner and can we maybe keep it for many more years?

@DavidXanatos, per support policy we keep 2 latest Windows Server images as GA. windows-2025 will hit GA in the upcoming months, which will be shortly followed by windows-2019 deprecation announcement. windows-2019 will be fully offboarded in the second half of 2025. Using self-hosted runners could be an alternative

I just created https://github.com/microsoft/msquic/pull/4898 to try to move to using windows-2025 for our BVTs, but it's failing to build kernel mode drivers. Looking at your docs, I believe this is because of these missing components

@nibanks, could you open a separate issue, providing all the usual details and repro steps for us to check?

shamil-mubarakshin avatar Mar 10 '25 11:03 shamil-mubarakshin

I noticed wsl2 was installed in the windows-2025 agent in Azure DevOps pipelines and was hoping I could use it to run the Azure service bus emulator in my integration tests. I tried installing and setting up podman, but I'm getting an error when it tries to create the wsl distro. Do the agents not support nested virtualization?

For context, here's the error I'm getting:

WSL2 is not supported with your current machine configuration.

Please enable the "Virtual Machine Platform" optional component and ensure virtualization is enabled in the BIOS.

Enable "Virtual Machine Platform" by running: wsl.exe --install --no-distribution

For information please visit https://aka.ms/enablevirtualization

Error code: Wsl/InstallDistro/Service/RegisterDistro/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED

nathan-roe-adesa avatar Mar 11 '25 01:03 nathan-roe-adesa

When will Windows 2025 and Ubuntu 24.04 be available in Azure Managed DevOps Pools?

jsloan117 avatar Mar 11 '25 16:03 jsloan117

To pickup the question from above: Is there any estimate, when windows-2025 will be available in Azure Managed DevOps Pools? Or is this not even planned?

schielc avatar Mar 26 '25 08:03 schielc

When will Windows 2025 and Ubuntu 24.04 be available in Azure Managed DevOps Pools?

Ubuntu 24.04 is now available in MDP as of yesterday.

jsloan117 avatar Mar 26 '25 12:03 jsloan117

Do we have a timeline of when this will replace windows-latest?

Cyberboss avatar Apr 25 '25 21:04 Cyberboss

  • https://github.com/actions/runner-images/issues/12129 is related to the question about when windows-2025 will be promoted to windows-latest

MikeMcC399 avatar May 02 '25 16:05 MikeMcC399

When will it be available on Managed DevOps Pools? Will it also support Gen2 VMs like the new v6 series ?

dzilzReply avatar May 04 '25 07:05 dzilzReply

Also in Managed DevOps pool it doesn't show the image sizes, yet they define the disk size which is then used for pricing in Managed DevopsPool - is there a way to see the size of the image? Mmh i guess I can answer this myself: this is the same image as used on Managed Self-hosted agent which have 14GB SSD, so since they are the same image they will also have 14GB SSD.

So in terms of pricing and performance, would you all here agree that this applies:

Standard HDD S4 32GB £1.18 (has no 16GB size) 500IOPS, 60MB/s SSD Price E3 16GB £1.05/month 500IOPS, 100MB/s Premium SSD P3 16GB £1.79 120IOPS, 25MB/s

So really in managed DevOps Pool for Performance I should select Standard SSD as a disk if I use the provided runner images, right?

Normally the requirement for Win 2022 Server is at least 32GB, so normally I would choose at least 64GB disk image, so if Microsoft cut things down really to a bare minimum than this would be great but would be nice to know where to see it so I can get my costs for a Managed DevOps Pool clear.

dzilzReply avatar May 04 '25 07:05 dzilzReply

Would you consider adding RabbitMq Message broker to the runner ? Mainly for integration tests for micro-services with MongoDb and Rabbitmq.

SanKumSan avatar May 07 '25 10:05 SanKumSan

Can we have a minimal version of the Windows Server 2025 where only what is by default in the Windows Server 2025 ISO file exists and none of the 3rd party stuff is there?

I don't want to expose my build process to 3rd party programs installed on the runner. I always install my requirements and dependencies through Winget.

A default Windows Server 2025 runner would be really useful, pretty much just like how you get a pure Windows Server 2025 VM on Azure. Offering such runner costs less than what is available now since it has less maintenance.

HotCakeX avatar May 07 '25 11:05 HotCakeX

Now that WSL2 is the default Linux subsystem, will it finally be possible to run Linux containers using Docker, or to switch to Linux containers in Docker? This has been a frustrating limitation of the current Windows Server 2022-based image, which has forced DevOps engineers to build hacky integration test pipelines just to run integration tests relying on Linux-based containers like MySQL.

tapaolo avatar May 12 '25 21:05 tapaolo

Can the winget version been updated? Current version is v1.6.10121 which is a bit old

hustcer avatar May 12 '25 23:05 hustcer

Can the winget version been updated? Current version is v1.6.10121 which is a bit old

I have this step in my workflow that takes care of it

- name: Updating Winget
        shell: pwsh
        run: |
          Write-Host -Object "The version of the pre-installed Winget on the Runner:"
          Write-Host -Object (winget --version)

          # Retrieve the latest Winget release information
          $WingetReleases = Invoke-RestMethod -Uri 'https://api.github.com/repos/microsoft/winget-cli/releases'
          $LatestRelease = $WingetReleases | Select-Object -First 1
          # Direct links to the latest Winget release assets
          [string]$WingetURL = $LatestRelease.assets.browser_download_url | Where-Object -FilterScript { $_.EndsWith('.msixbundle') } | Select-Object -First 1
          [string]$WingetLicense = $LatestRelease.assets.browser_download_url | Where-Object -FilterScript { $_.EndsWith('License1.xml') } | Select-Object -First 1
          [string]$LatestWingetReleaseDependenciesZipURL = $LatestRelease.assets.browser_download_url | Where-Object -FilterScript { $_.EndsWith('DesktopAppInstaller_Dependencies.zip') } | Select-Object -First 1
          [hashtable]$Downloads = @{
              # 'Winget.msixbundle'                 = 'https://aka.ms/getwinget' This is updated slower than the GitHub release
              'DesktopAppInstaller_Dependencies.zip' = $LatestWingetReleaseDependenciesZipURL
              'Winget.msixbundle'                    = $WingetURL
              'License1.xml'                         = $WingetLicense
          }
          $Downloads.GetEnumerator() | ForEach-Object -Parallel {
              Invoke-RestMethod -Uri $_.Value -OutFile $_.Key
          }

          Expand-Archive -Path 'DesktopAppInstaller_Dependencies.zip' -DestinationPath .\ -Force
          # Get the paths to all of the dependencies
          [string[]]$DependencyPaths = (Get-ChildItem -Path .\x64 -Filter '*.appx' -File -Force).FullName

          # Required to update the Winget
          Stop-Process -Name WindowsTerminal -Force -ErrorAction Ignore

          Add-AppxProvisionedPackage -Online -PackagePath 'Winget.msixbundle' -DependencyPackagePath $DependencyPaths -LicensePath 'License1.xml'

          Add-AppPackage -Path 'Winget.msixbundle' -DependencyPath "$($DependencyPaths[0])", "$($DependencyPaths[1])" -ForceTargetApplicationShutdown -ForceUpdateFromAnyVersion

HotCakeX avatar May 14 '25 14:05 HotCakeX