123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- # Publish pipeline for WinGet.
- # Name of the run
- name: '$(Build.DefinitionName)-$(Build.DefinitionVersion)-$(Date:yyyyMMdd)-$(Rev:r)'
- # Batch CI run. when a pipeline is running, the system waits until the run is completed,
- # then starts another run with all changes that have not yet been built.
- trigger:
- batch: true
- branches:
- include:
- - master
- pr: none
- jobs:
- # Agent phase.
- - job: 'CommitProcessing'
- displayName: 'Commit Processing'
- 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_publish_setup.cmd'
- name: 'wingetsetup'
- displayName: 'WinGet Setup'
- workingDirectory: scripts
- env:
- HOST_KEY: $(AzureFunctionHostKey)
- SIGN_ENDPOINT: $(AzFuncSignEndpoint)
- CLEANUP_ENDPOINT: $(AzFuncPublishCleanupEndpoint)
- MANIFEST_PUBLISH_COMPLETION_ENDPOINT: $(AzFuncManifestPublishCompletionEndpoint)
- WAIVER_COMMIT_ENDPOINT: $(AzFuncWaiverCommitEndpoint)
- RESTSOURCE_UPDATE_ENDPOINT: $(AzFuncRestSourceUpdateEndpoint)
- - task: CmdLine@2
- displayName: 'Validate Commits'
- inputs:
- script: 'WinGetSvcWrapper.exe validate-commits --operationId %BUILD_BUILDNUMBER%'
- failOnStderr: true
- condition: succeeded()
- env:
- ValidationConnectionString: $(ValidationStorageAccountConnectionString)
- ExecutionEnvironment: $(ExecutionEnvironment)
- CacheConnectionString: $(CacheStorageAccountConnectionString)
- PackagePublisher: $(PackagePublisher)
- DIApplicationInsightKey: $(DIApplicationInsightKey)
- WinGet:AppConfig:Primary: $(AppConfigPrimary)
- WinGet:AppConfig:Secondary: $(AppConfigSecondary)
- # Agentless phase. Depends on previous job.
- - job: 'SignPackage'
- pool: server
- timeoutInMinutes: 1500
- displayName: 'Sign package'
- dependsOn:
- - 'CommitProcessing'
- variables:
- HostKeySecret: $[ dependencies.CommitProcessing.outputs['wingetsetup.hostkey']]
- SignEndpointSecret: $[ dependencies.CommitProcessing.outputs['wingetsetup.signEndpoint']]
- steps:
- # Sign package.
- - task: AzureFunction@1
- displayName: 'Signing package'
- inputs:
- function: '$(SignEndpointSecret)'
- key: '$(HostKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "BuildId": "$(Build.BuildId)",
- "PlanUrl": "$(system.CollectionUri)",
- "HubName": "$(system.HostType)",
- "pipelineType": "CommitPipeline",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)"
- }
- waitForCompletion: "true"
- # Agent phase. Depends on previous job.
- - job: 'Publish'
- displayName: 'Publish'
- pool:
- vmImage: 'windows-latest'
- variables:
- skipComponentGovernanceDetection: ${{ true }}
- runCodesignValidationInjection: ${{ false }}
- dependsOn:
- - 'SignPackage'
- 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)
- # Validates integrity of pull request.
- - task: CmdLine@2
- displayName: 'Publish'
- inputs:
- script: 'WinGetSvcWrapper.exe publish --operationId %BUILD_BUILDNUMBER%'
- failOnStderr: true
- condition: succeeded()
- env:
- ValidationConnectionString: $(ValidationStorageAccountConnectionString)
- ExecutionEnvironment: $(ExecutionEnvironment)
- CacheConnectionString: $(CacheStorageAccountConnectionString)
- DIApplicationInsightKey: $(DIApplicationInsightKey)
- WinGet:AppConfig:Primary: $(AppConfigPrimary)
- WinGet:AppConfig:Secondary: $(AppConfigSecondary)
- # Agentless phase. Depends on previous job.
- - job: 'PublishToRestSource'
- pool: server
- timeoutInMinutes: 1500
- displayName: 'Publish to rest source'
- dependsOn:
- - 'CommitProcessing'
- - 'Publish'
- variables:
- HostKeySecret: $[ dependencies.CommitProcessing.outputs['wingetsetup.hostkey']]
- RestSourceUpdateEndpointSecret: $[ dependencies.CommitProcessing.outputs['wingetsetup.restsourceUpdateEndpoint']]
- steps:
- # Publish updates to rest source
- - task: AzureFunction@1
- displayName: 'Publishing to rest source'
- inputs:
- function: '$(RestSourceUpdateEndpointSecret)'
- key: '$(HostKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "BuildId": "$(Build.BuildId)",
- "PlanUrl": "$(system.CollectionUri)",
- "HubName": "$(system.HostType)",
- "pipelineType": "CommitPipeline",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)"
- }
- waitForCompletion: "true"
- # Agentless phase. Depends on previous job.
- - job: 'PostPublish'
- pool: server
- timeoutInMinutes: 1500
- displayName: 'Post publish'
- dependsOn:
- - 'CommitProcessing'
- - 'Publish'
- - 'PublishToRestSource'
- condition: and(succeeded(), ne(variables['Source.SkipPostPublish'], 'true'))
- variables:
- HostKeySecret: $[ dependencies.CommitProcessing.outputs['wingetsetup.hostkey']]
- CleanEndpointSecret: $[ dependencies.CommitProcessing.outputs['wingetsetup.cleanupEndpoint']]
- ManifestPublishCompletionEndPoint: $[ dependencies.CommitProcessing.outputs['wingetsetup.manifestPublishCompletionEndPoint']]
- WaiverCommitEndPoint: $[ dependencies.CommitProcessing.outputs['wingetsetup.waiverCommitEndPoint']]
- steps:
- - task: AzureFunction@1
- displayName: 'Waiver Commit'
- inputs:
- function: '$(WaiverCommitEndPoint)'
- key: '$(HostKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "BuildId": "$(Build.BuildId)",
- "PlanUrl": "$(system.CollectionUri)",
- "HubName": "$(system.HostType)",
- "pipelineType": "CommitPipeline",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)",
- "BuildRepositoryId": "$(build.repository.id)"
- }
- waitForCompletion: "true"
- - task: AzureFunction@1
- displayName: 'Pull Request Notification'
- inputs:
- function: '$(ManifestPublishCompletionEndPoint)'
- key: '$(HostKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "BuildId": "$(Build.BuildId)",
- "PlanUrl": "$(system.CollectionUri)",
- "HubName": "$(system.HostType)",
- "pipelineType": "CommitPipeline",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)",
- "BuildRepositoryId": "$(build.repository.id)"
- }
- waitForCompletion: "true"
- # Close issues.
- - task: AzureFunction@1
- displayName: 'Cleanup Issues'
- inputs:
- function: '$(CleanEndpointSecret)'
- key: '$(HostKeySecret)'
- body: |
- {
- "operationId": "$(Build.BuildNumber)",
- "BuildId": "$(Build.BuildId)",
- "PlanUrl": "$(system.CollectionUri)",
- "HubName": "$(system.HostType)",
- "pipelineType": "CommitPipeline",
- "ProjectId": "$(system.TeamProjectId)",
- "PlanId": "$(system.PlanId)",
- "JobId": "$(system.JobId)",
- "TimelineId": "$(system.TimelineId)",
- "TaskInstanceId": "$(system.TaskInstanceId)",
- "AuthToken": "$(system.AccessToken)",
- "BuildRepositoryId": "$(build.repository.id)"
- }
- waitForCompletion: "true"
|