Skip to content

Commit b9d84d0

Browse files
committed
VMR vs MSFT signing comparison
1 parent 7f1cbfd commit b9d84d0

15 files changed

+2214
-1309
lines changed

eng/GatherDrops.ps1

+13-7
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,21 @@ param(
99
[Parameter(Mandatory=$true)]
1010
[String]$githubPat,
1111
[Parameter(Mandatory=$true)]
12-
[String]$azdevPat
12+
[String]$azdevPat,
13+
[Parameter(Mandatory=$false)]
14+
[String]$assetFilter = ".*"
1315
)
1416
$jsonContent = Get-Content -Path $filePath -Raw | ConvertFrom-Json
17+
$assetFilters = $assetFilter -split ';' | ForEach-Object { $_.Trim() }
1518
foreach ($repo in $jsonContent.repositories) {
16-
$remoteUri = $repo.remoteUri
17-
$commitSha = $repo.commitSha
18-
$path = "$outputPath$($repo.path)"
19-
$darcCommand = "$darcPath gather-drop -c $commitSha -r $remoteUri --non-shipping --skip-existing --continue-on-error --use-azure-credential-for-blobs -o $path --github-pat $githubPat --azdev-pat $azdevPat --verbose --ci"
20-
Write-Output "Gathering drop for $remoteUri"
21-
Invoke-Expression $darcCommand
19+
foreach ($filter in $assetFilters)
20+
{
21+
$remoteUri = $repo.remoteUri
22+
$commitSha = $repo.commitSha
23+
$path = "$outputPath$($repo.path)"
24+
$darcCommand = "$darcPath gather-drop -c $commitSha -r $remoteUri --non-shipping --skip-existing --continue-on-error --use-azure-credential-for-blobs -o $path --github-pat $githubPat --azdev-pat $azdevPat --asset-filter $filter --verbose --ci"
25+
Write-Output "Gathering drop for $remoteUri with filter $filter"
26+
Invoke-Expression $darcCommand
27+
}
2228
}
2329
exit 0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
### This stage builds https://github.com/dotnet/dotnet with varying parameters
2+
### If run in a PR, new changes are applied to a local copy of the VMR, then it is built and tested
3+
4+
parameters:
5+
- name: unifiedBuildRunId
6+
displayName: 'Specific dotnet-unified-build run ID number (e.g `2108850`)'
7+
type: string
8+
default: ''
9+
10+
# These are not expected to be passed it but rather just object variables reused below
11+
- name: pool_Linux
12+
type: object
13+
default:
14+
name: $(defaultPoolName)
15+
image: $(poolImage_Linux)
16+
demands: ImageOverride -equals $(poolImage_Linux)
17+
os: linux
18+
19+
- name: pool_Windows
20+
type: object
21+
default:
22+
name: $(defaultPoolName)
23+
image: $(poolImage_Windows)
24+
demands: ImageOverride -equals $(poolImage_Windows)
25+
os: windows
26+
27+
- name: pool_LinuxArm64
28+
type: object
29+
default:
30+
name: $(poolName_LinuxArm64)
31+
image: $(poolImage_LinuxArm64)
32+
demands: ImageOverride -equals $(poolImage_LinuxArm64)
33+
hostArchitecture: Arm64
34+
os: linux
35+
36+
- name: pool_Mac
37+
type: object
38+
default:
39+
name: Azure Pipelines
40+
vmImage: $(poolImage_Mac)
41+
os: macOS
42+
43+
- name: pool_Linux_Shortstack
44+
type: object
45+
default:
46+
name: $(shortStackPoolName)
47+
image: $(poolImage_Linux)
48+
demands: ImageOverride -equals $(poolImage_Linux)
49+
os: linux
50+
51+
stages:
52+
- stage: VMR_Comparison
53+
displayName: VMR Comparison
54+
variables:
55+
- template: ../variables/vmr-build.yml
56+
- group: Release-Pipeline
57+
- group: DotNetBot-GitHub-AllBranches
58+
jobs:
59+
- job: CompareAssets
60+
displayName: Compare Assets
61+
pool: ${{ parameters.pool_Windows }}
62+
timeoutInMinutes: 180
63+
steps:
64+
- template: ../steps/vmr-compare.yml
65+
parameters:
66+
continueOnError: false
67+
unifiedBuildRunId: ${{ parameters.unifiedBuildRunId }}
68+
command: assets
69+
70+
- job: CompareSigning_Windows
71+
displayName: Compare Signing - Windows
72+
pool: ${{ parameters.pool_Windows }}
73+
timeoutInMinutes: 240
74+
steps:
75+
- template: ../steps/vmr-compare.yml
76+
parameters:
77+
continueOnError: false
78+
unifiedBuildRunId: ${{ parameters.unifiedBuildRunId }}
79+
command: signing
80+
OS: Windows_NT
81+
82+
- job: CompareSigning_Mac_Blobs
83+
displayName: Compare Signing - Mac (Blobs)
84+
pool: ${{ parameters.pool_Mac }}
85+
timeoutInMinutes: 240
86+
steps:
87+
- template: ../steps/vmr-compare.yml
88+
parameters:
89+
continueOnError: false
90+
unifiedBuildRunId: ${{ parameters.unifiedBuildRunId }}
91+
command: signing
92+
assetType: Blob
93+
OS: Darwin
94+
95+
- job: CompareSigning_Mac_Packages
96+
displayName: Compare Signing - Mac (Packages)
97+
pool: ${{ parameters.pool_Mac }}
98+
timeoutInMinutes: 240
99+
steps:
100+
- template: ../steps/vmr-compare.yml
101+
parameters:
102+
continueOnError: false
103+
unifiedBuildRunId: ${{ parameters.unifiedBuildRunId }}
104+
command: signing
105+
assetType: Package
106+
OS: Darwin
107+
108+
- job: CompareSigning_Linux
109+
displayName: Compare Signing - Linux
110+
pool: ${{ parameters.pool_Linux }}
111+
timeoutInMinutes: 240
112+
steps:
113+
- template: ../steps/vmr-compare.yml
114+
parameters:
115+
continueOnError: false
116+
unifiedBuildRunId: ${{ parameters.unifiedBuildRunId }}
117+
command: signing
118+
OS: Linux

