Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
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
2450cb2
Merge the microbuild branch from https://github.com/aarnott/Library.T…
AArnott Nov 12, 2025
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
6 changes: 3 additions & 3 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"powershell": {
"version": "7.5.3",
"version": "7.5.4",
"commands": [
"pwsh"
],
Expand All @@ -17,14 +17,14 @@
"rollForward": false
},
"nbgv": {
"version": "3.8.118",
"version": "3.9.50",
"commands": [
"nbgv"
],
"rollForward": false
},
"docfx": {
"version": "2.78.3",
"version": "2.78.4",
"commands": [
"docfx"
],
Expand Down
14 changes: 7 additions & 7 deletions .github/actions/publish-artifacts/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,46 +14,46 @@ runs:

- name: 📢 Upload project.assets.json files
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: projectAssetsJson-${{ runner.os }}
path: ${{ runner.temp }}/_artifacts/projectAssetsJson
continue-on-error: true
- name: 📢 Upload variables
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: variables-${{ runner.os }}
path: ${{ runner.temp }}/_artifacts/Variables
continue-on-error: true
- name: 📢 Upload build_logs
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: build_logs-${{ runner.os }}
path: ${{ runner.temp }}/_artifacts/build_logs
continue-on-error: true
- name: 📢 Upload testResults
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: testResults-${{ runner.os }}
path: ${{ runner.temp }}/_artifacts/testResults
continue-on-error: true
- name: 📢 Upload coverageResults
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: coverageResults-${{ runner.os }}
path: ${{ runner.temp }}/_artifacts/coverageResults
continue-on-error: true
- name: 📢 Upload symbols
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: symbols-${{ runner.os }}
path: ${{ runner.temp }}/_artifacts/symbols
continue-on-error: true
- name: 📢 Upload deployables
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: deployables-${{ runner.os }}
path: ${{ runner.temp }}/_artifacts/deployables
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/docs_validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,3 @@ jobs:
shell: pwsh
- name: 📚 Verify docfx build
run: dotnet docfx docfx/docfx.json --warningsAsErrors --disableGitFeatures
if: runner.os == 'Linux'
3 changes: 2 additions & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<RestoreEnablePackagePruning>true</RestoreEnablePackagePruning>

<!-- https://learn.microsoft.com/en-us/dotnet/fundamentals/apicompat/package-validation/overview -->
<EnablePackageValidation>true</EnablePackageValidation>
Expand All @@ -40,7 +41,7 @@
</PropertyGroup>

<PropertyGroup>
<LangVersion Condition="'$(MSBuildProjectExtension)'=='.csproj'">13</LangVersion>
<LangVersion Condition="'$(MSBuildProjectExtension)'=='.csproj'">14</LangVersion>
<LangVersion Condition="'$(MSBuildProjectExtension)'=='.vbproj'">16.9</LangVersion>
</PropertyGroup>

Expand Down
6 changes: 3 additions & 3 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
<MicroBuildVersion>2.0.201</MicroBuildVersion>
<MicroBuildVersion>2.0.208</MicroBuildVersion>
<CodeAnalysisVersion>3.11.0</CodeAnalysisVersion>
<CodeAnalysisVersionForTests>4.13.0</CodeAnalysisVersionForTests>
<CodefixTestingVersion>1.1.2</CodefixTestingVersion>
Expand Down Expand Up @@ -48,7 +48,7 @@
<PackageVersion Update="Microsoft.CodeAnalysis.VisualBasic" Version="$(CodeAnalysisVersionForTests)" />
</ItemGroup>
<ItemGroup Label="Library.Template">
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageVersion Include="Microsoft.VisualStudio.Internal.MicroBuild.NonShipping" Version="$(MicroBuildVersion)" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5" />
<PackageVersion Include="xunit" Version="2.9.3" />
Expand All @@ -61,7 +61,7 @@
<GlobalPackageReference Include="DotNetAnalyzers.DocumentationAnalyzers" Version="1.0.0-beta.59" />
<GlobalPackageReference Include="Microsoft.VisualStudio.Internal.MicroBuild.VisualStudio" Version="$(MicroBuildVersion)" />
<!-- The condition works around https://github.com/dotnet/sdk/issues/44951 -->
<GlobalPackageReference Include="Nerdbank.GitVersioning" Version="3.8.118" Condition="!('$(TF_BUILD)'=='true' and '$(dotnetformat)'=='true')" />
<GlobalPackageReference Include="Nerdbank.GitVersioning" Version="3.9.50" Condition="!('$(TF_BUILD)'=='true' and '$(dotnetformat)'=='true')" />
<GlobalPackageReference Include="PolySharp" Version="1.15.0" />
<GlobalPackageReference Include="StyleCop.Analyzers.Unstable" Version="1.2.0.556" />
</ItemGroup>
Expand Down
4 changes: 4 additions & 0 deletions azure-pipelines/OptProf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ stages:
TeamEmail: $(TeamEmail)
SkipCreatePR: true
CustomScriptExecutionCommand: src\VSSDK\NuGet\AllowUnstablePackages.ps1
${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}:
ConnectedVSDropServiceName: 'VSEng-VSDrop-MI'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
- task: benjhuser.tfs-extensions-build-tasks.trigger-build-task.TriggerBuild@3
displayName: Trigger a new build of DD-CB-TestSignVS-devCI
inputs:
Expand Down
86 changes: 58 additions & 28 deletions azure-pipelines/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,17 @@ parameters:
- name: artifact_names
type: object
default:
- build_logs
- coverageResults
- deployables
- projectAssetsJson
- symbols
- testResults
- test_symbols
- Variables
- name: build_logs
- name: coverageResults
- name: deployables
sbomEnabled: true
- name: projectAssetsJson
- name: symbols
- name: testResults
testOnly: true
- name: test_symbols
testOnly: true
- name: Variables
# The Enable*Build parameters turn non-Windows agents on or off.
# Their default value should be based on whether the build and tests are expected/required to pass on that platform.
# Callers (e.g. Official.yml) *may* expose these parameters at queue-time in order to turn OFF optional agents.
Expand All @@ -57,6 +60,11 @@ parameters:
- name: Is1ESPT
type: boolean

# Indicates whether the 'official' 1ES PT templates are being used (as opposed to the unofficial ones).
- name: Is1ESPTOfficial
type: boolean
default: false

- name: RealSign
type: boolean
default: false
Expand Down Expand Up @@ -148,13 +156,21 @@ jobs:

outputParentDirectory: $(Build.ArtifactStagingDirectory)
outputs:
- ${{ each artifact_name in parameters.artifact_names }}:
- ${{ if or(ne(artifact_name, 'testResults'), parameters.RunTests) }}:
- ${{ each artifact in parameters.artifact_names }}:
- ${{ if or(ne(artifact.testOnly, 'true'), parameters.RunTests) }}:
- output: pipelineArtifact
displayName: 📢 Publish ${{ artifact_name }}-Windows
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact_name }}-Windows
artifactName: ${{ artifact_name }}-Windows
condition: succeededOrFailed()
displayName: 📢 Publish ${{ artifact.name }}-Windows
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact.name }}-Windows
artifactName: ${{ artifact.name }}-Windows
${{ if and(parameters.Is1ESPTOfficial, eq(artifact.sbomEnabled, 'true')) }}:
sbomEnabled: true
- output: pipelineArtifact
displayName: 📢 Publish ${{ artifact.name }}-Windows (for failed attempts)
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact.name }}-Windows
artifactName: ${{ artifact.name }}-Windows-$(System.PhaseAttempt)
${{ if and(parameters.Is1ESPTOfficial, eq(artifact.sbomEnabled, 'true')) }}:
sbomEnabled: true
condition: failed()
- output: pipelineArtifact
displayName: 📢 Publish VSInsertion-Windows
targetPath: $(Build.ArtifactStagingDirectory)/VSInsertion-Windows
Expand Down Expand Up @@ -191,7 +207,6 @@ jobs:
- template: microbuild.before.yml
parameters:
EnableLocalization: ${{ parameters.EnableLocalization }}
EnableOptProf: ${{ parameters.EnableOptProf }}
IsOptProf: ${{ parameters.IsOptProf }}
ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
RealSign: ${{ parameters.RealSign }}
Expand All @@ -212,7 +227,6 @@ jobs:
- ${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}:
- template: microbuild.after.yml
parameters:
EnableOptProf: ${{ parameters.EnableOptProf }}
IsOptProf: ${{ parameters.IsOptProf }}
SkipCodesignVerify: ${{ parameters.SkipCodesignVerify }}

