Skip to content

Commit 1723af9

Browse files
authored
migrate VS insertion release pipelines (#10920)
1 parent b7195ce commit 1723af9

File tree

3 files changed

+326
-0
lines changed

3 files changed

+326
-0
lines changed

azure-pipelines/WIFtoPATauth.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
parameters:
2+
- name: deadPATServiceConnectionId # The GUID of the PAT-based service connection whose access token must be replaced.
3+
type: string
4+
- name: wifServiceConnectionName # The name of the WIF service connection to use to get the access token.
5+
type: string
6+
- name: resource # The scope for which the access token is requested.
7+
type: string
8+
default: 499b84ac-1321-427f-aa17-267ca6975798 # Azure Artifact feeds (any of them)
9+
10+
steps:
11+
- task: AzureCLI@2
12+
displayName: 🔏 Authenticate with WIF service connection
13+
inputs:
14+
azureSubscription: ${{ parameters.wifServiceConnectionName }}
15+
scriptType: pscore
16+
scriptLocation: inlineScript
17+
inlineScript: |
18+
$accessToken = az account get-access-token --query accessToken --resource '${{ parameters.resource }}' -o tsv
19+
# Set the access token as a secret, so it doesn't get leaked in the logs
20+
Write-Host "##vso[task.setsecret]$accessToken"
21+
# Override the apitoken of the nuget service connection, for the duration of this stage
22+
Write-Host "##vso[task.setendpoint id=${{ parameters.deadPATServiceConnectionId }};field=authParameter;key=apitoken]$accessToken"
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
trigger: none
2+
name: $(Date:yyyyMMdd).$(Rev:r) MSBuild Experimental VS Insertion
3+
variables:
4+
InsertConfigValues: VS.ExternalAPIs.MSBuild=$(MSBuild_ExtApisPackageVersion)
5+
InsertCustomScriptExecutionCommand: $(Pipeline.Workspace)\xsd\Update-MSBuildXsds.ps1
6+
InsertDescription: Insert MSBuild $(Build.BuildNumber) from the branch $(Build.SourceBranchName) at commit $(Build.SourceVersion). Corresponding package version is $(MSBuild_ExtApisPackageVersion)
7+
InsertJsonValues: Microsoft.Build.vsman{$(MSBuild_ExtApisPackageVersion)+$(Build.SourceVersion)}=https://vsdrop.corp.microsoft.com/file/v1/Products/DevDiv/DotNet-msbuild-Trusted/$(Build.SourceBranchName)/$(Build.BuildNumber);Microsoft.Build.vsman,Microsoft.Build.Arm64.vsman{$(MSBuild_ExtApisPackageVersion)+$(Build.SourceVersion)}=https://vsdrop.corp.microsoft.com/file/v1/Products/DevDiv/DotNet-msbuild-Trusted/$(Build.SourceBranchName)/$(Build.BuildNumber);Microsoft.Build.Arm64.vsman,Microsoft.Build.UnGAC.vsman=https://vsdrop.corp.microsoft.com/file/v1/Products/DevDiv/DotNet-msbuild-Trusted/$(Build.SourceBranchName)/$(Build.Build.Number);Microsoft.Build.UnGAC.vsman
8+
InsertPayloadName: MSBuild $(Build.SourceBranchName) $(Build.BuildNumber)
9+
TeamName: msbuild
10+
TeamEmail: [email protected]
11+
resources:
12+
pipelines:
13+
- pipeline: 'MSBuild'
14+
project: 'DevDiv'
15+
source: 'MSBuild'
16+
trigger:
17+
branches:
18+
include:
19+
- exp/*
20+
repositories:
21+
- repository: 1ESPipelineTemplates
22+
type: git
23+
name: 1ESPipelineTemplates/1ESPipelineTemplates
24+
ref: refs/tags/release
25+
extends:
26+
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
27+
parameters:
28+
pool:
29+
name: VSEngSS-MicroBuild2022-1ES
30+
customBuildTags:
31+
- ES365AIMigrationTooling-Release
32+
stages:
33+
- stage: Stage_1
34+
displayName: Create VS PR
35+
jobs:
36+
- job: Job_1
37+
displayName: Run on agent
38+
condition: succeeded()
39+
timeoutInMinutes: 0
40+
templateContext:
41+
inputs:
42+
- input: pipelineArtifact
43+
pipeline: 'MSBuild'
44+
artifactName: 'BuildLogs_SourceBuild_Managed_Attempt1'
45+
targetPath: '$(Pipeline.Workspace)/BuildLogs_SourceBuild_Managed_Attempt1'
46+
- input: pipelineArtifact
47+
pipeline: 'MSBuild'
48+
artifactName: 'build_Windows_NT_SBOM'
49+
targetPath: '$(Pipeline.Workspace)/build_Windows_NT_SBOM'
50+
- input: pipelineArtifact
51+
pipeline: 'MSBuild'
52+
artifactName: 'xsd'
53+
targetPath: '$(Pipeline.Workspace)/xsd'
54+
- input: pipelineArtifact
55+
pipeline: 'MSBuild'
56+
artifactName: 'PackageArtifacts'
57+
targetPath: '$(Build.ArtifactStagingDirectory)/PackageArtifacts'
58+
steps:
59+
- task: Powershell@2
60+
name: Powershell_1
61+
displayName: Munge ExternalAPIs package version
62+
inputs:
63+
targetType: inline
64+
script: |
65+
$folder = "$(Build.ArtifactStagingDirectory)/PackageArtifacts/VS.ExternalAPIs.*.nupkg"
66+
$packageFile = Get-ChildItem -Path $folder -Filter VS.ExternalAPIs.*.nupkg | Select-Object -First 1
67+
$packageVersion = $packageFile.BaseName.TrimStart("VS.ExternalAPIs.MSBuild")
68+
Write-Host "Setting MSBuild_ExtApisPackageVersion to '$packageVersion'"
69+
Write-Host "##vso[task.setvariable variable=MSBuild_ExtApisPackageVersion]$($packageVersion)"
70+
$folder = "$(Build.ArtifactStagingDirectory)/PackageArtifacts/Microsoft.NET.StringTools*.nupkg"
71+
$packageFile = Get-ChildItem -Path $folder -Filter Microsoft.NET.StringTools*.nupkg | Select-Object -First 1
72+
$packageVersion = $packageFile.BaseName.TrimStart("Microsoft.NET.StringTools")
73+
Write-Host "Setting MicrosoftNETStringToolsPackageVersion to '$packageVersion'"
74+
Write-Host "##vso[task.setvariable variable=MicrosoftNETStringToolsPackageVersion]$($packageVersion)"
75+
- task: 1ES.PublishNuGet@1
76+
displayName: 'Push MSBuild CoreXT packages'
77+
inputs:
78+
packageParentPath: '$(Build.ArtifactStagingDirectory)'
79+
packagesToPush: $(Build.ArtifactStagingDirectory)/PackageArtifacts/Microsoft.Build.*.nupkg;$(Build.ArtifactStagingDirectory)/PackageArtifacts/Microsoft.NET.StringTools.*.nupkg;$(Build.ArtifactStagingDirectory)/PackageArtifacts/VS.ExternalAPIs.*.nupkg
80+
nuGetFeedType: internal
81+
publishVstsFeed: VS
82+
allowPackageConflicts: true
83+
- task: MicroBuildInsertVsPayload@4
84+
name: MicroBuildInsertVsPayload_4
85+
displayName: Insert VS Payload
86+
inputs:
87+
PackagePropsValues: VS.ExternalAPIs.MSBuild=$(MSBuild_ExtApisPackageVersion);Microsoft.Build=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Framework=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Tasks.Core=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Utilities.Core=$(MicrosoftNETStringToolsPackageVersion);Microsoft.NET.StringTools=$(MicrosoftNETStringToolsPackageVersion)
88+
LinkWorkItemsToPR: true
89+
TeamEmail: $(TeamEmail)
90+
TeamName: $(TeamName)
91+
InsertionReviewers: MSBuild
92+
TargetBranch: main
93+
InsertionPayloadName: '[Experimental] [Skip-SymbolCheck] $(InsertPayloadName)'
94+
InsertionBuildPolicy: Request Perf DDRITs

azure-pipelines/vs-insertion.yml

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
# Create a VS insertion (DotNet-MSBuild-Trusted -> VS) from a build artifact on main or any servicing branch.
2+
trigger: none
3+
name: $(Date:yyyyMMdd).$(Rev:r)
4+
5+
schedules:
6+
- cron: '0 3 * * *' # Runs every day at 3AM UTC
7+
displayName: Daily VS insertion
8+
branches:
9+
include:
10+
- main
11+
- vs*
12+
always: false # Don't run if there are no code changes
13+
14+
parameters:
15+
- name: TargetBranch
16+
default: auto
17+
type: string
18+
displayName: 'Insertion Target Branch (recommended to use `auto`)'
19+
values:
20+
- auto
21+
- main
22+
- rel/d17.13
23+
- rel/d17.12
24+
- rel/d17.11
25+
- rel/d17.10
26+
- rel/d17.8
27+
- rel/d17.6
28+
- rel/d17.3
29+
- rel/d17.0
30+
variables:
31+
# `auto` should work every time and selecting a branch in parameters is likely to fail due to incompatible versions in MSBuild and VS
32+
- name: AutoInsertTargetBranch
33+
${{ if eq(variables['Build.SourceBranchName'], 'vs17.13') }}:
34+
value: 'rel/d17.13'
35+
${{ elseif eq(variables['Build.SourceBranchName'], 'vs17.12') }}:
36+
value: 'rel/d17.12'
37+
${{ elseif eq(variables['Build.SourceBranchName'], 'vs17.11') }}:
38+
value: 'rel/d17.11'
39+
${{ elseif eq(variables['Build.SourceBranchName'], 'vs17.10') }}:
40+
value: 'rel/d17.10'
41+
${{ elseif eq(variables['Build.SourceBranchName'], 'vs17.8') }}:
42+
value: 'rel/d17.8'
43+
${{ elseif eq(variables['Build.SourceBranchName'], 'vs17.6') }}:
44+
value: 'rel/d17.6'
45+
${{ elseif eq(variables['Build.SourceBranchName'], 'vs17.3') }}:
46+
value: 'rel/d17.3'
47+
${{ elseif eq(variables['Build.SourceBranchName'], 'vs17.0') }}:
48+
value: 'rel/d17.0'
49+
${{ elseif eq(variables['Build.SourceBranchName'], 'main') }}:
50+
value: 'main'
51+
${{ else }}:
52+
value: ''
53+
- name: InsertTargetBranch
54+
${{ if not(eq(parameters.TargetBranch, 'auto')) }}:
55+
value: ${{ parameters.TargetBranch }}
56+
${{ else }}:
57+
value: $(AutoInsertTargetBranch)
58+
- name: InsertPropsValues
59+
# servicing branches until 17.12 also include Microsoft.Build.Engine and Microsoft.Build.Conversion.Core
60+
${{ if or(eq(variables['Build.SourceBranchName'], 'vs17.0'), eq(variables['Build.SourceBranchName'], 'vs17.3'), eq(variables['Build.SourceBranchName'], 'vs17.6'), eq(variables['Build.SourceBranchName'], 'vs17.8'), eq(variables['Build.SourceBranchName'], 'vs17.10'), eq(variables['Build.SourceBranchName'], 'vs17.11'), eq(variables['Build.SourceBranchName'], 'vs17.12')) }}:
61+
value: VS.ExternalAPIs.MSBuild=$(MSBuild_ExtApisPackageVersion);Microsoft.Build=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Conversion.Core=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Engine=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Framework=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Tasks.Core=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Utilities.Core=$(MicrosoftNETStringToolsPackageVersion);Microsoft.NET.StringTools=$(MicrosoftNETStringToolsPackageVersion)
62+
${{ else }}:
63+
value: VS.ExternalAPIs.MSBuild=$(MSBuild_ExtApisPackageVersion);Microsoft.Build=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Framework=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Tasks.Core=$(MicrosoftNETStringToolsPackageVersion);Microsoft.Build.Utilities.Core=$(MicrosoftNETStringToolsPackageVersion);Microsoft.NET.StringTools=$(MicrosoftNETStringToolsPackageVersion)
64+
- name: TeamName
65+
value: msbuild
66+
- name: TeamEmail
67+
68+
69+
resources:
70+
pipelines:
71+
- pipeline: 'MSBuild'
72+
project: 'DevDiv'
73+
source: 'MSBuild'
74+
repositories:
75+
- repository: 1ESPipelineTemplates
76+
type: git
77+
name: 1ESPipelineTemplates/1ESPipelineTemplates
78+
ref: refs/tags/release
79+
extends:
80+
template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates
81+
parameters:
82+
pool:
83+
name: VSEngSS-MicroBuild2022-1ES
84+
customBuildTags:
85+
- ES365AIMigrationTooling-Release
86+
stages:
87+
- stage: RetainBuild
88+
displayName: Retain build
89+
jobs:
90+
- job: Job_1
91+
displayName: Run on agent
92+
condition: succeeded()
93+
timeoutInMinutes: 0
94+
steps:
95+
# Check that InsertTargetBranch is valid before running anything else.
96+
- task: PowerShell@2
97+
name: CheckInsertTargetBranch
98+
inputs:
99+
targetType: inline
100+
script: |
101+
if ("$(InsertTargetBranch)" -eq "") {
102+
Write-Error "InsertTargetBranch is not set, this means your're not inserting from main or a valid servicing branch."
103+
exit 1
104+
}
105+
- task: MicroBuildRetainVstsDrops@1
106+
name: MicroBuildRetainVstsDrops_2
107+
displayName: Retain VSTS Drops
108+
inputs:
109+
DropNames: Products/DevDiv/DotNet-msbuild-Trusted/$(Build.SourceBranchName)/$(Build.BuildNumber)
110+
AccessToken: $(System.AccessToken)
111+
DropServiceUri: https://devdiv.artifacts.visualstudio.com/DefaultCollection
112+
# retain servicing indefinitely, main only for 183 days
113+
${{ if eq(variables['InsertTargetBranch'], 'main') }}:
114+
DropRetentionDays: 183
115+
- stage: VSInsertion
116+
displayName: VS insertion
117+
dependsOn: RetainBuild
118+
variables:
119+
InsertConfigValues: VS.ExternalAPIs.MSBuild=$(MSBuild_ExtApisPackageVersion)
120+
InsertCustomScriptExecutionCommand: $(Pipeline.Workspace)\xsd\Update-MSBuildXsds.ps1
121+
InsertDescription: Insert MSBuild $(Build.BuildNumber) from the branch $(Build.SourceBranchName) at commit $(Build.SourceVersion). Corresponding package version is $(MSBuild_ExtApisPackageVersion)
122+
InsertJsonValues: Microsoft.Build.vsman{$(MSBuild_ExtApisPackageVersion)+$(Build.SourceVersion)}=https://vsdrop.corp.microsoft.com/file/v1/Products/DevDiv/DotNet-msbuild-Trusted/$(Build.SourceBranchName)/$(Build.BuildNumber);Microsoft.Build.vsman,Microsoft.Build.Arm64.vsman{$(MSBuild_ExtApisPackageVersion)+$(Build.SourceVersion)}=https://vsdrop.corp.microsoft.com/file/v1/Products/DevDiv/DotNet-msbuild-Trusted/$(Build.SourceBranchName)/$(Build.BuildNumber);Microsoft.Build.Arm64.vsman,Microsoft.Build.UnGAC.vsman=https://vsdrop.corp.microsoft.com/file/v1/Products/DevDiv/DotNet-msbuild-Trusted/$(Build.SourceBranchName)/$(Build.BuildNumber);Microsoft.Build.UnGAC.vsman
123+
InsertPayloadName: MSBuild $(Build.SourceBranchName) $(Build.BuildNumber)
124+
SymbolsAgentPath: $(Pipeline.Workspace)\$(Build.DefinitionName)\Symbols
125+
SymbolsEmailContacts: raines
126+
SymbolsFeatureName: MSBuild
127+
SymbolsSymwebProject: DDE
128+
SymbolsUncPath: '\\cpvsbuild\drops\MSBuild\symbols\$(Build.DefinitionName)\$(Build.BuildNumber)\symbols.archive'
129+
jobs:
130+
- job: PushPackages
131+
displayName: Push Packages
132+
condition: succeeded()
133+
timeoutInMinutes: 0
134+
templateContext:
135+
inputs:
136+
- input: pipelineArtifact
137+
pipeline: 'MSBuild'
138+
artifactName: 'BuildLogs_SourceBuild_Managed_Attempt1'
139+
targetPath: '$(Pipeline.Workspace)/BuildLogs_SourceBuild_Managed_Attempt1'
140+
- input: pipelineArtifact
141+
pipeline: 'MSBuild'
142+
artifactName: 'build_Windows_NT_SBOM'
143+
targetPath: '$(Pipeline.Workspace)/build_Windows_NT_SBOM'
144+
- input: pipelineArtifact
145+
pipeline: 'MSBuild'
146+
artifactName: 'xsd'
147+
targetPath: '$(Pipeline.Workspace)/xsd'
148+
- input: pipelineArtifact
149+
pipeline: 'MSBuild'
150+
artifactName: 'PackageArtifacts'
151+
targetPath: '$(Build.ArtifactStagingDirectory)/PackageArtifacts'
152+
steps:
153+
- task: Powershell@2
154+
name: PwshMungeExternalAPIsPkgVersion
155+
displayName: Munge ExternalAPIs package version
156+
inputs:
157+
targetType: inline
158+
script: |
159+
$folder = "$(Build.ArtifactStagingDirectory)/PackageArtifacts/VS.ExternalAPIs.*.nupkg"
160+
$packageFile = Get-ChildItem -Path $folder -Filter VS.ExternalAPIs.*.nupkg | Select-Object -First 1
161+
$packageVersion = $packageFile.BaseName.TrimStart("VS.ExternalAPIs.MSBuild")
162+
Write-Host "Setting MSBuild_ExtApisPackageVersion to '$packageVersion'"
163+
Write-Host "##vso[task.setvariable variable=MSBuild_ExtApisPackageVersion]$($packageVersion)"
164+
$folder = "$(Build.ArtifactStagingDirectory)/PackageArtifacts/Microsoft.NET.StringTools*.nupkg"
165+
$packageFile = Get-ChildItem -Path $folder -Filter Microsoft.NET.StringTools*.nupkg | Select-Object -First 1
166+
$packageVersion = $packageFile.BaseName.TrimStart("Microsoft.NET.StringTools")
167+
Write-Host "Setting MicrosoftNETStringToolsPackageVersion to '$packageVersion'"
168+
Write-Host "##vso[task.setvariable variable=MicrosoftNETStringToolsPackageVersion]$($packageVersion)"
169+
- task: 1ES.PublishNuGet@1
170+
displayName: 'Push MSBuild CoreXT packages'
171+
inputs:
172+
packageParentPath: '$(Build.ArtifactStagingDirectory)'
173+
packagesToPush: $(Build.ArtifactStagingDirectory)/PackageArtifacts/Microsoft.Build.*.nupkg;$(Build.ArtifactStagingDirectory)/PackageArtifacts/Microsoft.NET.StringTools.*.nupkg;$(Build.ArtifactStagingDirectory)/PackageArtifacts/VS.ExternalAPIs.*.nupkg
174+
nuGetFeedType: internal
175+
publishVstsFeed: VS
176+
allowPackageConflicts: true
177+
- template: /azure-pipelines/WIFtoPATauth.yml@self
178+
parameters:
179+
wifServiceConnectionName: azure-public/vside package push
180+
deadPATServiceConnectionId: 42175e93-c771-4a4f-a132-3cca78f44b3b
181+
- task: 1ES.PublishNuGet@1
182+
displayName: 'Push MSBuild packages to VSSDK'
183+
inputs:
184+
packageParentPath: '$(Build.ArtifactStagingDirectory)'
185+
packagesToPush: $(Build.ArtifactStagingDirectory)/PackageArtifacts/Microsoft.Build.*.nupkg;$(Build.ArtifactStagingDirectory)/PackageArtifacts/Microsoft.NET.StringTools*.nupkg
186+
nuGetFeedType: external
187+
publishFeedCredentials: azure-public/vssdk
188+
allowPackageConflicts: true
189+
- task: PowerShell@2
190+
name: PrintTargetBranch
191+
inputs:
192+
targetType: inline
193+
script: |
194+
Write-Host "InsertTargetBranch: $(InsertTargetBranch)"
195+
- task: MicroBuildInsertVsPayload@4
196+
name: MicroBuildInsertVsPayload_4
197+
displayName: Insert VS Payload
198+
inputs:
199+
LinkWorkItemsToPR: true
200+
TeamName: $(TeamName)
201+
TeamEmail: $(TeamEmail)
202+
TargetBranch: $(InsertTargetBranch)
203+
InsertionPayloadName: $(InsertPayloadName)
204+
PackagePropsValues: $(InsertPropsValues)
205+
InsertionDescription: $(InsertDescription)
206+
InsertionReviewers: MSBuild,VS ProTools
207+
CustomScriptExecutionCommand: $(InsertCustomScriptExecutionCommand)
208+
AutoCompletePR: true
209+
AutoCompleteMergeStrategy: Squash
210+
InsertionBuildPolicy: Request Perf DDRITs

0 commit comments

Comments
 (0)