parameters: # Optional: Clean sources before building clean: true # Optional: Git fetch depth fetchDepth: '' # Optional: name of the phase (not specifying phase name may cause name collisions) name: '' # Optional: display name of the phase displayName: '' # Optional: condition for the job to run condition: '' # Optional: dependencies of the phase dependsOn: '' # Required: A defined YAML queue queue: {} # Required: build steps steps: [] # Optional: variables variables: {} # Optional: should run as a public build even in the internal project # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false ## Telemetry variables # Optional: enable sending telemetry # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix # _HelixBuildConfig - differentiate between Debug, Release, other # _HelixSource - Example: build/product # _HelixType - Example: official/dotnet/arcade/$(Build.SourceBranch) enableTelemetry: false # Optional: Enable installing Microbuild plugin # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix # _TeamName - the name of your team # _SignType - 'test' or 'real' enableMicrobuild: false # Internal resources (telemetry, microbuild) can only be accessed from non-public projects, # and some (Microbuild) should only be applied to non-PR cases for internal builds. phases: - phase: ${{ parameters.name }} ${{ if ne(parameters.displayName, '') }}: displayName: ${{ parameters.displayName }} ${{ if ne(parameters.condition, '') }}: condition: ${{ parameters.condition }} ${{ if ne(parameters.dependsOn, '') }}: dependsOn: ${{ parameters.dependsOn }} queue: ${{ parameters.queue }} ${{ if ne(parameters.variables, '') }}: variables: ${{ insert }}: ${{ parameters.variables }} steps: - checkout: self clean: ${{ parameters.clean }} ${{ if ne(parameters.fetchDepth, '') }}: fetchDepth: ${{ parameters.fetchDepth }} - ${{ if eq(parameters.enableTelemetry, 'true') }}: - template: /eng/common/templates/steps/telemetry-start.yml parameters: buildConfig: $(_HelixBuildConfig) helixSource: $(_HelixSource) helixType: $(_HelixType) runAsPublic: ${{ parameters.runAsPublic }} - ${{ if eq(parameters.enableMicrobuild, 'true') }}: # Internal only resource, and Microbuild signing shouldn't be applied to PRs. - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: MicroBuildSigningPlugin@2 displayName: Install MicroBuild plugin inputs: signType: $(_SignType) zipSources: false feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json env: TeamName: $(_TeamName) continueOnError: false condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) # Run provided build steps - ${{ parameters.steps }} - ${{ if eq(parameters.enableMicrobuild, 'true') }}: # Internal only resources - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: MicroBuildCleanup@1 displayName: Execute Microbuild cleanup tasks condition: and(always(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) env: TeamName: $(_TeamName) - ${{ if eq(parameters.enableTelemetry, 'true') }}: - template: /eng/common/templates/steps/telemetry-end.yml parameters: helixSource: $(_HelixSource) helixType: $(_HelixType) - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: CopyFiles@2 displayName: Gather Asset Manifests inputs: SourceFolder: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/AssetManifest' TargetFolder: '$(Build.StagingDirectory)/AssetManifests' continueOnError: false condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true')) - task: PublishBuildArtifacts@1 displayName: Push Asset Manifests inputs: PathtoPublish: '$(Build.StagingDirectory)/AssetManifests' PublishLocation: Container ArtifactName: AssetManifests continueOnError: false condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true'))