From df9e05a97240eb49707350b8202287fe163ebf32 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 9 May 2026 06:56:43 -0600
Subject: [PATCH 01/23] Update dependency nerdbank.dotnetrepotools to v1.4.1
(515)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.config/dotnet-tools.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 781fe3c..777e86b 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -31,7 +31,7 @@
"rollForward": false
},
"nerdbank.dotnetrepotools": {
- "version": "1.3.22",
+ "version": "1.4.1",
"commands": [
"repo"
],
From aa6e14adfa33d83406fa8b116d1f953d8ff73b94 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 13 May 2026 07:59:49 -0600
Subject: [PATCH 02/23] Update Dockerfile and global.json updates to v10.0.300
(516)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.devcontainer/Dockerfile | 2 +-
global.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 5344ba5..1b6732a 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,5 +1,5 @@
# Refer to https://hub.docker.com/_/microsoft-dotnet-sdk for available versions
-FROM mcr.microsoft.com/dotnet/sdk:10.0.203@sha256:8a90a473da5205a16979de99d2fc20975e922c68304f5c79d564e666dc3982fc
+FROM mcr.microsoft.com/dotnet/sdk:10.0.300@sha256:dc8430e6024d454edadad1e160e1973be3cabbb7125998ef190d9e5c6adf7dbb
# Installing mono makes `dotnet test` work without errors even for net472.
# But installing it takes a long time, so it's excluded by default.
diff --git a/global.json b/global.json
index 441e15a..bc8f3b8 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "10.0.203",
+ "version": "10.0.300",
"rollForward": "patch",
"allowPrerelease": false
},
From 50290571365add4a439306c249c338c474520c2b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 15 May 2026 17:48:26 -0600
Subject: [PATCH 03/23] Update Microsoft Testing Platform to 2.2.3 (517)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
Directory.Packages.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 398de48..15b0775 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -4,7 +4,7 @@
true
true
- 2.2.2
+ 2.2.3
From f24b9f116bf073eac8ffbf94a5cf3377ff893665 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 18 May 2026 13:39:23 -0600
Subject: [PATCH 04/23] Update dependency
Microsoft.Testing.Extensions.CodeCoverage to 18.7.0 (519)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
Directory.Packages.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 15b0775..45a63a6 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -10,7 +10,7 @@
-
+
From 1de022c1dedcd670f196ab5e930628e96dd656fe Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 18 May 2026 13:39:35 -0600
Subject: [PATCH 05/23] Update dependency dotnet-coverage to v18.7.0 (518)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.config/dotnet-tools.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 777e86b..9769f1b 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -10,7 +10,7 @@
"rollForward": false
},
"dotnet-coverage": {
- "version": "18.6.2",
+ "version": "18.7.0",
"commands": [
"dotnet-coverage"
],
From caa057e4738bcb1a2fc57db1ffa2774964862584 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 21 May 2026 06:56:28 -0600
Subject: [PATCH 06/23] Update mcr.microsoft.com/dotnet/sdk:10.0.300 Docker
digest to c079063 (520)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.devcontainer/Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 1b6732a..810a6ed 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,5 +1,5 @@
# Refer to https://hub.docker.com/_/microsoft-dotnet-sdk for available versions
-FROM mcr.microsoft.com/dotnet/sdk:10.0.300@sha256:dc8430e6024d454edadad1e160e1973be3cabbb7125998ef190d9e5c6adf7dbb
+FROM mcr.microsoft.com/dotnet/sdk:10.0.300@sha256:c0790639332692a0d56cdd81ed581cfd24d040d9839764c138994866df89a3b6
# Installing mono makes `dotnet test` work without errors even for net472.
# But installing it takes a long time, so it's excluded by default.
From e7468d63c0882b20043187b8a80845a516d4d4b7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 21 May 2026 20:46:25 +0000
Subject: [PATCH 07/23] Update dependency powershell to v7.6.2 (#521)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.config/dotnet-tools.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 9769f1b..a5037f9 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"powershell": {
- "version": "7.6.1",
+ "version": "7.6.2",
"commands": [
"pwsh"
],
From 08ad1ded6d1bd8cf617e85be9d00747e69433a42 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 25 May 2026 20:56:48 -0600
Subject: [PATCH 08/23] Update dependency PolySharp to 1.16.0 (#522)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
Directory.Packages.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 45a63a6..a10e354 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -24,7 +24,7 @@
-
+
From 3bdfd03e728296005215aaa052ccab20f14a086b Mon Sep 17 00:00:00 2001
From: Artur Spychaj
Date: Tue, 26 May 2026 04:57:11 +0200
Subject: [PATCH 09/23] Fix Install-DotNetSdk.ps1 hang from recursive
Directory.Build.props search (#513)
* Fix Install-DotNetSdk.ps1 hang from recursive Directory.Build.props search
The Get-ChildItem call applied -Recurse to all three path arguments,
including Directory.Build.props. PowerShell splits this into container
+ leaf filter, so -Recurse causes it to search the entire repo root
for every file named Directory.Build.props, crawling into large
directories (bin, obj, tmp, etc.) and causing the script to hang.
Split the call so -Recurse only applies to the src/ and test/ project
file globs. Directory.Build.props is fetched with Get-Item -LiteralPath
(single file, no recursion, no wildcard interpretation).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Recursively search src/ and test/ for Directory.Build.props
Address review feedback: keep recursive Directory.Build.props discovery under src/ and test/, while still picking up the repo-root file. Avoids crawling top-level bin/obj/tmp directories.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: drognanar <3418274+drognanar@users.noreply.github.com>
---
tools/Install-DotNetSdk.ps1 | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tools/Install-DotNetSdk.ps1 b/tools/Install-DotNetSdk.ps1
index 590581e..d9d35bb 100644
--- a/tools/Install-DotNetSdk.ps1
+++ b/tools/Install-DotNetSdk.ps1
@@ -59,7 +59,10 @@ $runtimeVersions = @()
$windowsDesktopRuntimeVersions = @()
$aspnetRuntimeVersions = @()
if (!$SdkOnly) {
- Get-ChildItem "$PSScriptRoot\..\src\*.*proj", "$PSScriptRoot\..\test\*.*proj", "$PSScriptRoot\..\Directory.Build.props" -Recurse | % {
+ $projFiles = Get-ChildItem "$PSScriptRoot\..\src\*.*proj", "$PSScriptRoot\..\test\*.*proj" -Recurse
+ $projFiles += Get-ChildItem "$PSScriptRoot\..\src\Directory.Build.props", "$PSScriptRoot\..\test\Directory.Build.props" -Recurse
+ $projFiles += Get-Item -LiteralPath "$PSScriptRoot\..\Directory.Build.props"
+ $projFiles | % {
$projXml = [xml](Get-Content -LiteralPath $_)
$pg = $projXml.Project.PropertyGroup
if ($pg) {
From 14a7d275d59780ea380bfbb9992baaefeb918c83 Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Tue, 2 Jun 2026 08:55:44 -0600
Subject: [PATCH 10/23] Call out `dotnet-test-cloud.ps1` script
---
CONTRIBUTING.md | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d4322a7..05e4d16 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -39,7 +39,11 @@ This repository can be built on Windows, Linux, and OSX.
Building, testing, and packing this repository can be done by using the standard dotnet CLI commands (e.g. `dotnet build`, `dotnet test`, `dotnet pack`, etc.).
-[pwsh]: https://learn.microsoft.com/powershell/scripting/install/installing-powershell
+## Testing
+
+You can use `dotnet test` to build and/or test the repo.
+
+There may be tests that are known to be unstable or have special requirements. These can be avoided by running tests using the [dotnet-test-cloud.ps1](tools/dotnet-test-cloud.ps1) script *after* running `dotnet build`.
## Releases
@@ -96,3 +100,5 @@ git checkout origin/main
# resolve any conflicts, then commit the merge commit.
git push origin -u HEAD
```
+
+[pwsh]: https://learn.microsoft.com/powershell/scripting/install/installing-powershell
From 8be6654ffab1359c69821619911bda4f072e165d Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Tue, 2 Jun 2026 11:24:36 -0600
Subject: [PATCH 11/23] Add Copilot skill for bundling dependency update PRs
---
.github/skills/bundle-dependency-prs/SKILL.md | 42 +++++++++++++++++++
1 file changed, 42 insertions(+)
create mode 100644 .github/skills/bundle-dependency-prs/SKILL.md
diff --git a/.github/skills/bundle-dependency-prs/SKILL.md b/.github/skills/bundle-dependency-prs/SKILL.md
new file mode 100644
index 0000000..50f8b55
--- /dev/null
+++ b/.github/skills/bundle-dependency-prs/SKILL.md
@@ -0,0 +1,42 @@
+---
+name: bundle-dependency-prs
+description: Fix broken dependency update PRs and aggregate the ones that work into one PR.
+disable-model-invocation: true
+---
+
+# Instructions
+
+You have two goals:
+
+1. Get all dependency PRs to a state where their PR checks pass.
+2. Aggregate dependency PRs with passing checks into just one PR.
+
+You can identify dependency update PRs by those authored by `dependabot` or `renovate`.
+
+You'll find instructions for building and validating the repo in the [CONTRIBUTING.md](../../../CONTRIBUTING.md) doc.
+Always validate your changes locally before pushing them to the remote repository.
+
+When writing PR bodies or comments, avoid unmatched markdown code fences. Keep markdown well-formed.
+
+## Fix up dependency PRs with failing checks
+
+Before aggregating PRs, first try to fix any individual dependency update PRs with failing build/test checks.
+
+1. For the dependency PRs with failing build or test PR checks, check out their source branch and fix any issues.
+2. Push your fixes as fresh commits to the individual dependency PRs.
+3. If you can't fix a particular PR, add a comment to the PR describing your attempt and outcome.
+
+## Group dependency PRs that are ready to go
+
+Your next goal is to collect all the dependency updates that are ready to go into a single PR.
+
+1. Prepare a local branch called `bulkDepUpdates`.
+ 1. Consider that a remote branch by the same name may already exist. If it does, base your local branch on it.
+ 2. Merge `origin/main` into this branch.
+ 3. Resolve any conflicts.
+2. For the dependency PRs whose build and test PR checks already pass, merge them into the `bulkDepUpdates` branch.
+ Consider that your local branch may have already merged an equivalent PR in the past (from a past run). If so, you should skip merging that PR.
+ Resolve any conflicts.
+ Build and run tests to validate your branch.
+3. Push the branch.
+4. Create a PR, if one does not already exist.
From e6bb7a16e9aeb35b4e6af6fae116e7051ee96263 Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Tue, 2 Jun 2026 11:49:47 -0600
Subject: [PATCH 12/23] Call out docfx checks when bundling dependency update
PRs
---
.github/skills/bundle-dependency-prs/SKILL.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.github/skills/bundle-dependency-prs/SKILL.md b/.github/skills/bundle-dependency-prs/SKILL.md
index 50f8b55..a147e81 100644
--- a/.github/skills/bundle-dependency-prs/SKILL.md
+++ b/.github/skills/bundle-dependency-prs/SKILL.md
@@ -18,6 +18,9 @@ Always validate your changes locally before pushing them to the remote repositor
When writing PR bodies or comments, avoid unmatched markdown code fences. Keep markdown well-formed.
+For purposes of assessing PR readiness by its PR checks, consider docfx related checks to be irrelevant.
+If a docfx check fails but all other checks succeed, then that is a 'successful' dependency update PR.
+
## Fix up dependency PRs with failing checks
Before aggregating PRs, first try to fix any individual dependency update PRs with failing build/test checks.
From 81b34965726bf8bea093822bde1528e9aad32af5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 2 Jun 2026 14:55:04 -0600
Subject: [PATCH 13/23] Update actions/checkout action to v6.0.3 (523)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.github/workflows/build.yml | 4 ++--
.github/workflows/copilot-setup-steps.yml | 2 +-
.github/workflows/docs.yml | 2 +-
.github/workflows/libtemplate-update.yml | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 26bc9eb..69e7ae4 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -28,7 +28,7 @@ jobs:
- windows-2025
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: ⚙ Install prerequisites
@@ -75,7 +75,7 @@ jobs:
name: 📃 Docs
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: 🔗 Markup Link Checker (mlc)
uses: becheran/mlc@7ec24825cefe0c9c8c6bac48430e1f69e3ec356e # v1.2.0
with:
diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
index 3c032fa..d933871 100644
--- a/.github/workflows/copilot-setup-steps.yml
+++ b/.github/workflows/copilot-setup-steps.yml
@@ -26,7 +26,7 @@ jobs:
# You can define any steps you want, and they will run before the agent starts.
# If you do not check out your code, Copilot will do this for you.
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: ⚙ Install prerequisites
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index fbfcd14..99b3c05 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -24,7 +24,7 @@ jobs:
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: ⚙ Install prerequisites
diff --git a/.github/workflows/libtemplate-update.yml b/.github/workflows/libtemplate-update.yml
index 62a6417..fc8a631 100644
--- a/.github/workflows/libtemplate-update.yml
+++ b/.github/workflows/libtemplate-update.yml
@@ -17,7 +17,7 @@ jobs:
contents: write
pull-requests: write
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
From 2816e2020f300f27f1abf943f6db0e49ed7badb9 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 3 Jun 2026 07:06:04 -0600
Subject: [PATCH 14/23] Update dependency nerdbank.dotnetrepotools to v1.5.6
(524)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.config/dotnet-tools.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index a5037f9..d0e7d7f 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -31,7 +31,7 @@
"rollForward": false
},
"nerdbank.dotnetrepotools": {
- "version": "1.4.1",
+ "version": "1.5.6",
"commands": [
"repo"
],
From dba613e0d4a1a94250ea4224450e3cea68c89f60 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 4 Jun 2026 14:30:25 -0600
Subject: [PATCH 15/23] Update dependency nerdbank.dotnetrepotools to v1.5.15
(525)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.config/dotnet-tools.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index d0e7d7f..e11e39c 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -31,7 +31,7 @@
"rollForward": false
},
"nerdbank.dotnetrepotools": {
- "version": "1.5.6",
+ "version": "1.5.15",
"commands": [
"repo"
],
From cd79894c0736662230511b03853e4ceff353f5ef Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 8 Jun 2026 15:56:58 -0600
Subject: [PATCH 16/23] Update dependency dotnet-coverage to v18.8.0 (526)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.config/dotnet-tools.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index e11e39c..f88bae6 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -10,7 +10,7 @@
"rollForward": false
},
"dotnet-coverage": {
- "version": "18.7.0",
+ "version": "18.8.0",
"commands": [
"dotnet-coverage"
],
From 03a29b92ffecc6951c3379a3b737db47ae7dfbde Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 10 Jun 2026 03:55:42 +0000
Subject: [PATCH 17/23] Update Dockerfile and global.json updates to v10.0.301
(527)
* Update Dockerfile and global.json updates to v10.0.301
* Bump global.json too
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Andrew Arnott
---
.devcontainer/Dockerfile | 2 +-
global.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 810a6ed..08c0185 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,5 +1,5 @@
# Refer to https://hub.docker.com/_/microsoft-dotnet-sdk for available versions
-FROM mcr.microsoft.com/dotnet/sdk:10.0.300@sha256:c0790639332692a0d56cdd81ed581cfd24d040d9839764c138994866df89a3b6
+FROM mcr.microsoft.com/dotnet/sdk:10.0.301@sha256:548d93f8a18a1acbe6cc127bc4f47281430d34a9e35c18afa80a8d6741c2adc3
# Installing mono makes `dotnet test` work without errors even for net472.
# But installing it takes a long time, so it's excluded by default.
diff --git a/global.json b/global.json
index bc8f3b8..4c9fb87 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "10.0.300",
+ "version": "10.0.301",
"rollForward": "patch",
"allowPrerelease": false
},
From d48cdf885d0e3661e442b5b955d3195469f298ff Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Wed, 10 Jun 2026 07:20:24 -0600
Subject: [PATCH 18/23] Fix GitHub Actions env file writes (528)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Use explicit UTF-8 appends for GitHub Actions environment files so Linux runners don't hit an invalid empty-name env entry after build. This updates both the general env propagation helper and the pipeline variable definition script.
Co-authored-by: 🤖 Copilot
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
tools/Set-EnvVars.ps1 | 16 ++++++++++++++--
tools/variables/_define.ps1 | 14 +++++++++++++-
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/tools/Set-EnvVars.ps1 b/tools/Set-EnvVars.ps1
index 2bd3ca4..460e63e 100644
--- a/tools/Set-EnvVars.ps1
+++ b/tools/Set-EnvVars.ps1
@@ -43,6 +43,18 @@ if ($env:GITHUB_ACTIONS) {
Write-Host "GitHub Actions detected. Logging commands will be used to propagate environment variables and prepend path."
}
+function Add-GitHubActionsFileCommand {
+ param(
+ [Parameter(Mandatory = $true)]
+ [string]$Path,
+ [Parameter(Mandatory = $true)]
+ [string]$Value
+ )
+
+ $utf8NoBom = [System.Text.UTF8Encoding]::new($false)
+ [System.IO.File]::AppendAllText($Path, "$Value`n", $utf8NoBom)
+}
+
$CmdEnvScript = ''
$Variables.GetEnumerator() |% {
Set-Item -LiteralPath env:$($_.Key) -Value $_.Value
@@ -52,7 +64,7 @@ $Variables.GetEnumerator() |% {
Write-Host "##vso[task.setvariable variable=$($_.Key);]$($_.Value)"
}
if ($env:GITHUB_ACTIONS) {
- Add-Content -LiteralPath $env:GITHUB_ENV -Value "$($_.Key)=$($_.Value)"
+ Add-GitHubActionsFileCommand -Path $env:GITHUB_ENV -Value "$($_.Key)=$($_.Value)"
}
if ($cmdInstructions) {
@@ -79,7 +91,7 @@ if ($PrependPath) {
Write-Host "##vso[task.prependpath]$_"
}
if ($env:GITHUB_ACTIONS) {
- Add-Content -LiteralPath $env:GITHUB_PATH -Value $_
+ Add-GitHubActionsFileCommand -Path $env:GITHUB_PATH -Value $_
}
$CmdEnvScript += "SET PATH=$_$pathDelimiter%PATH%"
diff --git a/tools/variables/_define.ps1 b/tools/variables/_define.ps1
index d40e5cf..8cb536c 100644
--- a/tools/variables/_define.ps1
+++ b/tools/variables/_define.ps1
@@ -11,6 +11,18 @@
param (
)
+function Add-GitHubActionsFileCommand {
+ param(
+ [Parameter(Mandatory = $true)]
+ [string]$Path,
+ [Parameter(Mandatory = $true)]
+ [string]$Value
+ )
+
+ $utf8NoBom = [System.Text.UTF8Encoding]::new($false)
+ [System.IO.File]::AppendAllText($Path, "$Value`n", $utf8NoBom)
+}
+
(& "$PSScriptRoot\_all.ps1").GetEnumerator() |% {
# Always use ALL CAPS for env var names since Azure Pipelines converts variable names to all caps and on non-Windows OS, env vars are case sensitive.
$keyCaps = $_.Key.ToUpper()
@@ -24,7 +36,7 @@ param (
# and the second that works across jobs and stages but must be fully qualified when referenced.
Write-Host "##vso[task.setvariable variable=$keyCaps;isOutput=true]$($_.Value)"
} elseif ($env:GITHUB_ACTIONS) {
- Add-Content -LiteralPath $env:GITHUB_ENV -Value "$keyCaps=$($_.Value)"
+ Add-GitHubActionsFileCommand -Path $env:GITHUB_ENV -Value "$keyCaps=$($_.Value)"
}
Set-Item -LiteralPath "env:$keyCaps" -Value $_.Value
}
From 910fad855551262c156477cf9d50d04b54c61a3e Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Wed, 10 Jun 2026 10:48:58 -0600
Subject: [PATCH 19/23] Update actions/checkout action to v6.0.3
---
.github/workflows/docs_validate.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/docs_validate.yml b/.github/workflows/docs_validate.yml
index fa08fdb..96e0632 100644
--- a/.github/workflows/docs_validate.yml
+++ b/.github/workflows/docs_validate.yml
@@ -13,7 +13,7 @@ jobs:
name: 📚 Doc validation
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: 🔗 Markup Link Checker (mlc)
From 72ac8a906ecacc231b03fe992280f97ad9029ab6 Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Wed, 10 Jun 2026 12:02:31 -0600
Subject: [PATCH 20/23] Improve PR checks after fixing dependency PRs
---
.github/skills/bundle-dependency-prs/SKILL.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/skills/bundle-dependency-prs/SKILL.md b/.github/skills/bundle-dependency-prs/SKILL.md
index a147e81..48dedbe 100644
--- a/.github/skills/bundle-dependency-prs/SKILL.md
+++ b/.github/skills/bundle-dependency-prs/SKILL.md
@@ -27,6 +27,7 @@ Before aggregating PRs, first try to fix any individual dependency update PRs wi
1. For the dependency PRs with failing build or test PR checks, check out their source branch and fix any issues.
2. Push your fixes as fresh commits to the individual dependency PRs.
+ If pushing to a repo in the `microsoft` org when the PR is authord by `renovate`, follow-up the push with a PR comment that says exactly this: "/azp run" which triggers PR checks to re-run.
3. If you can't fix a particular PR, add a comment to the PR describing your attempt and outcome.
## Group dependency PRs that are ready to go
From 937aeb05c332bdc78f26e6420a7bd4438182ab83 Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Thu, 11 Jun 2026 08:12:59 -0600
Subject: [PATCH 21/23] Update Microsoft Testing Platform to 18.8.0
---
Directory.Packages.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Directory.Packages.props b/Directory.Packages.props
index a10e354..8630c45 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -10,7 +10,7 @@
-
+
From 8ce74d4fc06c1923546ca84e8431b83a362f86d8 Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Mon, 15 Jun 2026 08:32:30 -0600
Subject: [PATCH 22/23] Support multi-line env var values properly
---
tools/Set-EnvVars.ps1 | 24 ++++++++++++++++--------
tools/variables/_define.ps1 | 14 +++++++++++---
2 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/tools/Set-EnvVars.ps1 b/tools/Set-EnvVars.ps1
index 460e63e..6fa4ffb 100644
--- a/tools/Set-EnvVars.ps1
+++ b/tools/Set-EnvVars.ps1
@@ -43,16 +43,24 @@ if ($env:GITHUB_ACTIONS) {
Write-Host "GitHub Actions detected. Logging commands will be used to propagate environment variables and prepend path."
}
-function Add-GitHubActionsFileCommand {
+function Add-GitHubActionsEnvVariable {
param(
[Parameter(Mandatory = $true)]
[string]$Path,
[Parameter(Mandatory = $true)]
- [string]$Value
- )
-
- $utf8NoBom = [System.Text.UTF8Encoding]::new($false)
- [System.IO.File]::AppendAllText($Path, "$Value`n", $utf8NoBom)
+ [string]$Name,
+ [Parameter(Mandatory = $true)]
+ [AllowEmptyString()]
+ [string]$Value
+ )
+
+ if ([string]::IsNullOrWhiteSpace($Name)) {
+ throw "GitHub Actions environment variable names must not be empty."
+ }
+
+ $utf8NoBom = [System.Text.UTF8Encoding]::new($false)
+ $delimiter = [guid]::NewGuid().ToString('N')
+ [System.IO.File]::AppendAllText($Path, "$Name<<$delimiter`n$Value`n$delimiter`n", $utf8NoBom)
}
$CmdEnvScript = ''
@@ -64,7 +72,7 @@ $Variables.GetEnumerator() |% {
Write-Host "##vso[task.setvariable variable=$($_.Key);]$($_.Value)"
}
if ($env:GITHUB_ACTIONS) {
- Add-GitHubActionsFileCommand -Path $env:GITHUB_ENV -Value "$($_.Key)=$($_.Value)"
+ Add-GitHubActionsEnvVariable -Path $env:GITHUB_ENV -Name $_.Key -Value ([string]$_.Value)
}
if ($cmdInstructions) {
@@ -91,7 +99,7 @@ if ($PrependPath) {
Write-Host "##vso[task.prependpath]$_"
}
if ($env:GITHUB_ACTIONS) {
- Add-GitHubActionsFileCommand -Path $env:GITHUB_PATH -Value $_
+ Add-GitHubActionsEnvVariable -Path $env:GITHUB_ENV -Name PATH -Value $newPathValue
}
$CmdEnvScript += "SET PATH=$_$pathDelimiter%PATH%"
diff --git a/tools/variables/_define.ps1 b/tools/variables/_define.ps1
index 8cb536c..4a8503d 100644
--- a/tools/variables/_define.ps1
+++ b/tools/variables/_define.ps1
@@ -11,16 +11,24 @@
param (
)
-function Add-GitHubActionsFileCommand {
+function Add-GitHubActionsEnvVariable {
param(
[Parameter(Mandatory = $true)]
[string]$Path,
[Parameter(Mandatory = $true)]
+ [string]$Name,
+ [Parameter(Mandatory = $true)]
+ [AllowEmptyString()]
[string]$Value
)
+ if ([string]::IsNullOrWhiteSpace($Name)) {
+ throw "GitHub Actions environment variable names must not be empty."
+ }
+
$utf8NoBom = [System.Text.UTF8Encoding]::new($false)
- [System.IO.File]::AppendAllText($Path, "$Value`n", $utf8NoBom)
+ $delimiter = [guid]::NewGuid().ToString('N')
+ [System.IO.File]::AppendAllText($Path, "$Name<<$delimiter`n$Value`n$delimiter`n", $utf8NoBom)
}
(& "$PSScriptRoot\_all.ps1").GetEnumerator() |% {
@@ -36,7 +44,7 @@ function Add-GitHubActionsFileCommand {
# and the second that works across jobs and stages but must be fully qualified when referenced.
Write-Host "##vso[task.setvariable variable=$keyCaps;isOutput=true]$($_.Value)"
} elseif ($env:GITHUB_ACTIONS) {
- Add-GitHubActionsFileCommand -Path $env:GITHUB_ENV -Value "$keyCaps=$($_.Value)"
+ Add-GitHubActionsEnvVariable -Path $env:GITHUB_ENV -Name $keyCaps -Value ([string]$_.Value)
}
Set-Item -LiteralPath "env:$keyCaps" -Value $_.Value
}
From 22ebcf56330c216c8b39d6b746b05b3ebda78c58 Mon Sep 17 00:00:00 2001
From: Andrew Arnott
Date: Mon, 15 Jun 2026 08:36:28 -0600
Subject: [PATCH 23/23] Centralize the github env var function
---
tools/GitHubActions.ps1 | 18 ++++++++++++++++++
tools/Set-EnvVars.ps1 | 37 ++++++++++---------------------------
tools/variables/_define.ps1 | 22 ++--------------------
3 files changed, 30 insertions(+), 47 deletions(-)
create mode 100644 tools/GitHubActions.ps1
diff --git a/tools/GitHubActions.ps1 b/tools/GitHubActions.ps1
new file mode 100644
index 0000000..c742a58
--- /dev/null
+++ b/tools/GitHubActions.ps1
@@ -0,0 +1,18 @@
+function Add-GitHubActionsEnvVariable {
+ param(
+ [string]$Path = $env:GITHUB_ENV,
+ [Parameter(Mandatory = $true)]
+ [string]$Name,
+ [Parameter(Mandatory = $true)]
+ [AllowEmptyString()]
+ [string]$Value
+ )
+
+ if ([string]::IsNullOrWhiteSpace($Name)) {
+ throw "GitHub Actions environment variable names must not be empty."
+ }
+
+ $utf8NoBom = [System.Text.UTF8Encoding]::new($false)
+ $delimiter = [guid]::NewGuid().ToString('N')
+ [System.IO.File]::AppendAllText($Path, "$Name<<$delimiter`n$Value`n$delimiter`n", $utf8NoBom)
+}
diff --git a/tools/Set-EnvVars.ps1 b/tools/Set-EnvVars.ps1
index 6fa4ffb..0816c0e 100644
--- a/tools/Set-EnvVars.ps1
+++ b/tools/Set-EnvVars.ps1
@@ -12,13 +12,15 @@
The CmdEnvScriptPath environment variable may be optionally set to a path to a cmd shell script to be created (or appended to if it already exists) that will set the environment variables in cmd.exe that are set within the PowerShell environment.
This is used by init.cmd in order to reapply any new environment variables to the parent cmd.exe process that were set in the powershell child process.
#>
-[CmdletBinding(SupportsShouldProcess=$true)]
+[CmdletBinding(SupportsShouldProcess = $true)]
Param(
- [Parameter(Mandatory=$true, Position=1)]
+ [Parameter(Mandatory = $true, Position = 1)]
$Variables,
[string[]]$PrependPath
)
+. "$PSScriptRoot\GitHubActions.ps1"
+
if ($Variables.Count -eq 0) {
return $true
}
@@ -27,7 +29,8 @@ $cmdInstructions = !$env:TF_BUILD -and !$env:GITHUB_ACTIONS -and !$env:CmdEnvScr
if ($cmdInstructions) {
Write-Warning "Environment variables have been set that will be lost because you're running under cmd.exe"
Write-Host "Environment variables that must be set manually:" -ForegroundColor Blue
-} else {
+}
+else {
Write-Host "Environment variables set:" -ForegroundColor Blue
Write-Host ($Variables | Out-String)
if ($PrependPath) {
@@ -43,28 +46,8 @@ if ($env:GITHUB_ACTIONS) {
Write-Host "GitHub Actions detected. Logging commands will be used to propagate environment variables and prepend path."
}
-function Add-GitHubActionsEnvVariable {
- param(
- [Parameter(Mandatory = $true)]
- [string]$Path,
- [Parameter(Mandatory = $true)]
- [string]$Name,
- [Parameter(Mandatory = $true)]
- [AllowEmptyString()]
- [string]$Value
- )
-
- if ([string]::IsNullOrWhiteSpace($Name)) {
- throw "GitHub Actions environment variable names must not be empty."
- }
-
- $utf8NoBom = [System.Text.UTF8Encoding]::new($false)
- $delimiter = [guid]::NewGuid().ToString('N')
- [System.IO.File]::AppendAllText($Path, "$Name<<$delimiter`n$Value`n$delimiter`n", $utf8NoBom)
-}
-
$CmdEnvScript = ''
-$Variables.GetEnumerator() |% {
+$Variables.GetEnumerator() | % {
Set-Item -LiteralPath env:$($_.Key) -Value $_.Value
# If we're running in a cloud CI, set these environment variables so they propagate.
@@ -72,7 +55,7 @@ $Variables.GetEnumerator() |% {
Write-Host "##vso[task.setvariable variable=$($_.Key);]$($_.Value)"
}
if ($env:GITHUB_ACTIONS) {
- Add-GitHubActionsEnvVariable -Path $env:GITHUB_ENV -Name $_.Key -Value ([string]$_.Value)
+ Add-GitHubActionsEnvVariable -Name $_.Key -Value ([string]$_.Value)
}
if ($cmdInstructions) {
@@ -88,7 +71,7 @@ if ($IsMacOS -or $IsLinux) {
}
if ($PrependPath) {
- $PrependPath |% {
+ $PrependPath | % {
$newPathValue = "$_$pathDelimiter$env:PATH"
Set-Item -LiteralPath env:PATH -Value $newPathValue
if ($cmdInstructions) {
@@ -99,7 +82,7 @@ if ($PrependPath) {
Write-Host "##vso[task.prependpath]$_"
}
if ($env:GITHUB_ACTIONS) {
- Add-GitHubActionsEnvVariable -Path $env:GITHUB_ENV -Name PATH -Value $newPathValue
+ Add-GitHubActionsEnvVariable -Name PATH -Value $newPathValue
}
$CmdEnvScript += "SET PATH=$_$pathDelimiter%PATH%"
diff --git a/tools/variables/_define.ps1 b/tools/variables/_define.ps1
index 4a8503d..dfa9cba 100644
--- a/tools/variables/_define.ps1
+++ b/tools/variables/_define.ps1
@@ -11,25 +11,7 @@
param (
)
-function Add-GitHubActionsEnvVariable {
- param(
- [Parameter(Mandatory = $true)]
- [string]$Path,
- [Parameter(Mandatory = $true)]
- [string]$Name,
- [Parameter(Mandatory = $true)]
- [AllowEmptyString()]
- [string]$Value
- )
-
- if ([string]::IsNullOrWhiteSpace($Name)) {
- throw "GitHub Actions environment variable names must not be empty."
- }
-
- $utf8NoBom = [System.Text.UTF8Encoding]::new($false)
- $delimiter = [guid]::NewGuid().ToString('N')
- [System.IO.File]::AppendAllText($Path, "$Name<<$delimiter`n$Value`n$delimiter`n", $utf8NoBom)
-}
+. "$PSScriptRoot\..\GitHubActions.ps1"
(& "$PSScriptRoot\_all.ps1").GetEnumerator() |% {
# Always use ALL CAPS for env var names since Azure Pipelines converts variable names to all caps and on non-Windows OS, env vars are case sensitive.
@@ -44,7 +26,7 @@ function Add-GitHubActionsEnvVariable {
# and the second that works across jobs and stages but must be fully qualified when referenced.
Write-Host "##vso[task.setvariable variable=$keyCaps;isOutput=true]$($_.Value)"
} elseif ($env:GITHUB_ACTIONS) {
- Add-GitHubActionsEnvVariable -Path $env:GITHUB_ENV -Name $keyCaps -Value ([string]$_.Value)
+ Add-GitHubActionsEnvVariable -Name $keyCaps -Value ([string]$_.Value)
}
Set-Item -LiteralPath "env:$keyCaps" -Value $_.Value
}