1+ # Internal resources (telemetry, microbuild) can only be accessed from non-public projects,
2+ # and some (Microbuild) should only be applied to non-PR cases for internal builds.
3+
14parameters :
25# Job schema parameters - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#job
36 cancelTimeoutInMinutes : ' '
4-
57 condition : ' '
6-
7- continueOnError : false
8-
98 container : ' '
10-
9+ continueOnError : false
1110 dependsOn : ' '
12-
1311 displayName : ' '
14-
15- steps : []
16-
1712 pool : ' '
18-
13+ steps : []
1914 strategy : ' '
20-
2115 timeoutInMinutes : ' '
22-
2316 variables : []
24-
2517 workspace : ' '
2618
27- # Job base template specific parameters
28- # Optional: Enable installing Microbuild plugin
29- # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix
30- # _TeamName - the name of your team
31- # _SignType - 'test' or 'real'
19+ # Job base template specific parameters
20+ # See schema documentation in /Documentation/AzureDevOps/TemplateSchema.md
21+ artifacts : ' '
3222 enableMicrobuild : false
33-
34- # Optional: Include PublishBuildArtifacts task
3523 enablePublishBuildArtifacts : false
36-
37- # Optional: Enable publishing to the build asset registry
3824 enablePublishBuildAssets : false
39-
40- # Optional: Prevent gather/push manifest from executing when using publishing pipelines
41- enablePublishUsingPipelines : false
42-
43- # Optional: Include PublishTestResults task
4425 enablePublishTestResults : false
45-
46- # Optional: enable sending telemetry
47- enableTelemetry : false
48-
49- # Optional: define the helix repo for telemetry (example: 'dotnet/arcade')
50- helixRepo : ' '
51-
52- # Optional: define the helix type for telemetry (example: 'build/product/')
53- helixType : ' '
54-
55- # Required: name of the job
26+ enablePublishUsingPipelines : false
5627 name : ' '
57-
58- # Optional: should run as a public build even in the internal project
59- # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects.
28+ preSteps : []
6029 runAsPublic : false
6130
62- # Internal resources (telemetry, microbuild) can only be accessed from non-public projects,
63- # and some (Microbuild) should only be applied to non-PR cases for internal builds.
64-
6531jobs :
6632- job : ${{ parameters.name }}
6733
9359 timeoutInMinutes : ${{ parameters.timeoutInMinutes }}
9460
9561 variables :
96- - ${{ if eq (parameters.enableTelemetry, 'true ') }} :
62+ - ${{ if ne (parameters.enableTelemetry, 'false ') }} :
9763 - name : DOTNET_CLI_TELEMETRY_PROFILE
9864 value : ' $(Build.Repository.Uri)'
9965 - ${{ each variable in parameters.variables }} :
@@ -125,21 +91,12 @@ jobs:
12591 workspace : ${{ parameters.workspace }}
12692
12793 steps :
128- - ${{ if eq(parameters.enableTelemetry, 'true') }} :
129- # Telemetry tasks are built from https://github.com/dotnet/arcade-extensions
130- - task : sendStartTelemetry@0
131- displayName : ' Send Helix Start Telemetry'
132- inputs :
133- helixRepo : ${{ parameters.helixRepo }}
134- ${{ if ne(parameters.helixType, '') }} :
135- helixType : ${{ parameters.helixType }}
136- buildConfig : $(_BuildConfig)
137- runAsPublic : ${{ parameters.runAsPublic }}
138- continueOnError : ${{ parameters.continueOnError }}
139- condition : always()
94+ - ${{ if ne(parameters.preSteps, '') }} :
95+ - ${{ each preStep in parameters.preSteps }} :
96+ - ${{ preStep }}
14097
141- - ${{ if eq(parameters.enableMicrobuild , 'true' ) }} :
142- - ${{ if and( eq(parameters.runAsPublic , 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest') ) }} :
98+ - ${{ if and( eq(parameters.runAsPublic , 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest') ) }} :
99+ - ${{ if eq(parameters.enableMicrobuild , 'true' ) }} :
143100 - task : MicroBuildSigningPlugin@2
144101 displayName : Install MicroBuild plugin
145102 inputs :
@@ -151,9 +108,16 @@ jobs:
151108 continueOnError : ${{ parameters.continueOnError }}
152109 condition : and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT'))
153110
154- - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }} :
155111 - task : NuGetAuthenticate@0
156112
113+ - ${{ if or(eq(parameters.artifacts.download, 'true'), ne(parameters.artifacts.download, '')) }} :
114+ - task : DownloadPipelineArtifact@2
115+ inputs :
116+ buildType : current
117+ artifactName : ${{ coalesce(parameters.artifacts.download.name, 'Artifacts_$(Agent.OS)_$(_BuildConfig)') }}
118+ targetPath : ${{ coalesce(parameters.artifacts.download.path, 'artifacts') }}
119+ itemPattern : ${{ coalesce(parameters.artifacts.download.pattern, '**') }}
120+
157121 - ${{ each step in parameters.steps }} :
158122 - ${{ step }}
159123
@@ -166,20 +130,60 @@ jobs:
166130 env :
167131 TeamName : $(_TeamName)
168132
169- - ${{ if eq(parameters.enableTelemetry, 'true') }} :
170- # Telemetry tasks are built from https://github.com/dotnet/arcade-extensions
171- - task : sendEndTelemetry@0
172- displayName : ' Send Helix End Telemetry'
173- continueOnError : ${{ parameters.continueOnError }}
174- condition : always()
175-
176- - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }} :
133+ - ${{ if ne(parameters.artifacts.publish, '') }} :
134+ - ${{ if or(eq(parameters.artifacts.publish.artifacts, 'true'), ne(parameters.artifacts.publish.artifacts, '')) }} :
135+ - task : CopyFiles@2
136+ displayName : Gather binaries for publish to artifacts
137+ inputs :
138+ SourceFolder : ' artifacts/bin'
139+ Contents : ' **'
140+ TargetFolder : ' $(Build.ArtifactStagingDirectory)/artifacts/bin'
141+ - task : CopyFiles@2
142+ displayName : Gather packages for publish to artifacts
143+ inputs :
144+ SourceFolder : ' artifacts/packages'
145+ Contents : ' **'
146+ TargetFolder : ' $(Build.ArtifactStagingDirectory)/artifacts/packages'
147+ - task : PublishBuildArtifacts@1
148+ displayName : Publish pipeline artifacts
149+ inputs :
150+ PathtoPublish : ' $(Build.ArtifactStagingDirectory)/artifacts'
151+ PublishLocation : Container
152+ ArtifactName : ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }}
153+ continueOnError : true
154+ condition : always()
155+ - ${{ if or(eq(parameters.artifacts.publish.logs, 'true'), ne(parameters.artifacts.publish.logs, '')) }} :
156+ - publish : artifacts/log
157+ artifact : ${{ coalesce(parameters.artifacts.publish.logs.name, 'Logs_Build_$(Agent.Os)_$(_BuildConfig)') }}
158+ displayName : Publish logs
159+ continueOnError : true
160+ condition : always()
161+ - ${{ if or(eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }} :
162+ - ${{ if and(ne(parameters.enablePublishUsingPipelines, 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }} :
163+ - task : CopyFiles@2
164+ displayName : Gather Asset Manifests
165+ inputs :
166+ SourceFolder : ' $(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/AssetManifest'
167+ TargetFolder : ' $(Build.ArtifactStagingDirectory)/AssetManifests'
168+ continueOnError : ${{ parameters.continueOnError }}
169+ condition : and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true'))
170+
171+ - task : PublishBuildArtifacts@1
172+ displayName : Push Asset Manifests
173+ inputs :
174+ PathtoPublish : ' $(Build.ArtifactStagingDirectory)/AssetManifests'
175+ PublishLocation : Container
176+ ArtifactName : AssetManifests
177+ continueOnError : ${{ parameters.continueOnError }}
178+ condition : and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true'))
179+
180+ - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }} :
177181 - task : PublishBuildArtifacts@1
178182 displayName : Publish Logs
179183 inputs :
180184 PathtoPublish : ' $(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)'
181185 PublishLocation : Container
182- ArtifactName : $( Agent.Os)_$(Agent.JobName)
186+ ArtifactName : ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$( Agent.Os)_$(Agent.JobName)' ) }}
183187 continueOnError : true
184188 condition : always()
185189
0 commit comments