Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/build/azure-pipelines/common/publish-artifact.yml
3520 views
1
parameters:
2
- name: artifactName
3
type: string
4
- name: targetPath
5
type: string
6
- name: displayName
7
type: string
8
default: "Publish artifact"
9
- name: sbomEnabled
10
type: boolean
11
default: true
12
- name: sbomBuildDropPath
13
type: string
14
default: ""
15
- name: sbomPackageName
16
type: string
17
default: ""
18
- name: sbomPackageVersion
19
type: string
20
default: ""
21
- name: condition
22
type: string
23
default: succeeded()
24
- name: continueOnError
25
type: boolean
26
default: false
27
28
steps:
29
- powershell: |
30
$ArtifactName = "${{ parameters.artifactName }}"
31
32
if ("$(Agent.JobStatus)" -notin @('Succeeded', 'SucceededWithIssues')) {
33
$ArtifactName = "attempt$(System.JobAttempt)_$ArtifactName"
34
}
35
36
echo "##vso[task.setvariable variable=ARTIFACT_NAME]$ArtifactName"
37
38
$NormalizedArtifactName = $ArtifactName.Replace('-', '_')
39
echo "##vso[task.setvariable variable=NORMALIZED_ARTIFACT_NAME]$NormalizedArtifactName"
40
condition: ${{ parameters.condition }}
41
displayName: Generate artifact name
42
43
- powershell: |
44
$ErrorActionPreference = "Stop"
45
46
$Uri = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/artifacts?api-version=6.0"
47
48
try {
49
$Headers = @{
50
Authorization = "Bearer $(System.AccessToken)"
51
'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'
52
'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'
53
'Accept-Encoding' = 'gzip, deflate, br'
54
'Accept-Language' = 'en-US,en;q=0.9'
55
'Referer' = 'https://dev.azure.com'
56
}
57
$Response = Invoke-RestMethod -Uri $Uri -Headers $Headers -Method Get
58
Write-Host "API Response: $($Response | ConvertTo-Json -Depth 3)"
59
$ArtifactExists = $Response.value | Where-Object { $_.name -eq "$(ARTIFACT_NAME)" }
60
61
if ($ArtifactExists) {
62
Write-Host "Artifact '$(ARTIFACT_NAME)' already exists, skipping publish"
63
echo "##vso[task.setvariable variable=SHOULD_PUBLISH_ARTIFACT_$(NORMALIZED_ARTIFACT_NAME)]false"
64
} else {
65
Write-Host "Artifact '$(ARTIFACT_NAME)' does not exist, will publish"
66
echo "##vso[task.setvariable variable=SHOULD_PUBLISH_ARTIFACT_$(NORMALIZED_ARTIFACT_NAME)]true"
67
}
68
} catch {
69
Write-Host "Failed to check artifacts, will attempt to publish: $_"
70
echo "##vso[task.setvariable variable=SHOULD_PUBLISH_ARTIFACT_$(NORMALIZED_ARTIFACT_NAME)]true"
71
}
72
condition: ${{ parameters.condition }}
73
displayName: Check if artifact exists
74
75
- task: 1ES.PublishPipelineArtifact@1
76
inputs:
77
targetPath: ${{ parameters.targetPath }}
78
artifactName: $(ARTIFACT_NAME)
79
sbomEnabled: ${{ parameters.sbomEnabled }}
80
${{ if ne(parameters.sbomBuildDropPath, '') }}:
81
sbomBuildDropPath: ${{ parameters.sbomBuildDropPath }}
82
${{ if ne(parameters.sbomPackageName, '') }}:
83
sbomPackageName: ${{ parameters.sbomPackageName }}
84
${{ if ne(parameters.sbomPackageVersion, '') }}:
85
sbomPackageVersion: ${{ parameters.sbomPackageVersion }}
86
condition: and(${{ parameters.condition }}, eq(variables[format('SHOULD_PUBLISH_ARTIFACT_{0}', variables.NORMALIZED_ARTIFACT_NAME)], 'true'))
87
${{ if ne(parameters.continueOnError, false) }}:
88
continueOnError: ${{ parameters.continueOnError }}
89
displayName: ${{ parameters.displayName }}
90
91