dotnet / dotnet/machinelearning
Update outdated CI build images and containers
- Dominant language
- C#
- Stars
- 9.4k
- Forks
- 2k
- Avg merge
- 2d 20h
- Merged PRs (30d)
- 11
Description
Several ML.NET Azure Pipelines definitions use retired hosted images or unsupported container operating systems.
## Findings
- `build/.night-build.yml` uses retired `ubuntu-18.04` and `windows-2019` hosted images.
- `build/.outer-loop-build.yml` uses retired `ubuntu-18.04`, `macOS-10.15`, and `windows-2019` hosted images.
- `.vsts-dotnet-ci.yml`, `build/.night-build.yml`, `build/.outer-loop-build.yml`, and `build/vsts-ci.yml` use Ubuntu 18.04 or CentOS Stream 8 prerequisite containers.
- The active PR and official builds use supported Ubuntu 22.04, Windows 2022, and macOS 15 hosts, but their Linux and Windows images are older than the current `dotnet/runtime` images.
Azure Pipelines retired Windows Server 2019 on December 31, 2025. Ubuntu 18.04 and macOS 10.15 hosted images are also retired. Ubuntu 18.04 standard support ended in May 2023, and CentOS Stream 8 support ended in May 2024.
## Proposed work
- [ ] Update or remove the obsolete nightly and outer-loop pipeline definitions.
- [ ] Move public Linux agents to `build.azurelinux.3.amd64.open`.
- [ ] Move official Linux agents to `build.azurelinux.3.amd64`.
- [ ] Move public Windows agents to `windows.vs2026.amd64.open`.
- [ ] Move official Windows agents to `windows.vs2026.amd64`.
- [ ] Keep `macOS-15` unless validation supports a move to macOS 26.
- [ ] Replace the CentOS Stream 8 and Ubuntu 18.04 prerequisite containers.
- [ ] Create newer ML.NET ARM and ARM64 cross-build containers, or validate the Azure Linux 3 cross-build containers used by `dotnet/runtime`.
- [ ] Update image-specific conditions in `build/ci/job-template.yml`.
- [ ] Run each affected pipeline before removal of its old image configuration.
Current MCR tags include `ubuntu-22.04-mlnet`, but no newer ML.NET-specific ARM or ARM64 cross-build aliases were found. The cross-build container migration needs explicit validation.
## References
- [`dotnet/runtime` build pools](https://github.com/dotnet/runtime/blob/main/eng/pipelines/common/xplat-setup.yml)
- [`dotnet/runtime` build containers](https://github.com/dotnet/runtime/blob/main/eng/pipelines/common/templates/pipeline-with-resources.yml)
- [`dotnet/runtime` Helix platforms](https://github.com/dotnet/runtime/blob/main/eng/pipelines/helix-platforms.yml)
- [Microsoft-hosted agents](https://learn.microsoft.com/azure/devops/pipelines/agents/hosted)
- [Hosted-image deprecation schedule](https://learn.microsoft.com/azure/devops/pipelines/agents/hosted-deprecation-schedule)
Contributor guide
Research direction
Start with build/.night-build.yml, build/.outer-loop-build.yml, .vsts-dotnet-ci.yml, build/vsts-ci.yml, and build/ci/job-template.yml, then compare the referenced dotnet/runtime build pools and containers. Run each affected Azure Pipeline while replacing the retired hosts and prerequisite containers; done means supported images are configured, image-specific conditions still work, and the ARM or ARM64 cross-build containers are explicitly validated.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- azure, docker, yaml
- Domain
- build-system, ci-cd, devops, infrastructure
- Issue type
- Refactor
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100