Skip to content

Commit 98ac0d8

Browse files
AR-MayMichalPavlik
authored andcommitted
Add a job for experimental Framework MSBuild insertion to a pipeline (#9309)
Context We need to add an extra job to .exp-insertions.yml pipeline for creating experimental Framework MSBuild. Changes Made Pipeline refactored, a job added Fixed bug in deploy script code path for Framework MSBuild Testing Manual run of the pipeline
1 parent cb02c2c commit 98ac0d8

File tree

2 files changed

+185
-92
lines changed

2 files changed

+185
-92
lines changed

.exp-insertions.yml

Lines changed: 173 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1-
# Pipeline creates a dotnet with experimental msbuild dlls.
1+
# Pipeline creates experimental msbuild insertions.
22

33
trigger: none # Prevents this pipeline from triggering on check-ins
44
pr: none # don't run this on PR as well
55

66
parameters:
7-
# Dotnet installer channel from where to take the latest dotnet bits.
7+
# Dotnet installer channel from which to take the latest dotnet bits.
88
- name: DotnetInstallerChannel
99
displayName: Dotnet installer channel
10+
type: string
11+
default: 'none'
12+
# VS version for which to take the latest Retail MSBuild bits.
13+
- name: VSVersionName
14+
displayName: VS Version
1015
type: string
16+
default: 'none'
1117
# Branch from the MSBuild Build CI pipeline. Default: main
1218
# Top run for the branch would be used to create an experimental insertion.
1319
- name: MSBuildBranch
@@ -23,105 +29,192 @@ parameters:
2329
variables:
2430
- name: _MsBuildCiPipelineId
2531
value: 9434
32+
- name: _MSBuildConfigFilePath
33+
value: "config/batmon/Q-Prod-Co3/Coordinator/ToolsReleaseConfig-GeneralPublic.json"
34+
- name: VSVersion
35+
value: ${{parameters.VSVersionName}}
2636

2737
pool:
2838
vmImage: windows-latest
2939

30-
steps:
31-
- powershell: |
32-
mkdir '$(System.ArtifactsDirectory)/installer'
33-
34-
$dotnetChannel = '${{parameters.DotnetInstallerChannel}}'
35-
$sdks = "dotnet-sdk-win-x64.zip", "dotnet-sdk-linux-x64.tar.gz"
36-
37-
foreach ($sdk in $sdks)
38-
{
39-
Write-Host "Downloading dotnet $sdk from channel $dotnetChannel"
40-
Invoke-WebRequest `
41-
-Uri "https://aka.ms/dotnet/$dotnetChannel/daily/$sdk" `
42-
-OutFile "$(System.ArtifactsDirectory)/installer/$sdk"
43-
}
44-
mkdir '$(Pipeline.Workspace)/artifacts'
45-
46-
displayName: Download latest dotnet sdks
40+
resources:
41+
repositories:
42+
- repository: CloudBuildConfig
43+
type: git
44+
name: CloudBuild/CloudBuildConfig
45+
endpoint: CloudBuild_Test
46+
ref: refs/heads/main
4747

48-
# Download latest build artifacts for a branch from MSBuild Build CI
49-
- ${{ if eq(parameters.MSBuildBuildID, 'default') }}:
50-
- task: DownloadBuildArtifacts@1
51-
inputs:
52-
buildType: specific
53-
project: DevDiv
54-
pipeline: $(_MsBuildCiPipelineId)
55-
buildVersionToDownload: latestFromBranch
56-
branchName: '${{parameters.MSBuildBranch}}'
57-
artifactName: bin
58-
downloadPath: '$(System.ArtifactsDirectory)/msbuild/artifacts/bin'
59-
itemPattern: "MSBuild.Bootstrap/**"
60-
displayName: Download latest msbuild from branch
48+
jobs:
49+
- job: CreateExpDotnet
50+
displayName: Create Experimental Dotnet
51+
condition: ne('${{ parameters.DotnetInstallerChannel }}', 'none')
52+
steps:
53+
- powershell: |
54+
mkdir '$(System.ArtifactsDirectory)/installer'
55+
56+
$dotnetChannel = '${{parameters.DotnetInstallerChannel}}'
57+
$sdks = "dotnet-sdk-win-x64.zip", "dotnet-sdk-linux-x64.tar.gz"
58+
59+
foreach ($sdk in $sdks)
60+
{
61+
Write-Host "Downloading dotnet $sdk from channel $dotnetChannel"
62+
Invoke-WebRequest `
63+
-Uri "https://aka.ms/dotnet/$dotnetChannel/daily/$sdk" `
64+
-OutFile "$(System.ArtifactsDirectory)/installer/$sdk"
65+
}
66+
mkdir '$(Pipeline.Workspace)/artifacts'
67+
displayName: Download latest dotnet sdks
6168
62-
# Download build artifacts for MSBuild Build CI specific build
63-
- ${{ if ne(parameters.MSBuildBuildID, 'default') }}:
6469
- task: DownloadBuildArtifacts@1
6570
inputs:
6671
buildType: specific
6772
project: DevDiv
6873
pipeline: $(_MsBuildCiPipelineId)
69-
buildVersionToDownload: specific
70-
buildId: ${{parameters.MSBuildBuildID}}
74+
${{ if eq(parameters.MSBuildBuildID, 'default') }}:
75+
buildVersionToDownload: latestFromBranch
76+
branchName: '${{parameters.MSBuildBranch}}'
77+
${{ else }}:
78+
buildVersionToDownload: specific
79+
buildId: ${{parameters.MSBuildBuildID}}
7180
artifactName: bin
7281
downloadPath: '$(System.ArtifactsDirectory)/msbuild/artifacts/bin'
73-
itemPattern: "MSBuild.Bootstrap/**"
74-
displayName: Download specified msbuild build
75-
76-
- powershell: |
77-
$sdk = "dotnet-sdk-win-x64"
82+
displayName: Download msbuild artifacts
7883

79-
Write-Host "Extracting $(System.ArtifactsDirectory)/installer/$sdk.zip"
80-
Expand-Archive "$(System.ArtifactsDirectory)/installer/$sdk.zip" -DestinationPath "$(Pipeline.Workspace)/exp-dotnet/$sdk"
84+
- powershell: |
85+
$sdk = "dotnet-sdk-win-x64"
86+
87+
Write-Host "Extracting $(System.ArtifactsDirectory)/installer/$sdk.zip"
88+
Expand-Archive "$(System.ArtifactsDirectory)/installer/$sdk.zip" -DestinationPath "$(Pipeline.Workspace)/exp-dotnet/$sdk"
8189
82-
$dotnetDirectory = Get-ChildItem -Directory -Path "$(Pipeline.Workspace)/exp-dotnet/$sdk/sdk"
83-
$dotnetVersion = $dotnetDirectory.Name
84-
Write-Host "Detected dotnet version: $dotnetVersion"
90+
$dotnetDirectory = Get-ChildItem -Directory -Path "$(Pipeline.Workspace)/exp-dotnet/$sdk/sdk"
91+
$dotnetVersion = $dotnetDirectory.Name
92+
Write-Host "Detected dotnet version: $dotnetVersion"
8593
86-
Write-Host "Updating MSBuild dlls."
87-
$(Build.SourcesDirectory)/scripts/Deploy-MSBuild.ps1 `
88-
-destination "$(Pipeline.Workspace)/exp-dotnet/$sdk/sdk/$dotnetVersion" `
89-
-bootstrapDirectory "$(System.ArtifactsDirectory)/msbuild/artifacts/bin/MSBuild.Bootstrap" `
90-
-configuration Release `
91-
-makeBackup $false
94+
Write-Host "Updating MSBuild dlls."
95+
$(Build.SourcesDirectory)/scripts/Deploy-MSBuild.ps1 `
96+
-destination "$(Pipeline.Workspace)/exp-dotnet/$sdk/sdk/$dotnetVersion" `
97+
-binDirectory "$(System.ArtifactsDirectory)/msbuild/artifacts/bin" `
98+
-configuration Release `
99+
-makeBackup $false
92100
93-
Write-Host "Compressing dotnet sdk files"
94-
Get-ChildItem -Path "$(Pipeline.Workspace)/exp-dotnet/$sdk" | Compress-Archive -DestinationPath "$(Pipeline.Workspace)/artifacts/$sdk.zip"
101+
Write-Host "Compressing dotnet sdk files"
102+
Get-ChildItem -Path "$(Pipeline.Workspace)/exp-dotnet/$sdk" | Compress-Archive -DestinationPath "$(Pipeline.Workspace)/artifacts/$sdk.zip"
95103
96-
displayName: Dogfood msbuild dlls to dotnet sdk win-x64
104+
displayName: Dogfood msbuild dlls to dotnet sdk win-x64
97105
98-
- powershell: |
99-
$sdk = "dotnet-sdk-linux-x64"
106+
- powershell: |
107+
$sdk = "dotnet-sdk-linux-x64"
100108
101-
mkdir "$(Pipeline.Workspace)/exp-dotnet/$sdk"
109+
mkdir "$(Pipeline.Workspace)/exp-dotnet/$sdk"
102110
103-
Write-Host "Extracting $(System.ArtifactsDirectory)/installer/$sdk.tar.gz"
104-
tar -xzvf "$(System.ArtifactsDirectory)/installer/$sdk.tar.gz" -C "$(Pipeline.Workspace)/exp-dotnet/$sdk"
111+
Write-Host "Extracting $(System.ArtifactsDirectory)/installer/$sdk.tar.gz"
112+
tar -xzvf "$(System.ArtifactsDirectory)/installer/$sdk.tar.gz" -C "$(Pipeline.Workspace)/exp-dotnet/$sdk"
105113
106-
$dotnetDirectory = Get-ChildItem -Directory -Path $(Pipeline.Workspace)/exp-dotnet/$sdk/sdk
107-
$dotnetVersion = $dotnetDirectory.Name
108-
Write-Host "Detected dotnet version: $dotnetVersion"
114+
$dotnetDirectory = Get-ChildItem -Directory -Path $(Pipeline.Workspace)/exp-dotnet/$sdk/sdk
115+
$dotnetVersion = $dotnetDirectory.Name
116+
Write-Host "Detected dotnet version: $dotnetVersion"
109117
110-
Write-Host "Updating MSBuild dlls."
111-
$(Build.SourcesDirectory)/scripts/Deploy-MSBuild.ps1 `
112-
-destination "$(Pipeline.Workspace)/exp-dotnet/$sdk/sdk/$dotnetVersion" `
113-
-bootstrapDirectory "$(System.ArtifactsDirectory)/msbuild/artifacts/bin/MSBuild.Bootstrap" `
114-
-configuration Release `
115-
-makeBackup $false
118+
Write-Host "Updating MSBuild dlls."
119+
$(Build.SourcesDirectory)/scripts/Deploy-MSBuild.ps1 `
120+
-destination "$(Pipeline.Workspace)/exp-dotnet/$sdk/sdk/$dotnetVersion" `
121+
-binDirectory "$(System.ArtifactsDirectory)/msbuild/artifacts/bin" `
122+
-configuration Release `
123+
-makeBackup $false
116124
117-
Write-Host "Compressing dotnet sdk files"
118-
tar -czvf "$(Pipeline.Workspace)/artifacts/$sdk.tar.gz" -C "$(Pipeline.Workspace)/exp-dotnet/$sdk" .
119-
displayName: Dogfood msbuild dlls to dotnet sdk linux-x64
120-
121-
- task: PublishPipelineArtifact@1
122-
inputs:
123-
targetPath: '$(Pipeline.Workspace)/artifacts'
124-
artifactName: ExperimentalDotnet
125-
parallel: true
126-
condition: always()
127-
displayName: Publish crank assests artifacts
125+
Write-Host "Compressing dotnet sdk files"
126+
tar -czvf "$(Pipeline.Workspace)/artifacts/$sdk.tar.gz" -C "$(Pipeline.Workspace)/exp-dotnet/$sdk" .
127+
displayName: Dogfood msbuild dlls to dotnet sdk linux-x64
128+
129+
- task: PublishPipelineArtifact@1
130+
inputs:
131+
targetPath: '$(Pipeline.Workspace)/artifacts'
132+
artifactName: ExperimentalDotnet
133+
parallel: true
134+
condition: always()
135+
displayName: Publish crank assests artifacts
136+
137+
138+
- job: CreateExpMSBuild
139+
displayName: "Create Experimental MSBuild"
140+
condition: ne('${{ parameters.VSVersionName }}', 'none')
141+
steps:
142+
- checkout: self
143+
144+
- checkout: CloudBuildConfig
145+
146+
- powershell: |
147+
$json = (Get-Content "$(Build.SourcesDirectory)/CloudBuildConfig/$(_MSBuildConfigFilePath)" -Raw) | ConvertFrom-Json
148+
$MSBuildDropPath = $json.Tools.MSBuild.Locations
149+
Write-Host "##vso[task.setvariable variable=MSBuildDropPath]$MSBuildDropPath"
150+
Write-Host "MSBuild Drop Path directory: $MSBuildDropPath"
151+
displayName: Get Retail MSBuild Drop Path
152+
153+
- task: NuGetToolInstaller@1
154+
displayName: 'Install NuGet.exe'
155+
156+
- task: NuGetCommand@2
157+
displayName: Restore internal tools
158+
inputs:
159+
command: restore
160+
feedsToUse: config
161+
restoreSolution: '$(Build.SourcesDirectory)\DotNet-msbuild-Trusted\eng\common\internal\Tools.csproj'
162+
nugetConfigPath: '$(Build.SourcesDirectory)\DotNet-msbuild-Trusted\NuGet.config'
163+
restoreDirectory: '$(Build.SourcesDirectory)\DotNet-msbuild-Trusted\.packages'
164+
165+
- powershell: |
166+
mkdir "$(Pipeline.Workspace)/artifacts"
167+
168+
$dropAppDirectory = Get-ChildItem -Directory -Path "$(Build.SourcesDirectory)/DotNet-msbuild-Trusted/.packages/drop.app"
169+
$dropAppVersion = $dropAppDirectory.Name
170+
Write-Host "Detected drop.exe version: $dropAppVersion"
171+
172+
$dropExePath = "$(Build.SourcesDirectory)/DotNet-msbuild-Trusted/.packages/drop.app/$dropAppVersion/lib/net45/drop.exe"
173+
Write-Host "Detected drop.exe path: $dropExePath"
174+
175+
Write-Host "Downloading VS msbuild"
176+
& "$dropExePath" get --patAuthEnvVar 'cloudbuild-token' -u "$(MSBuildDropPath)\$(VSVersion)" -d "$(System.ArtifactsDirectory)/VSMSBuildDrop"
177+
Write-Host "Download of VS msbuild finished"
178+
179+
Write-Host "Copying VS msbuild to $(Pipeline.Workspace)/VSMSBuild"
180+
Copy-Item -Path "$(System.ArtifactsDirectory)/VSMSBuildDrop/*" -Destination "$(Pipeline.Workspace)/VSMSBuild" -Recurse
181+
Write-Host "Copy of VS msbuild finished"
182+
displayName: Download msbuild vs drop
183+
env:
184+
cloudbuild-token: $(cloudbuild-token)
185+
186+
- task: DownloadBuildArtifacts@1
187+
inputs:
188+
buildType: specific
189+
project: DevDiv
190+
pipeline: $(_MsBuildCiPipelineId)
191+
${{ if eq(parameters.MSBuildBuildID, 'default') }}:
192+
buildVersionToDownload: latestFromBranch
193+
branchName: '${{parameters.MSBuildBranch}}'
194+
${{ else }}:
195+
buildVersionToDownload: specific
196+
buildId: ${{parameters.MSBuildBuildID}}
197+
artifactName: bin
198+
downloadPath: '$(System.ArtifactsDirectory)/msbuild/artifacts/bin'
199+
displayName: Download msbuild artifacts
200+
201+
- powershell: |
202+
Write-Host "Updating MSBuild dlls."
203+
$(Build.SourcesDirectory)/DotNet-msbuild-Trusted/scripts/Deploy-MSBuild.ps1 `
204+
-destination "$(Pipeline.Workspace)/VSMSBuild/$(VSVersion)/MSBuild/Current/Bin" `
205+
-binDirectory "$(System.ArtifactsDirectory)/msbuild/artifacts/bin" `
206+
-configuration Release `
207+
-makeBackup $false
208+
209+
ls "$(Pipeline.Workspace)/VSMSBuild/$(VSVersion)"
210+
Write-Host "Compressing msbuild files"
211+
Get-ChildItem -Path "$(Pipeline.Workspace)/VSMSBuild/$(VSVersion)" | Compress-Archive -DestinationPath "$(Pipeline.Workspace)/artifacts/MSBuild.zip"
212+
displayName: Dogfood msbuild dlls
213+
214+
- task: PublishPipelineArtifact@1
215+
inputs:
216+
targetPath: '$(Pipeline.Workspace)/artifacts'
217+
artifactName: ExperimentalMSBuild
218+
parallel: true
219+
condition: always()
220+
displayName: Publish crank assests artifacts

scripts/Deploy-MSBuild.ps1

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Param(
66
[string] $configuration = "Debug",
77
[ValidateSet('Core','Desktop', 'Detect', 'Full')]
88
[string] $runtime = "Detect",
9-
[string] $bootstrapDirectory = "",
9+
[string] $binDirectory = "",
1010
[bool] $makeBackup = $true
1111
)
1212

@@ -80,11 +80,11 @@ if ($runtime -eq "Desktop") {
8080
}
8181

8282
# If bootstrap directory is not defined in parameters, use the default location
83-
if ($bootstrapDirectory -eq "") {
84-
$bootstrapDirectory = "artifacts\bin\MSBuild.Bootstrap"
83+
if ($binDirectory -eq "") {
84+
$binDirectory = "artifacts\bin"
8585
}
8686

87-
$bootstrapBinDirectory = "$bootstrapDirectory\$configuration\$targetFramework"
87+
$bootstrapBinDirectory = "$binDirectory\MSBuild.Bootstrap\$configuration\$targetFramework"
8888

8989
$filesToCopyToBin = @(
9090
FileToCopy "$bootstrapBinDirectory\Microsoft.Build.dll"
@@ -116,8 +116,8 @@ $filesToCopyToBin = @(
116116

117117
if ($runtime -eq "Desktop") {
118118
$runtimeSpecificFiles = @(
119-
FileToCopy "artifacts\bin\Microsoft.Build.Conversion\$configuration\$targetFramework\Microsoft.Build.Conversion.Core.dll"
120-
FileToCopy "artifacts\bin\Microsoft.Build.Engine\$configuration\$targetFramework\Microsoft.Build.Engine.dll"
119+
FileToCopy "$binDirectory\Microsoft.Build.Conversion\$configuration\$targetFramework\Microsoft.Build.Conversion.Core.dll"
120+
FileToCopy "$binDirectory\Microsoft.Build.Engine\$configuration\$targetFramework\Microsoft.Build.Engine.dll"
121121

122122
FileToCopy "$bootstrapBinDirectory\Microsoft.Bcl.AsyncInterfaces.dll"
123123
FileToCopy "$bootstrapBinDirectory\Microsoft.Data.Entity.targets"
@@ -152,14 +152,14 @@ if ($runtime -eq "Desktop") {
152152
$x86files = @(
153153
FileToCopy "$bootstrapBinDirectory\MSBuild.exe"
154154
FileToCopy "$bootstrapBinDirectory\MSBuild.exe.config"
155-
FileToCopy "artifacts\bin\MSBuildTaskHost\$configuration\net35\MSBuildTaskHost.exe"
156-
FileToCopy "artifacts\bin\MSBuildTaskHost\$configuration\net35\MSBuildTaskHost.pdb"
155+
FileToCopy "$binDirectory\MSBuildTaskHost\$configuration\net35\MSBuildTaskHost.exe"
156+
FileToCopy "$binDirectory\MSBuildTaskHost\$configuration\net35\MSBuildTaskHost.pdb"
157157
)
158158
$amd64files = @(
159-
FileToCopy "artifacts\bin\MSBuild\x64\$configuration\$targetFramework\MSBuild.exe"
160-
FileToCopy "artifacts\bin\MSBuild\x64\$configuration\$targetFramework\MSBuild.exe.config"
161-
FileToCopy "artifacts\bin\MSBuildTaskHost\x64\$configuration\net35\MSBuildTaskHost.exe"
162-
FileToCopy "artifacts\bin\MSBuildTaskHost\x64\$configuration\net35\MSBuildTaskHost.pdb"
159+
FileToCopy "$binDirectory\MSBuild\x64\$configuration\$targetFramework\MSBuild.exe"
160+
FileToCopy "$binDirectory\MSBuild\x64\$configuration\$targetFramework\MSBuild.exe.config"
161+
FileToCopy "$binDirectory\MSBuildTaskHost\x64\$configuration\net35\MSBuildTaskHost.exe"
162+
FileToCopy "$binDirectory\MSBuildTaskHost\x64\$configuration\net35\MSBuildTaskHost.pdb"
163163
)
164164
}
165165

0 commit comments

Comments
 (0)