Skip to content

Commit cd6a7fc

Browse files
committed
Merge remote-tracking branch 'origin/main' into Tobbeman/main
2 parents 57860c2 + b5f38e9 commit cd6a7fc

204 files changed

Lines changed: 2540 additions & 3996 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.config/dotnet-tools.json

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,39 @@
33
"isRoot": true,
44
"tools": {
55
"powershell": {
6-
"version": "7.5.0",
6+
"version": "7.5.4",
77
"commands": [
88
"pwsh"
99
],
1010
"rollForward": false
1111
},
1212
"dotnet-coverage": {
13-
"version": "17.13.1",
13+
"version": "18.4.1",
1414
"commands": [
1515
"dotnet-coverage"
1616
],
1717
"rollForward": false
1818
},
1919
"nbgv": {
20-
"version": "3.7.115",
20+
"version": "3.9.50",
2121
"commands": [
2222
"nbgv"
2323
],
2424
"rollForward": false
2525
},
2626
"docfx": {
27-
"version": "2.78.2",
27+
"version": "2.78.4",
2828
"commands": [
2929
"docfx"
3030
],
3131
"rollForward": false
32+
},
33+
"nerdbank.dotnetrepotools": {
34+
"version": "1.1.1",
35+
"commands": [
36+
"repo"
37+
],
38+
"rollForward": false
3239
}
3340
}
3441
}

.devcontainer/Dockerfile

Lines changed: 0 additions & 14 deletions
This file was deleted.

.devcontainer/devcontainer.json

Lines changed: 0 additions & 25 deletions
This file was deleted.

.github/actions/publish-artifacts/action.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,46 +14,46 @@ runs:
1414

1515
- name: 📢 Upload project.assets.json files
1616
if: always()
17-
uses: actions/upload-artifact@v4
17+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
1818
with:
1919
name: projectAssetsJson-${{ runner.os }}
2020
path: ${{ runner.temp }}/_artifacts/projectAssetsJson
2121
continue-on-error: true
2222
- name: 📢 Upload variables
23-
uses: actions/upload-artifact@v4
23+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
2424
with:
2525
name: variables-${{ runner.os }}
2626
path: ${{ runner.temp }}/_artifacts/Variables
2727
continue-on-error: true
2828
- name: 📢 Upload build_logs
2929
if: always()
30-
uses: actions/upload-artifact@v4
30+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
3131
with:
3232
name: build_logs-${{ runner.os }}
3333
path: ${{ runner.temp }}/_artifacts/build_logs
3434
continue-on-error: true
3535
- name: 📢 Upload testResults
3636
if: always()
37-
uses: actions/upload-artifact@v4
37+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
3838
with:
3939
name: testResults-${{ runner.os }}
4040
path: ${{ runner.temp }}/_artifacts/testResults
4141
continue-on-error: true
4242
- name: 📢 Upload coverageResults
4343
if: always()
44-
uses: actions/upload-artifact@v4
44+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
4545
with:
4646
name: coverageResults-${{ runner.os }}
4747
path: ${{ runner.temp }}/_artifacts/coverageResults
4848
continue-on-error: true
4949
- name: 📢 Upload symbols
50-
uses: actions/upload-artifact@v4
50+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
5151
with:
5252
name: symbols-${{ runner.os }}
5353
path: ${{ runner.temp }}/_artifacts/symbols
5454
continue-on-error: true
5555
- name: 📢 Upload deployables
56-
uses: actions/upload-artifact@v4
56+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
5757
with:
5858
name: deployables-${{ runner.os }}
5959
path: ${{ runner.temp }}/_artifacts/deployables

