Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
181 commits
Select commit Hold shift + click to select a range
0ec755f
Don't check npmjs.com doc links
AArnott Sep 26, 2025
04923ff
Add dotnet-tools.json to Solution Items
AArnott Sep 26, 2025
0b8462e
Skip testing get.dot.net links
AArnott Sep 26, 2025
a0fe97a
Update nbgv and nerdbank.gitversioning updates to 3.8.118 (#416)
renovate[bot] Sep 26, 2025
0983188
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Sep 26, 2025
234e34d
Switch to NuGet Trusted Publishing
AArnott Sep 27, 2025
ac2e02d
Merge branch 'main' into microbuild
AArnott Sep 27, 2025
e574cb5
Update xunit (#417)
renovate[bot] Sep 28, 2025
8712b0e
Update dependency dotnet-coverage to v18 (#419)
renovate[bot] Sep 29, 2025
11ec88f
Update mcr.microsoft.com/dotnet/sdk:9.0.305-noble Docker digest to 8a…
renovate[bot] Oct 1, 2025
86e8c41
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Oct 1, 2025
86903f8
Drop devcontainer folder from microbuild repos
AArnott Oct 1, 2025
97119ef
Update dependency Microsoft.NET.Test.Sdk to v18 (#422)
renovate[bot] Oct 2, 2025
870263b
Update mcr.microsoft.com/dotnet/sdk:9.0.305-noble Docker digest to 9a…
renovate[bot] Oct 2, 2025
0bb97cc
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Oct 7, 2025
184e741
Add `repo` command as a CLI tool
AArnott Oct 7, 2025
705966a
Update dependency dotnet-coverage to v18.1.0
renovate[bot] Oct 8, 2025
253d3ea
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Oct 8, 2025
217b879
Activate CFSClean network isolation policy
AArnott Oct 13, 2025
479a191
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Oct 15, 2025
461d00f
Update Dockerfile and global.json updates to v9.0.306
renovate[bot] Oct 15, 2025
3f2ca05
Update InsertJsonValues to handle folders (#391)
pieandcakes Oct 16, 2025
206b88c
Update dependency powershell to v7.5.4 (#427)
renovate[bot] Oct 16, 2025
f072045
Update mcr.microsoft.com/dotnet/sdk:9.0.306-noble Docker digest to d8…
renovate[bot] Oct 17, 2025
03563e4
Move `GitHubRelease` task to a release job
AArnott Oct 20, 2025
91b0ec1
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Oct 21, 2025
a880a38
Drop EnableOptProf parameter where it is unused
AArnott Oct 22, 2025
a16d3f4
Add SBOM to `deployables` pipeline artifact
AArnott Oct 22, 2025
f3393ad
Bump MicroBuildVersion to 2.0.208
AArnott Oct 23, 2025
dd97dca
Fix artifact publishing failures due to prior failed attempts
AArnott Oct 23, 2025
9389c48
Switch from sln to slnx
AArnott Oct 23, 2025
2ce88f7
Merge branch 'main' into microbuild
AArnott Oct 23, 2025
68801e8
Clarify that symbols should be only 1st party
AArnott Oct 23, 2025
d1ffba2
Fix template expansion after slnx rename
AArnott Oct 24, 2025
6bcf345
Merge branch 'main' into microbuild
AArnott Oct 24, 2025
b725dee
Another template expansion fix
AArnott Oct 24, 2025
ffcd611
Merge branch 'main' into microbuild
AArnott Oct 24, 2025
cbf20ad
Update dependency docfx to v2.78.4 (#429)
renovate[bot] Oct 24, 2025
4ee5904
Update GitHub Artifact Actions
renovate[bot] Oct 25, 2025
9562677
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Oct 28, 2025
20dc055
Increase retry count on NOTICE task failure to 10
sandyarmstrong Oct 29, 2025
a75ec4b
Merge pull request #431 from sandyarmstrong/patch-1
AArnott Oct 29, 2025
fe333c1
Update dependency xunit.v3 to 3.2.0
renovate[bot] Nov 3, 2025
ccb8e49
Update nbgv and nerdbank.gitversioning updates to 3.9.50
renovate[bot] Nov 5, 2025
26a3acc
Fix variable persistence when value includes a single quote
AArnott Nov 5, 2025
df1fdd1
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Nov 5, 2025
217de25
Merge remote-tracking branch 'refs/remotes/origin/microbuild' into mi…
AArnott Nov 5, 2025
17d786e
Drop redundant condition from YAML
AArnott Nov 8, 2025
d6be5cf
Merge pull request 435 from trevors20/dev/trevors/microbuild/updatein…
trevors20 Nov 10, 2025
74d3a45
Update dependency Microsoft.NET.Test.Sdk to 18.0.1
renovate[bot] Nov 11, 2025
aaccf73
Build with the .NET 10 SDK
AArnott Nov 11, 2025
adb7870
Adapt to breaking .NET 10 SDK change
AArnott Nov 11, 2025
4a6f641
Fix ARM64 detection on macOS
AArnott Nov 12, 2025
00cdc91
Build with the .NET 10 SDK (#439)
AArnott Nov 12, 2025
75d1bbf
Merge remote-tracking branch 'origin/main' into main-to-microbuild
AArnott Nov 12, 2025
e1aa37c
Pin mcr.microsoft.com/dotnet/sdk Docker tag to c7445f1
renovate[bot] Nov 12, 2025
5ff2573
Merge pull request #440 from AArnott/main-to-microbuild
AArnott Nov 12, 2025
7eeb51d
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Nov 12, 2025
ed20107
Bump C# language version to 14
AArnott Nov 12, 2025
af0a762
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Nov 12, 2025
c8fa888
Drop `auto-insertion` tag handling
AArnott Nov 17, 2025
e95eb88
Update actions/checkout digest to 93cb6ef
renovate[bot] Nov 17, 2025
91ee72e
Replace hard-coded codecov_token with secrets/variables
AArnott Nov 17, 2025
028d93f
Merge branch 'main' into microbuild
AArnott Nov 17, 2025
32a3cdd
Update actions/checkout action to v6 (443)
renovate[bot] Nov 20, 2025
585a2df
Use official URLs in Install-DotNetSdk.ps1
akoeplinger Nov 21, 2025
7357a05
Merge pull request 444 from akoeplinger:patch-1
AArnott Nov 22, 2025
1439223
Update dependency xunit.v3 to 3.2.1 (445)
renovate[bot] Nov 29, 2025
923e36d
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Nov 29, 2025
5a412a0
Switch out our own OptProf profiling pipeline for the VS one
AArnott Dec 2, 2025
a23eb8d
Merge pull request 447 to Build on newer agents
AArnott Dec 2, 2025
1c972c1
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Dec 2, 2025
064bff7
Update actions/checkout digest to 8e8c483 (448)
renovate[bot] Dec 2, 2025
35aa4d1
Update actions/checkout digest
renovate[bot] Dec 2, 2025
498462f
Build on VS2026 agents
AArnott Dec 2, 2025
26355f2
Better pinning of GitHub Actions
AArnott Dec 2, 2025
76b0a4a
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Dec 2, 2025
5ded58b
Update actions/checkout action to v6.0.1 (449)
renovate[bot] Dec 2, 2025
4548135
Exclude `vs-insertion-script.ps1` from signing requirement
AArnott Dec 2, 2025
9a6d745
Update actions/deploy-pages action to v4.0.5 (450)
renovate[bot] Dec 2, 2025
5beff92
Skip SBOM generation for the vs-insertion pipeline
AArnott Dec 3, 2025
89853ca
Remove stray backtick from README
AArnott Dec 3, 2025
4001958
Update NuGet/login action to v1.1.0 (451)
renovate[bot] Dec 3, 2025
352ae49
Merge branch 'validate/vs2026' into microbuild
AArnott Dec 3, 2025
a37c555
Merge remote-tracking branch 'origin/centralized-optprof' into microb…
AArnott Dec 4, 2025
b09c6e5
Remove vs-threading specific change
AArnott Dec 4, 2025
fe54aae
Remove stale comment
AArnott Dec 4, 2025
397e3e9
Update actions/checkout action to v6.0.1
renovate[bot] Dec 4, 2025
c2ee756
Fix alignment of `sbom` parameter
AArnott Dec 4, 2025
32b482a
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Dec 4, 2025
abb8f74
Fix template expansion
AArnott Dec 5, 2025
fddc013
Opt into Microsoft Testing Platform (MTP) (#452)
AArnott Dec 7, 2025
f761f0f
Push to nuget.org before pushing to github release
AArnott Dec 7, 2025
e403560
Update to MTP v2 (#455)
AArnott Dec 7, 2025
a28d540
Update all MTP related packages at once (457)
AArnott Dec 7, 2025
f355f00
Fix test result publishing to AzDO (458)
AArnott Dec 7, 2025
3304d79
Update .NET SDK to v10.0.101 (#459)
renovate[bot] Dec 10, 2025
63de086
Drop package dependencies that MTP does not require
AArnott Dec 10, 2025
70e71e9
Merge pull request #460 from AArnott/dropOldDependencies
AArnott Dec 10, 2025
70980c3
Fix MTP test failure for MTP-incompatible projects under the test folder
AArnott Dec 10, 2025
07aab27
Merge remote-tracking branch 'origin/main' into microbuild_mtp
AArnott Dec 11, 2025
307d5e3
Fix testing regression from last commit
AArnott Dec 11, 2025
3eb31c2
Merge branch 'main' into microbuild_mtp
AArnott Dec 11, 2025
5c9d625
Adjust how we use IsTestProject
AArnott Dec 11, 2025
a352939
Merge branch 'main' into microbuild_mtp
AArnott Dec 11, 2025
762bd46
Expand applicability of extra args in `dotnet-test-cloud.ps1`
AArnott Dec 11, 2025
25c8c0d
Update becheran/mlc action to v1.1.0 (461)
renovate[bot] Dec 12, 2025
6dc6965
Update GitHub Artifact Actions (462)
renovate[bot] Dec 13, 2025
36de3c8
Update becheran/mlc action to v1.2.0 (463)
renovate[bot] Dec 14, 2025
6b1ad3c
Preserve exit codes better and organize switches
AArnott Dec 20, 2025
86545b6
Skip native binary PDB conversion
Charles-Gagnon Dec 28, 2025
57248c7
Fix case sensitivity in dotnet-test-cloud
AArnott Jan 5, 2026
a385e05
Bump code coverage package/tool
AArnott Jan 5, 2026
961b025
Update becheran/mlc action to v1.2.0
AArnott Jan 5, 2026
cb87045
Merge pull request #467 from AArnott/fixCaseSensitivity
AArnott Jan 5, 2026
c3644df
Merge pull request #468 from AArnott/bumpDeps
AArnott Jan 5, 2026
94ab8ac
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Jan 7, 2026
c7b72fb
Update dependency Microsoft.Testing.Extensions.CodeCoverage to 18.3.2
renovate[bot] Jan 9, 2026
9870d10
Update dependency dotnet-coverage to v18.3.2 (465)
renovate[bot] Jan 12, 2026
53f97d6
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Jan 12, 2026
82fb1dd
Merge pull request 466 from AArnott/renovate/microsoft-testing-platform
AArnott Jan 12, 2026
c35e57f
Merge pull request 469 from AArnott/copilot/port-change-to-library-te…
AArnott Jan 12, 2026
169c608
Fix copilot instructions regarding test project suffix
AArnott Jan 12, 2026
3ee226c
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Jan 13, 2026
e989a4c
Update .NET SDK to v10.0.102 (471)
renovate[bot] Jan 14, 2026
bcc0151
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Jan 14, 2026
901b22d
Fix FailsInCloudTest filter after MTPv2 migration
AArnott Jan 16, 2026
ffbb599
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Jan 16, 2026
918803f
Update dependency xunit.v3.mtp-v2 to 3.2.2 (472)
renovate[bot] Jan 24, 2026
689415e
Update actions/checkout action to v6.0.2 (#473)
renovate[bot] Jan 24, 2026
a5adcc7
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Jan 27, 2026
8b62459
Update Microsoft Testing Platform (475)
renovate[bot] Feb 3, 2026
11e9554
Update dependency dotnet-coverage to v18.4.1 (474)
renovate[bot] Feb 3, 2026
4121aa3
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Feb 3, 2026
d10df4b
Update mcr.microsoft.com/dotnet/sdk:10.0.102 Docker digest to 6ba533c…
renovate[bot] Feb 5, 2026
c8b42f2
Add Copilot prompt to automate Library.Template updates
AArnott Feb 9, 2026
7a476f4
Merge branch 'main' into microbuild
AArnott Feb 9, 2026
98ba7d5
Fix test filter
AArnott Feb 9, 2026
239883a
Merge branch 'main' into microbuild
AArnott Feb 9, 2026
1632266
Update actions/checkout action to v6.0.2
AArnott Feb 9, 2026
8f317e6
Improve library.template merge AI prompt
AArnott Feb 10, 2026
3d4938d
Merge branch 'main' into microbuild
AArnott Feb 10, 2026
ca9f8e9
Update Dockerfile and global.json updates to v10.0.103 (477)
renovate[bot] Feb 11, 2026
a3cce81
Merge branch 'main' into microbuild
AArnott Feb 11, 2026
467ef6d
Explain how to migrate sln to slnx
AArnott Feb 11, 2026
6260fa6
Merge branch 'main' into microbuild
AArnott Feb 11, 2026
04993f6
Update mcr.microsoft.com/dotnet/sdk:10.0.103 Docker digest to 0a506ab…
renovate[bot] Feb 11, 2026
54a80db
Update dependency nerdbank.dotnetrepotools to v1.1.1 (479)
renovate[bot] Feb 12, 2026
ae01994
Merge branch 'main' into microbuild
AArnott Feb 17, 2026
41493c6
Use forward slash in md files
AArnott Feb 17, 2026
6dfee58
Touch-up custom prompt
AArnott Feb 17, 2026
a2a0236
Merge branch 'main' into microbuild
AArnott Feb 18, 2026
4d1026d
Update network isolation policy
AArnott Feb 18, 2026
3afde79
Merge pull request #464 from Charles-Gagnon/patch-1
AArnott Feb 21, 2026
6103b65
Only disable NBGV_GitEngine when necessary
AArnott Feb 23, 2026
63f8e20
Merge branch 'main' into microbuild
AArnott Feb 23, 2026
c04c3a8
Merge pull request 481 from AArnott/renovate/docfx-2.x
renovate[bot] Feb 24, 2026
f4c9c81
Update mcr.microsoft.com/dotnet/sdk:10.0.103 Docker digest to e362a8d…
renovate[bot] Feb 24, 2026
a9b48e1
Update dependency dotnet-coverage to v18.5.1 (483)
renovate[bot] Feb 27, 2026
8242097
Update dependency Microsoft.Testing.Extensions.CodeCoverage to 18.5.1…
renovate[bot] Feb 27, 2026
2960fc5
Update GitHub Artifact Actions (482)
renovate[bot] Feb 27, 2026
582d263
Bump DotNetRepoTools to 1.2.1
AArnott Feb 28, 2026
e11be84
Merge branch 'main' into microbuild
AArnott Feb 28, 2026
8f5f090
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Mar 2, 2026
66c7b5d
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Mar 5, 2026
85514fa
Update dependency Microsoft.Testing.Extensions.CodeCoverage to 18.5.2…
renovate[bot] Mar 5, 2026
ebc3570
Update dependency dotnet-coverage to v18.5.2 (485)
renovate[bot] Mar 5, 2026
e4a2493
Fix warning message
AArnott Mar 6, 2026
41b6a21
Fix Prime-ForCopilot.ps1 when invoked from outside the repo
AArnott Mar 6, 2026
2e49a12
Use forward slashes consistently in docs
AArnott Mar 6, 2026
62a1ccc
Avoid assigning to an unused variable
AArnott Mar 6, 2026
94866fa
Merge branch 'main' into microbuild
AArnott Mar 6, 2026
0a7200a
Avoid returning early while preparing legacy symbols
AArnott Mar 6, 2026
7d4a9ec
Update Dockerfile and global.json updates to v10.0.200 (487)
renovate[bot] Mar 11, 2026
c7a68ba
Merge remote-tracking branch 'origin/main' into microbuild
AArnott Mar 11, 2026
08f8e1b
Merge remote-tracking branch 'libtemplate/microbuild' into library.te…
richardstanton Mar 25, 2026
4ca012a
Restore renovate.json deleted in past merge
richardstanton Mar 25, 2026
0d47368
Move repo-specific merge notes to separate file to avoid template con…
richardstanton Mar 25, 2026
4f355fa
Update test project to use xunit.v3.mtp-v2 per template changes
richardstanton Mar 25, 2026
4ce47bd
Update copilot instructions to reference actual test project and fram…
richardstanton Mar 25, 2026
42e4afc
Remove docs_validate workflow
richardstanton Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,39 @@
"isRoot": true,
"tools": {
"powershell": {
"version": "7.5.3",
"version": "7.5.4",
"commands": [
"pwsh"
],
"rollForward": false
},
"dotnet-coverage": {
"version": "17.14.2",
"version": "18.5.2",
"commands": [
"dotnet-coverage"
],
"rollForward": false
},
"nbgv": {
"version": "3.7.115",
"version": "3.9.50",
"commands": [
"nbgv"
],
"rollForward": false
},
"docfx": {
"version": "2.78.3",
"version": "2.78.5",
"commands": [
"docfx"
],
"rollForward": false
},
"nerdbank.dotnetrepotools": {
"version": "1.2.1",
"commands": [
"repo"
],
"rollForward": false
}
}
}
14 changes: 0 additions & 14 deletions .devcontainer/Dockerfile

This file was deleted.

25 changes: 0 additions & 25 deletions .devcontainer/devcontainer.json

This file was deleted.

5 changes: 5 additions & 0 deletions .github/Prime-ForCopilot.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
if ((git -C $PSScriptRoot rev-parse --is-shallow-repository) -eq 'true')
{
Write-Host "Shallow clone detected, disabling NBGV Git engine so the build can succeed."
$env:NBGV_GitEngine='Disabled'
}
68 changes: 64 additions & 4 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
## 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.
* Run the `.github/Prime-ForCopilot.ps1` script (once) before running any `dotnet` or `msbuild` commands.
If you see any build errors about not finding git objects or a shallow clone, it may be time to run this script again.

## Software Design

Expand All @@ -12,9 +13,68 @@

## 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.
* Some tests are known to be unstable. When running tests, you should skip the unstable ones by running `dotnet test --filter "TestCategory!=FailsInCloudTest"`.
**IMPORTANT**: This repository uses Microsoft.Testing.Platform (MTP v2) with xunit v3. Traditional `--filter` syntax does NOT work. Use the options below instead.

* 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.
* Tests use xunit v3 with Microsoft.Testing.Platform (MTP v2). Traditional VSTest `--filter` syntax does NOT work.
* Some tests are known to be unstable. When running tests, you should skip the unstable ones by using `-- --filter-not-trait "FailsInCloudTest=true"`.

### Running Tests

**Run all tests**:
```bash
dotnet test --no-build -c Release
```

**Run tests for a specific test project**:
```bash
dotnet test --project test/Microsoft.VisualStudio.SolutionPersistence.Tests/Microsoft.VisualStudio.SolutionPersistence.Tests.csproj --no-build -c Release
```

**Run a single test method**:
```bash
dotnet test --project test/Microsoft.VisualStudio.SolutionPersistence.Tests/Microsoft.VisualStudio.SolutionPersistence.Tests.csproj --no-build -c Release -- --filter-method ClassName.MethodName
```

**Run all tests in a test class**:
```bash
dotnet test --project test/Microsoft.VisualStudio.SolutionPersistence.Tests/Microsoft.VisualStudio.SolutionPersistence.Tests.csproj --no-build -c Release -- --filter-class ClassName
```

**Run tests with wildcard matching** (supports wildcards at beginning and/or end):
```bash
dotnet test --project test/Microsoft.VisualStudio.SolutionPersistence.Tests/Microsoft.VisualStudio.SolutionPersistence.Tests.csproj --no-build -c Release -- --filter-method "*Pattern*"
```

**Run tests with a specific trait** (equivalent to category filtering):
```bash
dotnet test --project test/Microsoft.VisualStudio.SolutionPersistence.Tests/Microsoft.VisualStudio.SolutionPersistence.Tests.csproj --no-build -c Release -- --filter-trait "TraitName=value"
```

**Exclude tests with a specific trait** (skip unstable tests):
```bash
dotnet test --project test/Microsoft.VisualStudio.SolutionPersistence.Tests/Microsoft.VisualStudio.SolutionPersistence.Tests.csproj --no-build -c Release -- --filter-not-trait "TestCategory=FailsInCloudTest"
```

**Run tests for a specific framework only**:
```bash
dotnet test --project test/Microsoft.VisualStudio.SolutionPersistence.Tests/Microsoft.VisualStudio.SolutionPersistence.Tests.csproj --no-build -c Release --framework net8.0
```

**List all available tests without running them**:
```bash
cd test/Microsoft.VisualStudio.SolutionPersistence.Tests
dotnet run --no-build -c Release --framework net8.0 -- --list-tests
```

**Key points about test filtering with MTP v2 / xunit v3**:
- Options after `--` are passed to the test runner, not to `dotnet test`
- Use `--filter-method`, `--filter-class`, `--filter-namespace` for simple filtering
- Use `--filter-trait` and `--filter-not-trait` for trait-based filtering (replaces `--filter "TestCategory=..."`)
- Traditional VSTest `--filter` expressions do NOT work
- Wildcards `*` are supported at the beginning and/or end of filter values
- Multiple simple filters of the same type use OR logic, different types combine with AND
- See `--help` for query filter language for advanced scenarios

## Coding style

Expand Down
51 changes: 51 additions & 0 deletions .github/prompts/repo-merge-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Repo-specific merge notes for vs-solutionpersistence

This file contains notes specific to this repo that help resolve Library.Template merge conflicts.
It is referenced by `update-library-template.prompt.md` and kept separate to avoid merge conflicts with template-owned files.

## Files deleted locally that the template will try to update

These show as "deleted by us" conflicts. Here are the known cases:

* **GitHub Actions CI files** (`.github/workflows/docs.yml`, `.github/workflows/docs_validate.yml`, `.github/actions/publish-artifacts/action.yaml`): This repo uses Azure Pipelines, not GitHub Actions for CI/CD. Keep these deleted.
* **`.github/workflows/libtemplate-update.yml`**: Automatic Library.Template merge workflow. Should be **kept/restored** — it was mistakenly deleted in a past merge and is useful infrastructure.
* **`.github/renovate.json`**: Dependency update automation. Should be kept/restored if missing.
* **`test/Library.Tests/Library.Tests.csproj`**: Template's generic test project. Re-delete it, but apply any relevant changes to `test/Microsoft.VisualStudio.SolutionPersistence.Tests/`.

## `azure-pipelines/build.yml`

The template includes `expand-template.yml` references in build.yml (Windows, Linux, macOS jobs).
This repo is not a template and does not have `Expand-Template.ps1`, so always remove these lines after accepting template changes:
```yaml
- template: expand-template.yml
```

## `azure-pipelines/vs-insertion.yml`

The template has a placeholder for `InsertionReviewers`. This repo customizes it to include the team:
```yaml
InsertionReviewers: $(Build.RequestedFor),VS Core - Solution Experience
```
When merging, keep the team name but accept any other new properties the template adds (e.g. `CustomScriptExecutionCommand`).

## Researching template changes

When a conflict is hard to understand, check the Library.Template commit history for the specific file:
```
https://github.com/aarnott/Library.Template/commits/microbuild/<path/to/file>
```
This shows *why* changes were made and helps decide whether to accept them.
You can also compare the template's full current version of a file:
```bash
git show libtemplate/microbuild:<path/to/file>
```

## History of past merge mistakes

The commit `2fb9c3d` ("Remove github actions", Feb 2025) bulk-deleted all GitHub workflow files.
Some were genuinely unused (GitHub Actions CI, GitHub Pages deployment), but it also deleted useful automation:
* `.github/workflows/libtemplate-update.yml` — Automatic weekly Library.Template merge PRs
* `.github/workflows/docs_validate.yml` — Docfx link validation
* `.github/renovate.json` — Renovate bot dependency updates

These have been restored. If they show up as conflicts again in future merges, keep them.
20 changes: 20 additions & 0 deletions .github/prompts/template-release-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Template release notes

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.
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.

## Solution rename

Never leave a Library.slnx file in the repository.
You might even see one there even though this particular merge didn't bring it in.
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`.
Delete any `Library.slnx` that you see.
Migrate an `.sln` in the repo root to `.slnx` using this command:

```ps1
dotnet solution EXISTING.sln migrate
```

This will create an EXISTING.slnx file. `git add` that file, then `git rm` the old `.sln` file.
Sometimes a repo will reference the sln filename in a script or doc somewhere.
Search the repo for such references and update them to the slnx file.
76 changes: 76 additions & 0 deletions .github/prompts/update-library-template.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
description: Merges the latest Library.Template into this repo (at position of HEAD) and resolves conflicts.
---

# Instructions

1. Run `tools/MergeFrom-Template.ps1`
2. Resolve merge conflicts, taking into account conflict resolution policy below.
3. Validate the changes, as described in the validation section below.
4. Committing your changes (if applicable).

## Conflict resolution policy

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.
Always refer to that file before proceeding.
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.
Also refer to `.github/prompts/repo-merge-notes.md` for notes specific to this repo (e.g. which deleted files to keep, which customizations to preserve).
Also consider that some repos choose to reject certain Library.Template patterns.
For example the template uses MTPv2 for test projects, but a repo might have chosen not to adopt that.
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.
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.

Use #runSubagent to analyze and resolve merge conflicts across files in parallel.

### Keep Current files

Conflicts in the following files should always be resolved by keeping the current version (i.e. discard incoming changes):

* README.md

### Deleted files

Very typically, when the incoming change is to a file that was deleted locally, the correct resolution is to re-delete the file.

In some cases however, the deleted file may have incoming changes that should be applied to other files.
The `test/Library.Tests/Library.Tests.csproj` file is very typical of this.
Changes to this file should very typically be applied to any and all test projects in the repo.
You are responsible for doing this in addition to re-deleting this template file.

### Files deleted by the template

When the template deletes a file that exists locally, check the template's commit history to understand *why* it was removed.
Use the GitHub commit history page for the file (e.g. `https://github.com/aarnott/Library.Template/commits/microbuild/path/to/file`) to find the relevant commit.
If the template restructured or centralized the functionality (e.g. OptProf pipelines moved to a centralized VS pipeline), accept the deletion.
If the file contains repo-specific customizations not present in the template, keep it.

### Files deleted locally but updated by the template

These show as "deleted by us" conflicts. Refer to `.github/prompts/repo-merge-notes.md` for this repo's specific decisions on which files to keep or re-delete.

## Validation

Validate the merge result (after resolving any conflicts, if applicable).
Use #runSubagent for each step.

1. Verify that `dotnet restore` succeeds. Fix any issues that come up.
2. Verify that `dotnet build` succeeds.
3. Verify that tests succeed by running `tools/dotnet-test-cloud.ps1`.

While these validations are described using `dotnet` CLI commands, some repos require using full msbuild.exe.
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.

You are *not* responsible for fixing issues that the merge did not cause.
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.
That said, sometimes merges will bring in SDK or dependency updates that can cause breaks in seemingly unrelated areas.
In such cases, you should investigate and solve the issues as needed.

## Committing your changes

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.
Merge conflict resolution fixes ideally get amended into the merge commit, while novel changes would go into a novel commit after the merge commit.

Always author your commits using `git commit --author "🤖 Copilot <no-reply@github.com>"` (and possibly other parameters).
Describe the nature of the merge conflicts you encountered and how you resolved them in your commit message.

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.
8 changes: 8 additions & 0 deletions .github/renovate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"github>microsoft/vs-renovate-presets:microbuild",
"github>microsoft/vs-renovate-presets:vs_main_dependencies"
],
"packageRules": []
}
2 changes: 1 addition & 1 deletion .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: ⚙ Install prerequisites
Expand Down
Loading
Loading