Path: blob/main/build/azure-pipelines/common/publish-artifact.yml
3520 views
parameters:1- name: artifactName2type: string3- name: targetPath4type: string5- name: displayName6type: string7default: "Publish artifact"8- name: sbomEnabled9type: boolean10default: true11- name: sbomBuildDropPath12type: string13default: ""14- name: sbomPackageName15type: string16default: ""17- name: sbomPackageVersion18type: string19default: ""20- name: condition21type: string22default: succeeded()23- name: continueOnError24type: boolean25default: false2627steps:28- powershell: |29$ArtifactName = "${{ parameters.artifactName }}"3031if ("$(Agent.JobStatus)" -notin @('Succeeded', 'SucceededWithIssues')) {32$ArtifactName = "attempt$(System.JobAttempt)_$ArtifactName"33}3435echo "##vso[task.setvariable variable=ARTIFACT_NAME]$ArtifactName"3637$NormalizedArtifactName = $ArtifactName.Replace('-', '_')38echo "##vso[task.setvariable variable=NORMALIZED_ARTIFACT_NAME]$NormalizedArtifactName"39condition: ${{ parameters.condition }}40displayName: Generate artifact name4142- powershell: |43$ErrorActionPreference = "Stop"4445$Uri = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/artifacts?api-version=6.0"4647try {48$Headers = @{49Authorization = "Bearer $(System.AccessToken)"50'User-Agent' = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'51'Accept' = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7'52'Accept-Encoding' = 'gzip, deflate, br'53'Accept-Language' = 'en-US,en;q=0.9'54'Referer' = 'https://dev.azure.com'55}56$Response = Invoke-RestMethod -Uri $Uri -Headers $Headers -Method Get57Write-Host "API Response: $($Response | ConvertTo-Json -Depth 3)"58$ArtifactExists = $Response.value | Where-Object { $_.name -eq "$(ARTIFACT_NAME)" }5960if ($ArtifactExists) {61Write-Host "Artifact '$(ARTIFACT_NAME)' already exists, skipping publish"62echo "##vso[task.setvariable variable=SHOULD_PUBLISH_ARTIFACT_$(NORMALIZED_ARTIFACT_NAME)]false"63} else {64Write-Host "Artifact '$(ARTIFACT_NAME)' does not exist, will publish"65echo "##vso[task.setvariable variable=SHOULD_PUBLISH_ARTIFACT_$(NORMALIZED_ARTIFACT_NAME)]true"66}67} catch {68Write-Host "Failed to check artifacts, will attempt to publish: $_"69echo "##vso[task.setvariable variable=SHOULD_PUBLISH_ARTIFACT_$(NORMALIZED_ARTIFACT_NAME)]true"70}71condition: ${{ parameters.condition }}72displayName: Check if artifact exists7374- task: 1ES.PublishPipelineArtifact@175inputs:76targetPath: ${{ parameters.targetPath }}77artifactName: $(ARTIFACT_NAME)78sbomEnabled: ${{ parameters.sbomEnabled }}79${{ if ne(parameters.sbomBuildDropPath, '') }}:80sbomBuildDropPath: ${{ parameters.sbomBuildDropPath }}81${{ if ne(parameters.sbomPackageName, '') }}:82sbomPackageName: ${{ parameters.sbomPackageName }}83${{ if ne(parameters.sbomPackageVersion, '') }}:84sbomPackageVersion: ${{ parameters.sbomPackageVersion }}85condition: and(${{ parameters.condition }}, eq(variables[format('SHOULD_PUBLISH_ARTIFACT_{0}', variables.NORMALIZED_ARTIFACT_NAME)], 'true'))86${{ if ne(parameters.continueOnError, false) }}:87continueOnError: ${{ parameters.continueOnError }}88displayName: ${{ parameters.displayName }}899091