Expand All @@ -230,13 +244,21 @@ jobs:
signWithProd: true
outputParentDirectory: $(Build.ArtifactStagingDirectory)
outputs:
- ${{ each artifact_name in parameters.artifact_names }}:
- ${{ if or(ne(artifact_name, 'testResults'), parameters.RunTests) }}:
- ${{ each artifact in parameters.artifact_names }}:
- ${{ if or(ne(artifact.testOnly, 'true'), parameters.RunTests) }}:
- output: pipelineArtifact
displayName: 📢 Publish ${{ artifact.name }}-Linux
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact.name }}-Linux
artifactName: ${{ artifact.name }}-Linux
${{ if and(parameters.Is1ESPTOfficial, eq(artifact.sbomEnabled, 'true')) }}:
sbomEnabled: true
- output: pipelineArtifact
displayName: 📢 Publish ${{ artifact_name }}-Linux
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact_name }}-Linux
artifactName: ${{ artifact_name }}-Linux
condition: succeededOrFailed()
displayName: 📢 Publish ${{ artifact.name }}-Linux (for failed attempts)
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact.name }}-Linux
artifactName: ${{ artifact.name }}-Linux-$(System.PhaseAttempt)
${{ if and(parameters.Is1ESPTOfficial, eq(artifact.sbomEnabled, 'true')) }}:
sbomEnabled: true
condition: failed()
steps:
- checkout: self
fetchDepth: 0 # avoid shallow clone so nbgv can do its work.
Expand Down Expand Up @@ -267,13 +289,21 @@ jobs:
signWithProd: true
outputParentDirectory: $(Build.ArtifactStagingDirectory)
outputs:
- ${{ each artifact_name in parameters.artifact_names }}:
- ${{ if or(ne(artifact_name, 'testResults'), parameters.RunTests) }}:
- ${{ each artifact in parameters.artifact_names }}:
- ${{ if or(ne(artifact.testOnly, 'true'), parameters.RunTests) }}:
- output: pipelineArtifact
displayName: 📢 Publish ${{ artifact.name }}-macOS
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact.name }}-macOS
artifactName: ${{ artifact.name }}-macOS
${{ if and(parameters.Is1ESPTOfficial, eq(artifact.sbomEnabled, 'true')) }}:
sbomEnabled: true
- output: pipelineArtifact
displayName: 📢 Publish ${{ artifact_name }}-macOS
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact_name }}-macOS
artifactName: ${{ artifact_name }}-macOS
condition: succeededOrFailed()
displayName: 📢 Publish ${{ artifact.name }}-macOS (for failed attempts)
targetPath: $(Build.ArtifactStagingDirectory)/${{ artifact.name }}-macOS
artifactName: ${{ artifact.name }}-macOS-$(System.PhaseAttempt)
${{ if and(parameters.Is1ESPTOfficial, eq(artifact.sbomEnabled, 'true')) }}:
sbomEnabled: true
condition: failed()
steps:
- checkout: self
fetchDepth: 0 # avoid shallow clone so nbgv can do its work.
Expand Down
3 changes: 0 additions & 3 deletions azure-pipelines/microbuild.after.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
parameters:
- name: EnableOptProf
type: boolean
default: false
- name: IsOptProf
type: boolean
default: false
Expand Down
5 changes: 1 addition & 4 deletions azure-pipelines/microbuild.before.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ parameters:
- name: EnableLocalization
type: boolean
default: false
- name: EnableOptProf
type: boolean
default: false
- name: IsOptProf
type: boolean
default: false
Expand All @@ -26,7 +23,7 @@ steps:
inputs:
outputfile: $(System.DefaultWorkingDirectory)/obj/NOTICE
outputformat: text
retryCountOnTaskFailure: 3 # fails when the cloud service is overloaded
retryCountOnTaskFailure: 10 # fails when the cloud service is overloaded
continueOnError: ${{ not(parameters.RealSign) }} # Tolerate failures when we're not building something that may ship.

