# Please remember to update the documentation if you make changes to these parameters!
parameters:
  HelixSource: 'pr/default'              # required -- sources must start with pr/, official/, prodcon/, or agent/
  HelixType: 'tests/default/'            # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/'
  HelixBuild: $(Build.BuildNumber)       # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number
  HelixTargetQueues: ''                  # required -- semicolon-delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues
  HelixAccessToken: ''                   # required -- access token to make Helix API requests; should be provided by the appropriate variable group
  HelixProjectPath: 'eng/common/helixpublish.proj'  # optional -- path to the project file to build relative to BUILD_SOURCESDIRECTORY
  HelixProjectArguments: ''              # optional -- arguments passed to the build command
  HelixConfiguration: ''                 # optional -- additional property attached to a job
  HelixPreCommands: ''                   # optional -- commands to run before Helix work item execution
  HelixPostCommands: ''                  # optional -- commands to run after Helix work item execution
  WorkItemDirectory: ''                  # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects
  WorkItemCommand: ''                    # optional -- a command to execute on the payload; requires WorkItemDirectory; incompatible with XUnitProjects
  WorkItemTimeout: ''                    # optional -- a timeout in TimeSpan.Parse-ready value (e.g. 00:02:00) for the work item command; requires WorkItemDirectory; incompatible with XUnitProjects
  CorrelationPayloadDirectory: ''        # optional -- a directory to zip up and send to Helix as a correlation payload
  XUnitProjects: ''                      # optional -- semicolon-delimited list of XUnitProjects to parse and send to Helix; requires XUnitRuntimeTargetFramework, XUnitPublishTargetFramework, XUnitRunnerVersion, and IncludeDotNetCli=true
  XUnitWorkItemTimeout: ''               # optional -- the workitem timeout in seconds for all workitems created from the xUnit projects specified by XUnitProjects
  XUnitPublishTargetFramework: ''        # optional -- framework to use to publish your xUnit projects
  XUnitRuntimeTargetFramework: ''        # optional -- framework to use for the xUnit console runner
  XUnitRunnerVersion: ''                 # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects
  IncludeDotNetCli: false                # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion
  DotNetCliPackageType: ''               # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json
  DotNetCliVersion: ''                   # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json
  WaitForWorkItemCompletion: true        # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget."
  IsExternal: false                      # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set
  HelixBaseUri: 'https://helix.dot.net/' # optional -- sets the Helix API base URI (allows targeting https://helix.int-dot.net )
  Creator: ''                            # optional -- if the build is external, use this to specify who is sending the job
  DisplayNamePrefix: 'Run Tests'         # optional -- rename the beginning of the displayName of the steps in AzDO 
  condition: succeeded()                 # optional -- condition for step to execute; defaults to succeeded()
  continueOnError: false                 # optional -- determines whether to continue the build if the step errors; defaults to false

steps:
  - powershell: 'powershell "$env:BUILD_SOURCESDIRECTORY\eng\common\msbuild.ps1 $env:BUILD_SOURCESDIRECTORY/${{ parameters.HelixProjectPath }} /restore /p:TreatWarningsAsErrors=false ${{ parameters.HelixProjectArguments }} /t:Test /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\$env:BuildConfig\SendToHelix.binlog"'
    displayName: ${{ parameters.DisplayNamePrefix }} (Windows)
    env:
      BuildConfig: $(_BuildConfig)
      HelixSource: ${{ parameters.HelixSource }}
      HelixType: ${{ parameters.HelixType }}
      HelixBuild: ${{ parameters.HelixBuild }}
      HelixConfiguration:  ${{ parameters.HelixConfiguration }}
      HelixTargetQueues: ${{ parameters.HelixTargetQueues }}
      HelixAccessToken: ${{ parameters.HelixAccessToken }}
      HelixPreCommands: ${{ parameters.HelixPreCommands }}
      HelixPostCommands: ${{ parameters.HelixPostCommands }}
      WorkItemDirectory: ${{ parameters.WorkItemDirectory }}
      WorkItemCommand: ${{ parameters.WorkItemCommand }}
      WorkItemTimeout: ${{ parameters.WorkItemTimeout }}
      CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }}
      XUnitProjects: ${{ parameters.XUnitProjects }}
      XUnitWorkItemTimeout: ${{ parameters.XUnitWorkItemTimeout }}
      XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }}
      XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }}
      XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }}
      IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }}
      DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }}
      DotNetCliVersion: ${{ parameters.DotNetCliVersion }}
      WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }}
      HelixBaseUri: ${{ parameters.HelixBaseUri }}
      Creator: ${{ parameters.Creator }}
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
    condition: and(${{ parameters.condition }}, eq(variables['Agent.Os'], 'Windows_NT'))
    continueOnError: ${{ parameters.continueOnError }}
  - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/${{ parameters.HelixProjectPath }} /restore /p:TreatWarningsAsErrors=false ${{ parameters.HelixProjectArguments }} /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog
    displayName: ${{ parameters.DisplayNamePrefix }} (Unix)
    env:
      BuildConfig: $(_BuildConfig)
      HelixSource: ${{ parameters.HelixSource }}
      HelixType: ${{ parameters.HelixType }}
      HelixBuild: ${{ parameters.HelixBuild }}
      HelixConfiguration:  ${{ parameters.HelixConfiguration }}
      HelixTargetQueues: ${{ parameters.HelixTargetQueues }}
      HelixAccessToken: ${{ parameters.HelixAccessToken }}
      HelixPreCommands: ${{ parameters.HelixPreCommands }}
      HelixPostCommands: ${{ parameters.HelixPostCommands }}
      WorkItemDirectory: ${{ parameters.WorkItemDirectory }}
      WorkItemCommand: ${{ parameters.WorkItemCommand }}
      WorkItemTimeout: ${{ parameters.WorkItemTimeout }}
      CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }}
      XUnitProjects: ${{ parameters.XUnitProjects }}
      XUnitWorkItemTimeout: ${{ parameters.XUnitWorkItemTimeout }}
      XUnitPublishTargetFramework: ${{ parameters.XUnitPublishTargetFramework }}
      XUnitRuntimeTargetFramework: ${{ parameters.XUnitRuntimeTargetFramework }}
      XUnitRunnerVersion: ${{ parameters.XUnitRunnerVersion }}
      IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }}
      DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }}
      DotNetCliVersion: ${{ parameters.DotNetCliVersion }}
      WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }}
      HelixBaseUri: ${{ parameters.HelixBaseUri }}
      Creator: ${{ parameters.Creator }}
      SYSTEM_ACCESSTOKEN: $(System.AccessToken)
    condition: and(${{ parameters.condition }}, ne(variables['Agent.Os'], 'Windows_NT'))
    continueOnError: ${{ parameters.continueOnError }}
