--- /dev/null
+<Project Sdk="Microsoft.DotNet.Helix.Sdk" DefaultTargets="Test">
+
+ <PropertyGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
+ <Python>py -3</Python>
+ <HelixPreCommands>$(HelixPreCommands);call %HELIX_CORRELATION_PAYLOAD%\performance\tools\machine-setup.cmd;set PYTHONPATH=%HELIX_WORKITEM_PAYLOAD%\scripts%3B%HELIX_WORKITEM_PAYLOAD%</HelixPreCommands>
+ <ArtifactsDirectory>%HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts</ArtifactsDirectory>
+ <BaseDirectory>$HELIX_CORRELATION_PAYLOAD</BaseDirectory>
+ <PerformanceDirectory>$(BaseDirectory)/performance</PerformanceDirectory>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(AGENT_OS)' != 'Windows_NT'">
+ <WorkItemCommand>$(PerformanceDirectory)/scripts/benchmarks_ci.py --csproj $(PerformanceDirectory)/$(TargetCsproj)</WorkItemCommand>
+ <CliArguments>--dotnet-versions $DOTNET_VERSION --cli-source-info args --cli-branch $PERFLAB_BRANCH --cli-commit-sha $PERFLAB_HASH --cli-repository https://github.com/$PERFLAB_REPO --cli-source-timestamp $PERFLAB_BUILDTIMESTAMP</CliArguments>
+ <Python>python3</Python>
+ <CoreRun>$(BaseDirectory)/Core_Root/corerun</CoreRun>
+ <HelixPreCommands>$(HelixPreCommands);chmod +x $(PerformanceDirectory)/tools/machine-setup.sh;. $(PerformanceDirectory)/tools/machine-setup.sh</HelixPreCommands>
+ <ArtifactsDirectory>$(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts</ArtifactsDirectory>
+ <BaselineArtifactsDirectory>$(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts_Baseline</BaselineArtifactsDirectory>
+ <ResultsComparer>$(PerformanceDirectory)/src/tools/ResultsComparer/ResultsComparer.csproj</ResultsComparer>
+ <DotnetExe>$(PerformanceDirectory)/tools/dotnet/$(Architecture)/dotnet</DotnetExe>
+ <Percent>%25</Percent>
+ <XMLResults>$HELIX_WORKITEM_ROOT/testResults.xml</XMLResults>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <HelixCorrelationPayload Include="$(CorrelationPayloadDirectory)">
+ <PayloadDirectory>%(Identity)</PayloadDirectory>
+ </HelixCorrelationPayload>
+ </ItemGroup>
+
+ <ItemGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
+ <HelixWorkItem Include="Crossgen System.Private.Xml.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Private.Xml.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen System.Linq.Expressions.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Linq.Expressions.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen Microsoft.CodeAnalysis.VisualBasic.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name Microsoft.CodeAnalysis.VisualBasic.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen Microsoft.CodeAnalysis.CSharp.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name Microsoft.CodeAnalysis.CSharp.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen System.Private.CoreLib.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Private.CoreLib.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ </ItemGroup>
+
+ <ItemGroup Condition="'$(AGENT_OS)' == 'Windows_NT' and '$(Architecture)' == 'x64'">
+ <HelixWorkItem Include="Crossgen2 System.Private.Xml.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Private.Xml.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen2 System.Linq.Expressions.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Linq.Expressions.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen2 Microsoft.CodeAnalysis.VisualBasic.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single Microsoft.CodeAnalysis.VisualBasic.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen2 Microsoft.CodeAnalysis.CSharp.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single Microsoft.CodeAnalysis.CSharp.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen2 System.Private.CoreLib.dll">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Private.CoreLib.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ </HelixWorkItem>
+ <HelixWorkItem Include="Crossgen2 Composite Framework R2R">
+ <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
+ <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --composite %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\framework-r2r.dll.rsp --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
+ <Timeout>1:00</Timeout>
+ </HelixWorkItem>
+ </ItemGroup>
+</Project>
\ No newline at end of file
<Timeout>4:00</Timeout>
</HelixWorkItem>
</ItemGroup>
-
- <ItemGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
- <HelixWorkItem Include="Crossgen System.Private.Xml.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Private.Xml.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen System.Linq.Expressions.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Linq.Expressions.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen Microsoft.CodeAnalysis.VisualBasic.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name Microsoft.CodeAnalysis.VisualBasic.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen Microsoft.CodeAnalysis.CSharp.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name Microsoft.CodeAnalysis.CSharp.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen System.Private.CoreLib.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Private.CoreLib.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- </ItemGroup>
-
- <ItemGroup Condition="'$(AGENT_OS)' == 'Windows_NT' and '$(Architecture)' == 'x64'">
- <HelixWorkItem Include="Crossgen2 System.Private.Xml.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Private.Xml.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen2 System.Linq.Expressions.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Linq.Expressions.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen2 Microsoft.CodeAnalysis.VisualBasic.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single Microsoft.CodeAnalysis.VisualBasic.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen2 Microsoft.CodeAnalysis.CSharp.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single Microsoft.CodeAnalysis.CSharp.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen2 System.Private.CoreLib.dll">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Private.CoreLib.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- </HelixWorkItem>
- <HelixWorkItem Include="Crossgen2 Composite Framework R2R">
- <PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
- <Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --composite %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\framework-r2r.dll.rsp --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
- <Timeout>1:00</Timeout>
- </HelixWorkItem>
-
- </ItemGroup>
</Project>
\ No newline at end of file
# Please remember to update the documentation if you make changes to these parameters!
parameters:
+ ProjectFile: '' # required -- project file that specifies the helix workitems
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
+ HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/ for a list 0of queues
+ HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group
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
DisplayNamePrefix: 'Send job to Helix' # 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: $(Build.SourcesDirectory)\eng\common\msbuild.ps1 $(Build.SourcesDirectory)\eng\common\performance\perfhelixpublish.proj /restore /t:Test /bl:$(Build.SourcesDirectory)\artifacts\log\$env:BuildConfig\SendToHelix.binlog
+ - powershell: $(Build.SourcesDirectory)\eng\common\msbuild.ps1 $(Build.SourcesDirectory)\eng\common\performance\${{ parameters.ProjectFile }} /restore /t:Test /bl:$(Build.SourcesDirectory)\artifacts\log\$env:BuildConfig\SendToHelix.binlog
displayName: ${{ parameters.DisplayNamePrefix }} (Windows)
env:
BuildConfig: $(_BuildConfig)
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/eng/common/performance/perfhelixpublish.proj /restore /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog
+ - script: $BUILD_SOURCESDIRECTORY/eng/common/msbuild.sh $BUILD_SOURCESDIRECTORY/eng/common/performance/${{ parameters.ProjectFile }} /restore /t:Test /bl:$BUILD_SOURCESDIRECTORY/artifacts/log/$BuildConfig/SendToHelix.binlog
displayName: ${{ parameters.DisplayNamePrefix }} (Unix)
env:
BuildConfig: $(_BuildConfig)
#
- template: /eng/pipelines/common/checkout-job.yml
+# build coreclr and libraries
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/common/build-coreclr-and-libraries-job.yml
jobParameters:
testGroup: perf
+# build mono
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/mono/templates/build-job.yml
platforms:
- Linux_x64
+# run mono perf job
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
testGroup: perf
liveLibrariesBuildConfig: Release
runtimeType: mono
+ projectFile: microbenchmarks.proj
+ runKind: micro_mono
+# run mono interpreter job (private CI only)
- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
liveLibrariesBuildConfig: Release
runtimeType: mono
codeGenType: 'Interpreter'
+ projectFile: microbenchmarks.proj
+ runKind: micro_mono
+# run coreclr microbenchmarks perf job
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
jobParameters:
testGroup: perf
liveLibrariesBuildConfig: Release
+ projectFile: microbenchmarks.proj
+ runKind: micro
+
+# run coreclr crossgen perf job
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
+ buildConfig: release
+ runtimeFlavor: coreclr
+ platforms:
+ #- Linux_x64
+ - Windows_NT_x64
+ - Windows_NT_x86
+ jobParameters:
+ testGroup: perf
+ liveLibrariesBuildConfig: Release
+ projectFile: crossgen_perf.proj
+ runKind: crossgen_scenarios
+
runtimeType: 'coreclr'
pool: ''
codeGenType: 'JIT'
+ projetFile: ''
+ runKind: ''
### Perf job
- template: run-performance-job.yml
parameters:
# Compute job name from template parameters
- jobName: ${{ format('perfbuild_{0}{1}_{2}_{3}_{4}_{5}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.runtimeType, parameters.codeGenType) }}
- displayName: ${{ format('Performance {0}{1} {2} {3} {4} {5}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.runtimeType, parameters.codeGenType) }}
+ jobName: ${{ format('perfbuild_{0}{1}_{2}_{3}_{4}_{5}_{6}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.runtimeType, parameters.codeGenType, parameters.runKind) }}
+ displayName: ${{ format('Performance {0}{1} {2} {3} {4} {5} {6}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.runtimeType, parameters.codeGenType, parameters.runKind) }}
pool: ${{ parameters.pool }}
buildConfig: ${{ parameters.buildConfig }}
archType: ${{ parameters.archType }}
liveLibrariesBuildConfig: ${{ parameters.liveLibrariesBuildConfig }}
runtimeType: ${{ parameters.runtimeType }}
codeGenType: ${{ parameters.codeGenType }}
+ projectFile: ${{ parameters.projectFile }}
+ runKind: ${{ parameters.runKind }}
# Test job depends on the corresponding build job
dependsOn:
- ${{ format('coreclr_{0}_product_build_{1}{2}_{3}_{4}', parameters.runtimeVariant, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
liveLibrariesBuildConfig: '' # optional -- live-live libraries configuration to use for the run
runtimeType: 'coreclr' # optional -- Sets the runtime as coreclr or mono
codeGenType: 'JIT' # optional -- Decides on the codegen technology if running on mono
+ projectFile: '' # required -- project file to build helix workitems
+ runKind: '' # required -- test category
jobs:
- template: xplat-pipeline-job.yml
_Framework: ${{ framework }}
steps:
- ${{ parameters.steps }}
- - powershell: $(Build.SourcesDirectory)\eng\common\performance\performance-setup.ps1 $(IsInternal)$(Interpreter) -Framework $(_Framework) ${{ parameters.extraSetupParameters }}
+ - powershell: $(Build.SourcesDirectory)\eng\common\performance\performance-setup.ps1 $(IsInternal)$(Interpreter) -Framework $(_Framework) -Kind ${{ parameters.runKind }} ${{ parameters.extraSetupParameters }}
displayName: Performance Setup (Windows)
condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
- - script: $(Build.SourcesDirectory)/eng/common/performance/performance-setup.sh $(IsInternal)$(Interpreter) --framework $(_Framework) ${{ parameters.extraSetupParameters }}
+ - script: $(Build.SourcesDirectory)/eng/common/performance/performance-setup.sh $(IsInternal)$(Interpreter) --framework $(_Framework) --kind ${{ parameters.runKind }} ${{ parameters.extraSetupParameters }}
displayName: Performance Setup (Unix)
condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'))
continueOnError: ${{ parameters.continueOnError }}
WorkItemTimeout: 4:00 # 4 hours
WorkItemDirectory: '$(WorkItemDirectory)' # WorkItemDirectory can not be empty, so we send it some docs to keep it happy
CorrelationPayloadDirectory: '$(PayloadDirectory)' # it gets checked out to a folder with shorter path than WorkItemDirectory so we can avoid file name too long exceptions
+ ProjectFile: ${{ parameters.projectFile }}
- task: PublishPipelineArtifact@1
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: 'Performance_Run_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)_${{ parameters.runtimeType }}_${{ parameters.codeGenType }}'
+ artifactName: 'Performance_Run_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)_${{ parameters.runtimeType }}_${{ parameters.codeGenType }}_${{ parameters.runKind }}'
continueOnError: true
condition: always()