123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- # Validation pipeline for manifest on pull requests.
- # Name of the run
- name: '$(Build.DefinitionName)-$(Build.DefinitionVersion)-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)-$(Rev:r)'
- trigger: none
- pr: none
- jobs:
- # Agent phase. Process pull request changes and validate manifests.
- - job: 'FileValidation'
- displayName: 'Pull Request Validation'
- pool:
- vmImage: 'windows-latest'
- variables:
- skipComponentGovernanceDetection: ${{ true }}
- runCodesignValidationInjection: ${{ false }}
- steps:
- # Downloads all the setup files and its dependencies.
- - task: AzureCLI@1
- displayName: 'Azure Setup'
- inputs:
- azureSubscription: '$(WinGet.Subscription)'
- scriptLocation: inlineScript
- inlineScript: 'az storage blob download-batch -d . --pattern * -s servicewrapper --output none'
- env:
- AZURE_STORAGE_CONNECTION_STRING: $(ValidationStorageAccountConnectionString)
- # WinGet setup
- - script: 'winget_validation_setup.cmd'
- name: 'wingetsetup'
- displayName: 'WinGet Setup'
- workingDirectory: scripts
- env:
- HOST_KEY: $(AzureFunctionHostKey)
- SMART_SCREEN_ENDPOINT: $(AzFuncSmartScreenEndpoint)
- SCAN_ENDPOINT: $(AzFuncScanEndpoint)
- LABEL_ENDPOINT: $(AzFuncSetLabelOnPullRequestEndpoint)
- CLEANUP_ENDPOINT: $(AzFuncCleanupEndpoint)
- LABEL_KEY: $(AzureFunctionLabelKey)
- # Validates integrity of pull request.
- - task: CmdLine@2
- displayName: 'Validate Pull Request'
- inputs:
- script: 'WinGetSvcWrapper.exe process-pr --operationId %BUILD_BUILDNUMBER%'
- failOnStderr: true
- condition: succeeded()
- env:
- ValidationConnectionString: $(ValidationStorageAccountConnectionString)
- DIApplicationInsightKey: $(DIApplicationInsightKey)
- WinGet:AppConfig:Primary: $(AppConfigPrimary)
- WinGet:AppConfig:Secondary: $(AppConfigSecondary)
- # Validates manifest integrity.
- - task: CmdLine@2
- displayName: 'Validate Manifest'
- inputs:
- script: 'WinGetSvcWrapper.exe validate-manifests --operationId %BUILD_BUILDNUMBER%'
- failOnStderr: true
- condition: succeeded()
- env:
- ValidationConnectionString: $(ValidationStorageAccountConnectionString)
- DIApplicationInsightKey: $(DIApplicationInsightKey)
- WinGet:AppConfig:Primary: $(AppConfigPrimary)
- WinGet:AppConfig:Secondary: $(AppConfigSecondary)
- # Agentless phase. Depends on previous job.
- - job: 'ContentValidation'
- pool: server
- displayName: 'Manifest Content Validation'
- timeoutInMinutes: 1500
- dependsOn:
- - 'FileValidation'
- variables:
- HostKeySecret: $[ dependencies.FileValidation.outputs['wingetsetup.hostkey']]
- SmartScreenEndpointSecret: $[ dependencies.FileValidation.outputs['wingetsetup.smartScreenEndpoint']]
- ScanEndpointSecret: $[ dependencies.FileValidation.outputs['wingetsetup.scanEndpoint']]
- steps:
- # Scans all the urls from manifest contents.
- - task: AzureFunction@1
- displayName: 'Validation URLs in manifest files'
- inputs:
- function: '$(SmartScreenEndpointSecret)'
- key: '$(HostKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "BuildId": "$(Build.BuildId)",
- "PlanUrl": "$(system.CollectionUri)",
- "HubName": "$(system.HostType)",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)"
- }
- waitForCompletion: "true"
- # Scan installers in manifests.
- - task: AzureFunction@1
- displayName: 'Installers Scan'
- inputs:
- function: '$(ScanEndpointSecret)'
- key: '$(HostKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "BuildId": "$(Build.BuildId)",
- "PlanUrl": "$(system.CollectionUri)",
- "HubName": "$(system.HostType)",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)"
- }
- waitForCompletion: "true"
- # Agentless phase. Runs even if previous jobs failed.
- - job: 'postvalidation'
- pool: server
- displayName: 'Post Validation'
- dependsOn:
- - 'FileValidation'
- - 'ContentValidation'
- condition: succeededOrFailed()
- variables:
- HostKeySecret: $[ dependencies.FileValidation.outputs['wingetsetup.hostkey']]
- LabelKeySecret : $[ dependencies.FileValidation.outputs['wingetsetup.labelkey']]
- LabelEndpointSecret: $[ dependencies.FileValidation.outputs['wingetsetup.labelEndpoint']]
- RepositoryId: $[ dependencies.FileValidation.outputs['wingetsetup.repoId']]
- CleanupEndpointSecret: $[ dependencies.filevalidation.outputs['wingetsetup.cleanupEndpoint']]
- steps:
- # Set label in GitHub PullRequest.
- - task: AzureFunction@1
- displayName: 'Set Label'
- condition: eq(variables['WinGet.RepositoryType'], 'GitHub')
- inputs:
- function: '$(LabelEndpointSecret)'
- key: '$(LabelKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "PlanUrl": "$(system.CollectionUri)",
- "BuildId": "$(Build.BuildId)",
- "HubName": "$(system.HostType)",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)",
- "BuildRepositoryId": "$(RepositoryId)",
- "PullRequestNumber": "$(System.PullRequest.PullRequestNumber)",
- }
- waitForCompletion: "true"
-
- # Cleanup resources.
- - task: AzureFunction@1
- displayName: 'Validation cleanup'
- inputs:
- function: '$(CleanupEndpointSecret)'
- key: '$(HostKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "PlanUrl": "$(system.CollectionUri)",
- "BuildId": "$(Build.BuildId)",
- "HubName": "$(system.HostType)",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)"
- }
- waitForCompletion: "true"
|