From 32fa18726e2bb2d52fb7890234a6981cfc3318d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:56:19 -0700 Subject: [PATCH 001/105] Update mcr.microsoft.com/dotnet/sdk:9.0.202-noble Docker digest to dcc11e3 (#360) 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 eaaf8fe1..54acf522 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:9.0.202-noble@sha256:332e0362dd210a10348d436a5fb7f87aeec28c2c53ac2c3c2659e57c22294d0e +FROM mcr.microsoft.com/dotnet/sdk:9.0.202-noble@sha256:dcc11e3a07f72d463077b401275d09fbad72b68cdc7a2029c2b51f21812bd8f6 # 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 c6c1f8b4bc5c5ad5e311809d971fbeef1ee3d530 Mon Sep 17 00:00:00 2001 From: Matteo Prosperi <41970398+matteo-prosperi@users.noreply.github.com> Date: Thu, 27 Mar 2025 13:49:25 -0700 Subject: [PATCH 002/105] Opt in to the new MicroBuild SBOM behavior --- Directory.Build.props | 2 ++ Directory.Build.targets | 2 -- azure-pipelines/NuGetSbom.props | 6 ++++++ azure-pipelines/NuGetSbom.targets | 12 ------------ 4 files changed, 8 insertions(+), 14 deletions(-) create mode 100644 azure-pipelines/NuGetSbom.props delete mode 100644 azure-pipelines/NuGetSbom.targets diff --git a/Directory.Build.props b/Directory.Build.props index da14541b..f3045068 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -56,4 +56,6 @@ $(RepositoryUrl)/releases/tag/v$(Version) + + diff --git a/Directory.Build.targets b/Directory.Build.targets index 27b0fad1..ffbdb502 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -8,6 +8,4 @@ - - diff --git a/azure-pipelines/NuGetSbom.props b/azure-pipelines/NuGetSbom.props new file mode 100644 index 00000000..dbfee864 --- /dev/null +++ b/azure-pipelines/NuGetSbom.props @@ -0,0 +1,6 @@ + + + true + 2 + + diff --git a/azure-pipelines/NuGetSbom.targets b/azure-pipelines/NuGetSbom.targets deleted file mode 100644 index a2599e88..00000000 --- a/azure-pipelines/NuGetSbom.targets +++ /dev/null @@ -1,12 +0,0 @@ - - - true - $(TargetsForTfmSpecificBuildOutput);IncludeSbomInNupkg - - - - - - - - From bc06523042578fb13deade2afe84f4de62cc2f1b Mon Sep 17 00:00:00 2001 From: Matteo Prosperi <41970398+matteo-prosperi@users.noreply.github.com> Date: Thu, 27 Mar 2025 15:07:08 -0700 Subject: [PATCH 003/105] Fix unofficial build with SDL tools enabled --- azure-pipelines/build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index 72d3a27d..591d70ab 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -289,6 +289,12 @@ jobs: condition: succeededOrFailed() ${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}: templateContext: + ${{ if not(parameters.RealSign) }}: + mb: + signing: # if the build is test-signed, install the signing plugin so that CSVTestSignPolicy.xml is available + enabled: true + zipSources: false + signType: test outputParentDirectory: $(Build.ArtifactStagingDirectory) outputs: - output: pipelineArtifact From 268a3af1869dd5d2e3b72735bc4b8e8e823ea66f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 5 Apr 2025 21:39:00 -0600 Subject: [PATCH 004/105] Update dependency xunit.v3 to v2 (#353) 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 03d41a12..74b39615 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -11,7 +11,7 @@ - + From d4ce11e2ad77485e2206568ea7d7c20dc978f693 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 14:27:01 -0600 Subject: [PATCH 005/105] Update Dockerfile and global.json updates to v9.0.203 (#364) 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 54acf522..85d91565 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:9.0.202-noble@sha256:dcc11e3a07f72d463077b401275d09fbad72b68cdc7a2029c2b51f21812bd8f6 +FROM mcr.microsoft.com/dotnet/sdk:9.0.203-noble@sha256:2c9a4956a61fc45d9111fb36ec9fb86932e4842af9eb9bc9306bf8757f53674d # 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 d0e43443..4fe2bf77 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.202", + "version": "9.0.203", "rollForward": "patch", "allowPrerelease": false } From 2fb29d7465d37ecc7092fae84b7e615f80ab5b83 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 15 Apr 2025 19:54:33 -0600 Subject: [PATCH 006/105] Update docs to use MergeFrom-Template.ps1 --- CONTRIBUTING.md | 14 ++++++++++++++ README.md | 11 ++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 56dd666f..4281f299 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -82,3 +82,17 @@ Configuration is in the `.github/renovate.json` file. When changing the renovate.json file, follow [these validation steps](https://docs.renovatebot.com/config-validation/). If Renovate is not creating pull requests when you expect it to, check that the [Renovate GitHub App](https://github.com/apps/renovate) is configured for your account or repo. + +## Merging latest from Library.Template + +### Maintaining your repo based on this template + +The best way to keep your repo in sync with Library.Template's evolving features and best practices is to periodically merge the template into your repo: +` +```ps1 +git fetch +git checkout origin/main +.\tools\MergeFrom-Template.ps1 +# resolve any conflicts, then commit the merge commit. +git push origin -u HEAD +``` diff --git a/README.md b/README.md index 610e6504..f78bfdb3 100644 --- a/README.md +++ b/README.md @@ -42,12 +42,13 @@ Further customize your repo by: ### Maintaining your repo based on this template The best way to keep your repo in sync with this template's evolving features and best practices is to periodically merge the template into your repo: - +` ```ps1 -git checkout main # your default branch -git pull # make sure you're at tip -git fetch libtemplate # fetch latest Library.Template -git merge libtemplate/main +git fetch +git checkout origin/main +.\tools\MergeFrom-Template.ps1 +# resolve any conflicts, then commit the merge commit. +git push origin -u HEAD ``` There will frequently be merge conflicts to work out, but they will be easier to resolve than running the `Apply-Template.ps1` script every time, which simply blows away all your local changes with the latest from the template. From 23cd85a9b1f744767a2b0b7aa674165e7fc272b4 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 22 Apr 2025 14:06:33 -0600 Subject: [PATCH 007/105] Fix lang service reporting C# 7.3 errors in Error List By setting LangVersion so late in msbuild evaluation, the `CommandLineArgsForDesignTimeEvaluation` property is set based on the default value (of 7.3, for .NET Framework projects). This causes the VS language service to initialize with the wrong language version. I originally moved this property definition to the .targets because `$(Language)` isn't set in time for the .props files to use them. But we can move it back to .props by using the project file extension instead. --- Directory.Build.props | 5 +++++ Directory.Build.targets | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 98b987f6..e862541e 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -40,6 +40,11 @@ snupkg + + 13 + 16.9 + + diff --git a/Directory.Build.targets b/Directory.Build.targets index ffbdb502..b4afce0a 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,9 +1,5 @@ - - 13 - 16.9 - From 095ddc22bfb4786830a7ef6432ad83ae761f0eb7 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 22 Apr 2025 16:22:36 -0600 Subject: [PATCH 008/105] Remove remnants of a workaround --- azure-pipelines/build.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index 591d70ab..3fedaf8f 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -200,8 +200,6 @@ jobs: - ${{ if and(parameters.EnableDotNetFormatCheck, not(parameters.EnableLinuxBuild)) }}: - script: dotnet format --verify-no-changes --no-restore displayName: ๐Ÿ’… Verify formatted code - env: - dotnetformat: true # part of a workaround for https://github.com/dotnet/sdk/issues/44951 - ${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}: - template: microbuild.after.yml @@ -244,8 +242,6 @@ jobs: - ${{ if parameters.EnableDotNetFormatCheck }}: - script: dotnet format --verify-no-changes --no-restore displayName: ๐Ÿ’… Verify formatted code - env: - dotnetformat: true # part of a workaround for https://github.com/dotnet/sdk/issues/44951 - template: expand-template.yml - ${{ if parameters.EnableMacOSBuild }}: From 24fb90c797c70cea31fea3f1abce87bc9fc897fb Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 22 Apr 2025 16:44:26 -0600 Subject: [PATCH 009/105] Share more variable definitions --- azure-pipelines/vs-validation.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/azure-pipelines/vs-validation.yml b/azure-pipelines/vs-validation.yml index 1b415b22..3a40395e 100644 --- a/azure-pipelines/vs-validation.yml +++ b/azure-pipelines/vs-validation.yml @@ -32,10 +32,9 @@ extends: stages: - stage: Build variables: - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true - NUGET_PACKAGES: $(Agent.TempDirectory)/.nuget/packages/ - BuildConfiguration: Release - SkipCodesignVerify: true + - template: /azure-pipelines/BuildStageVariables.yml@self + - name: SkipCodesignVerify + value: true jobs: - template: /azure-pipelines/build.yml@self From a84dfb3a7b4e6037b007a0be881f71abb310b7c9 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 22 Apr 2025 16:52:45 -0600 Subject: [PATCH 010/105] Avoid CodeQL steps during release --- azure-pipelines/prepare-insertion-stages.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/azure-pipelines/prepare-insertion-stages.yml b/azure-pipelines/prepare-insertion-stages.yml index 46033d67..cfe28743 100644 --- a/azure-pipelines/prepare-insertion-stages.yml +++ b/azure-pipelines/prepare-insertion-stages.yml @@ -18,6 +18,8 @@ stages: - job: symbol_archive displayName: Archive symbols pool: VSEngSS-MicroBuild2022-1ES + variables: + ONEES_ENFORCED_CODEQL_ENABLED: false # CodeQL runs on build stages, we don't need it here steps: - checkout: none - download: current @@ -61,6 +63,8 @@ stages: ${{ else }}: nuGetFeedType: internal publishVstsFeed: vs-impl # Leave this as-is, since non-signed builds must not be pushed to public feeds. + variables: + ONEES_ENFORCED_CODEQL_ENABLED: false # CodeQL runs on build stages, we don't need it here steps: - checkout: none - download: current From 5e856e20df0f198a6f3c7d109532d51ee27204ab Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 23 Apr 2025 14:56:55 -0600 Subject: [PATCH 011/105] Drop stale comment --- azure-pipelines/microbuild.after.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines/microbuild.after.yml b/azure-pipelines/microbuild.after.yml index e2107433..025de4f5 100644 --- a/azure-pipelines/microbuild.after.yml +++ b/azure-pipelines/microbuild.after.yml @@ -9,7 +9,7 @@ parameters: type: boolean steps: -- ${{ if not(parameters.SkipCodesignVerify) }}: # skip CodesignVerify on validation builds because we don't even test-sign nupkg's. +- ${{ if not(parameters.SkipCodesignVerify) }}: - task: MicroBuildCodesignVerify@3 displayName: ๐Ÿ” Verify Signed Files inputs: From 2714b09c93e5487b3adbde44abe2f0deb855b68e Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 23 Apr 2025 18:03:27 -0600 Subject: [PATCH 012/105] Reapply "Avoid `dotnet format` hang" This reverts commit 46e768b364bbff90441fb5c0c9bfb160f4bfc67d. Because https://github.com/dotnet/sdk/issues/44951 is repro'ing again even on the latest .NET SDK. --- Directory.Packages.props | 5 +++-- azure-pipelines/build.yml | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 74b39615..d7bce7ef 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -19,8 +19,9 @@ - + + - + \ No newline at end of file diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index 10825828..5c106ade 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -37,8 +37,10 @@ jobs: - template: dotnet.yml parameters: RunTests: ${{ parameters.RunTests }} - - script: dotnet format --verify-no-changes --no-restore + - script: dotnet format --verify-no-changes displayName: ๐Ÿ’… Verify formatted code + env: + dotnetformat: true # part of a workaround for https://github.com/dotnet/sdk/issues/44951 - template: expand-template.yml - job: macOS From a4fb4a4b01fc0877e7f3449efb4ba57862fc662e Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 23 Apr 2025 18:49:53 -0600 Subject: [PATCH 013/105] Another CodeQL skip --- azure-pipelines/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index f1c61928..ff3bef40 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -287,6 +287,8 @@ jobs: - macOS pool: ${{ parameters.windowsPool }} # Use Windows agent because PublishSymbols task requires it (https://github.com/microsoft/azure-pipelines-tasks/issues/13821). condition: succeededOrFailed() + variables: + ONEES_ENFORCED_CODEQL_ENABLED: false # CodeQL runs on build jobs, we don't need it here ${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}: templateContext: ${{ if not(parameters.RealSign) }}: From 23452136e5bd2066f6c9dfa0dcbc3e2e93e809af Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 24 Apr 2025 10:39:32 -0600 Subject: [PATCH 014/105] Revert "Opt in to the new MicroBuild SBOM behavior" (#365) --- Directory.Build.props | 2 -- Directory.Build.targets | 2 ++ azure-pipelines/NuGetSbom.props | 6 ------ azure-pipelines/NuGetSbom.targets | 12 ++++++++++++ 4 files changed, 14 insertions(+), 8 deletions(-) delete mode 100644 azure-pipelines/NuGetSbom.props create mode 100644 azure-pipelines/NuGetSbom.targets diff --git a/Directory.Build.props b/Directory.Build.props index 252702d7..40da01ca 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -61,6 +61,4 @@ $(RepositoryUrl)/releases/tag/v$(Version) - - diff --git a/Directory.Build.targets b/Directory.Build.targets index b4afce0a..5f8e2a6d 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -4,4 +4,6 @@ + + diff --git a/azure-pipelines/NuGetSbom.props b/azure-pipelines/NuGetSbom.props deleted file mode 100644 index dbfee864..00000000 --- a/azure-pipelines/NuGetSbom.props +++ /dev/null @@ -1,6 +0,0 @@ - - - true - 2 - - diff --git a/azure-pipelines/NuGetSbom.targets b/azure-pipelines/NuGetSbom.targets new file mode 100644 index 00000000..a2599e88 --- /dev/null +++ b/azure-pipelines/NuGetSbom.targets @@ -0,0 +1,12 @@ + + + true + $(TargetsForTfmSpecificBuildOutput);IncludeSbomInNupkg + + + + + + + + From 1a8cb7653b0732fd6aa351be882019f37f6a1dae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 27 Apr 2025 18:50:55 -0600 Subject: [PATCH 015/105] Update actions/download-artifact digest to d3f86a1 Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dccc87af..e37811d6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -65,7 +65,7 @@ jobs: Echo "runid=$runid" >> $env:GITHUB_OUTPUT - name: ๐Ÿ”ป Download deployables artifacts - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: deployables-Linux path: ${{ runner.temp }}/deployables From 8dc98043fd2d7298b8f8120272571edb9b3e19e3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:19:42 -0600 Subject: [PATCH 016/105] Update dependency powershell to 7.5.1 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 c21d04bd..0eae3250 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "powershell": { - "version": "7.5.0", + "version": "7.5.1", "commands": [ "pwsh" ], From 1ddad471fe3bb866f673dac78771c95be19d4951 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:24:01 -0600 Subject: [PATCH 017/105] Update mcr.microsoft.com/dotnet/sdk:9.0.203-noble Docker digest to c849687 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 85d91565..78b0398c 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:9.0.203-noble@sha256:2c9a4956a61fc45d9111fb36ec9fb86932e4842af9eb9bc9306bf8757f53674d +FROM mcr.microsoft.com/dotnet/sdk:9.0.203-noble@sha256:c84968764a7d265a29cc840096750816d82655369d6ad03bcdf65f790684fd21 # 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 638e0fb64b759da41e3be29d64f26f87ac6627c5 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 29 Apr 2025 14:14:37 -0600 Subject: [PATCH 018/105] Reapply "Opt in to the new MicroBuild SBOM behavior" This reapplies https://github.com/AArnott/Library.Template/commit/23452136e5bd2066f6c9dfa0dcbc3e2e93e809af. Reverts AArnott/Library.Template#365 --- Directory.Build.props | 2 ++ Directory.Build.targets | 2 -- azure-pipelines/NuGetSbom.props | 6 ++++++ azure-pipelines/NuGetSbom.targets | 12 ------------ 4 files changed, 8 insertions(+), 14 deletions(-) create mode 100644 azure-pipelines/NuGetSbom.props delete mode 100644 azure-pipelines/NuGetSbom.targets diff --git a/Directory.Build.props b/Directory.Build.props index 40da01ca..252702d7 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -61,4 +61,6 @@ $(RepositoryUrl)/releases/tag/v$(Version) + + diff --git a/Directory.Build.targets b/Directory.Build.targets index 5f8e2a6d..b4afce0a 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -4,6 +4,4 @@ - - diff --git a/azure-pipelines/NuGetSbom.props b/azure-pipelines/NuGetSbom.props new file mode 100644 index 00000000..dbfee864 --- /dev/null +++ b/azure-pipelines/NuGetSbom.props @@ -0,0 +1,6 @@ + + + true + 2 + + diff --git a/azure-pipelines/NuGetSbom.targets b/azure-pipelines/NuGetSbom.targets deleted file mode 100644 index a2599e88..00000000 --- a/azure-pipelines/NuGetSbom.targets +++ /dev/null @@ -1,12 +0,0 @@ - - - true - $(TargetsForTfmSpecificBuildOutput);IncludeSbomInNupkg - - - - - - - - From 567a5748c1d954d5365b13851c09c61a0ac958bb Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 30 Apr 2025 11:18:19 -0600 Subject: [PATCH 019/105] Deploy SBOMs next to the VSIX they describe This should fix 404s on sbom's referenced from .vsman files. --- Directory.Build.props | 1 + 1 file changed, 1 insertion(+) diff --git a/Directory.Build.props b/Directory.Build.props index 252702d7..d63b9f10 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -7,6 +7,7 @@ $(RepoRootPath)bin\$(MSBuildProjectName)\ $(RepoRootPath)bin\Packages\$(Configuration)\NuGet\ $(RepoRootPath)bin\Packages\$(Configuration)\Vsix\$(Platform)\ + $(VSIXOutputPath) enable enable latest From 508b83948dc41dbab0baedd30d697464d4b84ee2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 3 May 2025 19:40:58 -0700 Subject: [PATCH 020/105] Update xunit (#370) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Directory.Packages.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 74b39615..87c53575 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -10,8 +10,8 @@ - - + + From 990d9b538f81ae72b5cb07a7ae1425dfe6787671 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 6 May 2025 08:31:35 -0600 Subject: [PATCH 021/105] Update SUPPORT.md with links to product support --- SUPPORT.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/SUPPORT.md b/SUPPORT.md index ecbe64c0..2f187f71 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -2,7 +2,7 @@ **REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project? -- **No CSS support:** Fill out this template with information about how to file issues and get help. +- **No CSS support:** Review the template below and edit as necessary. - **Yes CSS support:** Fill out an intake form at [aka.ms/spot](https://aka.ms/spot). CSS will work with/help you to determine next steps. More details also available at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). - **Not sure?** Fill out a SPOT intake as though the answer were "Yes". CSS will help you decide. @@ -12,14 +12,15 @@ ## How to file issues and get help -This project uses GitHub Issues to track bugs and feature requests. Please search the existing -issues before filing new issues to avoid duplicates. For new issues, file your bug or -feature request as a new Issue. +This project uses GitHub Issues to track bugs and feature requests. +Please search the existing issues before filing new issues to avoid duplicates. +For new issues, file your bug or feature request as a new Issue. -For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE -FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER -CHANNEL. WHERE WILL YOU HELP PEOPLE?**. +Note that this repo is primarily used for Visual Studio and related products and support will be focused on those scenarios. ## Microsoft Support Policy -Support for this **PROJECT or PRODUCT** is limited to the resources listed above. +Official Microsoft support for this software is offered through our shipping products such as Visual Studio. +Support and servicing is limited to the latest released version. +For more information, see [Visual Studio Product Lifecycle and Servicing](https://learn.microsoft.com/visualstudio/productinfo/vs-servicing). +Assisted support is available from a professional support engineer by opening a ticket with the [Microsoft assisted support team](https://support.serviceshub.microsoft.com/supportforbusiness/onboarding). From fd52657a6739e420b505afc23297159fe05a4faf Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 6 May 2025 14:09:44 -0600 Subject: [PATCH 022/105] Refine SUPPORT.md wording --- SUPPORT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SUPPORT.md b/SUPPORT.md index 2f187f71..a324f300 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -20,7 +20,7 @@ Note that this repo is primarily used for Visual Studio and related products and ## Microsoft Support Policy -Official Microsoft support for this software is offered through our shipping products such as Visual Studio. +Microsoft support for this software is available only for its use in officially supported products such as Visual Studio. Support and servicing is limited to the latest released version. For more information, see [Visual Studio Product Lifecycle and Servicing](https://learn.microsoft.com/visualstudio/productinfo/vs-servicing). Assisted support is available from a professional support engineer by opening a ticket with the [Microsoft assisted support team](https://support.serviceshub.microsoft.com/supportforbusiness/onboarding). From 8fe4f147ec39d3e1aedd985ba8213bc8de37e8f2 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 6 May 2025 13:25:08 -0600 Subject: [PATCH 023/105] Add support for a repo to hard-code extra SDKs that must be installed --- tools/Install-DotNetSdk.ps1 | 57 ++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/tools/Install-DotNetSdk.ps1 b/tools/Install-DotNetSdk.ps1 index e08571bc..402b4307 100644 --- a/tools/Install-DotNetSdk.ps1 +++ b/tools/Install-DotNetSdk.ps1 @@ -36,7 +36,11 @@ if (!(Test-Path $DotNetInstallScriptRoot)) { New-Item -ItemType Directory -Path $DotNetInstallScriptRoot = Resolve-Path $DotNetInstallScriptRoot # Look up actual required .NET SDK version from global.json -$sdkVersion = & "$PSScriptRoot/variables/DotNetSdkVersion.ps1" +$sdks = @(New-Object PSObject -Property @{ Version = & "$PSScriptRoot/variables/DotNetSdkVersion.ps1" }) + +# Sometimes a repo requires extra SDKs to be installed (e.g. msbuild.locator scenarios running in tests). +# In such a circumstance, a precise SDK version or a channel can be added as in the example below: +# $sdks += New-Object PSObject -Property @{ Channel = '8.0' } If ($IncludeX86 -and ($IsMacOS -or $IsLinux)) { Write-Verbose "Ignoring -IncludeX86 switch because 32-bit runtimes are only supported on Windows." @@ -191,13 +195,16 @@ if ($InstallLocality -eq 'machine') { $DotNetInstallDir = '/usr/share/dotnet' } else { $restartRequired = $false - if ($PSCmdlet.ShouldProcess(".NET SDK $sdkVersion", "Install")) { - Install-DotNet -Version $sdkVersion -Architecture $arch - $restartRequired = $restartRequired -or ($LASTEXITCODE -eq 3010) - - if ($IncludeX86) { - Install-DotNet -Version $sdkVersion -Architecture x86 + $sdks |% { + if ($_.Version) { $version = $_.Version } else { $version = $_.Channel } + if ($PSCmdlet.ShouldProcess(".NET SDK $_", "Install")) { + Install-DotNet -Version $version -Architecture $arch $restartRequired = $restartRequired -or ($LASTEXITCODE -eq 3010) + + if ($IncludeX86) { + Install-DotNet -Version $version -Architecture x86 + $restartRequired = $restartRequired -or ($LASTEXITCODE -eq 3010) + } } } @@ -296,29 +303,33 @@ $DotNetInstallScriptPathExpression = "& '$DotNetInstallScriptPathExpression'" $anythingInstalled = $false $global:LASTEXITCODE = 0 -if ($PSCmdlet.ShouldProcess(".NET SDK $sdkVersion", "Install")) { - $anythingInstalled = $true - Invoke-Expression -Command "$DotNetInstallScriptPathExpression -Version $sdkVersion -Architecture $arch -InstallDir $DotNetInstallDir $switches" +$sdks |% { + if ($_.Version) { $parameters = '-Version', $_.Version } else { $parameters = '-Channel', $_.Channel } - if ($LASTEXITCODE -ne 0) { - Write-Error ".NET SDK installation failure: $LASTEXITCODE" - exit $LASTEXITCODE - } -} else { - Invoke-Expression -Command "$DotNetInstallScriptPathExpression -Version $sdkVersion -Architecture $arch -InstallDir $DotNetInstallDir $switches -DryRun" -} - -if ($IncludeX86) { - if ($PSCmdlet.ShouldProcess(".NET x86 SDK $sdkVersion", "Install")) { + if ($PSCmdlet.ShouldProcess(".NET SDK $_", "Install")) { $anythingInstalled = $true - Invoke-Expression -Command "$DotNetInstallScriptPathExpression -Version $sdkVersion -Architecture x86 -InstallDir $DotNetX86InstallDir $switches" + Invoke-Expression -Command "$DotNetInstallScriptPathExpression $parameters -Architecture $arch -InstallDir $DotNetInstallDir $switches" if ($LASTEXITCODE -ne 0) { - Write-Error ".NET x86 SDK installation failure: $LASTEXITCODE" + Write-Error ".NET SDK installation failure: $LASTEXITCODE" exit $LASTEXITCODE } } else { - Invoke-Expression -Command "$DotNetInstallScriptPathExpression -Version $sdkVersion -Architecture x86 -InstallDir $DotNetX86InstallDir $switches -DryRun" + Invoke-Expression -Command "$DotNetInstallScriptPathExpression $parameters -Architecture $arch -InstallDir $DotNetInstallDir $switches -DryRun" + } + + if ($IncludeX86) { + if ($PSCmdlet.ShouldProcess(".NET x86 SDK $_", "Install")) { + $anythingInstalled = $true + Invoke-Expression -Command "$DotNetInstallScriptPathExpression $parameters -Architecture x86 -InstallDir $DotNetX86InstallDir $switches" + + if ($LASTEXITCODE -ne 0) { + Write-Error ".NET x86 SDK installation failure: $LASTEXITCODE" + exit $LASTEXITCODE + } + } else { + Invoke-Expression -Command "$DotNetInstallScriptPathExpression $parameters -Architecture x86 -InstallDir $DotNetX86InstallDir $switches -DryRun" + } } } From 3b421ec77eab3e6851fa9304c1cb07a8ab8e414e Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 7 May 2025 14:51:22 -0600 Subject: [PATCH 024/105] Add script for collecting 3rd party symbol files --- tools/Get-3rdPartySymbolFiles.ps1 | 91 +++++++++++++++++++++++++++++++ tools/Get-SymbolFiles.ps1 | 6 +- 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 tools/Get-3rdPartySymbolFiles.ps1 diff --git a/tools/Get-3rdPartySymbolFiles.ps1 b/tools/Get-3rdPartySymbolFiles.ps1 new file mode 100644 index 00000000..ef6bbef2 --- /dev/null +++ b/tools/Get-3rdPartySymbolFiles.ps1 @@ -0,0 +1,91 @@ +Function Get-FileFromWeb([Uri]$Uri, $OutFile) { + $OutDir = Split-Path $OutFile + if (!(Test-Path $OutFile)) { + Write-Verbose "Downloading $Uri..." + if (!(Test-Path $OutDir)) { New-Item -ItemType Directory -Path $OutDir | Out-Null } + try { + (New-Object System.Net.WebClient).DownloadFile($Uri, $OutFile) + } + finally { + # This try/finally causes the script to abort + } + } +} + +Function Unzip($Path, $OutDir) { + $OutDir = (New-Item -ItemType Directory -Path $OutDir -Force).FullName + Add-Type -AssemblyName System.IO.Compression.FileSystem + + # Start by extracting to a temporary directory so that there are no file conflicts. + [System.IO.Compression.ZipFile]::ExtractToDirectory($Path, "$OutDir.out") + + # Now move all files from the temp directory to $OutDir, overwriting any files. + Get-ChildItem -Path "$OutDir.out" -Recurse -File | ForEach-Object { + $destinationPath = Join-Path -Path $OutDir -ChildPath $_.FullName.Substring("$OutDir.out".Length).TrimStart([io.path]::DirectorySeparatorChar, [io.path]::AltDirectorySeparatorChar) + if (!(Test-Path -Path (Split-Path -Path $destinationPath -Parent))) { + New-Item -ItemType Directory -Path (Split-Path -Path $destinationPath -Parent) | Out-Null + } + Move-Item -Path $_.FullName -Destination $destinationPath -Force + } + Remove-Item -Path "$OutDir.out" -Recurse -Force +} + +Function Get-SymbolsFromPackage($id, $version) { + $symbolPackagesPath = "$PSScriptRoot/../obj/SymbolsPackages" + New-Item -ItemType Directory -Path $symbolPackagesPath -Force | Out-Null + $nupkgPath = Join-Path $symbolPackagesPath "$id.$version.nupkg" + $snupkgPath = Join-Path $symbolPackagesPath "$id.$version.snupkg" + $unzippedPkgPath = Join-Path $symbolPackagesPath "$id.$version" + Get-FileFromWeb -Uri "https://www.nuget.org/api/v2/package/$id/$version" -OutFile $nupkgPath + Get-FileFromWeb -Uri "https://www.nuget.org/api/v2/symbolpackage/$id/$version" -OutFile $snupkgPath + + Unzip -Path $nupkgPath -OutDir $unzippedPkgPath + Unzip -Path $snupkgPath -OutDir $unzippedPkgPath + + Get-ChildItem -Recurse -LiteralPath $unzippedPkgPath -Filter *.pdb | % { + # Collect the DLLs/EXEs as well. + $rootName = Join-Path $_.Directory $_.BaseName + if ($rootName.EndsWith('.ni')) { + $rootName = $rootName.Substring(0, $rootName.Length - 3) + } + + $dllPath = "$rootName.dll" + $exePath = "$rootName.exe" + if (Test-Path $dllPath) { + $BinaryImagePath = $dllPath + } + elseif (Test-Path $exePath) { + $BinaryImagePath = $exePath + } + else { + Write-Warning "`"$_`" found with no matching binary file." + $BinaryImagePath = $null + } + + if ($BinaryImagePath) { + Write-Output $BinaryImagePath + Write-Output $_.FullName + } + } +} + +Function Get-PackageVersion($id) { + $versionProps = [xml](Get-Content -LiteralPath $PSScriptRoot\..\Directory.Packages.props) + $version = $versionProps.Project.ItemGroup.PackageVersion | ? { $_.Include -eq $id } | % { $_.Version } + if (!$version) { + Write-Error "No package version found in Directory.Packages.props for the package '$id'" + } + + $version +} + +# All 3rd party packages for which symbols packages are expected should be listed here. +# These must all be sourced from nuget.org, as it is the only feed that supports symbol packages. +$3rdPartyPackageIds = @() + +$3rdPartyPackageIds | % { + $version = Get-PackageVersion $_ + if ($version) { + Get-SymbolsFromPackage -id $_ -version $version + } +} diff --git a/tools/Get-SymbolFiles.ps1 b/tools/Get-SymbolFiles.ps1 index b5063cec..9464226a 100644 --- a/tools/Get-SymbolFiles.ps1 +++ b/tools/Get-SymbolFiles.ps1 @@ -43,7 +43,7 @@ $PDBs |% { } } |% { # Collect the DLLs/EXEs as well. - $rootName = "$($_.Directory)/$($_.BaseName)" + $rootName = Join-Path $_.Directory $_.BaseName if ($rootName.EndsWith('.ni')) { $rootName = $rootName.Substring(0, $rootName.Length - 3) } @@ -64,3 +64,7 @@ $PDBs |% { Write-Output $_.FullName } } + +if (!$Tests) { + & $PSScriptRoot\Get-3rdPartySymbolFiles.ps1 +} From 5cc3d595f18db9dd5de705852640586b0fc24357 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 23 Apr 2025 18:07:04 -0600 Subject: [PATCH 025/105] Reapply "Avoid `dotnet format` hang" This reverts commit 46e768b364bbff90441fb5c0c9bfb160f4bfc67d. Because https://github.com/dotnet/sdk/issues/44951 is repro'ing again even on the latest .NET SDK. --- Directory.Packages.props | 3 ++- azure-pipelines/build.yml | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 87c53575..c8918f79 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -19,7 +19,8 @@ - + + diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index 10825828..5c106ade 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -37,8 +37,10 @@ jobs: - template: dotnet.yml parameters: RunTests: ${{ parameters.RunTests }} - - script: dotnet format --verify-no-changes --no-restore + - script: dotnet format --verify-no-changes displayName: ๐Ÿ’… Verify formatted code + env: + dotnetformat: true # part of a workaround for https://github.com/dotnet/sdk/issues/44951 - template: expand-template.yml - job: macOS From e84bdc64f0536b9af683c8d726255a1a82fba208 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 9 May 2025 11:13:18 -0600 Subject: [PATCH 026/105] Fix 3rd party symbol archival --- tools/Get-SymbolFiles.ps1 | 4 ---- tools/artifacts/symbols.ps1 | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tools/Get-SymbolFiles.ps1 b/tools/Get-SymbolFiles.ps1 index 9464226a..70656c0f 100644 --- a/tools/Get-SymbolFiles.ps1 +++ b/tools/Get-SymbolFiles.ps1 @@ -64,7 +64,3 @@ $PDBs |% { Write-Output $_.FullName } } - -if (!$Tests) { - & $PSScriptRoot\Get-3rdPartySymbolFiles.ps1 -} diff --git a/tools/artifacts/symbols.ps1 b/tools/artifacts/symbols.ps1 index 9e2c7bd5..b5882678 100644 --- a/tools/artifacts/symbols.ps1 +++ b/tools/artifacts/symbols.ps1 @@ -1,7 +1,10 @@ $BinPath = [System.IO.Path]::GetFullPath("$PSScriptRoot/../../bin") +$3rdPartyPath = [System.IO.Path]::GetFullPath("$PSScriptRoot/../../obj/SymbolsPackages") if (!(Test-Path $BinPath)) { return } $symbolfiles = & "$PSScriptRoot/../Get-SymbolFiles.ps1" -Path $BinPath | Get-Unique +$3rdPartyFiles = & "$PSScriptRoot/../Get-3rdPartySymbolFiles.ps1" @{ "$BinPath" = $SymbolFiles; + "$3rdPartyPath" = $3rdPartyFiles; } From 56aaaf07c7318b015f04c9fefb66eb7dcb67a492 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 10:03:40 -0600 Subject: [PATCH 027/105] Update Dockerfile and global.json updates to v9.0.300 (#372) 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 78b0398c..7d54aac9 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:9.0.203-noble@sha256:c84968764a7d265a29cc840096750816d82655369d6ad03bcdf65f790684fd21 +FROM mcr.microsoft.com/dotnet/sdk:9.0.300-noble@sha256:58fa5442c6da3bd654cab866fd6668de2713769511e412a3aa23c14368b84b16 # 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 4fe2bf77..33fc5ca6 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.203", + "version": "9.0.300", "rollForward": "patch", "allowPrerelease": false } From 94431e72197b996f65ea77f497cfee7069f0c9cc Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 20 May 2025 04:09:07 -0600 Subject: [PATCH 028/105] Update dependency Microsoft.NET.Test.Sdk to 17.14.0 --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index c8918f79..de9a568b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,7 +9,7 @@ - + From 08b8fabe4d5e476c07e4f5bf239ff7057abc589a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 May 2025 12:30:17 -0700 Subject: [PATCH 029/105] Update mcr.microsoft.com/dotnet/sdk:9.0.300-noble Docker digest to 9f7bd4d (#373) 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 7d54aac9..938b19f8 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:9.0.300-noble@sha256:58fa5442c6da3bd654cab866fd6668de2713769511e412a3aa23c14368b84b16 +FROM mcr.microsoft.com/dotnet/sdk:9.0.300-noble@sha256:9f7bd4d010026e15a57d9cf876f2f7d08c3eeed6a0ea987b8c5ba8c75e68e948 # 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 25a0aa49698a8f16b6c9043f41479eb78570c4d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 May 2025 23:18:07 +0000 Subject: [PATCH 030/105] Update becheran/mlc action to v0.22.0 (#374) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d4ee90e5..f0f293ee 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -76,6 +76,6 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: ๐Ÿ”— Markup Link Checker (mlc) - uses: becheran/mlc@c925f90a9a25e16e4c4bfa29058f6f9ffa9f0d8c # v0.21.0 + uses: becheran/mlc@88c9db09b8dabab813a2edd13f955b36aa73657a # v0.22.0 with: args: --do-not-warn-for-redirect-to https://learn.microsoft.com*,https://dotnet.microsoft.com/*,https://dev.azure.com/*,https://app.codecov.io/* -p docfx From 7974fd38305278850bfb7013761995058b829fdb Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 3 Jun 2025 08:14:52 -0600 Subject: [PATCH 031/105] Update dependency Microsoft.NET.Test.Sdk to 17.14.1 --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index de9a568b..c75c510a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,7 +9,7 @@ - + From 0d8cac25bb840686637e3498bac8f8a8c5d1db91 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 5 Jun 2025 14:50:48 -0600 Subject: [PATCH 032/105] Update becheran/mlc action to v0.22.0 --- .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 2425d742..80476a0d 100644 --- a/.github/workflows/docs_validate.yml +++ b/.github/workflows/docs_validate.yml @@ -17,7 +17,7 @@ jobs: with: fetch-depth: 0 # avoid shallow clone so nbgv can do its work. - name: ๐Ÿ”— Markup Link Checker (mlc) - uses: becheran/mlc@v0.21.0 + uses: becheran/mlc@88c9db09b8dabab813a2edd13f955b36aa73657a # v0.22.0 with: args: --do-not-warn-for-redirect-to https://learn.microsoft.com*,https://dotnet.microsoft.com/*,https://dev.azure.com/*,https://app.codecov.io/* -p docfx -i https://aka.ms/onboardsupport,https://aka.ms/spot,https://msrc.microsoft.com/*,https://www.microsoft.com/msrc*,https://microsoft.com/msrc* - name: โš™ Install prerequisites From e427b3f3a3550a53929baf1361e11fbfeef00332 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 5 Jun 2025 14:55:27 -0600 Subject: [PATCH 033/105] Pin actions/checkout --- .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 80476a0d..391289a4 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@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 with: fetch-depth: 0 # avoid shallow clone so nbgv can do its work. - name: ๐Ÿ”— Markup Link Checker (mlc) From df32f51fa7771b8c8863c2323a7cce7468cc2e53 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Jun 2025 05:23:07 -0600 Subject: [PATCH 034/105] Update xunit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Directory.Packages.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index c75c510a..c510499a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -10,8 +10,8 @@ - - + + From 0c41b219292b26fddfa418b3c4b1796f943c4704 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Jun 2025 05:56:25 -0600 Subject: [PATCH 035/105] Update Dockerfile and global.json updates to v9.0.301 (#376) 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 938b19f8..cd1285d4 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:9.0.300-noble@sha256:9f7bd4d010026e15a57d9cf876f2f7d08c3eeed6a0ea987b8c5ba8c75e68e948 +FROM mcr.microsoft.com/dotnet/sdk:9.0.301-noble@sha256:4f50505b5344e9d8a76805d71bb4ba76da6b01656e17a66a8ce1e4c4dfaaec12 # 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 33fc5ca6..0e241b6f 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.300", + "version": "9.0.301", "rollForward": "patch", "allowPrerelease": false } From 4e511afa763d5fd001f92d2dc92a7ea8dd5ce8e9 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 11 Jun 2025 14:12:11 -0600 Subject: [PATCH 036/105] Add copilot swe agent setup instructions (#377) --- .github/workflows/copilot-setup-steps.yml | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/copilot-setup-steps.yml diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 00000000..bb149d65 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,41 @@ +name: "Copilot Setup Steps" + +# Automatically run the setup steps when they are changed to allow for easy validation, and +# allow manual testing through the repository's "Actions" tab +on: + workflow_dispatch: + push: + branches: + - main + paths: + - .github/workflows/copilot-setup-steps.yml + pull_request: + paths: + - .github/workflows/copilot-setup-steps.yml + +jobs: + # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot. + copilot-setup-steps: + runs-on: ubuntu-latest + # Set the permissions to the lowest permissions possible needed for your steps. + # Copilot will be given its own token for its operations. + permissions: + # If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete. + contents: read + + # 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + with: + fetch-depth: 0 # avoid shallow clone so nbgv can do its work. + - name: โš™ Install prerequisites + run: | + ./init.ps1 -UpgradePrerequisites -NoNuGetCredProvider + dotnet --info + + # Print mono version if it is present. + if (Get-Command mono -ErrorAction SilentlyContinue) { + mono --version + } + shell: pwsh From 231dae9d7654ea546d0dc0eb6c9a9bb3774c12e6 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 11 Jun 2025 14:20:33 -0600 Subject: [PATCH 037/105] Touch-up name of github workflow --- .github/workflows/copilot-setup-steps.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index bb149d65..053f56e9 100644 --- a/.github/workflows/copilot-setup-steps.yml +++ b/.github/workflows/copilot-setup-steps.yml @@ -1,4 +1,4 @@ -name: "Copilot Setup Steps" +name: ๐Ÿ’ช๐Ÿผ Copilot Setup Steps # Automatically run the setup steps when they are changed to allow for easy validation, and # allow manual testing through the repository's "Actions" tab From f6217c2a72bb2edd662883795ff847a76b31beb3 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Tue, 17 Jun 2025 07:36:02 -0600 Subject: [PATCH 038/105] Bump MicroBuild to 2.0.198 --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index f5cbaec6..69917d40 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,7 +5,7 @@ true true - 2.0.187 + 2.0.198 From 0e6d59ccb2c15a14b09cef2fcab5b5e4322eda3d Mon Sep 17 00:00:00 2001 From: Skylar Nam Date: Wed, 18 Jun 2025 13:29:39 -0700 Subject: [PATCH 039/105] Enable PME signing for Library.Template --- azure-pipelines/build.yml | 3 +++ azure-pipelines/microbuild.before.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index ff3bef40..1482140f 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -118,6 +118,7 @@ jobs: zipSources: false ${{ if parameters.RealSign }}: signType: real + signWithProd: true ${{ else }}: signType: test sbom: @@ -223,6 +224,7 @@ jobs: signing: enabled: false # enable when building unique artifacts on this agent that must be signed signType: real + signWithProd: true outputParentDirectory: $(Build.ArtifactStagingDirectory) outputs: - ${{ each artifact_name in parameters.artifact_names }}: @@ -258,6 +260,7 @@ jobs: signing: enabled: false # enable when building unique artifacts on this agent that must be signed signType: real + signWithProd: true outputParentDirectory: $(Build.ArtifactStagingDirectory) outputs: - ${{ each artifact_name in parameters.artifact_names }}: diff --git a/azure-pipelines/microbuild.before.yml b/azure-pipelines/microbuild.before.yml index 05acd319..07429bc7 100644 --- a/azure-pipelines/microbuild.before.yml +++ b/azure-pipelines/microbuild.before.yml @@ -44,6 +44,7 @@ steps: inputs: signType: Real zipSources: false + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea # devdiv's SC ID displayName: ๐Ÿ”ง Install MicroBuild Signing Plugin - ${{ if parameters.EnableLocalization }}: From ce93bede641735dc358b34a0d1c9776ff6181e9d Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 18 Jun 2025 14:57:12 -0600 Subject: [PATCH 040/105] Fix expand-template.yml indentation --- azure-pipelines/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index ff3bef40..ca2cedb5 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -246,7 +246,7 @@ jobs: displayName: ๐Ÿ’… Verify formatted code env: dotnetformat: true # part of a workaround for https://github.com/dotnet/sdk/issues/44951 - - template: expand-template.yml + - template: expand-template.yml - ${{ if parameters.EnableMacOSBuild }}: - job: macOS From dd63cb05dac2a0e3647434404218fa6ed87da31a Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 19 Jun 2025 17:36:18 -0600 Subject: [PATCH 041/105] Focus binskim on just the binaries we build --- azure-pipelines/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index 215a17c3..b69a9f5c 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -141,6 +141,9 @@ jobs: - ${{ if parameters.EnableOptProf }}: - powershell: Write-Host "##vso[task.setvariable variable=PROFILINGINPUTSDROPNAME]$(tools/variables/ProfilingInputsDropName.ps1)" displayName: โš™ Set ProfilingInputsDropName for optprof + sdl: + binskim: + analyzeTargetGlob: $(Build.ArtifactStagingDirectory)\symbols-Windows\** outputParentDirectory: $(Build.ArtifactStagingDirectory) outputs: From b432d5eeff8ecf9a484615a7098e07008463ab51 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 19 Jun 2025 21:47:12 -0600 Subject: [PATCH 042/105] Build for OptProf with test signed bits Real signing can only be used for official builds. --- azure-pipelines/microbuild.before.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/azure-pipelines/microbuild.before.yml b/azure-pipelines/microbuild.before.yml index 07429bc7..25071536 100644 --- a/azure-pipelines/microbuild.before.yml +++ b/azure-pipelines/microbuild.before.yml @@ -42,9 +42,8 @@ steps: - task: MicroBuildSigningPlugin@4 inputs: - signType: Real + signType: Test zipSources: false - ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea # devdiv's SC ID displayName: ๐Ÿ”ง Install MicroBuild Signing Plugin - ${{ if parameters.EnableLocalization }}: From 1a7db8d2477fba5c3c11f2862b7a28c65673b473 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 06:52:49 -0600 Subject: [PATCH 043/105] Update mcr.microsoft.com/dotnet/sdk:9.0.301-noble Docker digest to 21cd104 (#379) 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 cd1285d4..bc640c8a 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:9.0.301-noble@sha256:4f50505b5344e9d8a76805d71bb4ba76da6b01656e17a66a8ce1e4c4dfaaec12 +FROM mcr.microsoft.com/dotnet/sdk:9.0.301-noble@sha256:21cd104bae759d9787f99a7d9a9d0e431f9360ee373909bbbfd4b8da07a7e3d9 # 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 f84cb0f8a87686cd3388a448cf924c043930ed7a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 15:52:18 -0600 Subject: [PATCH 044/105] Update mcr.microsoft.com/dotnet/sdk:9.0.301-noble Docker digest to f353951 (#380) 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 bc640c8a..eaf9a82e 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:9.0.301-noble@sha256:21cd104bae759d9787f99a7d9a9d0e431f9360ee373909bbbfd4b8da07a7e3d9 +FROM mcr.microsoft.com/dotnet/sdk:9.0.301-noble@sha256:f353951d75cd99696c912ba7a29a1c6905fe0c1c7613e12e5318efed40d9b287 # 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 d1219b5166a7d25145317795102696495f671cc1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 22:53:36 -0600 Subject: [PATCH 045/105] Update dependency powershell to 7.5.2 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 0eae3250..79ad7dda 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "powershell": { - "version": "7.5.1", + "version": "7.5.2", "commands": [ "pwsh" ], From c14a73b6392be60a68cd1383db777d5ad8241273 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sun, 29 Jun 2025 14:51:35 -0600 Subject: [PATCH 046/105] Re-enable static graph nuget restore --- Directory.Build.props | 3 +-- README.md | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index e862541e..f702243a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -17,8 +17,7 @@ true - - false + true $(MSBuildThisFileDirectory) diff --git a/README.md b/README.md index f78bfdb3..f0b0f7d8 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,10 @@ * Static analyzers: default [Code Analysis](https://docs.microsoft.com/dotnet/fundamentals/code-analysis/overview) and [StyleCop](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) * Read-only source tree (builds to top-level bin/obj folders) * Auto-versioning (via [Nerdbank.GitVersioning](https://github.com/dotnet/nerdbank.gitversioning)) -* Builds with a "pinned" .NET Core SDK to ensure reproducible builds across machines and across time. +* Builds with a "pinned" .NET SDK to ensure reproducible builds across machines and across time. * Automatically pack the library and publish it as an artifact, and even push it to some NuGet feed for consumption. * Testing - * Testing on .NET Framework, multiple .NET Core versions + * Testing on .NET Framework, multiple .NET versions * Testing on Windows, Linux and OSX * Tests that crash or hang in Azure Pipelines automatically collect dumps and publish as a pipeline artifact for later investigation. * Cloud build support From 53960183851451f5482da6bdcc421057a277d989 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 20:33:23 -0600 Subject: [PATCH 047/105] Update becheran/mlc action to v1 (#383) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f0f293ee..b6beb8d8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -76,6 +76,6 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: ๐Ÿ”— Markup Link Checker (mlc) - uses: becheran/mlc@88c9db09b8dabab813a2edd13f955b36aa73657a # v0.22.0 + uses: becheran/mlc@18a06b3aa2901ca197de59c8b0b1f54fdba6b3fa # v1.0.0 with: args: --do-not-warn-for-redirect-to https://learn.microsoft.com*,https://dotnet.microsoft.com/*,https://dev.azure.com/*,https://app.codecov.io/* -p docfx From d9522ff94699b409df91d539dc46b7e01e4b00af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 20:33:50 -0600 Subject: [PATCH 048/105] Update mcr.microsoft.com/dotnet/sdk:9.0.301-noble Docker digest to 2346351 (#382) 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 eaf9a82e..0a5f632a 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:9.0.301-noble@sha256:f353951d75cd99696c912ba7a29a1c6905fe0c1c7613e12e5318efed40d9b287 +FROM mcr.microsoft.com/dotnet/sdk:9.0.301-noble@sha256:2346351dfe95ffdfe8352042647b2c9746c62cfc812eead9b9bf6154937c86ba # 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 200f811d546e7beed6fa7c7b5c4786fe7b725003 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 07:25:59 -0600 Subject: [PATCH 049/105] Update mcr.microsoft.com/dotnet/sdk:9.0.301-noble Docker digest to 4fd7d3e (#384) 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 0a5f632a..f06bc4ca 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:9.0.301-noble@sha256:2346351dfe95ffdfe8352042647b2c9746c62cfc812eead9b9bf6154937c86ba +FROM mcr.microsoft.com/dotnet/sdk:9.0.301-noble@sha256:4fd7d3e5aeb6cfb75e923a54cdb0b6e858b27ad3b517837917c57c2e632b5694 # 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 11467d8198d1d001f749f4b360358c32fa6d3f1c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 12:37:34 +0000 Subject: [PATCH 050/105] Update .NET SDK to v9.0.302 * Update mcr.microsoft.com/dotnet/sdk Docker tag to v9.0.302 * Bump .NET SDK to 9.0.302 in global.json --------- 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 f06bc4ca..50eb8159 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:9.0.301-noble@sha256:4fd7d3e5aeb6cfb75e923a54cdb0b6e858b27ad3b517837917c57c2e632b5694 +FROM mcr.microsoft.com/dotnet/sdk:9.0.302-noble@sha256:b9f738e7bfa1581ae38a91365f26e21354fe09c6b9a4f2327f6cec588486d9e2 # 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 0e241b6f..f4ade2ca 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.301", + "version": "9.0.302", "rollForward": "patch", "allowPrerelease": false } From eef5eeeb0a60eb64036707e742f7fd1542e990bf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Jul 2025 22:28:13 -0600 Subject: [PATCH 051/105] Update dependency xunit.v3 to v3 (#387) 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 c510499a..fa15ee52 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -11,7 +11,7 @@ - + From 6b1c4db08f77a7eb6c6278bc016219ad28137a93 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Jul 2025 14:17:14 +0000 Subject: [PATCH 052/105] Update dependency xunit.runner.visualstudio to 3.1.2 (#386) 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 fa15ee52..c5bad1b6 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -10,7 +10,7 @@ - + From 43aadc16f8163d5fd4cc46694adb6ecfe03613d3 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Mon, 14 Jul 2025 18:17:48 -0600 Subject: [PATCH 053/105] Skip CodeQL scanning of test code --- CodeQL.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 CodeQL.yml diff --git a/CodeQL.yml b/CodeQL.yml new file mode 100644 index 00000000..903500b5 --- /dev/null +++ b/CodeQL.yml @@ -0,0 +1,3 @@ +path_classifiers: + library: + - 'test/**' From 2102e056d0bfc0b16d4dfe9b50e4eb2cef848123 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 06:42:41 -0600 Subject: [PATCH 054/105] Update mcr.microsoft.com/dotnet/sdk:9.0.302-noble Docker digest to d442f82 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 50eb8159..1dfcdb9e 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:9.0.302-noble@sha256:b9f738e7bfa1581ae38a91365f26e21354fe09c6b9a4f2327f6cec588486d9e2 +FROM mcr.microsoft.com/dotnet/sdk:9.0.302-noble@sha256:d442f8270d12233f878df7fa280969fc2a7c892ae80d145eb1a1b8fb811eee83 # 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 f17cd2ac94a01fe3cee43ee0cb7baa930e507ee1 Mon Sep 17 00:00:00 2001 From: "Pierson Lee (PIE)" Date: Tue, 15 Jul 2025 17:06:37 -0700 Subject: [PATCH 055/105] Run Component Detection explicitly before Notice Component Detection that was being injected was happening too late (way after NOTICE task was running) which was causing the generate NOTICE task to fail. --- azure-pipelines/microbuild.before.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines/microbuild.before.yml b/azure-pipelines/microbuild.before.yml index 05acd319..ec59c2ec 100644 --- a/azure-pipelines/microbuild.before.yml +++ b/azure-pipelines/microbuild.before.yml @@ -17,9 +17,9 @@ parameters: steps: - ${{ if and(not(parameters.IsOptProf), ne(variables['Build.Reason'], 'PullRequest')) }}: # notice@0 requires CG detection to run first, and non-default branches don't inject it automatically. - - ${{ if ne(variables['Build.SourceBranch'], 'refs/heads/main') }}: - - task: ComponentGovernanceComponentDetection@0 - displayName: ๐Ÿ” Component Detection + # default branch injection (main) is happening too late for notice@0 to run successfully. Adding this as a workaround. + - task: ComponentGovernanceComponentDetection@0 + displayName: ๐Ÿ” Component Detection - task: notice@0 displayName: ๐Ÿ› ๏ธ Generate NOTICE file From fe71729b2b10b69c5dac50db9a8828b2a699ab17 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 23:49:51 +0000 Subject: [PATCH 056/105] Update dependency xunit.runner.visualstudio to 3.1.3 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 c5bad1b6..0747b92b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -10,7 +10,7 @@ - + From 77f38d4173d60258fcfca40ba59a53733030f2eb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Jul 2025 05:34:24 -0600 Subject: [PATCH 057/105] Update Dockerfile and global.json updates to v9.0.303 (#394) 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 1dfcdb9e..05ddebad 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:9.0.302-noble@sha256:d442f8270d12233f878df7fa280969fc2a7c892ae80d145eb1a1b8fb811eee83 +FROM mcr.microsoft.com/dotnet/sdk:9.0.303-noble@sha256:af75742bd2f6fd148504951b57a983bc410191729bf543eae467528d1bc175e5 # 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 f4ade2ca..a982cdef 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.302", + "version": "9.0.303", "rollForward": "patch", "allowPrerelease": false } From b6f67cc20e43b9f989fd115d2f5831f787cb1311 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 24 Jul 2025 14:54:45 -0600 Subject: [PATCH 058/105] Bump MicroBuildVersion to 2.0.199 --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 3d6ea14d..f7bf9d56 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,7 +5,7 @@ true true - 2.0.198 + 2.0.199 From 648355746406d1bf4fe95cb14d6ee102974fbc01 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 25 Jul 2025 10:09:51 -0600 Subject: [PATCH 059/105] Update becheran/mlc action to v1 --- .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 391289a4..35921d06 100644 --- a/.github/workflows/docs_validate.yml +++ b/.github/workflows/docs_validate.yml @@ -17,7 +17,7 @@ jobs: with: fetch-depth: 0 # avoid shallow clone so nbgv can do its work. - name: ๐Ÿ”— Markup Link Checker (mlc) - uses: becheran/mlc@88c9db09b8dabab813a2edd13f955b36aa73657a # v0.22.0 + uses: becheran/mlc@18a06b3aa2901ca197de59c8b0b1f54fdba6b3fa # v1.0.0 with: args: --do-not-warn-for-redirect-to https://learn.microsoft.com*,https://dotnet.microsoft.com/*,https://dev.azure.com/*,https://app.codecov.io/* -p docfx -i https://aka.ms/onboardsupport,https://aka.ms/spot,https://msrc.microsoft.com/*,https://www.microsoft.com/msrc*,https://microsoft.com/msrc* - name: โš™ Install prerequisites From 8eb458b8381ac2fe279d765f1084eb16af4fb99a Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 25 Jul 2025 19:46:32 -0600 Subject: [PATCH 060/105] Disable credscan task on unofficial builds --- azure-pipelines/libtemplate-update.yml | 2 ++ azure-pipelines/unofficial.yml | 2 ++ azure-pipelines/vs-validation.yml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/azure-pipelines/libtemplate-update.yml b/azure-pipelines/libtemplate-update.yml index 3d7fb7e3..384be7cf 100644 --- a/azure-pipelines/libtemplate-update.yml +++ b/azure-pipelines/libtemplate-update.yml @@ -35,6 +35,8 @@ extends: name: AzurePipelines-EO demands: - ImageOverride -equals 1ESPT-Windows2022 + credscan: + enabled: false stages: - stage: Merge diff --git a/azure-pipelines/unofficial.yml b/azure-pipelines/unofficial.yml index 9ca100ea..d7232735 100644 --- a/azure-pipelines/unofficial.yml +++ b/azure-pipelines/unofficial.yml @@ -57,6 +57,8 @@ extends: parameters: sdl: sourceAnalysisPool: VSEngSS-MicroBuild2022-1ES + credscan: + enabled: false suppression: suppressionFile: $(System.DefaultWorkingDirectory)\azure-pipelines\falsepositives.gdnsuppress enableProductionSDL: ${{ parameters.EnableProductionSDL }} diff --git a/azure-pipelines/vs-validation.yml b/azure-pipelines/vs-validation.yml index 3a40395e..b9d46b7c 100644 --- a/azure-pipelines/vs-validation.yml +++ b/azure-pipelines/vs-validation.yml @@ -28,6 +28,8 @@ extends: parameters: sdl: sourceAnalysisPool: VSEngSS-MicroBuild2022-1ES + credscan: + enabled: false stages: - stage: Build From 28382fd802f19e1d3262dbf95c50ebdcee97c3fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Jul 2025 07:20:08 -0600 Subject: [PATCH 061/105] Update mcr.microsoft.com/dotnet/sdk:9.0.303-noble Docker digest to a990afa 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 05ddebad..881dafec 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:9.0.303-noble@sha256:af75742bd2f6fd148504951b57a983bc410191729bf543eae467528d1bc175e5 +FROM mcr.microsoft.com/dotnet/sdk:9.0.303-noble@sha256:a990afa820aa77df1cc3a7eaf471eb7cddf5f8233d739297400e0ce7ff0762bd # 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 f9374d9cc10ae59fd134a9ee7262fa189eca2945 Mon Sep 17 00:00:00 2001 From: Tyler Dunkel <40210514+tydunkel@users.noreply.github.com> Date: Wed, 30 Jul 2025 11:09:51 -0700 Subject: [PATCH 062/105] Pass through System.AccessToken when real signing on non-Windows builds (#396) --- azure-pipelines/build.yml | 2 ++ azure-pipelines/dotnet.yml | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index b69a9f5c..e91da614 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -246,6 +246,7 @@ jobs: parameters: Is1ESPT: ${{ parameters.Is1ESPT }} RunTests: ${{ parameters.RunTests }} + BuildRequiresAccessToken: ${{ parameters.RealSign }} # Real signing on non-Windows machines requires passing through access token to build steps that sign - ${{ if parameters.EnableDotNetFormatCheck }}: - script: dotnet format --verify-no-changes displayName: ๐Ÿ’… Verify formatted code @@ -282,6 +283,7 @@ jobs: parameters: Is1ESPT: ${{ parameters.Is1ESPT }} RunTests: ${{ parameters.RunTests }} + BuildRequiresAccessToken: ${{ parameters.RealSign }} # Real signing on non-Windows machines requires passing through access token to build steps that sign - template: expand-template.yml - job: WrapUp diff --git a/azure-pipelines/dotnet.yml b/azure-pipelines/dotnet.yml index 2abca9eb..947cfc1a 100644 --- a/azure-pipelines/dotnet.yml +++ b/azure-pipelines/dotnet.yml @@ -5,11 +5,17 @@ parameters: default: false - name: Is1ESPT type: boolean +- name: BuildRequiresAccessToken + type: boolean + default: false steps: - script: dotnet build -t:build,pack --no-restore -c $(BuildConfiguration) -warnAsError -warnNotAsError:NU1901,NU1902,NU1903,NU1904,LOCTASK002 /bl:"$(Build.ArtifactStagingDirectory)/build_logs/build.binlog" displayName: ๐Ÿ›  dotnet build + ${{ if parameters.BuildRequiresAccessToken }}: + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) - ${{ if not(parameters.IsOptProf) }}: - powershell: tools/dotnet-test-cloud.ps1 -Configuration $(BuildConfiguration) -Agent $(Agent.JobName) -PublishResults From 6f665e45309c0232f50b36dc7250f7f23af1eabe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Jul 2025 22:16:37 -0600 Subject: [PATCH 063/105] Update mcr.microsoft.com/dotnet/sdk:9.0.303-noble Docker digest to 14fad15 (#397) 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 881dafec..738001ec 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:9.0.303-noble@sha256:a990afa820aa77df1cc3a7eaf471eb7cddf5f8233d739297400e0ce7ff0762bd +FROM mcr.microsoft.com/dotnet/sdk:9.0.303-noble@sha256:14fad15702d25fec7ff1532b762abd323fc7549c9b8a713b5871b88dc989053d # 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 c2b6afa61b52ce4b643682574ddc7e958ecc48ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 16:38:46 -0600 Subject: [PATCH 064/105] Update Dockerfile and global.json updates to v9.0.304 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 738001ec..07702589 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:9.0.303-noble@sha256:14fad15702d25fec7ff1532b762abd323fc7549c9b8a713b5871b88dc989053d +FROM mcr.microsoft.com/dotnet/sdk:9.0.304-noble@sha256:39ca82d31517e698dcd47f668d53041ec95cca8b783d8134c3053a9769492603 # 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 a982cdef..aee1f8eb 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.303", + "version": "9.0.304", "rollForward": "patch", "allowPrerelease": false } From eb42f5f05592b74e9701cbac7b1976d8f05677c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 19:20:59 -0600 Subject: [PATCH 065/105] Update actions/download-artifact action to v5 (#399) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e37811d6..05a8c8ff 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -65,7 +65,7 @@ jobs: Echo "runid=$runid" >> $env:GITHUB_OUTPUT - name: ๐Ÿ”ป Download deployables artifacts - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5 with: name: deployables-Linux path: ${{ runner.temp }}/deployables From 801d690548323e7731c92cc760620ea0fe6e4bff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 19:48:40 -0600 Subject: [PATCH 066/105] Update mcr.microsoft.com/dotnet/sdk:9.0.304-noble Docker digest to 1f7ccf8 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 07702589..792d7e86 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:9.0.304-noble@sha256:39ca82d31517e698dcd47f668d53041ec95cca8b783d8134c3053a9769492603 +FROM mcr.microsoft.com/dotnet/sdk:9.0.304-noble@sha256:1f7ccf88e076bc1cb1ddbd81959fb55b886b01851b092867bb7a638435fa1f1f # 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 78241e391b86b2840d6ebd780d4a7be3028e83c1 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sat, 9 Aug 2025 11:45:05 -0600 Subject: [PATCH 067/105] Add copilot-instructions.md file --- .github/copilot-instructions.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 00000000..942d81d9 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,22 @@ +# Copilot instructions for this repository + +## High level guidance + +* Review the `CONTRIBUTING.md` file for instructions to build and test the software. +* Set the `NBGV_GitEngine` environment variable to `Disabled` before running any `dotnet` or `msbuild` commands. + +## Software Design + +* Design APIs to be highly testable, and all functionality should be tested. +* Avoid introducing binary breaking changes in public APIs of projects under `src` unless their project files have `IsPackable` set to `false`. + +## Testing + +* There should generally be one test project (under the `test` directory) per shipping project (under the `src` directory). Test projects are named after the project being tested with a `.Test` suffix. +* Tests should use the Xunit testing framework. + +## Coding style + +* Honor StyleCop rules and fix any reported build warnings *after* getting tests to pass. +* In C# files, use namespace *statements* instead of namespace *blocks* for all new files. +* Add API doc comments to all new public and internal members. From 28cfd93db8ccb2a5e25de629eb4504054a4c3704 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sun, 10 Aug 2025 08:25:04 -0600 Subject: [PATCH 068/105] Fix up contributing to work better on linux --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4281f299..990402db 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -53,9 +53,9 @@ Push the tag. When your repo is hosted by GitHub and you are using GitHub Actions, you should create a GitHub Release using the standard GitHub UI. Having previously used `nbgv tag` and pushing the tag will help you identify the precise commit and name to use for this release. -After publishing the release, the `.github\workflows\release.yml` workflow will be automatically triggered, which will: +After publishing the release, the `.github/workflows/release.yml` workflow will be automatically triggered, which will: -1. Find the most recent `.github\workflows\build.yml` GitHub workflow run of the tagged release. +1. Find the most recent `.github/workflows/build.yml` GitHub workflow run of the tagged release. 1. Upload the `deployables` artifact from that workflow run to your GitHub Release. 1. If you have `NUGET_API_KEY` defined as a secret variable for your repo or org, any nuget packages in the `deployables` artifact will be pushed to nuget.org. @@ -92,7 +92,7 @@ The best way to keep your repo in sync with Library.Template's evolving features ```ps1 git fetch git checkout origin/main -.\tools\MergeFrom-Template.ps1 +./tools/MergeFrom-Template.ps1 # resolve any conflicts, then commit the merge commit. git push origin -u HEAD ``` From c4de4d094e4f078890878e9d89090fd0b1a6a084 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sun, 10 Aug 2025 09:19:23 -0600 Subject: [PATCH 069/105] Add copilot instructions about avoiding unstable tests --- .github/copilot-instructions.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 942d81d9..08593502 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -14,6 +14,7 @@ * There should generally be one test project (under the `test` directory) per shipping project (under the `src` directory). Test projects are named after the project being tested with a `.Test` suffix. * Tests should use the Xunit testing framework. +* Some tests are known to be unstable. When running tests, you should skip the unstable ones by running `dotnet test --filter "TestCategory!=FailsInCloudTest"`. ## Coding style From 7f486ccfc64f146f376738ee435442fbb3f81214 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 09:53:49 -0600 Subject: [PATCH 070/105] Update actions/checkout action to v5 (#402) 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 b6beb8d8..03067ad2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,7 @@ jobs: - windows-2022 steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 with: fetch-depth: 0 # avoid shallow clone so nbgv can do its work. - name: โš™ Install prerequisites @@ -74,7 +74,7 @@ jobs: name: ๐Ÿ“ƒ Docs runs-on: ubuntu-latest steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: ๐Ÿ”— Markup Link Checker (mlc) uses: becheran/mlc@18a06b3aa2901ca197de59c8b0b1f54fdba6b3fa # v1.0.0 with: diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml index 053f56e9..eb69d92e 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 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 0a8f8215..6454d3c5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,7 +25,7 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 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 7d0a67a0..f5cf8666 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 with: fetch-depth: 0 # avoid shallow clone so nbgv can do its work. From dc3950f6376f1ee5c747f062afd43a654305884c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 16 Aug 2025 06:35:33 -0600 Subject: [PATCH 071/105] Update xunit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Directory.Packages.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 0747b92b..8d1ed787 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -10,8 +10,8 @@ - - + + From 04843ad0057ceac68bf1f13f7aa20a76c671382e Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sun, 17 Aug 2025 12:34:52 -0600 Subject: [PATCH 072/105] Update actions/checkout action to v5 --- .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 35921d06..7c50b3b7 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 with: fetch-depth: 0 # avoid shallow clone so nbgv can do its work. - name: ๐Ÿ”— Markup Link Checker (mlc) From 90069e4bf80cd5a8d42ad6f46cb2827f8105f472 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Aug 2025 18:31:41 -0600 Subject: [PATCH 073/105] Update mcr.microsoft.com/dotnet/sdk:9.0.304-noble Docker digest to 0b7186a (#404) 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 792d7e86..d40ad5e9 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:9.0.304-noble@sha256:1f7ccf88e076bc1cb1ddbd81959fb55b886b01851b092867bb7a638435fa1f1f +FROM mcr.microsoft.com/dotnet/sdk:9.0.304-noble@sha256:0b7186a7247bf8c07085fd700613bb0425a6f8f6467a0342c12a535e767da803 # 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 640b1d12eb5de5bc1b02a42528206ef6a3155b27 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:13:42 -0600 Subject: [PATCH 074/105] Update actions/upload-pages-artifact action to v4 (#405) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6454d3c5..13751a64 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -35,7 +35,7 @@ jobs: name: ๐Ÿ“š Generate documentation - name: Upload artifact - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 + uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4 with: path: docfx/_site From 6e77b794a0a615053d494cee596232f80d35c8bb Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Mon, 25 Aug 2025 16:44:44 -0600 Subject: [PATCH 075/105] Move GitHub workflow token permissions to per-job --- .github/workflows/docs.yml | 13 ++++++------- .github/workflows/release.yml | 7 +++---- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 13751a64..a7155c4c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -5,13 +5,6 @@ on: branches: - main -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - actions: read - pages: write - id-token: write - contents: read - # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: @@ -20,6 +13,12 @@ concurrency: jobs: publish-docs: + # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages + permissions: + actions: read + pages: write + id-token: write + contents: read environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 05a8c8ff..1b4e25ca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,13 +11,12 @@ on: run-name: ${{ github.ref_name }} -permissions: - actions: read - contents: write - jobs: release: runs-on: ubuntu-24.04 + permissions: + actions: read + contents: write steps: - name: โš™๏ธ Initialization shell: pwsh From 3c9a9faab9fc9417bef919c798979b7e5e9736d1 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 28 Aug 2025 15:05:29 -0600 Subject: [PATCH 076/105] Move Install-NuGetPackage.ps1 to the tools folder --- init.ps1 | 2 +- {azure-pipelines => tools}/Install-NuGetPackage.ps1 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename {azure-pipelines => tools}/Install-NuGetPackage.ps1 (96%) diff --git a/init.ps1 b/init.ps1 index e8c2602e..8bb78ad8 100755 --- a/init.ps1 +++ b/init.ps1 @@ -126,7 +126,7 @@ try { } } - $InstallNuGetPkgScriptPath = "$PSScriptRoot\azure-pipelines\Install-NuGetPackage.ps1" + $InstallNuGetPkgScriptPath = "$PSScriptRoot\tools\Install-NuGetPackage.ps1" $nugetVerbosity = 'quiet' if ($Verbose) { $nugetVerbosity = 'normal' } $MicroBuildPackageSource = 'https://pkgs.dev.azure.com/devdiv/_packaging/MicroBuildToolset%40Local/nuget/v3/index.json' diff --git a/azure-pipelines/Install-NuGetPackage.ps1 b/tools/Install-NuGetPackage.ps1 similarity index 96% rename from azure-pipelines/Install-NuGetPackage.ps1 rename to tools/Install-NuGetPackage.ps1 index f1db577a..9afde055 100644 --- a/azure-pipelines/Install-NuGetPackage.ps1 +++ b/tools/Install-NuGetPackage.ps1 @@ -33,7 +33,7 @@ Param( [string]$Verbosity='normal' ) -$nugetPath = & "$PSScriptRoot\..\tools\Get-NuGetTool.ps1" +$nugetPath = & "$PSScriptRoot\Get-NuGetTool.ps1" try { Write-Verbose "Installing $PackageId..." From 53aebc939ed71b5805ac5ddc66261d4ff76a5814 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 5 Sep 2025 07:48:40 -0600 Subject: [PATCH 077/105] Update hyperlinks to learn.microsoft.com --- CONTRIBUTING.md | 2 +- README.md | 2 +- azurepipelines-coverage.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 990402db..7875bfc8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,7 +39,7 @@ 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://docs.microsoft.com/powershell/scripting/install/installing-powershell?view=powershell-6 +[pwsh]: https://learn.microsoft.com/powershell/scripting/install/installing-powershell ## Releases diff --git a/README.md b/README.md index f0b0f7d8..b0c1a00c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ * Follow the best and simplest patterns of build, pack and test with dotnet CLI. * Init script that installs prerequisites and auth helpers, supporting both non-elevation and elevation modes. -* Static analyzers: default [Code Analysis](https://docs.microsoft.com/dotnet/fundamentals/code-analysis/overview) and [StyleCop](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) +* Static analyzers: default [Code Analysis](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/overview) and [StyleCop](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) * Read-only source tree (builds to top-level bin/obj folders) * Auto-versioning (via [Nerdbank.GitVersioning](https://github.com/dotnet/nerdbank.gitversioning)) * Builds with a "pinned" .NET SDK to ensure reproducible builds across machines and across time. diff --git a/azurepipelines-coverage.yml b/azurepipelines-coverage.yml index 0cd5dad3..e2dd1f50 100644 --- a/azurepipelines-coverage.yml +++ b/azurepipelines-coverage.yml @@ -1,4 +1,4 @@ -# https://learn.microsoft.com/azure/devops/pipelines/test/codecoverage-for-pullrequests?view=azure-devops +# https://learn.microsoft.com/azure/devops/pipelines/test/codecoverage-for-pullrequests coverage: status: comments: on # add comment to PRs reporting diff in coverage of modified files From 8cf1387a466f05a0c6e2f2fd94a9b4d12e6997fc Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 5 Sep 2025 07:48:40 -0600 Subject: [PATCH 078/105] Update hyperlinks to learn.microsoft.com --- SECURITY.md | 2 +- azure-pipelines/PostPRMessage.ps1 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 0dc4b6a7..29306956 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,7 +4,7 @@ Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). -If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://learn.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. ## Reporting Security Issues diff --git a/azure-pipelines/PostPRMessage.ps1 b/azure-pipelines/PostPRMessage.ps1 index 4a2b7886..4075f392 100644 --- a/azure-pipelines/PostPRMessage.ps1 +++ b/azure-pipelines/PostPRMessage.ps1 @@ -8,7 +8,7 @@ param( $CommentState='Active' ) -# See https://docs.microsoft.com/en-us/dotnet/api/microsoft.teamfoundation.sourcecontrol.webapi.commentthreadstatus?view=azure-devops-dotnet +# See https://learn.microsoft.com/dotnet/api/microsoft.teamfoundation.sourcecontrol.webapi.commentthreadstatus if ($CommentState -eq 'Active') { $StatusCode = 1 } elseif ($CommentState -eq 'ByDesign') { @@ -38,7 +38,7 @@ $body = ConvertTo-Json @{ Write-Verbose "Posting JSON payload: `n$Body" # Post the message to the Pull Request -# https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pull%20request%20threads?view=azure-devops-rest-5.1 +# https://learn.microsoft.com/rest/api/azure/devops/git/pull-request-threads $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/git/repositories/$($env:BUILD_REPOSITORY_NAME)/pullRequests/$($env:SYSTEM_PULLREQUEST_PULLREQUESTID)/threads?api-version=5.1" if ($PSCmdlet.ShouldProcess($url, 'Post comment via REST call')) { try { From 25e8285b3bcd77428682e1f6799ef85c65f30a2c Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sun, 7 Sep 2025 19:09:57 -0600 Subject: [PATCH 079/105] Remove stray backtick from CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7875bfc8..d48a0207 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -88,7 +88,7 @@ If Renovate is not creating pull requests when you expect it to, check that the ### Maintaining your repo based on this template The best way to keep your repo in sync with Library.Template's evolving features and best practices is to periodically merge the template into your repo: -` + ```ps1 git fetch git checkout origin/main From 4d2be894dbdb286fcab1cabbf43c3fedca1c270b Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sun, 7 Sep 2025 19:34:41 -0600 Subject: [PATCH 080/105] Add `Install-NuGetPackage.ps1` script This was previously only included in the `microbuild` branch. --- tools/Install-NuGetPackage.ps1 | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 tools/Install-NuGetPackage.ps1 diff --git a/tools/Install-NuGetPackage.ps1 b/tools/Install-NuGetPackage.ps1 new file mode 100644 index 00000000..9afde055 --- /dev/null +++ b/tools/Install-NuGetPackage.ps1 @@ -0,0 +1,55 @@ +<# +.SYNOPSIS + Installs a NuGet package. +.PARAMETER PackageID + The Package ID to install. +.PARAMETER Version + The version of the package to install. If unspecified, the latest stable release is installed. +.PARAMETER Source + The package source feed to find the package to install from. +.PARAMETER PackagesDir + The directory to install the package to. By default, it uses the Packages folder at the root of the repo. +.PARAMETER ConfigFile + The nuget.config file to use. By default, it uses :/nuget.config. +.OUTPUTS + System.String. The path to the installed package. +#> +[CmdletBinding(SupportsShouldProcess=$true,ConfirmImpact='Low')] +Param( + [Parameter(Position=1,Mandatory=$true)] + [string]$PackageId, + [Parameter()] + [string]$Version, + [Parameter()] + [string]$Source, + [Parameter()] + [switch]$Prerelease, + [Parameter()] + [string]$PackagesDir="$PSScriptRoot\..\packages", + [Parameter()] + [string]$ConfigFile="$PSScriptRoot\..\nuget.config", + [Parameter()] + [ValidateSet('Quiet','Normal','Detailed')] + [string]$Verbosity='normal' +) + +$nugetPath = & "$PSScriptRoot\Get-NuGetTool.ps1" + +try { + Write-Verbose "Installing $PackageId..." + $nugetArgs = "Install",$PackageId,"-OutputDirectory",$PackagesDir,'-ConfigFile',$ConfigFile + if ($Version) { $nugetArgs += "-Version",$Version } + if ($Source) { $nugetArgs += "-FallbackSource",$Source } + if ($Prerelease) { $nugetArgs += "-Prerelease" } + $nugetArgs += '-Verbosity',$Verbosity + + if ($PSCmdlet.ShouldProcess($PackageId, 'nuget install')) { + $p = Start-Process $nugetPath $nugetArgs -NoNewWindow -Wait -PassThru + if ($null -ne $p.ExitCode -and $p.ExitCode -ne 0) { throw } + } + + # Provide the path to the installed package directory to our caller. + Write-Output (Get-ChildItem "$PackagesDir\$PackageId.*")[0].FullName +} finally { + Pop-Location +} From c29f9af53a720c0ceae90e70bf6dfb5c88a89e84 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Sun, 7 Sep 2025 19:53:41 -0600 Subject: [PATCH 081/105] Add switches to Install-NuGetPackage.ps1 --- tools/Install-NuGetPackage.ps1 | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/Install-NuGetPackage.ps1 b/tools/Install-NuGetPackage.ps1 index 9afde055..c7a42a91 100644 --- a/tools/Install-NuGetPackage.ps1 +++ b/tools/Install-NuGetPackage.ps1 @@ -7,6 +7,12 @@ The version of the package to install. If unspecified, the latest stable release is installed. .PARAMETER Source The package source feed to find the package to install from. +.PARAMETER Prerelease + Include prerelease packages when searching for the latest version. +.PARAMETER ExcludeVersion + Installs the package without adding the version to the folder name. +.PARAMETER DirectDownload + Bypass the local cache when downloading packages. .PARAMETER PackagesDir The directory to install the package to. By default, it uses the Packages folder at the root of the repo. .PARAMETER ConfigFile @@ -25,6 +31,10 @@ Param( [Parameter()] [switch]$Prerelease, [Parameter()] + [switch]$ExcludeVersion, + [Parameter()] + [switch]$DirectDownload, + [Parameter()] [string]$PackagesDir="$PSScriptRoot\..\packages", [Parameter()] [string]$ConfigFile="$PSScriptRoot\..\nuget.config", @@ -41,6 +51,8 @@ try { if ($Version) { $nugetArgs += "-Version",$Version } if ($Source) { $nugetArgs += "-FallbackSource",$Source } if ($Prerelease) { $nugetArgs += "-Prerelease" } + if ($ExcludeVersion) { $nugetArgs += '-ExcludeVersion' } + if ($DirectDownload) { $nugetArgs += '-DirectDownload' } $nugetArgs += '-Verbosity',$Verbosity if ($PSCmdlet.ShouldProcess($PackageId, 'nuget install')) { From fec70cfcda335d648706e2875f38893ded3c1db6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Sep 2025 16:53:41 -0600 Subject: [PATCH 082/105] Update Dockerfile and global.json updates to v9.0.305 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 d40ad5e9..c1223a43 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:9.0.304-noble@sha256:0b7186a7247bf8c07085fd700613bb0425a6f8f6467a0342c12a535e767da803 +FROM mcr.microsoft.com/dotnet/sdk:9.0.305-noble@sha256:66a9fb34b06fe16c8a656327d6dd765b38bcb60577ce9af4bf08c6c63ea98702 # 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 aee1f8eb..6fea1e98 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.304", + "version": "9.0.305", "rollForward": "patch", "allowPrerelease": false } From d71cf6675486eb27a563d4f118b471d99ef9207c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 07:38:47 -0600 Subject: [PATCH 083/105] Update mcr.microsoft.com/dotnet/sdk:9.0.305-noble Docker digest to 802e64a (#407) 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 c1223a43..5526144c 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:9.0.305-noble@sha256:66a9fb34b06fe16c8a656327d6dd765b38bcb60577ce9af4bf08c6c63ea98702 +FROM mcr.microsoft.com/dotnet/sdk:9.0.305-noble@sha256:802e64ab9e113bdfa5d476ae00c7b40ab5c42da1792731c41a47f43bc4e74bdb # 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 1367101102f299c993d337aef3c5a4628c277b3a Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 10 Sep 2025 08:00:08 -0600 Subject: [PATCH 084/105] Drop extra `Pop-Location` from `Install-NuGetPackage.ps1` --- tools/Install-NuGetPackage.ps1 | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/tools/Install-NuGetPackage.ps1 b/tools/Install-NuGetPackage.ps1 index c7a42a91..3c11b0f6 100644 --- a/tools/Install-NuGetPackage.ps1 +++ b/tools/Install-NuGetPackage.ps1 @@ -45,23 +45,19 @@ Param( $nugetPath = & "$PSScriptRoot\Get-NuGetTool.ps1" -try { - Write-Verbose "Installing $PackageId..." - $nugetArgs = "Install",$PackageId,"-OutputDirectory",$PackagesDir,'-ConfigFile',$ConfigFile - if ($Version) { $nugetArgs += "-Version",$Version } - if ($Source) { $nugetArgs += "-FallbackSource",$Source } - if ($Prerelease) { $nugetArgs += "-Prerelease" } - if ($ExcludeVersion) { $nugetArgs += '-ExcludeVersion' } - if ($DirectDownload) { $nugetArgs += '-DirectDownload' } - $nugetArgs += '-Verbosity',$Verbosity +Write-Verbose "Installing $PackageId..." +$nugetArgs = "Install",$PackageId,"-OutputDirectory",$PackagesDir,'-ConfigFile',$ConfigFile +if ($Version) { $nugetArgs += "-Version",$Version } +if ($Source) { $nugetArgs += "-FallbackSource",$Source } +if ($Prerelease) { $nugetArgs += "-Prerelease" } +if ($ExcludeVersion) { $nugetArgs += '-ExcludeVersion' } +if ($DirectDownload) { $nugetArgs += '-DirectDownload' } +$nugetArgs += '-Verbosity',$Verbosity - if ($PSCmdlet.ShouldProcess($PackageId, 'nuget install')) { - $p = Start-Process $nugetPath $nugetArgs -NoNewWindow -Wait -PassThru - if ($null -ne $p.ExitCode -and $p.ExitCode -ne 0) { throw } - } - - # Provide the path to the installed package directory to our caller. - Write-Output (Get-ChildItem "$PackagesDir\$PackageId.*")[0].FullName -} finally { - Pop-Location +if ($PSCmdlet.ShouldProcess($PackageId, 'nuget install')) { + $p = Start-Process $nugetPath $nugetArgs -NoNewWindow -Wait -PassThru + if ($null -ne $p.ExitCode -and $p.ExitCode -ne 0) { throw } } + +# Provide the path to the installed package directory to our caller. +Write-Output (Get-ChildItem "$PackagesDir\$PackageId.*")[0].FullName From e40d505268ea70ccd683ea7b5554307cb5cedcf6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:09:28 -0600 Subject: [PATCH 085/105] Update dependency powershell to v7.5.3 --- .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 79ad7dda..e2f24dc2 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "powershell": { - "version": "7.5.2", + "version": "7.5.3", "commands": [ "pwsh" ], From 761109a9d7112f25e0c880ff91958394cb3aecbf Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 10 Sep 2025 21:34:45 -0600 Subject: [PATCH 086/105] Add API compat testing --- .config/dotnet-tools.json | 7 ++++ .github/workflows/build.yml | 4 ++ azure-pipelines/build.yml | 4 ++ azure-pipelines/dotnet.yml | 11 +++++- tools/Check-ApiCompat.ps1 | 74 +++++++++++++++++++++++++++++++++++++ 5 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 tools/Check-ApiCompat.ps1 diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 79ad7dda..79ccf8bd 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -29,6 +29,13 @@ "docfx" ], "rollForward": false + }, + "microsoft.dotnet.apicompat.tool": { + "version": "9.0.305", + "commands": [ + "apicompat" + ], + "rollForward": false } } } diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 03067ad2..4e5f1b53 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,6 +50,10 @@ jobs: - name: ๐Ÿงช test run: tools/dotnet-test-cloud.ps1 -Configuration ${{ env.BUILDCONFIGURATION }} -Agent ${{ runner.os }} shell: pwsh + - name: ๐Ÿ“‹ API compat test + run: tools/Check-ApiCompat.ps1 -Configuration ${{ env.BUILDCONFIGURATION }} + shell: pwsh + if: runner.os == 'Linux' - name: ๐Ÿ’…๐Ÿป Verify formatted code run: dotnet format --verify-no-changes --no-restore shell: pwsh diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index 5c106ade..e3c59be8 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -8,6 +8,9 @@ parameters: - name: RunTests type: boolean default: true +- name: EnableApiCompatCheck + type: boolean + default: true jobs: - job: Windows @@ -37,6 +40,7 @@ jobs: - template: dotnet.yml parameters: RunTests: ${{ parameters.RunTests }} + EnableApiCompatCheck: ${{ parameters.EnableApiCompatCheck }} - script: dotnet format --verify-no-changes displayName: ๐Ÿ’… Verify formatted code env: diff --git a/azure-pipelines/dotnet.yml b/azure-pipelines/dotnet.yml index 30bb4107..8630e50c 100644 --- a/azure-pipelines/dotnet.yml +++ b/azure-pipelines/dotnet.yml @@ -1,5 +1,9 @@ parameters: - RunTests: +- name: RunTests + type: boolean +- name: EnableApiCompatCheck + type: boolean + default: false steps: @@ -10,6 +14,11 @@ steps: displayName: ๐Ÿงช dotnet test condition: and(succeeded(), ${{ parameters.RunTests }}) +- ${{ if parameters.EnableApiCompatCheck }}: + - powershell: tools/Check-ApiCompat.ps1 -Configuration $(BuildConfiguration) + displayName: ๐Ÿ“‹ API compat test + condition: and(succeeded(), ${{ parameters.RunTests }}) + - powershell: tools/variables/_define.ps1 failOnStderr: true displayName: โš™ Update pipeline variables based on build outputs diff --git a/tools/Check-ApiCompat.ps1 b/tools/Check-ApiCompat.ps1 new file mode 100644 index 00000000..26dd6d4c --- /dev/null +++ b/tools/Check-ApiCompat.ps1 @@ -0,0 +1,74 @@ +#!/usr/bin/env pwsh + +<# +.SYNOPSIS + Runs the apicompat tool on the built packages. +.PARAMETER Configuration + Debug or Release +.PARAMETER GenerateSuppressionFile + If specified, generates or updates a suppression file for API compatibility checks. +#> +[CmdletBinding()] +Param ( + [string]$Configuration = 'Release', + [switch]$GenerateSuppressionFile +) + +Function Get-PackageId($nupkgPath) { + # The package ID cannot be reliably parsed out of the nupkg file name, + # because if the ID ends with an integer, it may be ambiguous with the version part. + # Extract the nuspec file from the nupkg to get the package ID. + $tempDir = [System.IO.Path]::GetTempPath() + [System.Guid]::NewGuid().ToString() + New-Item -ItemType Directory -Path $tempDir | Out-Null + try { + Expand-Archive -Path $nupkgPath -DestinationPath $tempDir + $nuspecPath = Get-ChildItem -Path $tempDir -Filter "*.nuspec" | Select-Object -First 1 + if ($nuspecPath) { + [xml]$nuspec = Get-Content $nuspecPath.FullName + return $nuspec.package.metadata.id + } + else { + Write-Warning "No nuspec found in $nupkgPath" + return $null + } + } + finally { + Remove-Item -Recurse -Force $tempDir + } +} + +$failures = 0 +Get-ChildItem $PSScriptRoot/../bin/Packages/$Configuration/*.nupkg | % { + $packageId = Get-PackageId $_.FullName + + if ($packageId -eq $null) { + continue + } + + $compatArgs = 'apicompat', 'package', $_.FullName, '--enable-strict-mode-for-baseline-validation' + + # Attempt to download the last published stable version of this package + # to serve as a baseline on which this new build should be API compatible. + try { + New-Item -ItemType Directory -Path "$PSScriptRoot/../obj" -Force | Out-Null + $baselineFile = [System.IO.Path]::GetFullPath("$PSScriptRoot/../obj/$packageId.baseline.nupkg") + Invoke-WebRequest -Uri https://www.nuget.org/api/v2/package/$packageId -OutFile $baselineFile + $compatArgs += '--baseline-package', $baselineFile + } + catch { + Write-Warning "Failed to download baseline package for $packageId, which may be expected if a stable package has not been published. $_" + } + + $ApiCompatSuppressionPath = [System.IO.Path]::GetFullPath("$PSScriptRoot/../src/$packageId/ApiCompatSuppressions.xml") + if ((Test-Path $ApiCompatSuppressionPath) -or $GenerateSuppressionFile) { + $compatArgs += '--suppression-file', $ApiCompatSuppressionPath + } + if ($GenerateSuppressionFile) { + $compatArgs += '--generate-suppression-file' + } + Write-Host "Testing $($packageId): dotnet $compatArgs" + dotnet @compatArgs + if ($LASTEXITCODE -ne 0) { $failures += 1 } +} + +exit $failures From b1997987d1afcb5b8b544aff70e8efcbd131569e Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 10 Sep 2025 21:54:22 -0600 Subject: [PATCH 087/105] Switch API compat testing from dotnet tool to MSBuild --- .config/dotnet-tools.json | 7 ---- .github/workflows/build.yml | 4 -- Directory.Build.props | 3 ++ azure-pipelines/build.yml | 4 -- azure-pipelines/dotnet.yml | 11 +----- src/Library/Library.csproj | 1 + tools/Check-ApiCompat.ps1 | 74 ------------------------------------- 7 files changed, 5 insertions(+), 99 deletions(-) delete mode 100644 tools/Check-ApiCompat.ps1 diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 79ccf8bd..79ad7dda 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -29,13 +29,6 @@ "docfx" ], "rollForward": false - }, - "microsoft.dotnet.apicompat.tool": { - "version": "9.0.305", - "commands": [ - "apicompat" - ], - "rollForward": false } } } diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4e5f1b53..03067ad2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,10 +50,6 @@ jobs: - name: ๐Ÿงช test run: tools/dotnet-test-cloud.ps1 -Configuration ${{ env.BUILDCONFIGURATION }} -Agent ${{ runner.os }} shell: pwsh - - name: ๐Ÿ“‹ API compat test - run: tools/Check-ApiCompat.ps1 -Configuration ${{ env.BUILDCONFIGURATION }} - shell: pwsh - if: runner.os == 'Linux' - name: ๐Ÿ’…๐Ÿป Verify formatted code run: dotnet format --verify-no-changes --no-restore shell: pwsh diff --git a/Directory.Build.props b/Directory.Build.props index f702243a..02d41804 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -13,6 +13,9 @@ true true + + true + true diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index e3c59be8..5c106ade 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -8,9 +8,6 @@ parameters: - name: RunTests type: boolean default: true -- name: EnableApiCompatCheck - type: boolean - default: true jobs: - job: Windows @@ -40,7 +37,6 @@ jobs: - template: dotnet.yml parameters: RunTests: ${{ parameters.RunTests }} - EnableApiCompatCheck: ${{ parameters.EnableApiCompatCheck }} - script: dotnet format --verify-no-changes displayName: ๐Ÿ’… Verify formatted code env: diff --git a/azure-pipelines/dotnet.yml b/azure-pipelines/dotnet.yml index 8630e50c..30bb4107 100644 --- a/azure-pipelines/dotnet.yml +++ b/azure-pipelines/dotnet.yml @@ -1,9 +1,5 @@ parameters: -- name: RunTests - type: boolean -- name: EnableApiCompatCheck - type: boolean - default: false + RunTests: steps: @@ -14,11 +10,6 @@ steps: displayName: ๐Ÿงช dotnet test condition: and(succeeded(), ${{ parameters.RunTests }}) -- ${{ if parameters.EnableApiCompatCheck }}: - - powershell: tools/Check-ApiCompat.ps1 -Configuration $(BuildConfiguration) - displayName: ๐Ÿ“‹ API compat test - condition: and(succeeded(), ${{ parameters.RunTests }}) - - powershell: tools/variables/_define.ps1 failOnStderr: true displayName: โš™ Update pipeline variables based on build outputs diff --git a/src/Library/Library.csproj b/src/Library/Library.csproj index 89f06234..fa79c05e 100644 --- a/src/Library/Library.csproj +++ b/src/Library/Library.csproj @@ -1,5 +1,6 @@ net8.0;netstandard2.0 + diff --git a/tools/Check-ApiCompat.ps1 b/tools/Check-ApiCompat.ps1 deleted file mode 100644 index 26dd6d4c..00000000 --- a/tools/Check-ApiCompat.ps1 +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env pwsh - -<# -.SYNOPSIS - Runs the apicompat tool on the built packages. -.PARAMETER Configuration - Debug or Release -.PARAMETER GenerateSuppressionFile - If specified, generates or updates a suppression file for API compatibility checks. -#> -[CmdletBinding()] -Param ( - [string]$Configuration = 'Release', - [switch]$GenerateSuppressionFile -) - -Function Get-PackageId($nupkgPath) { - # The package ID cannot be reliably parsed out of the nupkg file name, - # because if the ID ends with an integer, it may be ambiguous with the version part. - # Extract the nuspec file from the nupkg to get the package ID. - $tempDir = [System.IO.Path]::GetTempPath() + [System.Guid]::NewGuid().ToString() - New-Item -ItemType Directory -Path $tempDir | Out-Null - try { - Expand-Archive -Path $nupkgPath -DestinationPath $tempDir - $nuspecPath = Get-ChildItem -Path $tempDir -Filter "*.nuspec" | Select-Object -First 1 - if ($nuspecPath) { - [xml]$nuspec = Get-Content $nuspecPath.FullName - return $nuspec.package.metadata.id - } - else { - Write-Warning "No nuspec found in $nupkgPath" - return $null - } - } - finally { - Remove-Item -Recurse -Force $tempDir - } -} - -$failures = 0 -Get-ChildItem $PSScriptRoot/../bin/Packages/$Configuration/*.nupkg | % { - $packageId = Get-PackageId $_.FullName - - if ($packageId -eq $null) { - continue - } - - $compatArgs = 'apicompat', 'package', $_.FullName, '--enable-strict-mode-for-baseline-validation' - - # Attempt to download the last published stable version of this package - # to serve as a baseline on which this new build should be API compatible. - try { - New-Item -ItemType Directory -Path "$PSScriptRoot/../obj" -Force | Out-Null - $baselineFile = [System.IO.Path]::GetFullPath("$PSScriptRoot/../obj/$packageId.baseline.nupkg") - Invoke-WebRequest -Uri https://www.nuget.org/api/v2/package/$packageId -OutFile $baselineFile - $compatArgs += '--baseline-package', $baselineFile - } - catch { - Write-Warning "Failed to download baseline package for $packageId, which may be expected if a stable package has not been published. $_" - } - - $ApiCompatSuppressionPath = [System.IO.Path]::GetFullPath("$PSScriptRoot/../src/$packageId/ApiCompatSuppressions.xml") - if ((Test-Path $ApiCompatSuppressionPath) -or $GenerateSuppressionFile) { - $compatArgs += '--suppression-file', $ApiCompatSuppressionPath - } - if ($GenerateSuppressionFile) { - $compatArgs += '--generate-suppression-file' - } - Write-Host "Testing $($packageId): dotnet $compatArgs" - dotnet @compatArgs - if ($LASTEXITCODE -ne 0) { $failures += 1 } -} - -exit $failures From dfa8f358b1f8bdf4546fe2023e3145e884ad92c2 Mon Sep 17 00:00:00 2001 From: trevors20 <49179298+trevors20@users.noreply.github.com> Date: Thu, 11 Sep 2025 08:20:54 -0700 Subject: [PATCH 088/105] Migrate from managed identity to service connection for APIScan (#409) * Migrate from managed identity to service connection for APIScan. * Add the system access token. * Use a variable for the apiscan auth string. * Apply suggestion from @AArnott --------- Co-authored-by: Andrew Arnott --- azure-pipelines/apiscan.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/apiscan.yml b/azure-pipelines/apiscan.yml index c3c8aed1..a1d07e10 100644 --- a/azure-pipelines/apiscan.yml +++ b/azure-pipelines/apiscan.yml @@ -49,8 +49,10 @@ jobs: isLargeApp: false toolVersion: Latest preserveLogsFolder: true + azureSubscription: VSEng-APIScanSC env: - AzureServicesAuthConnectionString: runAs=App;AppId=$(ApiScanClientId) + AzureServicesAuthConnectionString: $(APIScanAuthConnectionString) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # File bugs when APIScan finds issues - task: TSAUpload@2 From 28cf28e93868cf212cafc84b8c2d032624b453f6 Mon Sep 17 00:00:00 2001 From: Matteo Prosperi <41970398+matteo-prosperi@users.noreply.github.com> Date: Tue, 16 Sep 2025 11:29:45 -0700 Subject: [PATCH 089/105] Migrate from managed identity to service connection for symbol archiving (#411) * Migrate from managed identity to service connection for symbol archiving Updated MicroBuildArchiveSymbols task version and added Azure subscription and environment variables. * Apply suggestion from @AArnott --------- Co-authored-by: Andrew Arnott --- azure-pipelines/prepare-insertion-stages.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/prepare-insertion-stages.yml b/azure-pipelines/prepare-insertion-stages.yml index cfe28743..fdce906a 100644 --- a/azure-pipelines/prepare-insertion-stages.yml +++ b/azure-pipelines/prepare-insertion-stages.yml @@ -30,12 +30,15 @@ stages: - download: current artifact: symbols-legacy displayName: ๐Ÿ”ป Download symbols-legacy artifact - - task: MicroBuildArchiveSymbols@5 + - task: MicroBuildArchiveSymbols@6 displayName: ๐Ÿ”ฃ Archive symbols to Symweb inputs: SymbolsFeatureName: $(SymbolsFeatureName) SymbolsProject: VS SymbolsAgentPath: $(Pipeline.Workspace)/symbols-legacy + azureSubscription: Vseng-SymbolsUpload + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) - ${{ if parameters.PackagePush }}: - job: push From 028c074776bd658a8594370571b80484d435e05b Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 17 Sep 2025 12:49:52 -0600 Subject: [PATCH 090/105] Bump MicroBuild version to 2.0.201 --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 80e687a5..73c69a87 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,7 +5,7 @@ true true - 2.0.199 + 2.0.201 From ce5bb3c2a4163c2010d7eab775a59257eaaf30b5 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 17 Sep 2025 12:50:00 -0600 Subject: [PATCH 091/105] Update .gitignore source URL --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index cc2b1247..1b779930 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## -## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore # User-specific files *.rsuser From 60bc0ad038dfd438997fc034bf89c3be53254337 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 17 Sep 2025 12:50:15 -0600 Subject: [PATCH 092/105] Drop explicit nuget.org source for procdump It'll now come from wherever nuget.config says. --- tools/Get-ProcDump.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/Get-ProcDump.ps1 b/tools/Get-ProcDump.ps1 index 1493fe4b..6fba954d 100644 --- a/tools/Get-ProcDump.ps1 +++ b/tools/Get-ProcDump.ps1 @@ -8,7 +8,7 @@ $procDumpToolPath = "$baseDir\procdump.$version\bin" if (-not (Test-Path $procDumpToolPath)) { if (-not (Test-Path $baseDir)) { New-Item -Type Directory -Path $baseDir | Out-Null } $baseDir = (Resolve-Path $baseDir).Path # Normalize it - & (& $PSScriptRoot\Get-NuGetTool.ps1) install procdump -version $version -PackageSaveMode nuspec -OutputDirectory $baseDir -Source https://api.nuget.org/v3/index.json | Out-Null + & (& $PSScriptRoot\Get-NuGetTool.ps1) install procdump -version $version -PackageSaveMode nuspec -OutputDirectory $baseDir | Out-Null } (Resolve-Path $procDumpToolPath).Path From 0f75208c0de471105bfbea7355590f69f05e96a9 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 17 Sep 2025 16:51:08 -0600 Subject: [PATCH 093/105] Allow VSInsertion artifact collection with just a VSIX --- tools/artifacts/VSInsertion.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/artifacts/VSInsertion.ps1 b/tools/artifacts/VSInsertion.ps1 index ffc7e29a..a5b940b5 100644 --- a/tools/artifacts/VSInsertion.ps1 +++ b/tools/artifacts/VSInsertion.ps1 @@ -20,8 +20,8 @@ $PackagesRoot = "$RepoRoot/bin/Packages/$BuildConfiguration" $NuGetPackages = "$PackagesRoot/NuGet" $VsixPackages = "$PackagesRoot/Vsix" -if (!(Test-Path $NuGetPackages)) { - Write-Warning "Skipping because NuGet packages haven't been built yet." +if (!(Test-Path $NuGetPackages) -and !(Test-Path $VsixPackages)) { + Write-Warning "Skipping because NuGet and VSIX packages haven't been built yet." return @{} } From 0e1fe345c4406ad40c16b6304543cd5f12a9c244 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 17 Sep 2025 17:49:26 -0600 Subject: [PATCH 094/105] Fix Microsoft.DiaSymReader.Pdb2Pdb package installation --- tools/Convert-PDB.ps1 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/Convert-PDB.ps1 b/tools/Convert-PDB.ps1 index f119a164..7e1303a2 100644 --- a/tools/Convert-PDB.ps1 +++ b/tools/Convert-PDB.ps1 @@ -30,7 +30,13 @@ if (-not (Test-Path $pdb2pdbpath)) { if (-not (Test-Path $baseDir)) { New-Item -Type Directory -Path $baseDir | Out-Null } $baseDir = (Resolve-Path $baseDir).Path # Normalize it Write-Verbose "& (& $PSScriptRoot/Get-NuGetTool.ps1) install Microsoft.DiaSymReader.Pdb2Pdb -version $version -PackageSaveMode nuspec -OutputDirectory $baseDir -Source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json | Out-Null" - & (& $PSScriptRoot/Get-NuGetTool.ps1) install Microsoft.DiaSymReader.Pdb2Pdb -version $version -PackageSaveMode nuspec -OutputDirectory $baseDir -Source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json | Out-Null + # This package originally comes from the https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json feed. + # Add this feed as an upstream to whatever feed is in nuget.config if this step fails. + & (& $PSScriptRoot/Get-NuGetTool.ps1) install Microsoft.DiaSymReader.Pdb2Pdb -version $version -PackageSaveMode nuspec -OutputDirectory $baseDir | Out-Null + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to install Microsoft.DiaSymReader.Pdb2Pdb. Consider adding https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json as an upstream to your nuget.config feed." + return + } } $args = $DllPath,'/out',$OutputPath,'/nowarn','0021' From fe66868c9e853165c57920a79d2ef8ae160d884b Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Wed, 17 Sep 2025 21:00:27 -0600 Subject: [PATCH 095/105] Fix VSIX placement to match .vsman expectations --- Directory.Build.props | 1 + 1 file changed, 1 insertion(+) diff --git a/Directory.Build.props b/Directory.Build.props index b3a76d98..53754def 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -7,6 +7,7 @@ $(RepoRootPath)bin\$(MSBuildProjectName)\ $(RepoRootPath)bin\Packages\$(Configuration)\NuGet\ $(RepoRootPath)bin\Packages\$(Configuration)\Vsix\$(Platform)\ + $(RepoRootPath)bin\Packages\$(Configuration)\Vsix\ $(VSIXOutputPath) enable enable From af11e1164b6ce85ca3599741d7830c6b8cab1d17 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 18 Sep 2025 07:31:58 -0600 Subject: [PATCH 096/105] Fix stray period in doc --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d48a0207..d4322a7b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -66,7 +66,7 @@ Trigger the pipeline by adding the `auto-release` tag on a run of your main `azu ## Tutorial and API documentation -API and hand-written docs are found under the `docfx/` directory. and are built by [docfx](https://dotnet.github.io/docfx/). +API and hand-written docs are found under the `docfx/` directory and are built by [docfx](https://dotnet.github.io/docfx/). You can make changes and host the site locally to preview them by switching to that directory and running the `dotnet docfx --serve` command. After making a change, you can rebuild the docs site while the localhost server is running by running `dotnet docfx` again from a separate terminal. From b9362532b8ef8db8a88a0eec99fbcca3329fea57 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Thu, 18 Sep 2025 16:44:33 -0600 Subject: [PATCH 097/105] Use newer SBOM tool The old one has concurrency bugs that leads to frequent build breaks. --- azure-pipelines/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml index e91da614..3db1adde 100644 --- a/azure-pipelines/build.yml +++ b/azure-pipelines/build.yml @@ -123,6 +123,7 @@ jobs: signType: test sbom: enabled: true + sbomToolVersion: 5.0.3 localization: enabled: ${{ parameters.EnableLocalization }} ${{ if eq(variables['Build.Reason'], 'pullRequest') }}: From 85815caf5391c3f73790b62bea08a652ccb6edff Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 19 Sep 2025 11:38:24 -0600 Subject: [PATCH 098/105] Bump nuget.exe to 6.14.0 --- tools/Get-NuGetTool.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/Get-NuGetTool.ps1 b/tools/Get-NuGetTool.ps1 index 8a3b9eed..bed0cba1 100644 --- a/tools/Get-NuGetTool.ps1 +++ b/tools/Get-NuGetTool.ps1 @@ -6,7 +6,7 @@ #> Param( [Parameter()] - [string]$NuGetVersion='6.12.2' + [string]$NuGetVersion='6.14.0' ) $toolsPath = & "$PSScriptRoot\Get-TempToolsPath.ps1" From 7bfb1d6e3808df638ff45910153e6607f3146b64 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Sep 2025 08:47:15 -0600 Subject: [PATCH 099/105] Update mcr.microsoft.com/dotnet/sdk:9.0.305-noble Docker digest to 604ef06 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 5526144c..4a440efc 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:9.0.305-noble@sha256:802e64ab9e113bdfa5d476ae00c7b40ab5c42da1792731c41a47f43bc4e74bdb +FROM mcr.microsoft.com/dotnet/sdk:9.0.305-noble@sha256:604ef064c6d91068eeb9d946036d8ffadbe25589c4cd77a230fc96e0f6d01d72 # 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 0ec755fcdfd442bfa287aa8ecf070a01154e2b6d Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 26 Sep 2025 10:51:48 -0600 Subject: [PATCH 100/105] Don't check npmjs.com doc links npmjs.com has taken to blocking such checks with 403 Forbidden. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 03067ad2..ee6caf65 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -78,4 +78,4 @@ jobs: - name: ๐Ÿ”— Markup Link Checker (mlc) uses: becheran/mlc@18a06b3aa2901ca197de59c8b0b1f54fdba6b3fa # v1.0.0 with: - args: --do-not-warn-for-redirect-to https://learn.microsoft.com*,https://dotnet.microsoft.com/*,https://dev.azure.com/*,https://app.codecov.io/* -p docfx + args: --do-not-warn-for-redirect-to https://learn.microsoft.com*,https://dotnet.microsoft.com/*,https://dev.azure.com/*,https://app.codecov.io/* -p docfx -i https://www.npmjs.com/package/* From 04923ff12b0d3eb17a680b41e4fa1485b21b8471 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 26 Sep 2025 11:16:50 -0600 Subject: [PATCH 101/105] Add dotnet-tools.json to Solution Items --- Library.sln | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Library.sln b/Library.sln index 638efb56..5c81b306 100644 --- a/Library.sln +++ b/Library.sln @@ -1,7 +1,7 @@ ๏ปฟ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29322.22 +# Visual Studio Version 18 +VisualStudioVersion = 18.0.11023.372 main MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Library", "src\Library\Library.csproj", "{C06D702E-6FC7-453B-BDDF-608F825EC003}" EndProject @@ -13,6 +13,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Directory.Build.props = Directory.Build.props Directory.Build.targets = Directory.Build.targets Directory.Packages.props = Directory.Packages.props + .config\dotnet-tools.json = .config\dotnet-tools.json global.json = global.json nuget.config = nuget.config README.md = README.md From 0b8462ee3ccc5c91c1a44fba2453d9ac8833d603 Mon Sep 17 00:00:00 2001 From: Andrew Arnott Date: Fri, 26 Sep 2025 11:42:17 -0600 Subject: [PATCH 102/105] Skip testing get.dot.net links This link is good, but github agents get a 403 Forbidden back --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee6caf65..717342eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -78,4 +78,4 @@ jobs: - name: ๐Ÿ”— Markup Link Checker (mlc) uses: becheran/mlc@18a06b3aa2901ca197de59c8b0b1f54fdba6b3fa # v1.0.0 with: - args: --do-not-warn-for-redirect-to https://learn.microsoft.com*,https://dotnet.microsoft.com/*,https://dev.azure.com/*,https://app.codecov.io/* -p docfx -i https://www.npmjs.com/package/* + args: --do-not-warn-for-redirect-to https://learn.microsoft.com*,https://dotnet.microsoft.com/*,https://dev.azure.com/*,https://app.codecov.io/* -p docfx -i https://www.npmjs.com/package/*,https://get.dot.net/ From a0fe97a199d47a23beedea8e15eaaa3360d9ea09 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:48:55 +0000 Subject: [PATCH 103/105] Update nbgv and nerdbank.gitversioning updates to 3.8.118 (#416) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .config/dotnet-tools.json | 2 +- Directory.Packages.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index e2f24dc2..bdb0ed42 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -17,7 +17,7 @@ "rollForward": false }, "nbgv": { - "version": "3.7.115", + "version": "3.8.118", "commands": [ "nbgv" ], diff --git a/Directory.Packages.props b/Directory.Packages.props index 8d1ed787..8cbe694c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -20,7 +20,7 @@ - + From 3ba2f4ef9e208dd7bceb9b9687b76830e55d1bd4 Mon Sep 17 00:00:00 2001 From: Tevin Stanley Date: Fri, 26 Sep 2025 12:54:55 -0700 Subject: [PATCH 104/105] update nerdbrank version --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index acbeb61d..5eb1dead 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -29,7 +29,7 @@ - + From 884cc16b90c416464e943f44fa0609132177a6f3 Mon Sep 17 00:00:00 2001 From: Tevin Stanley Date: Fri, 26 Sep 2025 12:59:12 -0700 Subject: [PATCH 105/105] update tools for dotnet for nbgv --- .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 bdb0ed42..e2f24dc2 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -17,7 +17,7 @@ "rollForward": false }, "nbgv": { - "version": "3.8.118", + "version": "3.7.115", "commands": [ "nbgv" ],