Skip to content

Commit a77767a

Browse files
authored
[release/dev16.4] Enable auto-insertion creation after signed builds. (#7499)
* turn off broken source link validation * add VS insertion logic to build pipeline
1 parent 0f7501c commit a77767a

File tree

5 files changed

+181
-0
lines changed

5 files changed

+181
-0
lines changed

azure-pipelines.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,3 +330,16 @@ stages:
330330
parameters:
331331
# Symbol validation is not entirely reliable as of yet, so should be turned off until https://github.com/dotnet/arcade/issues/2871 is resolved.
332332
enableSymbolValidation: false
333+
# SourceLink improperly looks for generated files. See https://github.com/dotnet/arcade/issues/3069
334+
enableSourceLinkValidation: false
335+
336+
#---------------------------------------------------------------------------------------------------------------------#
337+
# VS Insertion #
338+
#---------------------------------------------------------------------------------------------------------------------#
339+
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
340+
- template: eng/release/insert-into-vs.yml
341+
parameters:
342+
componentBranchName: refs/heads/release/dev16.4
343+
insertTargetBranch: master
344+
insertTeamEmail: fsharpteam@microsoft.com
345+
insertTeamName: 'F#'

eng/release/insert-into-vs.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
parameters:
2+
componentBranchName: ''
3+
insertBuildPolicy: 'CloudBuild - Request RPS'
4+
insertTargetBranch: ''
5+
insertTeamEmail: ''
6+
insertTeamName: ''
7+
dependsOn: [build]
8+
9+
stages:
10+
- stage: insert
11+
dependsOn: build
12+
displayName: Insert into VS
13+
jobs:
14+
- job: Insert_VS
15+
pool:
16+
vmImage: vs2017-win2016
17+
variables:
18+
- group: DotNet-VSTS-Infra-Access
19+
- name: InsertAccessToken
20+
value: $(dn-bot-devdiv-build-rw-code-rw-release-rw)
21+
- name: InsertBuildPolicy
22+
value: ${{ parameters.insertBuildPolicy }}
23+
- name: InsertTargetBranch
24+
value: ${{ parameters.insertTargetBranch }}
25+
- name: InsertTeamEmail
26+
value: ${{ parameters.insertTeamEmail }}
27+
- name: InsertTeamName
28+
value: ${{ parameters.insertTeamName }}
29+
steps:
30+
- task: DownloadBuildArtifacts@0
31+
displayName: Download Insertion Artifacts
32+
inputs:
33+
buildType: current
34+
artifactName: VSSetup
35+
- task: PowerShell@2
36+
displayName: Get Publish URLs
37+
inputs:
38+
filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetPublishUrls.ps1
39+
arguments: -accessToken $(System.AccessToken) -buildId $(Build.BuildId) -insertionDir $(Build.ArtifactStagingDirectory)\VSSetup
40+
- task: PowerShell@2
41+
displayName: Get versions for default.config
42+
inputs:
43+
filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetDefaultConfigVersions.ps1
44+
arguments: -packagesDir $(Build.ArtifactStagingDirectory)\VSSetup\DevDivPackages
45+
- task: PowerShell@2
46+
displayName: Get versions for AssemblyVersions.tt
47+
inputs:
48+
filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetAssemblyVersions.ps1
49+
arguments: -assemblyVersionsPath $(Build.ArtifactStagingDirectory)\VSSetup\DevDivPackages\DependentAssemblyVersions.csv
50+
- task: ms-vseng.MicroBuildShipTasks.55100717-a81d-45ea-a363-b8fe3ec375ad.MicroBuildInsertVsPayload@2
51+
displayName: 'Insert VS Payload'
52+
inputs:
53+
LinkWorkItemsToPR: false
54+
condition: and(succeeded(), eq(variables['Build.SourceBranch'], ${{ parameters.componentBranchName }}))
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
[CmdletBinding(PositionalBinding=$false)]
2+
param (
3+
[string]$assemblyVersionsPath
4+
)
5+
6+
Set-StrictMode -version 2.0
7+
$ErrorActionPreference = "Stop"
8+
9+
try {
10+
[string[]]$lines = Get-Content -Path $assemblyVersionsPath | ForEach-Object {
11+
$parts = $_ -Split ",",2
12+
$asm = $parts[0]
13+
$ver = $parts[1]
14+
$asmConst = ($asm -Replace "\.","") + "Version"
15+
$output = "$asmConst=$ver"
16+
$output
17+
}
18+
19+
$final = $lines -Join ","
20+
Write-Host "Setting InsertVersionsValues to $final"
21+
Write-Host "##vso[task.setvariable variable=InsertVersionsValues]$final"
22+
}
23+
catch {
24+
Write-Host $_
25+
Write-Host $_.Exception
26+
Write-Host $_.ScriptStackTrace
27+
exit 1
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
[CmdletBinding(PositionalBinding=$false)]
2+
param (
3+
[string]$packagesDir
4+
)
5+
6+
Set-StrictMode -version 2.0
7+
$ErrorActionPreference = "Stop"
8+
9+
try {
10+
$packages = @()
11+
$regex = "^(.*?)\.((?:\.?[0-9]+){3,}(?:[-a-z0-9]+)?)\.nupkg$"
12+
Get-Item -Path "$packagesDir\*" -Filter "*.nupkg" | ForEach-Object {
13+
$fileName = Split-Path $_ -Leaf
14+
If ($fileName -Match $regex) {
15+
$entry = $Matches[1] + "=" + $Matches[2]
16+
$packages += $entry
17+
}
18+
}
19+
20+
$final = $packages -Join ","
21+
Write-Host "Setting InsertConfigValues to $final"
22+
Write-Host "##vso[task.setvariable variable=InsertConfigValues]$final"
23+
}
24+
catch {
25+
Write-Host $_
26+
Write-Host $_.Exception
27+
Write-Host $_.ScriptStackTrace
28+
exit 1
29+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
[CmdletBinding(PositionalBinding=$false)]
2+
param (
3+
[string]$accessToken,
4+
[string]$buildId,
5+
[string]$insertionDir
6+
)
7+
8+
Set-StrictMode -version 2.0
9+
$ErrorActionPreference = "Stop"
10+
11+
try {
12+
# build map of all *.vsman files to their `info.buildVersion` values
13+
$manifestVersionMap = @{}
14+
Get-ChildItem -Path "$insertionDir\*" -Filter "*.vsman" | ForEach-Object {
15+
$manifestName = Split-Path $_ -Leaf
16+
$vsmanContents = Get-Content $_ | ConvertFrom-Json
17+
$buildVersion = $vsmanContents.info.buildVersion
18+
$manifestVersionMap.Add($manifestName, $buildVersion)
19+
}
20+
21+
# find all publish URLs
22+
$manifests = @()
23+
$seenManifests = @{}
24+
$url = "https://dev.azure.com/dnceng/internal/_apis/build/builds/$buildId/logs?api-version=5.1"
25+
$base64 = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$accessToken"))
26+
$headers = @{
27+
Authorization = "Basic $base64"
28+
}
29+
Write-Host "Fetching log from $url"
30+
$json = Invoke-WebRequest -Method Get -Uri $url -Headers $headers -UseBasicParsing | ConvertFrom-Json
31+
foreach ($l in $json.value) {
32+
$logUrl = $l.url
33+
Write-Host "Fetching log from $logUrl"
34+
$log = (Invoke-WebRequest -Method Get -Uri $logUrl -Headers $headers -UseBasicParsing).Content
35+
If ($log -Match "(https://vsdrop\.corp\.microsoft\.com/[^\r\n;]+);([^\r\n]+)\r?\n") {
36+
$manifestShortUrl = $Matches[1]
37+
$manifestName = $Matches[2]
38+
$manifestUrl = "$manifestShortUrl;$manifestName"
39+
If (-Not $seenManifests.Contains($manifestUrl)) {
40+
$seenManifests.Add($manifestUrl, $true)
41+
$buildVersion = $manifestVersionMap[$manifestName]
42+
$manifestEntry = "$manifestName{$buildVersion}=$manifestUrl"
43+
$manifests += $manifestEntry
44+
}
45+
}
46+
}
47+
48+
$final = $manifests -Join ","
49+
Write-Host "Setting InsertJsonValues to $final"
50+
Write-Host "##vso[task.setvariable variable=InsertJsonValues]$final"
51+
}
52+
catch {
53+
Write-Host $_
54+
Write-Host $_.Exception
55+
Write-Host $_.ScriptStackTrace
56+
exit 1
57+
}

0 commit comments

Comments
 (0)