Implement a CI pipeline (#13003)

Blue committed May 29, 2025 at 16:31 UTC 0fcad801bca05155813e2509564669ce71b13d3c
7 files changed +180 -135
.pipelines/build-stage.yml
+151 -122
@@ -36,6 +36,16 @@ parameters:
36 - x64
37 - arm64
38
39 + - name: pool
40 + type: string
41 + default: ''
42 +
43 + - name: vsoOrg
44 + type: string
45 +
46 + - name: vsoProject
47 + type: string
48 +
49 - name: esrp
50 type: object
51 default:
@@ -55,13 +65,19 @@ stages:
65 - stage: build
66 jobs:
67 - job:
68 +
69 displayName: "Formatting & localization checks"
70 timeoutInMinutes: 30
60 - pool:
61 - type: windows
71 +
72 variables:
73 ob_outputDirectory: '$(Build.SourcesDirectory)\out'
74
75 + ${{ if eq(parameters.pool, '') }}:
76 + pool: {'type': 'windows'}
77 +
78 + ${{ else }}:
79 + pool: ${{ parameters.pool }}
80 +
81 steps:
82 - script: python tools/devops/validate-localization.py localization/strings en-US
83 displayName: Validate localization resources
@@ -88,8 +104,12 @@ stages:
104 - job: build
105 displayName: "Build WSL package"
106 timeoutInMinutes: 120
91 - pool:
92 - type: windows
107 +
108 + ${{ if eq(parameters.pool, '') }}:
109 + pool: {'type': 'windows'}
110 +
111 + ${{ else }}:
112 + pool: ${{ parameters.pool }}
113
114 variables:
115 NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS: 60
@@ -146,7 +166,7 @@ stages:
166 displayName: "CMake ${{ platform }}"
167 inputs:
168 workingDirectory: "."
149 - cmakeArgs: . --fresh -A ${{ platform }} -DCMAKE_BUILD_TYPE=Release -DCMAKE_SYSTEM_VERSION=10.0.26100.0 -DPACKAGE_VERSION=$(version.WSL_PACKAGE_VERSION) -DWSL_NUGET_PACKAGE_VERSION=$(version.WSL_NUGET_PACKAGE_VERSION) -DSKIP_PACKAGE_SIGNING=${{ parameters.isRelease }} -DOFFICIAL_BUILD=${{ parameters.isRelease }} -DPIPELINE_BUILD_ID=$(Build.BuildId)
169 + cmakeArgs: . --fresh -A ${{ platform }} -DCMAKE_BUILD_TYPE=Release -DCMAKE_SYSTEM_VERSION=10.0.26100.0 -DPACKAGE_VERSION=$(version.WSL_PACKAGE_VERSION) -DWSL_NUGET_PACKAGE_VERSION=$(version.WSL_NUGET_PACKAGE_VERSION) -DSKIP_PACKAGE_SIGNING=${{ parameters.isRelease }} -DOFFICIAL_BUILD=${{ parameters.isRelease }} -DPIPELINE_BUILD_ID=$(Build.BuildId) -DVSO_ORG=${{ parameters.vsoOrg }} -DVSO_PROJECT=${{ parameters.vsoProject }}
170
171 # This additional Restore NuGet package task is added as a workaround for WSL Settings to have its' packages restored properly.
172 # Without this, building wsl settings may encounter the following error:
@@ -161,47 +181,48 @@ stages:
181 condition: and(succeeded(), eq('${{ parameters.isRelease }}', true))
182 displayName: "Build ${{ target.target }} (${{ platform }})"
183
164 - - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
165 - displayName: "Sign ${{ target.target }} (${{ platform }})"
166 - condition: and(succeeded(), eq('${{ parameters.isRelease }}', true))
167 - inputs:
168 - ConnectedServiceName: ${{ parameters.esrp.ConnectedServiceName}}
169 - signConfigType: ${{ parameters.esrp.signConfigType }}
170 - SessionTimeout: ${{ parameters.esrp.SessionTimeout }}
171 - MaxConcurrency: ${{ parameters.esrp.MaxConcurrency }}
172 - MaxRetryAttempts: ${{ parameters.esrp.MaxRetryAttempts }}
173 - ServiceEndpointUrl: ${{ parameters.esrp.ServiceEndpointUrl }}
174 - AuthAKVName: ${{ parameters.esrp.AuthAKVName }}
175 - AuthSignCertName: ${{ parameters.esrp.AuthSignCertName }}
176 - AppRegistrationClientId: ${{ parameters.esrp.AppRegistrationClientId }}
177 - AppRegistrationTenantId: ${{ parameters.esrp.AppRegistrationTenantId }}
178 - FolderPath: "bin\\${{ platform }}"
179 - Pattern: "${{ target.pattern }}"
180 - UseMSIAuthentication: true
181 - EsrpClientId: ${{ parameters.esrp.EsrpClientId }}
182 - inlineOperation: |
183 - [
184 - {
185 - "KeyCode": "CP-230012",
186 - "OperationCode": "SigntoolSign",
187 - "Parameters" : {
188 - "OpusName" : "Microsoft",
189 - "OpusInfo" : "http://www.microsoft.com",
190 - "FileDigest" : "/fd \"SHA256\"",
191 - "PageHash" : "/NPH",
192 - "TimeStamp" : "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
184 + - ${{ if eq(parameters.isRelease, 'true') }}:
185 + - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
186 + displayName: "Sign ${{ target.target }} (${{ platform }})"
187 + condition: and(succeeded(), eq('${{ parameters.isRelease }}', true))
188 + inputs:
189 + ConnectedServiceName: ${{ parameters.esrp.ConnectedServiceName}}
190 + signConfigType: ${{ parameters.esrp.signConfigType }}
191 + SessionTimeout: ${{ parameters.esrp.SessionTimeout }}
192 + MaxConcurrency: ${{ parameters.esrp.MaxConcurrency }}
193 + MaxRetryAttempts: ${{ parameters.esrp.MaxRetryAttempts }}
194 + ServiceEndpointUrl: ${{ parameters.esrp.ServiceEndpointUrl }}
195 + AuthAKVName: ${{ parameters.esrp.AuthAKVName }}
196 + AuthSignCertName: ${{ parameters.esrp.AuthSignCertName }}
197 + AppRegistrationClientId: ${{ parameters.esrp.AppRegistrationClientId }}
198 + AppRegistrationTenantId: ${{ parameters.esrp.AppRegistrationTenantId }}
199 + FolderPath: "bin\\${{ platform }}"
200 + Pattern: "${{ target.pattern }}"
201 + UseMSIAuthentication: true
202 + EsrpClientId: ${{ parameters.esrp.EsrpClientId }}
203 + inlineOperation: |
204 + [
205 + {
206 + "KeyCode": "CP-230012",
207 + "OperationCode": "SigntoolSign",
208 + "Parameters" : {
209 + "OpusName" : "Microsoft",
210 + "OpusInfo" : "http://www.microsoft.com",
211 + "FileDigest" : "/fd \"SHA256\"",
212 + "PageHash" : "/NPH",
213 + "TimeStamp" : "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
214 + },
215 + "ToolName" : "sign",
216 + "ToolVersion" : "1.0"
217 },
194 - "ToolName" : "sign",
195 - "ToolVersion" : "1.0"
196 - },
197 - {
198 - "KeyCode" : "CP-230012",
199 - "OperationCode" : "SigntoolVerify",
200 - "Parameters" : {},
201 - "ToolName" : "sign",
202 - "ToolVersion" : "1.0"
203 - }
204 - ]
218 + {
219 + "KeyCode" : "CP-230012",
220 + "OperationCode" : "SigntoolVerify",
221 + "Parameters" : {},
222 + "ToolName" : "sign",
223 + "ToolVersion" : "1.0"
224 + }
225 + ]
226
227 # Replace the intermediate wslsettings binaries file with the signed versions so that any future steps building wslsettings will use the signed versions
228 - task: PowerShell@2
@@ -230,47 +251,48 @@ stages:
251 $arch = '${{ platform }}'
252 Copy-Item -Path "bin\$arch\release\wsl.msi" -Destination "$(ob_outputDirectory)\bundle\wsl.$(version.WSL_PACKAGE_VERSION).$arch.msi"
253
233 - - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
234 - displayName: "Sign the bundle"
235 - condition: and(succeeded(), eq('${{ parameters.isRelease }}', true))
236 - inputs:
237 - ConnectedServiceName: ${{ parameters.esrp.ConnectedServiceName}}
238 - signConfigType: ${{ parameters.esrp.signConfigType }}
239 - SessionTimeout: ${{ parameters.esrp.SessionTimeout }}
240 - MaxConcurrency: ${{ parameters.esrp.MaxConcurrency }}
241 - MaxRetryAttempts: ${{ parameters.esrp.MaxRetryAttempts }}
242 - ServiceEndpointUrl: ${{ parameters.esrp.ServiceEndpointUrl }}
243 - AuthAKVName: ${{ parameters.esrp.AuthAKVName }}
244 - AuthSignCertName: ${{ parameters.esrp.AuthSignCertName }}
245 - AppRegistrationClientId: ${{ parameters.esrp.AppRegistrationClientId }}
246 - AppRegistrationTenantId: ${{ parameters.esrp.AppRegistrationTenantId }}
247 - FolderPath: "bundle"
248 - Pattern: "*.msixbundle"
249 - UseMSIAuthentication: true
250 - EsrpClientId: ${{ parameters.esrp.EsrpClientId }}
251 - inlineOperation: |
252 - [
253 - {
254 - "KeyCode": "CP-230012",
255 - "OperationCode": "SigntoolSign",
256 - "Parameters" : {
257 - "OpusName" : "Microsoft",
258 - "OpusInfo" : "http://www.microsoft.com",
259 - "FileDigest" : "/fd \"SHA256\"",
260 - "PageHash" : "/NPH",
261 - "TimeStamp" : "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
254 + - ${{ if eq(parameters.isRelease, 'true') }}:
255 + - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
256 + displayName: "Sign the bundle"
257 + condition: and(succeeded(), eq('${{ parameters.isRelease }}', true))
258 + inputs:
259 + ConnectedServiceName: ${{ parameters.esrp.ConnectedServiceName}}
260 + signConfigType: ${{ parameters.esrp.signConfigType }}
261 + SessionTimeout: ${{ parameters.esrp.SessionTimeout }}
262 + MaxConcurrency: ${{ parameters.esrp.MaxConcurrency }}
263 + MaxRetryAttempts: ${{ parameters.esrp.MaxRetryAttempts }}
264 + ServiceEndpointUrl: ${{ parameters.esrp.ServiceEndpointUrl }}
265 + AuthAKVName: ${{ parameters.esrp.AuthAKVName }}
266 + AuthSignCertName: ${{ parameters.esrp.AuthSignCertName }}
267 + AppRegistrationClientId: ${{ parameters.esrp.AppRegistrationClientId }}
268 + AppRegistrationTenantId: ${{ parameters.esrp.AppRegistrationTenantId }}
269 + FolderPath: "bundle"
270 + Pattern: "*.msixbundle"
271 + UseMSIAuthentication: true
272 + EsrpClientId: ${{ parameters.esrp.EsrpClientId }}
273 + inlineOperation: |
274 + [
275 + {
276 + "KeyCode": "CP-230012",
277 + "OperationCode": "SigntoolSign",
278 + "Parameters" : {
279 + "OpusName" : "Microsoft",
280 + "OpusInfo" : "http://www.microsoft.com",
281 + "FileDigest" : "/fd \"SHA256\"",
282 + "PageHash" : "/NPH",
283 + "TimeStamp" : "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
284 + },
285 + "ToolName" : "sign",
286 + "ToolVersion" : "1.0"
287 },
263 - "ToolName" : "sign",
264 - "ToolVersion" : "1.0"
265 - },
266 - {
267 - "KeyCode" : "CP-230012",
268 - "OperationCode" : "SigntoolVerify",
269 - "Parameters" : {},
270 - "ToolName" : "sign",
271 - "ToolVersion" : "1.0"
272 - }
273 - ]
288 + {
289 + "KeyCode" : "CP-230012",
290 + "OperationCode" : "SigntoolVerify",
291 + "Parameters" : {},
292 + "ToolName" : "sign",
293 + "ToolVersion" : "1.0"
294 + }
295 + ]
296
297 - script: md.exe $(ob_outputDirectory)\bin\nuget
298 displayName: "Create the nuget directory"
@@ -279,41 +301,42 @@ stages:
301 - script: nuget.exe pack ${{ package }} -OutputDirectory $(ob_outputDirectory)\bin\nuget -NonInteractive
302 displayName: Build ${{ package }}
303
282 - - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
283 - displayName: "Sign nuget packages"
284 - condition: and(succeeded(), eq('${{ parameters.isRelease }}', true))
285 - inputs:
286 - ConnectedServiceName: ${{ parameters.esrp.ConnectedServiceName}}
287 - signConfigType: ${{ parameters.esrp.signConfigType }}
288 - SessionTimeout: ${{ parameters.esrp.SessionTimeout }}
289 - MaxConcurrency: ${{ parameters.esrp.MaxConcurrency }}
290 - MaxRetryAttempts: ${{ parameters.esrp.MaxRetryAttempts }}
291 - ServiceEndpointUrl: ${{ parameters.esrp.ServiceEndpointUrl }}
292 - AuthAKVName: ${{ parameters.esrp.AuthAKVName }}
293 - AuthSignCertName: ${{ parameters.esrp.AuthSignCertName }}
294 - AppRegistrationClientId: ${{ parameters.esrp.AppRegistrationClientId }}
295 - AppRegistrationTenantId: ${{ parameters.esrp.AppRegistrationTenantId }}
296 - FolderPath: '$(ob_outputDirectory)\bin\nuget'
297 - Pattern: "*.nupkg"
298 - UseMSIAuthentication: true
299 - EsrpClientId: ${{ parameters.esrp.EsrpClientId }}
300 - inlineOperation: |
301 - [
302 - {
303 - "KeyCode": "CP-401405",
304 - "OperationCode": "NuGetSign",
305 - "Parameters" : {},
306 - "ToolName" : "sign",
307 - "ToolVersion" : "1.0"
308 - },
309 - {
310 - "KeyCode" : "CP-401405",
311 - "OperationCode" : "NuGetVerify",
312 - "Parameters" : {},
313 - "ToolName" : "sign",
314 - "ToolVersion" : "1.0"
315 - }
316 - ]
304 + - ${{ if eq(parameters.isRelease, 'true') }}:
305 + - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@5
306 + displayName: "Sign nuget packages"
307 + condition: and(succeeded(), eq('${{ parameters.isRelease }}', true))
308 + inputs:
309 + ConnectedServiceName: ${{ parameters.esrp.ConnectedServiceName}}
310 + signConfigType: ${{ parameters.esrp.signConfigType }}
311 + SessionTimeout: ${{ parameters.esrp.SessionTimeout }}
312 + MaxConcurrency: ${{ parameters.esrp.MaxConcurrency }}
313 + MaxRetryAttempts: ${{ parameters.esrp.MaxRetryAttempts }}
314 + ServiceEndpointUrl: ${{ parameters.esrp.ServiceEndpointUrl }}
315 + AuthAKVName: ${{ parameters.esrp.AuthAKVName }}
316 + AuthSignCertName: ${{ parameters.esrp.AuthSignCertName }}
317 + AppRegistrationClientId: ${{ parameters.esrp.AppRegistrationClientId }}
318 + AppRegistrationTenantId: ${{ parameters.esrp.AppRegistrationTenantId }}
319 + FolderPath: '$(ob_outputDirectory)\bin\nuget'
320 + Pattern: "*.nupkg"
321 + UseMSIAuthentication: true
322 + EsrpClientId: ${{ parameters.esrp.EsrpClientId }}
323 + inlineOperation: |
324 + [
325 + {
326 + "KeyCode": "CP-401405",
327 + "OperationCode": "NuGetSign",
328 + "Parameters" : {},
329 + "ToolName" : "sign",
330 + "ToolVersion" : "1.0"
331 + },
332 + {
333 + "KeyCode" : "CP-401405",
334 + "OperationCode" : "NuGetVerify",
335 + "Parameters" : {},
336 + "ToolName" : "sign",
337 + "ToolVersion" : "1.0"
338 + }
339 + ]
340
341 - powershell: |
342 foreach ($arch in @("x64", "ARM64"))
@@ -323,7 +346,7 @@ stages:
346 mkdir $pdbFolder
347 foreach ($filter in @("*.pdb", "*.debug"))
348 {
326 - foreach ($e in (Get-ChildItem -Recurse -Path $binFolder -Filter $filter)) {Copy-Item -Path $e.fullname -Destination (Join-Path $pdbFolder $e.name)}
349 + foreach ($e in (Get-ChildItem -Recurse -Path $binFolder -Filter $filter)) {Move-Item -Path $e.fullname -Destination (Join-Path $pdbFolder $e.name)}
350 }
351 }
352
@@ -361,7 +384,7 @@ stages:
384 Move-Item -Path "tools\test\CloudTest-Setup.bat" -Destination "$(ob_outputDirectory)\testbin\CloudTest-Setup.bat"
385 Move-Item -Path "tools\wsl.wprp" -Destination "$(ob_outputDirectory)\testbin\wsl.wprp"
386 Move-Item -Path "test\linux\unit_tests" -Destination "$(ob_outputDirectory)\testbin\unit_tests"
364 -
387 +
388 Move-Item -Path bundle\release\* -Destination $(ob_outputDirectory)\bundle
389 $TestDistroVersion = (Select-Xml -Path packages.config -XPath '/packages/package[@id=''Microsoft.WSL.TestDistro'']/@version').Node.Value
390 Copy-Item "packages\Microsoft.WSL.TestDistro.$TestDistroVersion\test_distro.tar.xz" "$(ob_outputDirectory)\testbin\x64"
@@ -380,5 +403,11 @@ stages:
403 $(ob_outputDirectory)/bin/**/*.exe
404 $(ob_outputDirectory)/bin/**/*.dll
405
406 + - ${{ if ne(parameters.pool, '') }}:
407 + - task: PublishPipelineArtifact@1
408 + inputs:
409 + targetPath: $(ob_outputDirectory)
410 + artifactName: $(ob_artifactBaseName)$(ob_artifactSuffix)
411 +
412 - task: CodeQL3000Finalize@0
413 condition: ${{ and(parameters.isNightly, eq(variables['Build.SourceBranch'], 'refs/heads/main'))}}
.pipelines/test-job.yml
+9 -2
@@ -11,6 +11,10 @@ parameters:
11 - name: run
12 type: boolean
13
14 + - name: pool
15 + type: string
16 + default: ''
17 +
18 jobs:
19 - job: test_${{ parameters.branch }}_${{ parameters.version }}
20 displayName: "${{ parameters.version }} tests - ${{ parameters.branch }}"
@@ -22,8 +26,11 @@ jobs:
26 ob_artifactSuffix: '_test'
27 timeoutInMinutes: 360
28 cancelTimeoutInMinutes: 420
25 - pool:
26 - type: cloudtestagentless
29 + ${{ if eq(parameters.pool, '') }}:
30 + pool: {'type': 'cloudtestagentless'}
31 +
32 + ${{ else }}:
33 + pool: ${{ parameters.pool }}
34 steps:
35 - task: CloudTestServerBuildTask@2
36 inputs:
.pipelines/test-stage.yml
+8 -3
@@ -3,12 +3,16 @@ parameters:
3 type: boolean
4 default: false
5
6 + - name: pool
7 + type: string
8 + default: ''
9 +
10 - name: versions
11 type: object
12 default:
13 - wsl1
14 - wsl2
11 -
15 +
16 - name: test_images
17 type: object
18 default:
@@ -20,7 +24,7 @@ parameters:
24 image: 2022-datacenter-g2-2024-09-10
25 - name: vb_release
26 image: win10-22h2-ent-g2-2024-09-10
23 -
27 +
28 # TODO: ge_release
29
30 stages:
@@ -34,4 +38,5 @@ stages:
38 branch: "${{ image.name }}"
39 version: ${{ version }}
40 image: "${{ image.image }}"
37 - run: ${{ or(not(parameters.rs_prerelease_only), eq(image.name, 'rs_prerelease')) }}
\ No newline at end of file
41 + run: ${{ or(not(parameters.rs_prerelease_only), eq(image.name, 'rs_prerelease')) }}
42 + pool: "${{ parameters.pool }}"
\ No newline at end of file
.pipelines/wsl-build-nightly-onebranch.yml
+2
@@ -44,6 +44,8 @@ extends:
44 parameters:
45 isRelease: false
46 isNightly: true
47 + vsoOrg: microsoft
48 + vsoProject: Microsoft.WSL
49
50 - template: test-stage.yml@self
51 parameters:
.pipelines/wsl-build-pr.yml
+4 -4
@@ -4,15 +4,15 @@ trigger:
4 - master
5 - release/*
6
7 -git:
8 - fetchDepth: -1
9 - fetchTags: true
10 -
7 stages:
8 - template: build-stage.yml@self
9 parameters:
10 isRelease: false
11 + pool: 'wsl-build'
12 + vsoOrg: shine-oss
13 + vsoProject: wsl
14
15 - template: test-stage.yml@self
16 parameters:
17 rs_prerelease_only: true
18 + pool: server
.pipelines/wsl-build-release-onebranch.yml
+2
@@ -52,6 +52,8 @@ extends:
52 isRelease: true
53 packageVersion: ${{ iif(eq(parameters.testVersion, ''), variables['Build.SourceBranchName'], parameters.testVersion) }}
54 traceLoggingConfig: $(ReleaseTraceLoggingConfig)
55 + vsoOrg: microsoft
56 + vsoProject: Microsoft.WSL
57
58 - template: test-stage.yml@self
59 parameters:
cloudtest/TestMap.xml.in
+4 -4
@@ -5,7 +5,7 @@
5 <Provider Type="PipelineArtifacts">
6 <Properties>
7 <Add Name="CloudTest.ProviderCustomName" Value="[drop]" />
8 - <Add Name="PipelineArtifactBuildUrl" Value="https://microsoft.visualstudio.com/Microsoft.WSL/_build/results?buildId=${PIPELINE_BUILD_ID}"/>
8 + <Add Name="PipelineArtifactBuildUrl" Value="https://${VSO_ORG}.visualstudio.com/${VSO_PROJECT}/_build/results?buildId=${PIPELINE_BUILD_ID}"/>
9 <Add Name="PipelineArtifactName" Value="drop_wsl_build"/>
10 </Properties>
11 </Provider>
@@ -13,21 +13,21 @@
13 <Properties>
14 <Add Name="CloudTest.ProviderCustomName" Value="[test_distro]" />
15 <!-- When updating the drops for this make sure the rentention is set to never expire -->
16 - <Add Name="DropURL" Value="https://microsoft.artifacts.visualstudio.com/DefaultCollection/_apis/drop/drops/WSL/${CLOUDTEST_TEST_DISTRO_DROP}"/>
16 + <Add Name="DropURL" Value="https://${VSO_ORG}.artifacts.visualstudio.com/_apis/drop/drops/WSL/${CLOUDTEST_TEST_DISTRO_DROP}"/>
17 </Properties>
18 </Provider>
19 <Provider Type="VSODrop">
20 <Properties>
21 <Add Name="CloudTest.ProviderCustomName" Value="[test_packages]" />
22 <!-- When updating the drops for this make sure the rentention is set to never expire -->
23 - <Add Name="DropURL" Value="https://microsoft.artifacts.visualstudio.com/DefaultCollection/_apis/drop/drops/WSL/${CLOUDTEST_TEST_PACKAGES}"/>
23 + <Add Name="DropURL" Value="https://${VSO_ORG}.artifacts.visualstudio.com/_apis/drop/drops/WSL/${CLOUDTEST_TEST_PACKAGES}"/>
24 </Properties>
25 </Provider>
26 <Provider Type="VSODrop">
27 <Properties>
28 <Add Name="CloudTest.ProviderCustomName" Value="[dump_tool]" />
29 <!-- When updating the drops for this make sure the rentention is set to never expire -->
30 - <Add Name="DropURL" Value="https://microsoft.artifacts.visualstudio.com/DefaultCollection/_apis/drop/drops/WSL/${DUMPTOOL_DROP}"/>
30 + <Add Name="DropURL" Value="https://${VSO_ORG}.artifacts.visualstudio.com/_apis/drop/drops/WSL/${DUMPTOOL_DROP}"/>
31 </Properties>
32 </Provider>
33 </Providers>