eng/pipelines/templates/stages/vmr-validation.yml

-8
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,6 @@ stages:
5757
- group: Release-Pipeline
5858
- group: DotNetBot-GitHub-AllBranches
5959
jobs:
60-
- job: ValidateAssetBaselines
61-
displayName: Validate Asset Baselines
62-
pool: ${{ parameters.pool_Windows }}
63-
timeoutInMinutes: 180
64-
steps:
65-
- template: ../steps/vmr-validate-asset-baseline.yml
66-
parameters:
67-
continueOnError: true
6860
- job: ValidateInstallers_Linux_x64
6961
displayName: Validate Installers - Linux x64
7062
pool: ${{ parameters.pool_Linux }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
parameters:
2+
- name: continueOnError
3+
type: boolean
4+
default: false
5+
6+
- name: unifiedBuildRunId
7+
type: string
8+
default: ''
9+
10+
- name: command
11+
type: string
12+
values:
13+
- assets
14+
- signing
15+
16+
- name: OS
17+
type: string
18+
default: 'Windows_NT'
19+
values:
20+
- Windows_NT
21+
- Linux
22+
- Darwin
23+
24+
# This parameter is used to determine the type of asset to compare.
25+
# This is used to workaround limitations with the available space
26+
# on the MacOS agents.
27+
- name: assetType
28+
type: string
29+
default: Unknown
30+
values:
31+
- Unknown
32+
- Package
33+
- Blob
34+
35+
steps:
36+
- powershell: |
37+
$build_id = '${{ parameters.unifiedBuildRunId }}'.Replace(' ', '')
38+
$build_branch = ''
39+
40+
if ([string]::IsNullOrWhiteSpace($build_id)) {
41+
$build_id = az pipelines runs list --branch '$(Build.SourceBranch)' --organization 'https://dev.azure.com/dnceng/' --project 'internal' --pipeline-ids '1330' --status completed --top 1 --query "[].id" --output tsv
42+
$build_branch = '$(Build.SourceBranch)'
43+
}
44+
45+
if ([string]::IsNullOrWhiteSpace($build_id)) {
46+
Write-Host "Could not find a completed dotnet-unified-build build for branch '$(Build.SourceBranch)'"
47+
exit 1
48+
}
49+
50+
if ([string]::IsNullOrWhiteSpace($build_branch)) {
51+
$build_branch = az pipelines runs show --id $build_id --organization 'https://dev.azure.com/dnceng/' --project 'internal' --query "sourceBranch" --output tsv
52+
}
53+
54+
if ([string]::IsNullOrWhiteSpace($build_branch)) {
55+
Write-Host "Could not find the branch for build id $build_id"
56+
exit 1
57+
}
58+
59+
Write-Host "Unified Build build: https://dev.azure.com/dnceng/internal/_build/results?buildId=$build_id&view=results"
60+
Write-Host "Unified Build branch: $build_branch"
61+
62+
Write-Host "##vso[build.addbuildtag]dotnet-unified-build-id $build_id"
63+
Write-Host "##vso[task.setvariable variable=UnifiedBuildRunId;isOutput=true]$build_id"
64+
Write-Host "##vso[task.setvariable variable=UnifiedBuildBranch;isOutput=true]$build_branch"
65+
displayName: Find associated build
66+
name: GetBuildInfo
67+
env:
68+
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
69+
70+
- template: ../steps/vmr-download-artifact.yml
71+
parameters:
72+
displayName: Download Asset Manifest
73+
buildId: $(GetBuildInfo.UnifiedBuildRunId)
74+
artifactName: AssetManifests
75+
itemPattern: '**/MergedManifest.xml'
76+
downloadPath: '$(Build.ArtifactStagingDirectory)/AssetManifests'
77+
continueOnError: ${{ parameters.continueOnError }}
78+
79+
- ${{ if eq(parameters.OS, 'Windows_NT')}}:
80+
- powershell: |
81+
$(Build.SourcesDirectory)\eng\common\darc-init.ps1 -toolpath $(Build.SourcesDirectory)\artifacts\tools\darc
82+
Write-Host "##vso[task.setvariable variable=darcPath;isOutput=true]$(Build.SourcesDirectory)\artifacts\tools\darc\darc.exe"
83+
Write-Host "##vso[task.setvariable variable=dotnetPath;isOutput=true]$(Build.SourcesDirectory)/.dotnet/dotnet.exe"
84+
name: InstallDarc
85+
displayName: Install darc
86+
87+
- ${{ else }}:
88+
- script: |
89+
$(Build.SourcesDirectory)/eng/common/darc-init.sh --toolpath $(Build.SourcesDirectory)/artifacts/tools/darc
90+
echo "##vso[task.setvariable variable=darcPath;isOutput=true]$(Build.SourcesDirectory)/artifacts/tools/darc/darc"
91+
echo "##vso[task.setvariable variable=dotnetPath;isOutput=true]$(Build.SourcesDirectory)/.dotnet/dotnet"
92+
name: InstallDarc
93+
displayName: Install darc
94+
95+
- powershell: |
96+
if ("${{ parameters.assetType }}" -eq "Package") {
97+
$assetFilter = ".*packages\/.*;.*assets\/manifests\/.*\/MergedManifest\.xml"
98+
} elseif ("${{ parameters.assetType }}" -eq "Blob") {
99+
$assetFilter = ".*assets\/.*"
100+
} else {
101+
$assetFilter = ".*"
102+
}
103+
104+
Write-Host "Asset filter: $assetFilter"
105+
Write-Host "##vso[task.setvariable variable=assetFilter;isOutput=true]$assetFilter"
106+
name: SetAssetFilter
107+
displayName: Set asset filter
108+
109+
- task: AzureCLI@2
110+
displayName: 'Gather Drop'
111+
continueOnError: true
112+
inputs:
113+
azureSubscription: DotNetStaging
114+
scriptType: 'pscore'
115+
scriptLocation: 'scriptPath'
116+
scriptPath: $(Build.SourcesDirectory)/src/sdk/eng/GatherDrops.ps1
117+
arguments: -filePath '$(Build.SourcesDirectory)/src/source-manifest.json' -outputPath '$(Build.ArtifactStagingDirectory)/base-assets/'
118+
-darcPath $(InstallDarc.darcPath) -githubPat $(BotAccount-dotnet-bot-repo-PAT) -azdevPat $(dn-bot-all-drop-rw-code-rw-release-all)
119+
-assetFilter $(SetAssetFilter.assetFilter)
120+
121+
- ${{ if or(eq(parameters.assetType, 'Package'), eq(parameters.assetType, 'Unknown')) }}:
122+
- template: ../steps/vmr-download-artifact.yml
123+
parameters:
124+
displayName: Download Package Artifacts
125+
buildId: $(GetBuildInfo.UnifiedBuildRunId)
126+
artifactName: PackageArtifacts
127+
downloadPath: '$(Build.ArtifactStagingDirectory)/vmr-assets/PackageArtifacts'
128+
continueOnError: ${{ parameters.continueOnError }}
129+
130+
- ${{ if or(eq(parameters.assetType, 'Blob'), eq(parameters.assetType, 'Unknown')) }}:
131+
- template: ../steps/vmr-download-artifact.yml
132+
parameters:
133+
displayName: Download Blob Artifacts
134+
buildId: $(GetBuildInfo.UnifiedBuildRunId)
135+
artifactName: BlobArtifacts
136+
downloadPath: '$(Build.ArtifactStagingDirectory)/vmr-assets/BlobArtifacts'
137+
continueOnError: ${{ parameters.continueOnError }}
138+
139+
- ${{ if eq(parameters.command, 'signing') }}:
140+
- template: ../steps/vmr-download-artifact.yml
141+
parameters:
142+
displayName: Download Exclusions File
143+
buildId: $(GetBuildInfo.UnifiedBuildRunId)
144+
artifactName: SignCheck_${{ parameters.OS }}
145+
itemPattern: '**/SignCheckExclusionsFile.txt'
146+
downloadPath: '$(Build.SourcesDirectory)/eng/'
147+
continueOnError: ${{ parameters.continueOnError }}
148+
condition: not(or(startsWith(variables['GetBuildInfo.UnifiedBuildBranch'], 'refs/heads/release/'), startsWith(variables['GetBuildInfo.UnifiedBuildBranch'], 'refs/heads/internal/release/')))
149+
150+
- ${{ if eq(parameters.OS, 'Windows_NT') }}:
151+
- powershell: |
152+
$additionalArgs = ""
153+
if ("${{ parameters.command }}" -eq "signing") {
154+
$additionalArgs += " -exclusions `"$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt`""
155+
$additionalArgs += " -sdkTaskScript `"$(Build.SourcesDirectory)/eng/common/sdk-task.ps1`""
156+
}
157+
Write-Host "##vso[task.setvariable variable=additionalArgs;isOutput=true]$additionalArgs"
158+
name: SetAdditionalArgs
159+
displayName: Set additional command arguments
160+
161+
- ${{ else }}:
162+
- script: |
163+
additionalArgs=""
164+
if [[ "${{ parameters.command }}" == "signing" ]]; then
165+
additionalArgs+=" -exclusions \"$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt\""
166+
additionalArgs+=" -sdkTaskScript \"$(Build.SourcesDirectory)/eng/common/sdk-task.sh\""
167+
fi
168+
echo "##vso[task.setvariable variable=additionalArgs;isOutput=true]$additionalArgs"
169+
name: SetAdditionalArgs
170+
displayName: Set additional command arguments
171+
172+
- task: PowerShell@2
173+
inputs:
174+
filePath: $(Build.SourcesDirectory)/eng/common/build.ps1
175+
arguments: -ci -projects $(Build.SourcesDirectory)/eng/tools/BuildComparer/BuildComparer.csproj -restore -build
176+
displayName: Build BuildComparer
177+
178+
- script: $(InstallDarc.dotnetPath)
179+
$(Build.SourcesDirectory)/artifacts/bin/BuildComparer/Debug/BuildComparer.dll
180+
${{ parameters.command }}
181+
-assetType ${{ parameters.assetType }}
182+
-vmrManifestPath "$(Build.ArtifactStagingDirectory)/AssetManifests/MergedManifest.xml"
183+
-vmrAssetBasePath "$(Build.ArtifactStagingDirectory)/vmr-assets"
184+
-msftAssetBasePath "$(Build.ArtifactStagingDirectory)/base-assets"
185+
-issuesReport "$(Build.SourcesDirectory)/artifacts/AssetBaselines/BaselineComparisonIssues.xml"
186+
-noIssuesReport "$(Build.SourcesDirectory)/artifacts/AssetBaselines/BaselineComparisonNoIssues.xml"
187+
-baseline "$(Build.SourcesDirectory)/src/sdk/eng/vmr-msft-comparison-baseline.json"
188+
$(SetAdditionalArgs.additionalArgs)
189+
displayName: Compare ${{ parameters.command}}
190+
191+
- task: 1ES.PublishPipelineArtifact@1
192+
displayName: Publish Baseline Files
193+
continueOnError: true
194+
inputs:
195+
path: $(Build.SourcesDirectory)/artifacts/AssetBaselines/
196+
artifactName: AssetBaselineFiles_$(Agent.JobName)
197+
artifactType: Container
198+
parallel: true

0 commit comments

Comments
 (0)