diff --git a/DevOpsPipelineDefinitions/rebuild-pipeline.yaml b/DevOpsPipelineDefinitions/rebuild-pipeline.yaml index 1eeec495c6c..1b92db6d576 100644 --- a/DevOpsPipelineDefinitions/rebuild-pipeline.yaml +++ b/DevOpsPipelineDefinitions/rebuild-pipeline.yaml @@ -6,6 +6,11 @@ name: '$(Build.DefinitionName)-$(Build.DefinitionVersion)-$(Date:yyyyMMdd)-$(Rev trigger: none pr: none +variables: + Rebuild.SkipManifestIndexUpdate: $[coalesce(variables.SkipManifestIndexUpdate, 'False')] + Rebuild.SkipPausePublishPipeline: $[coalesce(variables.SkipPausePublishPipeline, 'False')] + Rebuild.EnableCacheContainerBackup: $[coalesce(variables.EnableCacheContainerBackup, 'False')] + jobs: # Agent phase. @@ -34,13 +39,15 @@ jobs: AZURE_STORAGE_CONNECTION_STRING: $(ValidationStorageAccountConnectionString) # WinGet setup - - script: 'winget_publish_setup.cmd' + - script: 'winget_rebuild_setup.cmd' name: 'wingetsetup' displayName: 'WinGet Setup' workingDirectory: scripts env: HOST_KEY: $(AzureFunctionHostKey) SIGN_ENDPOINT: $(AzFuncSignEndpoint) + PUBLISH_ENDPOINT: $(AzFuncRebuildPublishEndpoint) + CLEANUP_ENDPOINT: $(AzFuncRebuildCleanupEndpoint) - task: CmdLine@2 displayName: 'Validate Manifests' @@ -94,87 +101,79 @@ jobs: } waitForCompletion: "true" -# Agent phase. Depends on previous job. +# Agentless phase. Depends on previous job. - job: 'Publish' + pool: server + timeoutInMinutes: 1500 displayName: 'Publish' - timeoutInMinutes: 300 - 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) - - # Publish rebuild. - - task: CmdLine@2 - displayName: 'Publish' - inputs: - script: 'WinGetSvcWrapper.exe rebuild-publish --operationId %BUILD_BUILDNUMBER%' - failOnStderr: true - condition: succeeded() - env: - ValidationConnectionString: $(ValidationStorageAccountConnectionString) - ExecutionEnvironment: $(ExecutionEnvironment) - CacheConnectionString: $(CacheStorageAccountConnectionString) - DIApplicationInsightKey: $(DIApplicationInsightKey) - AzureServicesAuthConnectionString: $(AzureServicesAuthConnectionString) - WinGetSubscriptionId: $(WinGetSubscriptionId) - CdnProfileName: $(CdnProfileName) - CdnEndpointName: $(CdnEndpointName) - WinGet:AppConfig:Primary: $(AppConfigPrimary) - WinGet:AppConfig:Secondary: $(AppConfigSecondary) - -# Agent phase. Depends on previous job. -- job: 'Cleanup' - displayName: 'Cleanup' - pool: - vmImage: 'windows-latest' dependsOn: - 'Rebuild' - - 'Publish' - 'SignPackage' - condition: succeededOrFailed() variables: - skipComponentGovernanceDetection: ${{ true }} - runCodesignValidationInjection: ${{ false }} + HostKeySecret: $[ dependencies.Rebuild.outputs['wingetsetup.hostkey']] + PublishEndpointSecret: $[ dependencies.Rebuild.outputs['wingetsetup.publishEndpoint']] steps: - # Don't clone repo. - - checkout: none - - - task: AzureCLI@1 - displayName: 'Azure Setup' + # Rebuild Publish. + - task: AzureFunction@1 + displayName: 'Publish' inputs: - azureSubscription: '$(WinGet.Subscription)' - scriptLocation: inlineScript - inlineScript: 'az storage blob download-batch -d . --pattern * -s servicewrapper --output none' - env: - AZURE_STORAGE_CONNECTION_STRING: $(ValidationStorageAccountConnectionString) + function: '$(PublishEndpointSecret)' + key: '$(HostKeySecret)' + body: | + { + "operationId": "$(Build.BuildNumber)", + "BuildId": "$(Build.BuildId)", + "PlanUrl": "$(system.CollectionUri)", + "HubName": "$(system.HostType)", + "pipelineType": "RebuildPipeline", + "ProjectId": "$(system.TeamProjectId)", + "PlanId": "$(system.PlanId)", + "JobId": "$(system.JobId)", + "TimelineId": "$(system.TimelineId)", + "TaskInstanceId": "$(system.TaskInstanceId)", + "AuthToken": "$(system.AccessToken)", + "ContainerName": "$(CacheContainerName)", + "CommitTablePartitionKey": "$(CommitTablePartitionKey)", + "CommitTableRowKey": "$(CommitTableRowKey)", + "EnableCacheContainerBackup": "$(Rebuild.EnableCacheContainerBackup)", + "SkipManifestIndexUpdate": "$(Rebuild.SkipManifestIndexUpdate)", + } + waitForCompletion: "true" - - task: CmdLine@2 - displayName: 'WinGet Cleanup' +# Agentless phase. Depends on previous job. +- job: 'Cleanup' + pool: server + timeoutInMinutes: 1500 + displayName: 'Cleanup' + dependsOn: + - 'Rebuild' + - 'SignPackage' + - 'Publish' + condition: and(succeededOrFailed(), ne(variables['Rebuild.SkipPausePublishPipeline'], 'True')) + variables: + HostKeySecret: $[ dependencies.Rebuild.outputs['wingetsetup.hostkey']] + CleanupEndpointSecret: $[ dependencies.Rebuild.outputs['wingetsetup.cleanupEndpoint']] + steps: + + # Rebuild cleanup. + - task: AzureFunction@1 + displayName: 'Cleanup' inputs: - script: 'WinGetSvcWrapper.exe rebuild-cleanup --operationId %BUILD_BUILDNUMBER%' - failOnStderr: true - condition: succeeded() - env: - ValidationConnectionString: $(ValidationStorageAccountConnectionString) - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - DIApplicationInsightKey: $(DIApplicationInsightKey) - WinGet:AppConfig:Primary: $(AppConfigPrimary) - WinGet:AppConfig:Secondary: $(AppConfigSecondary) - DevOpsOrganization: $(DevOpsOrganization) - DevOpsProjectName: $(DevOpsProjectName) - DevOpsPublishPipelineDefinitionId: $(DevOpsPublishPipelineDefinitionId) + function: '$(CleanupEndpointSecret)' + key: '$(HostKeySecret)' + body: | + { + "operationId": "$(Build.BuildNumber)", + "BuildId": "$(Build.BuildId)", + "PlanUrl": "$(system.CollectionUri)", + "HubName": "$(system.HostType)", + "pipelineType": "RebuildPipeline", + "ProjectId": "$(system.TeamProjectId)", + "PlanId": "$(system.PlanId)", + "JobId": "$(system.JobId)", + "TimelineId": "$(system.TimelineId)", + "TaskInstanceId": "$(system.TaskInstanceId)", + "AuthToken": "$(system.AccessToken)", + } + waitForCompletion: "true"