.github/copilot-instructions.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Copilot instructions for this repository
2+
3+
## High level guidance
4+
5+
* Review the `CONTRIBUTING.md` file for instructions to build and test the software.
6+
* Set the `NBGV_GitEngine` environment variable to `Disabled` before running any `dotnet` or `msbuild` commands.
7+
8+
## Software Design
9+
10+
* Design APIs to be highly testable, and all functionality should be tested.
11+
* Avoid introducing binary breaking changes in public APIs of projects under `src` unless their project files have `IsPackable` set to `false`.
12+
13+
## Testing
14+
15+
**IMPORTANT**: This repository uses Microsoft.Testing.Platform (MTP v2) with xunit v3. Traditional `--filter` syntax does NOT work. Use the options below instead.
16+
17+
* 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 `.Tests` suffix.
18+
* Tests use xunit v3 with Microsoft.Testing.Platform (MTP v2). Traditional VSTest `--filter` syntax does NOT work.
19+
* Some tests are known to be unstable. When running tests, you should skip the unstable ones by using `-- --filter-not-trait "FailsInCloudTest=true"`.
20+
21+
### Running Tests
22+
23+
**Run all tests**:
24+
```bash
25+
dotnet test --no-build -c Release
26+
```
27+
28+
**Run tests for a specific test project**:
29+
```bash
30+
dotnet test --project test/Library.Tests/Library.Tests.csproj --no-build -c Release
31+
```
32+
33+
**Run a single test method**:
34+
```bash
35+
dotnet test --project test/Library.Tests/Library.Tests.csproj --no-build -c Release -- --filter-method ClassName.MethodName
36+
```
37+
38+
**Run all tests in a test class**:
39+
```bash
40+
dotnet test --project test/Library.Tests/Library.Tests.csproj --no-build -c Release -- --filter-class ClassName
41+
```
42+
43+
**Run tests with wildcard matching** (supports wildcards at beginning and/or end):
44+
```bash
45+
dotnet test --project test/Library.Tests/Library.Tests.csproj --no-build -c Release -- --filter-method "*Pattern*"
46+
```
47+
48+
**Run tests with a specific trait** (equivalent to category filtering):
49+
```bash
50+
dotnet test --project test/Library.Tests/Library.Tests.csproj --no-build -c Release -- --filter-trait "TraitName=value"
51+
```
52+
53+
**Exclude tests with a specific trait** (skip unstable tests):
54+
```bash
55+
dotnet test --project test/Library.Tests/Library.Tests.csproj --no-build -c Release -- --filter-not-trait "TestCategory=FailsInCloudTest"
56+
```
57+
58+
**Run tests for a specific framework only**:
59+
```bash
60+
dotnet test --project test/Library.Tests/Library.Tests.csproj --no-build -c Release --framework net9.0
61+
```
62+
63+
**List all available tests without running them**:
64+
```bash
65+
cd test/Library.Tests
66+
dotnet run --no-build -c Release --framework net9.0 -- --list-tests
67+
```
68+
69+
**Key points about test filtering with MTP v2 / xunit v3**:
70+
- Options after `--` are passed to the test runner, not to `dotnet test`
71+
- Use `--filter-method`, `--filter-class`, `--filter-namespace` for simple filtering
72+
- Use `--filter-trait` and `--filter-not-trait` for trait-based filtering (replaces `--filter "TestCategory=..."`)
73+
- Traditional VSTest `--filter` expressions do NOT work
74+
- Wildcards `*` are supported at the beginning and/or end of filter values
75+
- Multiple simple filters of the same type use OR logic, different types combine with AND
76+
- See `--help` for query filter language for advanced scenarios
77+
78+
## Coding style
79+
80+
* Honor StyleCop rules and fix any reported build warnings *after* getting tests to pass.
81+
* In C# files, use namespace *statements* instead of namespace *blocks* for all new files.
82+
* Add API doc comments to all new public and internal members.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Template release notes
2+
3+
This file will describe significant changes in Library.Template as they are introduced, especially if they require special consideration when merging updates into existing repos.
4+
This file is referenced by update-library-template.prompt.md and should remain in place to facilitate future merges, whether done manually or by AI.
5+
6+
## Solution rename
7+
8+
Never leave a Library.slnx file in the repository.
9+
You might even see one there even though this particular merge didn't bring it in.
10+
This can be an artifact of having renamed Library.sln to Library.slnx in the template repo, but ultimately the receiving repo should have only one .sln or .slnx file, with a better name than `Library`.
11+
Delete any `Library.slnx` that you see.
12+
Migrate an `.sln` in the repo root to `.slnx` using this command:
13+
14+
```ps1
15+
dotnet solution EXISTING.sln migrate
16+
```
17+
18+
This will create an EXISTING.slnx file. `git add` that file, then `git rm` the old `.sln` file.
19+
Sometimes a repo will reference the sln filename in a script or doc somewhere.
20+
Search the repo for such references and update them to the slnx file.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---
2+
description: Merges the latest Library.Template into this repo (at position of HEAD) and resolves conflicts.
3+
---
4+
5+
# Instructions
6+
7+
1. Run `tools/MergeFrom-Template.ps1`
8+
2. Resolve merge conflicts, taking into account conflict resolution policy below.
9+
3. Validate the changes, as described in the validation section below.
10+
4. Committing your changes (if applicable).
11+
12+
## Conflict resolution policy
13+
14+
There may be special notes in `.github/prompts/template-release-notes.md` that describe special considerations for certain files or scenarios to help you resolve conflicts appropriately.
15+
Always refer to that file before proceeding.
16+
In particular, focus on the *incoming* part of the file, since it represents the changes from the Library.Template that you are merging into your repo.
17+
18+
Also consider that some repos choose to reject certain Library.Template patterns.
19+
For example the template uses MTPv2 for test projects, but a repo might have chosen not to adopt that.
20+
When resolving merge conflicts, consider whether it looks like the relevant code file is older than it should be given the changes the template is bringing in.
21+
Ask the user when in doubt as to whether the conflict should be resolved in favor of 'catching up' with the template or keeping the current changes.
22+
23+
Use #runSubagent to analyze and resolve merge conflicts across files in parallel.
24+
25+
### Keep Current files
26+
27+
Conflicts in the following files should always be resolved by keeping the current version (i.e. discard incoming changes):
28+
29+
* README.md
30+
31+
### Deleted files
32+
33+
Very typically, when the incoming change is to a file that was deleted locally, the correct resolution is to re-delete the file.
34+
35+
In some cases however, the deleted file may have incoming changes that should be applied to other files.
36+
The `test/Library.Tests/Library.Tests.csproj` file is very typical of this.
37+
Changes to this file should very typically be applied to any and all test projects in the repo.
38+
You are responsible for doing this in addition to re-deleting this template file.
39+
40+
## Validation
41+
42+
Validate the merge result (after resolving any conflicts, if applicable).
43+
Use #runSubagent for each step.
44+
45+
1. Verify that `dotnet restore` succeeds. Fix any issues that come up.
46+
2. Verify that `dotnet build` succeeds.
47+
3. Verify that tests succeed by running `tools/dotnet-test-cloud.ps1`.
48+
49+
While these validations are described using `dotnet` CLI commands, some repos require using full msbuild.exe.
50+
You can detect this by checking the `azure-pipelines/dotnet.yml` or `.github/workflows/build.yml` files for use of one or the other tool.
51+
52+
You are *not* responsible for fixing issues that the merge did not cause.
53+
If validation fails for reasons that seem unrelated to the changes brought in by the merge, advise the user and ask how they'd like you to proceed.
54+
That said, sometimes merges will bring in SDK or dependency updates that can cause breaks in seemingly unrelated areas.
55+
In such cases, you should investigate and solve the issues as needed.
56+
57+
## Committing your changes
58+
59+
If you have to make any changes for validations to pass, consider whether they qualify as a bad merge conflict resolution or more of a novel change that you're making to work with the Library.Template update.
60+
Merge conflict resolution fixes ideally get amended into the merge commit, while novel changes would go into a novel commit after the merge commit.
61+
62+
Always author your commits using `git commit --author "🤖 Copilot <no-reply@github.com>"` (and possibly other parameters).
63+
Describe the nature of the merge conflicts you encountered and how you resolved them in your commit message.
64+
65+
Later, if asked to review pull request validation breaks, always author a fresh commit with each fix that you push, unless the user directs you to do otherwise.