- ${{ if parameters.IsOptProf }}:
Expand Down
1 change: 1 addition & 0 deletions azure-pipelines/official.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ extends:
- template: /azure-pipelines/build.yml@self
parameters:
Is1ESPT: true
Is1ESPTOfficial: true
RealSign: true
ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
EnableAPIScan: ${{ parameters.EnableAPIScan }}
Expand Down
29 changes: 24 additions & 5 deletions azure-pipelines/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ extends:
stages:
- stage: release
jobs:
- job: release
- job: nuget
displayName: 📦 Push nuget.org packages
pool:
name: AzurePipelines-EO
demands:
Expand All @@ -45,6 +46,28 @@ extends:
publishFeedCredentials: VisualStudioExtensibility (nuget.org)
steps:
- checkout: none
- download: CI
artifact: deployables-Windows
displayName: 🔻 Download deployables-Windows artifact
patterns: 'NuGet/*'
- job: github
displayName: 📢 GitHub release
dependsOn: nuget
pool:
name: AzurePipelines-EO
demands:
- ImageOverride -equals 1ESPT-Ubuntu22.04
os: Linux
templateContext:
type: releaseJob
isProduction: true
inputs:
- input: pipelineArtifact
pipeline: CI
artifactName: deployables-Windows
targetPath: $(Pipeline.Workspace)/CI/deployables-Windows
steps:
- checkout: none
- powershell: |
Write-Host "##vso[build.updatebuildnumber]$(resources.pipeline.CI.runName)"
if ('$(resources.pipeline.CI.runName)'.Contains('-')) {
Expand All @@ -53,10 +76,6 @@ extends:
Write-Host "##vso[task.setvariable variable=IsPrerelease]false"
}
displayName: ⚙ Set up pipeline
- download: CI
artifact: deployables-Windows
displayName: 🔻 Download deployables-Windows artifact
patterns: 'NuGet/*'
- task: GitHubRelease@1
displayName: 📢 GitHub release (create)
inputs:
Expand Down
5 changes: 5 additions & 0 deletions azure-pipelines/vs-insertion.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ extends:
AutoCompletePR: true
AutoCompleteMergeStrategy: Squash
ShallowClone: true
${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}:
ConnectedVSDropServiceName: 'VSEng-VSDrop-MI'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)

- powershell: |
$contentType = 'application/json';
$headers = @{ Authorization = 'Bearer $(System.AccessToken)' };
Expand Down
4 changes: 4 additions & 0 deletions azure-pipelines/vs-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,10 @@ extends:
DraftPR: false # set to true and update InsertionBuildPolicy when we can specify all the validations we want to run (https://dev.azure.com/devdiv/DevDiv/_workitems/edit/2224288)
AutoCompletePR: false
ShallowClone: true
${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}:
ConnectedVSDropServiceName: 'VSEng-VSDrop-MI'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
- powershell: |
$insertionPRId = azure-pipelines/Get-InsertionPRId.ps1
$Markdown = @"
Expand Down
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"sdk": {
"version": "9.0.306",
"version": "10.0.100",
"rollForward": "patch",
"allowPrerelease": false
},
Expand Down
Loading
Loading