summaryrefslogtreecommitdiff
path: root/eng/common/templates/phases/base.yml
blob: 0123cf43b1680b63465fb1929e75feaca758efd4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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'))