.github/renovate.json

Lines changed: 13 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,27 @@
11
{
22
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
3-
"extends": ["config:recommended"],
4-
"semanticCommits": "disabled",
5-
"labels": ["dependencies"],
3+
"extends": [
4+
"github>microsoft/vs-renovate-presets:microbuild",
5+
"github>microsoft/vs-renovate-presets:vs_main_dependencies",
6+
"github>microsoft/vs-renovate-presets:dotnet_packages_LTS",
7+
"github>microsoft/vs-renovate-presets:xunitv2"
8+
],
69
"packageRules": [
710
{
8-
"matchPackageNames": ["nbgv", "nerdbank.gitversioning"],
9-
"groupName": "nbgv and nerdbank.gitversioning updates"
10-
},
11-
{
12-
"matchPackageNames": ["xunit*"],
13-
"groupName": "xunit"
14-
},
15-
{
16-
"matchPackageNames": ["xunit.runner.visualstudio"],
17-
"allowedVersions": "<3.0"
18-
},
19-
{
20-
"matchPackageNames": ["xunit.combinatorial"],
21-
"allowedVersions": "<2.0"
22-
},
23-
{
24-
"matchDatasources": ["dotnet-version", "docker"],
25-
"matchDepNames": ["dotnet-sdk", "mcr.microsoft.com/dotnet/sdk"],
26-
"groupName": "Dockerfile and global.json updates"
27-
},
28-
{
29-
"matchPackageNames": ["*"],
30-
"allowedVersions": "!/-g[a-f0-9]+$/"
31-
},
32-
{
33-
"matchPackageNames": [
34-
"System.Collections.Immutable",
35-
"System.Composition*",
36-
"System.Diagnostics.DiagnosticSource",
37-
"System.IO.Pipelines",
38-
"System.Reflection.Metadata",
39-
"System.Text.Json",
40-
"System.Threading.Tasks.Dataflow",
41-
"Microsoft.Bcl.AsyncInterfaces"
42-
],
43-
"allowedVersions": "<9.0",
44-
"groupName": "Included in .NET runtime"
45-
},
46-
{
47-
"matchPackageNames": ["Microsoft.VisualStudio.Internal.MicroBuild*"],
48-
"groupName": "microbuild"
49-
},
50-
{
51-
"matchPackageNames": ["Microsoft.VisualStudio.*"],
52-
"groupName": "Visual Studio SDK"
53-
},
54-
{
55-
"matchPackageNames": ["Microsoft.VisualStudio.*"],
56-
"matchUpdateTypes": ["patch"],
57-
"enabled": false
58-
},
59-
{
60-
"matchJsonata": [ "sharedVariableName='CodeAnalysisVersion'" ],
11+
"matchJsonata": ["sharedVariableName='CodeAnalysisVersion'"],
6112
"enabled": false
6213
}
6314
],
6415
"customManagers": [
6516
{
6617
"customType": "regex",
6718
"datasourceTemplate": "nuget",
68-
"fileMatch": ["test/Microsoft.VisualStudio.Threading.Analyzers.Tests/Helpers/ReferencesHelper.cs"],
69-
"matchStrings": ["PackageIdentity\\(\"(?<packageName>[^\"]+)\", \"(?<currentValue>[^\"]+)\"\\)"]
19+
"managerFilePatterns": [
20+
"test/Microsoft.VisualStudio.Threading.Analyzers.Tests/Helpers/ReferencesHelper.cs"
21+
],
22+
"matchStrings": [
23+
"PackageIdentity\\(\"(?<packageName>[^\"]+)\", \"(?<currentValue>[^\"]+)\"\\)"
24+
]
7025
}
7126
]
7227
}

0 commit comments

Comments
 (0)