steps: - task: NodeTool@0 inputs: versionSpec: "12.x" - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2 inputs: versionSpec: "1.x" - task: AzureKeyVault@1 displayName: "Azure Key Vault: Get Secrets" inputs: azureSubscription: "vscode-builds-subscription" KeyVaultName: vscode - pwsh: | . build/azure-pipelines/win32/exec.ps1 cd build exec { yarn } displayName: Install dependencies - download: current patterns: '**/artifacts_processed_*.txt' displayName: Download all artifacts_processed text files - pwsh: | . build/azure-pipelines/win32/exec.ps1 if (Test-Path "$(Pipeline.Workspace)/artifacts_processed_*/artifacts_processed_*.txt") { Write-Host "Artifacts already processed so a build must have already been created." return } $env:AZURE_DOCUMENTDB_MASTERKEY = "$(builds-docdb-key-readwrite)" $VERSION = node -p "require('./package.json').version" Write-Host "Creating build with version: $VERSION" exec { node build/azure-pipelines/common/createBuild.js $VERSION } displayName: Create build if it hasn't been created before - pwsh: | $env:VSCODE_MIXIN_PASSWORD = "$(github-distro-mixin-password)" $env:AZURE_DOCUMENTDB_MASTERKEY = "$(builds-docdb-key-readwrite)" $env:AZURE_STORAGE_ACCESS_KEY = "$(ticino-storage-key)" $env:AZURE_STORAGE_ACCESS_KEY_2 = "$(vscode-storage-key)" $env:MOONCAKE_STORAGE_ACCESS_KEY = "$(vscode-mooncake-storage-key)" build/azure-pipelines/product-publish.ps1 env: SYSTEM_ACCESSTOKEN: $(System.AccessToken) displayName: Process artifacts - publish: $(Pipeline.Workspace)/artifacts_processed_$(System.StageAttempt)/artifacts_processed_$(System.StageAttempt).txt artifact: artifacts_processed_$(System.StageAttempt) displayName: Publish what artifacts were published for this stage attempt - pwsh: | $ErrorActionPreference = 'Stop' # Determine which stages we need to watch $stages = @( if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' } if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' } if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' } ) Write-Host "Stages to check: $stages" # Get the timeline and see if it says the other stage completed $timeline = Invoke-RestMethod "$($env:BUILDS_API_URL)timeline?api-version=6.0" -Headers @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" } -MaximumRetryCount 5 -RetryIntervalSec 1 $failedStages = @() foreach ($stage in $stages) { $didStageFail = $timeline.records | Where-Object { $_.name -eq $stage -and $_.type -eq 'stage' -and $_.result -ne 'succeeded' -and $_.result -ne 'succeededWithIssues' } if($didStageFail) { $failedStages += $stage } else { Write-Host "'$stage' did not fail." } } if ($failedStages.Length) { throw "Failed stages: $($failedStages -join ', '). This stage will now fail so that it is easier to retry failed jobs." } env: SYSTEM_ACCESSTOKEN: $(System.AccessToken) displayName: Determine if stage should succeed