parameters:
  # This template adds arcade-powered source-build to CI. A job is created for each platform, as
  # well as an optional server job that completes when all platform jobs complete.

  # The name of the "join" job for all source-build platforms. If set to empty string, the job is
  # not included. Existing repo pipelines can use this job depend on all source-build jobs
  # completing without maintaining a separate list of every single job ID: just depend on this one
  # server job. By default, not included. Recommended name if used: 'Source_Build_Complete'.
  allCompletedJobId: ''

  # See /eng/common/templates-official/job/source-build.yml
  jobNamePrefix: 'Source_Build'

  # This is the default platform provided by Arcade, intended for use by a managed-only repo.
  defaultManagedPlatform:
    name: 'Managed'
    container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9'

  # Defines the platforms on which to run build jobs. One job is created for each platform, and the
  # object in this array is sent to the job template as 'platform'. If no platforms are specified,
  # one job runs on 'defaultManagedPlatform'.
  platforms: []

jobs:

- ${{ if ne(parameters.allCompletedJobId, '') }}:
  - job: ${{ parameters.allCompletedJobId }}
    displayName: Source-Build Complete
    pool: server
    dependsOn:
    - ${{ each platform in parameters.platforms }}:
      - ${{ parameters.jobNamePrefix }}_${{ platform.name }}
    - ${{ if eq(length(parameters.platforms), 0) }}:
      - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }}

- ${{ each platform in parameters.platforms }}:
  - template: /eng/common/templates-official/job/source-build.yml
    parameters:
      jobNamePrefix: ${{ parameters.jobNamePrefix }}
      platform: ${{ platform }}

- ${{ if eq(length(parameters.platforms), 0) }}:
  - template: /eng/common/templates-official/job/source-build.yml
    parameters:
      jobNamePrefix: ${{ parameters.jobNamePrefix }}
      platform: ${{ parameters.defaultManagedPlatform }}
