diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
index eb69d92e8..6a88e0c5d 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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
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 30eadd857..88cbefa8b 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -24,7 +24,7 @@ jobs:
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: โ Install prerequisites
diff --git a/.github/workflows/docs_validate.yml b/.github/workflows/docs_validate.yml
index f07e11d0c..a5e100dbb 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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: ๐ Markup Link Checker (mlc)
diff --git a/.github/workflows/libtemplate-update.yml b/.github/workflows/libtemplate-update.yml
index f5cf8666f..800279bb5 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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 97e9e77d8..2dd489a7f 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -57,7 +57,7 @@
-
+
diff --git a/azure-pipelines/BuildStageVariables.yml b/azure-pipelines/BuildStageVariables.yml
index a93dcb6ea..7c61f8fec 100644
--- a/azure-pipelines/BuildStageVariables.yml
+++ b/azure-pipelines/BuildStageVariables.yml
@@ -2,4 +2,3 @@ variables:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
BuildConfiguration: Release
NUGET_PACKAGES: $(Agent.TempDirectory)/.nuget/packages/
- codecov_token: 9a7c2ba3-0a4b-4479-96e8-3bfd01a982f6
diff --git a/azure-pipelines/OptProf.yml b/azure-pipelines/OptProf.yml
deleted file mode 100644
index b842466e3..000000000
--- a/azure-pipelines/OptProf.yml
+++ /dev/null
@@ -1,124 +0,0 @@
-trigger: none
-pr: none
-schedules:
-- cron: "0 3 * * Fri" # Thu @ 8 or 9 PM Mountain Time (depending on DST)
- displayName: Weekly OptProf run
- branches:
- include:
- - main
- always: true # we must keep data fresh since optimizationdata drops are purged after 30 days
-
-# Avoid errant CI builds: https://developercommunity.visualstudio.com/content/problem/1154409/azure-pipeline-is-triggering-due-to-events-that-ne.html
-#resources:
-# repositories:
-# - repository: scripts
-# type: git
-# name: DeploymentScripts
-# ref: refs/heads/test
-
-parameters:
- - name: ShouldSkipOptimize
- displayName: Skip OptProf optimization
- type: boolean
- default: false # Should usually be false so that optprof LKG can apply when tests fail, but may need to be set to true in a manually queued pipeline run if all drops have expired.
-
-variables:
-- template: GlobalVariables.yml
-- name: PublicRelease
- value: false # avoid using nice version since we're building a preliminary/unoptimized package
-- name: IsOptProf
- value: true
-- name: MicroBuild_NuPkgSigningEnabled
- value: false # test-signed nuget packages fail to restore in the VS insertion PR validations. Just don't sign them *at all*.
-
-stages:
-- stage: Library
- variables:
- - name: OptProf
- value: true
- - template: BuildStageVariables.yml
- jobs:
- - template: build.yml
- parameters:
- Is1ESPT: false
- RealSign: false
- windowsPool: VSEngSS-MicroBuild2022-1ES
- EnableMacOSBuild: false
- ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
- IsOptProf: true
- RunTests: false
- SkipCodesignVerify: true
-- stage: QueueVSBuild
- jobs:
- - job: QueueOptProf
- pool: VSEngSS-MicroBuild2022-1ES
- variables:
- InsertPayloadName: vs-streamjsonrpc
- InsertTopicBranch: team/VS-IDE/vs-StreamJsonRpc-OptProf-run-$(Build.BuildId)
- steps:
- - checkout: none # We don't need source from our own repo
- clean: true
-
- # Pipeline YAML does not yet support checking out other repos. So we'll do it by hand.
-# - checkout: scripts # We DO need source from the DeploymentScripts repo
-# clean: true
-# path: $(Agent.TempDirectory)/DeploymentScripts
-# fetchDepth: 1
- - script: 'git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone https://devdiv.visualstudio.com/DevDiv/_git/DeploymentScripts --depth 1 --branch test "$(Agent.TempDirectory)/DeploymentScripts"'
- displayName: Download DeploymentScripts repo
-
- - task: DownloadBuildArtifacts@0
- displayName: Download insertion artifacts
- inputs:
- artifactName: VSInsertion-Windows
- downloadPath: $(Agent.TempDirectory)
- - task: DownloadBuildArtifacts@0
- displayName: Download variables artifacts
- inputs:
- artifactName: Variables-Windows
- downloadPath: $(Agent.TempDirectory)
- - task: PowerShell@2
- displayName: Set pipeline variables based on artifacts
- inputs:
- targetType: filePath
- filePath: $(Agent.TempDirectory)/Variables-Windows/_define.ps1
- - task: NuGetCommand@2
- displayName: Push VS-repo packages to VS feed
- inputs:
- command: push
- packagesToPush: $(Agent.TempDirectory)/VSInsertion-Windows/*.nupkg
- publishVstsFeed: 97a41293-2972-4f48-8c0e-05493ae82010 # VS feed
- allowPackageConflicts: true
- - task: MicroBuildInsertVsPayload@5
- displayName: Insert VS Payload
- inputs:
- TeamName: $(TeamName)
- 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:
- buildDefinition: DD-CB-TestSignVS-devCI
- useSameBranch: false
- branchToUse: $(InsertTopicBranch)
- storeInEnvironmentVariable: true
- queueBuildForUserThatTriggeredBuild: false
- authenticationMethod: OAuth Token
- password: $(System.AccessToken)
- - task: PowerShell@2
- displayName: Associate InsertionOutputs artifacts with CloudBuild
- inputs:
- targetType: filePath
- filePath: $(Agent.TempDirectory)/DeploymentScripts/Scripts/Insertion/WriteArtifact.ps1
- arguments: '-oldBuildID $(Build.BuildId) -newBuildID $(TriggeredBuildIds) -artifactName "InsertionOutputs" -accessToken $(System.AccessToken)'
- - task: PowerShell@2
- displayName: Tag the build with vs-streamjsonrpc-insertion
- inputs:
- targetType: filePath
- filePath: $(Agent.TempDirectory)/DeploymentScripts/Scripts/Insertion/TagBuild.ps1
- arguments: '-buildID $(TriggeredBuildIds) -tagName "vs-streamjsonrpc-insertion" -accessToken $(System.AccessToken)'
diff --git a/azure-pipelines/OptProf_part2.yml b/azure-pipelines/OptProf_part2.yml
deleted file mode 100644
index 256bc0016..000000000
--- a/azure-pipelines/OptProf_part2.yml
+++ /dev/null
@@ -1,91 +0,0 @@
-trigger: none
-pr: none
-
-resources:
- pipelines:
- - pipeline: VisualStudioBuildUnderTest
- source: DD-CB-TestSignVS-devCI
- trigger:
- tags:
- - vs-StreamJsonRpc-insertion
- - pipeline: DartLab
- source: DartLab
- branch: main
- - pipeline: DartLab.OptProf
- source: DartLab.OptProf
- branch: main
- tags:
- - production
- repositories:
- - repository: DartLabTemplates
- type: git
- name: DartLab.Templates
- ref: refs/heads/main
- - repository: DartLabOptProfTemplates
- type: git
- name: DartLab.OptProf
- ref: refs/tags/Production
-
-parameters:
-
-# The prefix naming of the OptimizationInputs drop
-- name: optimizationDropPrefix
- type: string
- default: OptimizationInputs/$(System.TeamProject)/$(Build.Repository.Name)
-
-stages:
-- template: \templates\stages\visual-studio\single-runsettings.yml@DartLabOptProfTemplates
- parameters:
- ##### Required #####
- runSettingsURI: $(Pipeline.Workspace)\VisualStudioBuildUnderTest\BuildArtifacts\runsettings\vs-StreamJsonRpc.OptProf.runsettings
- visualStudioBootstrapperURI: https://vsdrop.corp.microsoft.com/file/v1/$(VisualStudio.BuildUnderTest.ProductsDropName);bootstrappers/Enterprise/vs_enterprise.exe
- ##### Optional #####
- name: OptProfProfilingWorkflow
- displayName: OptProf Profiling Workflow
- optOptimizationInputsDropName: $(OptimizationInputsDropName)
- previousOptimizationInputsDropName: $(PreviousOptimizationInputsDropName)
- testLabPoolName: VS-Platform
- ##### Step Hooks #####
- preTestMachineConfigurationStepList:
- - download: VisualStudioBuildUnderTest
- - task: PowerShell@2
- name: SetProductsDropName
- displayName: Set 'VisualStudio.BuildUnderTest.ProductsDropName'
- inputs:
- filePath: $(DartLab.Path)\Scripts\VisualStudio\Build\Get-VisualStudioDropName.ps1
- arguments: -DropNamePrefix 'Products' -VstsDropUrlsJson '$(Pipeline.Workspace)\VisualStudioBuildUnderTest\BuildArtifacts\VstsDropUrls.json' -OutVariableName 'VisualStudio.BuildUnderTest.ProductsDropName'
- preDeployAndRunTestsStepList:
- - download: VisualStudioBuildUnderTest
- prePublishOptimizationInputsDropStepList:
- # Set parameter for PreviousOptimizationInputsDropName, MicroBuildCommitID, and OptimizationInputsDropName
- - powershell: |
- try {
- $artifactName = 'InsertionOutputs'
- $BuildID = $(resources.pipeline.VisualStudioBuildUnderTest.runID)
- $artifact = Get-BuildArtifact -InstanceURL 'https://dev.azure.com/devdiv' -ProjectName 'DevDiv' -BuildID $BuildID -ArtifactName $artifactName -OAuthAccessToken (ConvertTo-SecureString '$(System.AccessToken)' -AsPlainText -Force)
- $containerName = $artifact.Resource.Data -Split '/' | Select-Object -Last 1
- $fileName = Join-Path $containerName 'Metadata.json'
- $jsonString = Read-BuildArtifactFile -InstanceURL 'https://dev.azure.com/devdiv' -ProjectName 'DevDiv' -BuildID $BuildID -ArtifactName $artifactName -FileName $fileName -OAuthAccessToken (ConvertTo-SecureString '$(System.AccessToken)' -AsPlainText -Force)
- $json = $jsonString | ConvertFrom-Json
-
- Write-Host "The content of the metadata.json file was $json"
-
- $dropname = $json.OptimizationData
- $commitID = $json.CommitID
- $OptimizationInputsDropName = "${{parameters.optimizationDropPrefix}}/$($commitID)/$(Build.BuildId)/$(System.StageId)/$(System.StageAttempt)"
-
- Write-Host "PreviousOptimizationInputsDropName: $dropname"
- Set-AzurePipelinesVariable 'PreviousOptimizationInputsDropName' $dropname
-
- Write-Host "MicroBuildCommitID: $commitID"
- Set-AzurePipelinesVariable 'MicroBuildCommitID' $commitID
-
- Write-Host "OptimizationInputsDropName: $OptimizationInputsDropName"
- Set-AzurePipelinesVariable 'OptimizationInputsDropName' $OptimizationInputsDropName
- }
- catch {
- Write-Host $_
- Write-Error "Failed to set OptimizationInputsDropName pipeline variable"
- throw
- }
- displayName: Set MicroBuildCommitID, PreviousOptimizationInputsDropName, and OptimizationInputsDropName
diff --git a/azure-pipelines/archive-sourcecode.yml b/azure-pipelines/archive-sourcecode.yml
index 7f35de40c..ee349e5b0 100644
--- a/azure-pipelines/archive-sourcecode.yml
+++ b/azure-pipelines/archive-sourcecode.yml
@@ -38,7 +38,7 @@ extends:
settings:
networkIsolationPolicy: Permissive,CFSClean
sdl:
- sourceAnalysisPool: VSEngSS-MicroBuild2022-1ES
+ sourceAnalysisPool: VSEng-MicroBuildVSStable
stages:
- stage: archive
diff --git a/azure-pipelines/build.yml b/azure-pipelines/build.yml
index 6edf016b7..46ecbfdfc 100644
--- a/azure-pipelines/build.yml
+++ b/azure-pipelines/build.yml
@@ -69,12 +69,6 @@ parameters:
type: boolean
default: false
-# Whether this particular run is an OptProf profiling run.
-# This is used to skip unit tests and other non-essential work to improve reliability of the OptProf pipeline.
-- name: IsOptProf
- type: boolean
- default: false
-
- name: RunTests
type: boolean
default: true
@@ -104,15 +98,15 @@ parameters:
- name: windowsPool
type: object
default:
- vmImage: windows-2022
+ vmImage: windows-2025
- name: linuxPool
type: object
default:
- vmImage: ubuntu-22.04
+ vmImage: ubuntu-24.04
- name: macOSPool
type: object
default:
- vmImage: macOS-14
+ vmImage: macOS-15
jobs:
- job: Windows
@@ -139,8 +133,11 @@ jobs:
optprof:
enabled: ${{ parameters.EnableOptProf }}
ProfilingInputsDropName: $(ProfilingInputsDropName)
- OptimizationInputsLookupMethod: DropPrefix
- DropNamePrefix: OptimizationInputs/$(System.TeamProject)/$(Build.Repository.Name)
+ GeneratePropsFile: true
+ PropsPath: $(Build.ArtifactStagingDirectory)/InsertionOutputs/$(ProfilingInputsPropsName)
+ OptimizationInputsLookupMethod: GitTagRepo
+ GitTagProject: DevDiv
+ GitTagRepo: VS
ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
AccessToken: $(System.AccessToken)
mbpresteps:
@@ -148,8 +145,10 @@ jobs:
fetchDepth: 0 # avoid shallow clone so nbgv can do its work.
clean: true
- ${{ if parameters.EnableOptProf }}:
- - powershell: Write-Host "##vso[task.setvariable variable=PROFILINGINPUTSDROPNAME]$(tools/variables/ProfilingInputsDropName.ps1)"
- displayName: โ Set ProfilingInputsDropName for optprof
+ - powershell: |
+ Write-Host "##vso[task.setvariable variable=PROFILINGINPUTSDROPNAME]$(tools/variables/ProfilingInputsDropName.ps1)"
+ Write-Host "##vso[task.setvariable variable=PROFILINGINPUTSPROPSNAME]$(tools/variables/ProfilingInputsPropsName.ps1)"
+ displayName: โ Setting variables for optprof
sdl:
binskim:
analyzeTargetGlob: $(Build.ArtifactStagingDirectory)\symbols-Windows\**
@@ -188,6 +187,15 @@ jobs:
displayName: ๐ข Publish APIScanInputs
targetPath: $(Build.ArtifactStagingDirectory)/APIScanInputs-Windows
artifactName: APIScanInputs
+ - ${{ if parameters.EnableOptProf }}:
+ - output: artifactsDrop
+ displayName: ๐ข Publish to Artifact Services - ProfilingInputs
+ dropServiceURI: https://devdiv.artifacts.visualstudio.com
+ buildNumber: $(ProfilingInputsDropName)
+ sourcePath: $(Build.ArtifactStagingDirectory)\OptProf\ProfilingInputs
+ toLowerCase: false
+ retentionDays: 500
+ condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
steps:
- ${{ if not(parameters.Is1ESPT) }}:
- checkout: self
@@ -197,9 +205,6 @@ jobs:
- powershell: Write-Host "##vso[task.setvariable variable=PROFILINGINPUTSDROPNAME]$(tools/variables/ProfilingInputsDropName.ps1)"
displayName: โ Set ProfilingInputsDropName for optprof
- - ${{ if eq(variables['Build.Reason'], 'Schedule') }}:
- - template: schedule-only-steps.yml
-
- template: install-dependencies.yml
- script: dotnet nbgv cloud -ca
@@ -210,7 +215,6 @@ jobs:
- template: microbuild.before.yml
parameters:
EnableLocalization: ${{ parameters.EnableLocalization }}
- IsOptProf: ${{ parameters.IsOptProf }}
ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
RealSign: ${{ parameters.RealSign }}
@@ -219,7 +223,6 @@ jobs:
Is1ESPT: ${{ parameters.Is1ESPT }}
RunTests: ${{ parameters.RunTests }}
osRID: win
- IsOptProf: ${{ parameters.IsOptProf }}
- ${{ if and(parameters.EnableDotNetFormatCheck, not(parameters.EnableLinuxBuild)) }}:
- script: dotnet format --verify-no-changes --exclude test/NativeAOTCompatibility.Test
@@ -230,140 +233,138 @@ jobs:
- ${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}:
- template: microbuild.after.yml
parameters:
- IsOptProf: ${{ parameters.IsOptProf }}
SkipCodesignVerify: ${{ parameters.SkipCodesignVerify }}
-- ${{ if not(parameters.IsOptProf) }}:
- - ${{ if parameters.EnableLinuxBuild }}:
- - job: Linux
- pool: ${{ parameters.linuxPool }}
- ${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}:
- templateContext:
- mb:
- ${{ if parameters.RealSign }}:
- 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 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 (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.
- clean: true
- - template: install-dependencies.yml
- - template: dotnet.yml
- 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
- osRID: linux
- - ${{ if parameters.EnableDotNetFormatCheck }}:
- - script: |
- dotnet build # workaround for https://github.com/dotnet/sdk/issues/50499
- dotnet format --verify-no-changes --exclude test/NativeAOTCompatibility.Test
- displayName: ๐
Verify formatted code
-
- - ${{ if parameters.EnableMacOSBuild }}:
- - job: macOS
- pool: ${{ parameters.macOSPool }}
- ${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}:
- templateContext:
- mb:
- ${{ if parameters.RealSign }}:
- 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 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 (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.
- clean: true
- - template: install-dependencies.yml
- - template: dotnet.yml
- 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
- osRID: osx
+- ${{ if parameters.EnableLinuxBuild }}:
+ - job: Linux
+ pool: ${{ parameters.linuxPool }}
+ ${{ if eq(variables['system.collectionId'], '011b8bdf-6d56-4f87-be0d-0092136884d9') }}:
+ templateContext:
+ mb:
+ ${{ if parameters.RealSign }}:
+ 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 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 (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.
+ clean: true
+ - template: install-dependencies.yml
+ - template: dotnet.yml
+ 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
+ osRID: linux
+ - ${{ if parameters.EnableDotNetFormatCheck }}:
+ - script: |
+ dotnet build # workaround for https://github.com/dotnet/sdk/issues/50499
+ dotnet format --verify-no-changes --exclude test/NativeAOTCompatibility.Test
+ displayName: ๐
Verify formatted code
- - job: WrapUp
- dependsOn:
- - Windows
- - ${{ if parameters.EnableLinuxBuild }}:
- - Linux
- - ${{ if parameters.EnableMacOSBuild }}:
- - 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 parameters.EnableMacOSBuild }}:
+ - job: macOS
+ pool: ${{ parameters.macOSPool }}
${{ 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
+ mb:
+ ${{ if parameters.RealSign }}:
+ signing:
+ enabled: false # enable when building unique artifacts on this agent that must be signed
+ signType: real
+ signWithProd: true
outputParentDirectory: $(Build.ArtifactStagingDirectory)
outputs:
- - output: pipelineArtifact
- displayName: ๐ข Publish symbols-legacy
- targetPath: $(Build.ArtifactStagingDirectory)/symbols-legacy
- artifactName: symbols-legacy
- condition: succeededOrFailed()
+ - ${{ 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 (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.
clean: true
- template: install-dependencies.yml
+ - template: dotnet.yml
parameters:
- initArgs: -NoRestore
- - template: publish-symbols.yml
+ 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
+ osRID: osx
+
+- job: WrapUp
+ dependsOn:
+ - Windows
+ - ${{ if parameters.EnableLinuxBuild }}:
+ - Linux
+ - ${{ if parameters.EnableMacOSBuild }}:
+ - 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) }}:
+ 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
+ displayName: ๐ข Publish symbols-legacy
+ targetPath: $(Build.ArtifactStagingDirectory)/symbols-legacy
+ artifactName: symbols-legacy
+ condition: succeededOrFailed()
+ steps:
+ - checkout: self
+ fetchDepth: 0 # avoid shallow clone so nbgv can do its work.
+ clean: true
+ - template: install-dependencies.yml
+ parameters:
+ initArgs: -NoRestore
+ - template: publish-symbols.yml
+ parameters:
+ EnableLinuxBuild: ${{ parameters.EnableLinuxBuild }}
+ EnableMacOSBuild: ${{ parameters.EnableMacOSBuild }}
+ - ${{ if and(parameters.RunTests, parameters.PublishCodeCoverage) }}:
+ - template: publish-codecoverage.yml
parameters:
EnableLinuxBuild: ${{ parameters.EnableLinuxBuild }}
EnableMacOSBuild: ${{ parameters.EnableMacOSBuild }}
- - ${{ if and(parameters.RunTests, parameters.PublishCodeCoverage) }}:
- - template: publish-codecoverage.yml
- parameters:
- EnableLinuxBuild: ${{ parameters.EnableLinuxBuild }}
- EnableMacOSBuild: ${{ parameters.EnableMacOSBuild }}
- - ${{ if parameters.EnableAPIScan }}:
- - template: apiscan.yml
- parameters:
- windowsPool: ${{ parameters.windowsPool }}
- RealSign: ${{ parameters.RealSign }}
+- ${{ if parameters.EnableAPIScan }}:
+ - template: apiscan.yml
+ parameters:
+ windowsPool: ${{ parameters.windowsPool }}
+ RealSign: ${{ parameters.RealSign }}
diff --git a/azure-pipelines/dotnet.yml b/azure-pipelines/dotnet.yml
index 53790afcd..aa02c9044 100644
--- a/azure-pipelines/dotnet.yml
+++ b/azure-pipelines/dotnet.yml
@@ -2,9 +2,6 @@ parameters:
- name: RunTests
- name: osRID
type: string
-- name: IsOptProf
- type: boolean
- default: false
- name: Is1ESPT
type: boolean
- name: BuildRequiresAccessToken
@@ -19,10 +16,9 @@ steps:
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
-- ${{ if not(parameters.IsOptProf) }}:
- - powershell: tools/dotnet-test-cloud.ps1 -Configuration $(BuildConfiguration) -Agent $(Agent.JobName) -PublishResults
- displayName: ๐งช dotnet test
- condition: and(succeeded(), ${{ parameters.RunTests }})
+- powershell: tools/dotnet-test-cloud.ps1 -Configuration $(BuildConfiguration) -Agent $(Agent.JobName) -PublishResults
+ displayName: ๐งช dotnet test
+ condition: and(succeeded(), ${{ parameters.RunTests }})
- task: DotNetCoreCLI@2
displayName: ๐งช dotnet test -f net472 (+EventSource throw)
@@ -44,10 +40,6 @@ steps:
StreamJsonRpc_TestWithEventSource: 2 # swallow exceptions from EventSource, as is done in production
condition: and(succeeded(), ne(variables['OptProf'], 'true'), eq(variables['Agent.OS'], 'Windows_NT'))
-- ${{ if parameters.IsOptProf }}:
- - script: dotnet pack src\VSInsertionMetadata -c $(BuildConfiguration) -warnaserror /bl:"$(Build.ArtifactStagingDirectory)/build_logs/VSInsertion-Pack.binlog"
- displayName: ๐ง dotnet pack VSInsertionMetadata
-
- powershell: tools/variables/_define.ps1
failOnStderr: true
displayName: โ Update pipeline variables based on build outputs
@@ -64,11 +56,14 @@ steps:
displayName: ๐ข Publish artifacts
condition: succeededOrFailed()
-- ${{ if and(ne(variables['codecov_token'], ''), parameters.RunTests) }}:
+- ${{ if parameters.RunTests }}:
- powershell: |
$ArtifactStagingFolder = & "tools/Get-ArtifactsStagingDirectory.ps1"
$CoverageResultsFolder = Join-Path $ArtifactStagingFolder "coverageResults-$(Agent.JobName)"
- tools/publish-CodeCov.ps1 -CodeCovToken "$(codecov_token)" -PathToCodeCoverage "$CoverageResultsFolder" -Name "$(Agent.JobName) Coverage Results" -Flags "$(Agent.JobName)"
+ tools/publish-CodeCov.ps1 -CodeCovToken "$(CODECOV_TOKEN)" -PathToCodeCoverage "$CoverageResultsFolder" -Name "$(Agent.JobName) Coverage Results" -Flags "$(Agent.JobName)"
displayName: ๐ข Publish code coverage results to codecov.io
timeoutInMinutes: 3
continueOnError: true
+ # Set the CODECOV_TOKEN variable in your Azure Pipeline to enable code coverage reporting
+ # Get a token from https://codecov.io/
+ condition: and(succeeded(), ne(variables['CODECOV_TOKEN'], ''))
diff --git a/azure-pipelines/microbuild.after.yml b/azure-pipelines/microbuild.after.yml
index 67ba90080..c0e1e7bd0 100644
--- a/azure-pipelines/microbuild.after.yml
+++ b/azure-pipelines/microbuild.after.yml
@@ -1,7 +1,4 @@
parameters:
-- name: IsOptProf
- type: boolean
- default: false
- name: SkipCodesignVerify
type: boolean
@@ -15,21 +12,3 @@ steps:
TargetFolders: |
$(Build.SourcesDirectory)/bin/Packages/$(BuildConfiguration)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
-
-- ${{ if parameters.IsOptProf }}:
- - task: ms-vscs-artifact.build-tasks.artifactDropTask-1.artifactDropTask@0
- inputs:
- dropServiceURI: https://devdiv.artifacts.visualstudio.com
- buildNumber: $(ProfilingInputsDropName)
- sourcePath: $(Build.ArtifactStagingDirectory)\OptProf\ProfilingInputs
- toLowerCase: false
- usePat: true
- displayName: ๐ข Publish to Artifact Services - ProfilingInputs
- condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
-
- - task: PublishBuildArtifacts@1
- inputs:
- PathtoPublish: $(Build.ArtifactStagingDirectory)/InsertionOutputs
- ArtifactName: InsertionOutputs
- ArtifactType: Container
- displayName: ๐ข Publish InsertionOutputs as Azure DevOps artifacts
diff --git a/azure-pipelines/microbuild.before.yml b/azure-pipelines/microbuild.before.yml
index fd47d1bb9..298235321 100644
--- a/azure-pipelines/microbuild.before.yml
+++ b/azure-pipelines/microbuild.before.yml
@@ -2,9 +2,6 @@ parameters:
- name: EnableLocalization
type: boolean
default: false
-- name: IsOptProf
- type: boolean
- default: false
- name: ShouldSkipOptimize
type: boolean
default: false
@@ -12,7 +9,7 @@ parameters:
type: boolean
steps:
-- ${{ if and(not(parameters.IsOptProf), ne(variables['Build.Reason'], 'PullRequest')) }}:
+- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
# notice@0 requires CG detection to run first, and non-default branches don't inject it automatically.
# default branch injection (main) is happening too late for notice@0 to run successfully. Adding this as a workaround.
- task: ComponentGovernanceComponentDetection@0
@@ -25,26 +22,3 @@ steps:
outputformat: text
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 }}:
- # We have to install these plugins ourselves for Optprof runs because those pipelines haven't migrated to 1ES PT yet.
- - task: MicroBuildOptProfPlugin@6
- inputs:
- ProfilingInputsDropName: $(ProfilingInputsDropName)
- OptimizationInputsLookupMethod: DropPrefix
- DropNamePrefix: OptimizationInputs/$(System.TeamProject)/$(Build.Repository.Name)
- ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
- AccessToken: $(System.AccessToken)
- displayName: ๐ง Install OptProf Plugin
-
- - task: MicroBuildSigningPlugin@4
- inputs:
- signType: Test
- zipSources: false
- displayName: ๐ง Install MicroBuild Signing Plugin
-
- - ${{ if parameters.EnableLocalization }}:
- - task: MicroBuildLocalizationPlugin@4
- inputs:
- languages: $(LocLanguages)
- displayName: ๐ง Install MicroBuild Localization Plugin
diff --git a/azure-pipelines/official.yml b/azure-pipelines/official.yml
index 08474f8c8..0241556cc 100644
--- a/azure-pipelines/official.yml
+++ b/azure-pipelines/official.yml
@@ -48,11 +48,11 @@ extends:
settings:
networkIsolationPolicy: Permissive,CFSClean
sdl:
- sourceAnalysisPool: VSEngSS-MicroBuild2022-1ES
+ sourceAnalysisPool: VSEng-MicroBuildVSStable
codeSignValidation:
enabled: true
break: true
- additionalTargetsGlobPattern: -|Variables-*\*.ps1;-|LocBin-*\**;-|APIScanInputs-*\**;-|test_symbols-*\**;-|MicroBuild\**
+ additionalTargetsGlobPattern: -|Variables-*\*.ps1;-|LocBin-*\**;-|APIScanInputs-*\**;-|test_symbols-*\**;-|MicroBuild\**;-|$(Build.ArtifactStagingDirectory)\VSInsertion-Windows\vs-insertion-script.ps1
policheck:
enabled: true
exclusionsFile: $(System.DefaultWorkingDirectory)\azure-pipelines\PoliCheckExclusions.xml
@@ -72,7 +72,7 @@ extends:
RealSign: true
ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
EnableAPIScan: ${{ parameters.EnableAPIScan }}
- windowsPool: VSEngSS-MicroBuild2022-1ES
+ windowsPool: VSEng-MicroBuildVSStable
linuxPool:
name: AzurePipelines-EO
demands:
@@ -80,7 +80,7 @@ extends:
os: Linux
macOSPool:
name: Azure Pipelines
- vmImage: macOS-14
+ vmImage: macOS-15
os: macOS
EnableMacOSBuild: ${{ parameters.EnableMacOSBuild }}
RunTests: ${{ parameters.RunTests }}
diff --git a/azure-pipelines/prepare-insertion-stages.yml b/azure-pipelines/prepare-insertion-stages.yml
index c06c242b2..3d67fff19 100644
--- a/azure-pipelines/prepare-insertion-stages.yml
+++ b/azure-pipelines/prepare-insertion-stages.yml
@@ -17,7 +17,7 @@ stages:
- ${{ if parameters.ArchiveSymbols }}:
- job: symbol_archive
displayName: Archive symbols
- pool: VSEngSS-MicroBuild2022-1ES
+ pool: VSEng-MicroBuildVSStable
variables:
ONEES_ENFORCED_CODEQL_ENABLED: false # CodeQL runs on build stages, we don't need it here
steps:
diff --git a/azure-pipelines/release.yml b/azure-pipelines/release.yml
index e6876ec2f..3023272cc 100644
--- a/azure-pipelines/release.yml
+++ b/azure-pipelines/release.yml
@@ -23,7 +23,7 @@ extends:
settings:
networkIsolationPolicy: Permissive,CFSClean
sdl:
- sourceAnalysisPool: VSEngSS-MicroBuild2022-1ES
+ sourceAnalysisPool: VSEng-MicroBuildVSStable
stages:
- stage: release
diff --git a/azure-pipelines/schedule-only-steps.yml b/azure-pipelines/schedule-only-steps.yml
deleted file mode 100644
index ad07a341b..000000000
--- a/azure-pipelines/schedule-only-steps.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-steps:
-- powershell: echo "##vso[build.addbuildtag]auto-insertion"
- displayName: Tag for auto-insertion
diff --git a/azure-pipelines/unofficial.yml b/azure-pipelines/unofficial.yml
index 914309183..a3f089579 100644
--- a/azure-pipelines/unofficial.yml
+++ b/azure-pipelines/unofficial.yml
@@ -59,7 +59,7 @@ extends:
settings:
networkIsolationPolicy: Permissive,CFSClean
sdl:
- sourceAnalysisPool: VSEngSS-MicroBuild2022-1ES
+ sourceAnalysisPool: VSEng-MicroBuildVSStable
credscan:
enabled: false
suppression:
@@ -68,7 +68,7 @@ extends:
codeSignValidation:
enabled: ${{ parameters.EnableProductionSDL }}
break: true
- additionalTargetsGlobPattern: -|Variables-*\*.ps1;-|APIScanInputs-*\**;-|test_symbols-*\**;-|MicroBuild\**
+ additionalTargetsGlobPattern: -|Variables-*\*.ps1;-|APIScanInputs-*\**;-|test_symbols-*\**;-|MicroBuild\**;-|$(Build.ArtifactStagingDirectory)\VSInsertion-Windows\vs-insertion-script.ps1
policyFile: $(MBSIGN_APPFOLDER)\CSVTestSignPolicy.xml
policheck:
enabled: ${{ parameters.EnableProductionSDL }}
@@ -86,7 +86,7 @@ extends:
RealSign: false
ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
EnableAPIScan: ${{ parameters.EnableAPIScan }}
- windowsPool: VSEngSS-MicroBuild2022-1ES
+ windowsPool: VSEng-MicroBuildVSStable
linuxPool:
name: AzurePipelines-EO
demands:
@@ -94,7 +94,7 @@ extends:
os: Linux
macOSPool:
name: Azure Pipelines
- vmImage: macOS-14
+ vmImage: macOS-15
os: macOS
EnableMacOSBuild: ${{ parameters.EnableMacOSBuild }}
RunTests: ${{ parameters.RunTests }}
diff --git a/azure-pipelines/vs-insertion-script.ps1 b/azure-pipelines/vs-insertion-script.ps1
new file mode 100644
index 000000000..53076254f
--- /dev/null
+++ b/azure-pipelines/vs-insertion-script.ps1
@@ -0,0 +1,17 @@
+# List of build artifact files [Source => Destination] to be committed into the VS repo.
+$FilesToCommit = @{
+ "$env:PROFILINGINPUTSPROPSNAME" = "src/Tests/config/runsettings/Official/OptProf/External/$env:PROFILINGINPUTSPROPSNAME";
+}
+
+foreach ($File in $FilesToCommit.GetEnumerator()) {
+ $SourcePath = Join-Path $PSScriptRoot $File.Key
+ if (Test-Path $SourcePath) {
+ $DestinationPath = Join-Path (Get-Location) $File.Value
+ Write-Host "Copying $SourcePath to $DestinationPath"
+ Copy-Item -Path $SourcePath -Destination $DestinationPath
+ git add $DestinationPath
+ }
+ else {
+ Write-Host "$SourcePath is not present, skipping"
+ }
+}
diff --git a/azure-pipelines/vs-insertion.yml b/azure-pipelines/vs-insertion.yml
index 6c086f040..2a50e502a 100644
--- a/azure-pipelines/vs-insertion.yml
+++ b/azure-pipelines/vs-insertion.yml
@@ -15,7 +15,6 @@ resources:
trigger:
tags:
- Real signed
- - auto-insertion
variables:
- template: GlobalVariables.yml
@@ -26,14 +25,16 @@ extends:
settings:
networkIsolationPolicy: Permissive,CFSClean
sdl:
- sourceAnalysisPool: VSEngSS-MicroBuild2022-1ES
+ sourceAnalysisPool: VSEng-MicroBuildVSStable
+ sbom:
+ enabled: false
stages:
- stage: insertion
jobs:
- job: insertion
displayName: VS insertion
- pool: VSEngSS-MicroBuild2022-1ES
+ pool: VSEng-MicroBuildVSStable
templateContext:
outputParentDirectory: $(Pipeline.Workspace)/CI
steps:
@@ -66,6 +67,7 @@ extends:
InsertionPayloadName: $(Build.Repository.Name) $(Build.BuildNumber)
InsertionBuildPolicies: Request Perf DDRITs
InsertionReviewers: $(Build.RequestedFor),Andrew Arnott
+ CustomScriptExecutionCommand: $(Pipeline.Workspace)\CI\VSInsertion-Windows\vs-insertion-script.ps1
AutoCompletePR: true
AutoCompleteMergeStrategy: Squash
ShallowClone: true
diff --git a/azure-pipelines/vs-validation.yml b/azure-pipelines/vs-validation.yml
index bd6a0aaf5..d150fee64 100644
--- a/azure-pipelines/vs-validation.yml
+++ b/azure-pipelines/vs-validation.yml
@@ -29,7 +29,7 @@ extends:
settings:
networkIsolationPolicy: Permissive,CFSClean
sdl:
- sourceAnalysisPool: VSEngSS-MicroBuild2022-1ES
+ sourceAnalysisPool: VSEng-MicroBuildVSStable
credscan:
enabled: false
@@ -46,7 +46,7 @@ extends:
Is1ESPT: true
RealSign: false
# ShouldSkipOptimize: ${{ parameters.ShouldSkipOptimize }}
- windowsPool: VSEngSS-MicroBuild2022-1ES
+ windowsPool: VSEng-MicroBuildVSStable
linuxPool:
name: AzurePipelines-EO
demands:
@@ -54,7 +54,7 @@ extends:
os: Linux
macOSPool:
name: Azure Pipelines
- vmImage: macOS-14
+ vmImage: macOS-15
os: macOS
EnableMacOSBuild: false
RunTests: false
@@ -70,7 +70,7 @@ extends:
jobs:
- job: insertion
displayName: VS insertion
- pool: VSEngSS-MicroBuild2022-1ES
+ pool: VSEng-MicroBuildVSStable
steps:
- checkout: self
clean: true
@@ -105,7 +105,7 @@ extends:
InsertionPayloadName: $(Build.Repository.Name) VALIDATION BUILD $(Build.BuildNumber) ($(Build.SourceBranch)) [Skip-SymbolCheck] [Skip-HashCheck] [Skip-SignCheck]
InsertionDescription: |
This PR is for **validation purposes only** for !$(System.PullRequest.PullRequestId). **Do not complete**.
- CustomScriptExecutionCommand: src/VSSDK/NuGet/AllowUnstablePackages.ps1
+ CustomScriptExecutionCommand: $(Pipeline.Workspace)\VSInsertion-Windows\vs-insertion-script.ps1; src\VSSDK\NuGet\AllowUnstablePackages.ps1
InsertionBuildPolicies: Request Perf DDRITs
InsertionReviewers: $(Build.RequestedFor)
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)
diff --git a/src/OptProf.targets b/src/OptProf.targets
index d0167d7c1..f669b94f1 100644
--- a/src/OptProf.targets
+++ b/src/OptProf.targets
@@ -2,14 +2,11 @@
IBC
- Common7\IDE\PrivateAssemblies\$(TargetFileName)
+ Common7\IDE\PublicAssemblies\StreamJsonRpc.2.x\$(TargetFileName)
/ExeConfig:"%VisualStudio.InstallationUnderTest.Path%\Common7\IDE\vsn.exe"
-
-
-
+
-
diff --git a/src/StreamJsonRpc/OptProf.targets b/src/StreamJsonRpc/OptProf.targets
deleted file mode 100644
index 34cea5c9b..000000000
--- a/src/StreamJsonRpc/OptProf.targets
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
- IBC
- Common7\IDE\PublicAssemblies\StreamJsonRpc.2.x\$(TargetFileName)
- /ExeConfig:"%VisualStudio.InstallationUnderTest.Path%\Common7\IDE\vsn.exe"
-
-
-
-
-
-
-
-
-
diff --git a/src/StreamJsonRpc/StreamJsonRpc.csproj b/src/StreamJsonRpc/StreamJsonRpc.csproj
index bcc6ee614..60ab60359 100644
--- a/src/StreamJsonRpc/StreamJsonRpc.csproj
+++ b/src/StreamJsonRpc/StreamJsonRpc.csproj
@@ -51,5 +51,5 @@
-
+
diff --git a/src/VSInsertionMetadata/ProfilingInputs.props b/src/VSInsertionMetadata/ProfilingInputs.props
deleted file mode 100644
index fb19d6048..000000000
--- a/src/VSInsertionMetadata/ProfilingInputs.props
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/src/VSInsertionMetadata/StreamJsonRpc.VSInsertionMetadata.proj b/src/VSInsertionMetadata/StreamJsonRpc.VSInsertionMetadata.proj
deleted file mode 100644
index 0caaedb94..000000000
--- a/src/VSInsertionMetadata/StreamJsonRpc.VSInsertionMetadata.proj
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- netstandard2.0
- true
- $(RepoRootPath)bin\Packages\$(Configuration)\VSRepo\
- false
- false
- Contains metadata for insertion into VS.
-
-
-
diff --git a/src/VSInsertionMetadata/VSInsertionMetadata.targets b/src/VSInsertionMetadata/VSInsertionMetadata.targets
deleted file mode 100644
index 84ebb5a88..000000000
--- a/src/VSInsertionMetadata/VSInsertionMetadata.targets
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(TargetsForTfmSpecificContentInPackage);
- SubstituteProfilingInputsMacro;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(PackageVersion).$(Build_BuildId)
-
-
-
-
-
-
diff --git a/tools/Install-DotNetSdk.ps1 b/tools/Install-DotNetSdk.ps1
index 3d13e817d..590581e26 100755
--- a/tools/Install-DotNetSdk.ps1
+++ b/tools/Install-DotNetSdk.ps1
@@ -125,14 +125,14 @@ Function Get-InstallerExe(
}
if ($TypedVersion.Build -eq -1) {
- $versionInfo = -Split (Invoke-WebRequest -Uri "https://dotnetcli.blob.core.windows.net/dotnet/$sku/$Version/latest.version" -UseBasicParsing)
+ $versionInfo = -Split (Invoke-WebRequest -Uri "https://builds.dotnet.microsoft.com/dotnet/$sku/$Version/latest.version" -UseBasicParsing)
$Version = $versionInfo[-1]
}
$majorMinor = "$($TypedVersion.Major).$($TypedVersion.Minor)"
$ReleasesFile = Join-Path $DotNetInstallScriptRoot "$majorMinor\releases.json"
if (!(Test-Path $ReleasesFile)) {
- Get-FileFromWeb -Uri "https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/$majorMinor/releases.json" -OutDir (Split-Path $ReleasesFile) | Out-Null
+ Get-FileFromWeb -Uri "https://builds.dotnet.microsoft.com/dotnet/release-metadata/$majorMinor/releases.json" -OutDir (Split-Path $ReleasesFile) | Out-Null
}
$releases = Get-Content $ReleasesFile | ConvertFrom-Json
diff --git a/tools/artifacts/VSInsertion.ps1 b/tools/artifacts/VSInsertion.ps1
index a5b940b5d..700b24f69 100644
--- a/tools/artifacts/VSInsertion.ps1
+++ b/tools/artifacts/VSInsertion.ps1
@@ -19,6 +19,10 @@ if (!$BuildConfiguration) {
$PackagesRoot = "$RepoRoot/bin/Packages/$BuildConfiguration"
$NuGetPackages = "$PackagesRoot/NuGet"
$VsixPackages = "$PackagesRoot/Vsix"
+$AzurePipelinesPath = "$RepoRoot/azure-pipelines"
+if ($env:BUILD_ARTIFACTSTAGINGDIRECTORY) {
+ $InsertionOutputs = "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/InsertionOutputs"
+}
if (!(Test-Path $NuGetPackages) -and !(Test-Path $VsixPackages)) {
Write-Warning "Skipping because NuGet and VSIX packages haven't been built yet."
@@ -26,16 +30,16 @@ if (!(Test-Path $NuGetPackages) -and !(Test-Path $VsixPackages)) {
}
$result = @{
- "$NuGetPackages" = (Get-ChildItem $NuGetPackages -Recurse)
+ "$AzurePipelinesPath" = (Get-ChildItem "$AzurePipelinesPath/vs-insertion-script.ps1");
+ "$NuGetPackages" = (Get-ChildItem $NuGetPackages -Recurse);
}
if (Test-Path $VsixPackages) {
$result["$PackagesRoot"] += Get-ChildItem $VsixPackages -Recurse
}
-if ($env:IsOptProf) {
- $VSRepoPackages = "$PackagesRoot/VSRepo"
- $result["$VSRepoPackages"] = (Get-ChildItem "$VSRepoPackages\*.VSInsertionMetadata.*.nupkg");
+if ($InsertionOutputs -and $env:PROFILINGINPUTSPROPSNAME -and (Test-Path "$InsertionOutputs/$env:PROFILINGINPUTSPROPSNAME")) {
+ $result[$InsertionOutputs] = (Get-ChildItem "$InsertionOutputs/$env:PROFILINGINPUTSPROPSNAME"); # OptProf ProfilingInputs
}
$result
diff --git a/tools/variables/ProfilingInputsPropsName.ps1 b/tools/variables/ProfilingInputsPropsName.ps1
new file mode 100644
index 000000000..e66cce0ca
--- /dev/null
+++ b/tools/variables/ProfilingInputsPropsName.ps1
@@ -0,0 +1,6 @@
+if ($env:SYSTEM_TEAMPROJECT) {
+ $repoName = $env:BUILD_REPOSITORY_NAME.Replace('/', '.')
+ "$env:SYSTEM_TEAMPROJECT.$repoName.props"
+} else {
+ Write-Warning "No Azure Pipelines build detected. No Azure Pipelines drop name will be computed."
+}