[runtime-diagnostics] Publish test dumps on failure#124821
[runtime-diagnostics] Publish test dumps on failure#124821max-charlamb wants to merge 1 commit intodotnet:mainfrom
Conversation
|
Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag |
There was a problem hiding this comment.
Pull request overview
Updates the runtime-diagnostics Azure Pipelines definition to automatically publish crash dumps and test logs as pipeline artifacts when diagnostics test jobs fail, improving failure triage for cDAC/DAC runs.
Changes:
- Publish crash dumps (
artifacts/tmp/$(_BuildConfig)/dumps) as a pipeline artifact on failures. - Publish test results and SOS logs (
artifacts/TestResults) as a pipeline artifact on failures. - Apply the above to both the cDAC and DAC diagnostics jobs.
| condition: failed() | ||
| - task: PublishPipelineArtifact@1 | ||
| inputs: | ||
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | ||
| artifactName: 'TestResults_DAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | ||
| displayName: 'Publish Test Results and SOS Logs' | ||
| continueOnError: true | ||
| condition: failed() |
There was a problem hiding this comment.
As above, condition: failed() can skip artifact publication when the job ends SucceededWithIssues due to continueOnError. If publishing logs/results is intended for any failure/issue, update the condition to also match SucceededWithIssues.
| condition: failed() | |
| - task: PublishPipelineArtifact@1 | |
| inputs: | |
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | |
| artifactName: 'TestResults_DAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | |
| displayName: 'Publish Test Results and SOS Logs' | |
| continueOnError: true | |
| condition: failed() | |
| condition: or(failed(), eq(variables['Agent.JobStatus'], 'SucceededWithIssues')) | |
| - task: PublishPipelineArtifact@1 | |
| inputs: | |
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | |
| artifactName: 'TestResults_DAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | |
| displayName: 'Publish Test Results and SOS Logs' | |
| continueOnError: true | |
| condition: or(failed(), eq(variables['Agent.JobStatus'], 'SucceededWithIssues')) |
| condition: failed() | ||
| - task: PublishPipelineArtifact@1 | ||
| inputs: | ||
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | ||
| artifactName: 'TestResults_cDAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | ||
| displayName: 'Publish Test Results and SOS Logs' | ||
| continueOnError: true | ||
| condition: failed() |
There was a problem hiding this comment.
condition: failed() likely won’t run when tests fail but the job ends as SucceededWithIssues (e.g., PublishTestResults@2 has continueOnError: true). Consider using a condition that also matches Agent.JobStatus == 'SucceededWithIssues' (e.g., in(variables['Agent.JobStatus'], 'Failed', 'SucceededWithIssues')) so dumps get published on test failures as well.
| condition: failed() | |
| - task: PublishPipelineArtifact@1 | |
| inputs: | |
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | |
| artifactName: 'TestResults_cDAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | |
| displayName: 'Publish Test Results and SOS Logs' | |
| continueOnError: true | |
| condition: failed() | |
| condition: in(variables['Agent.JobStatus'], 'Failed', 'SucceededWithIssues') | |
| - task: PublishPipelineArtifact@1 | |
| inputs: | |
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | |
| artifactName: 'TestResults_cDAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | |
| displayName: 'Publish Test Results and SOS Logs' | |
| continueOnError: true | |
| condition: in(variables['Agent.JobStatus'], 'Failed', 'SucceededWithIssues') |
| condition: failed() | ||
| - task: PublishPipelineArtifact@1 | ||
| inputs: | ||
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | ||
| artifactName: 'TestResults_cDAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | ||
| displayName: 'Publish Test Results and SOS Logs' | ||
| continueOnError: true | ||
| condition: failed() |
There was a problem hiding this comment.
Same issue as above: with continueOnError: true on PublishTestResults@2, the job may be SucceededWithIssues rather than Failed, so condition: failed() may skip publishing the TestResults/SOS logs artifact. Adjust the condition to include SucceededWithIssues if the goal is to publish whenever tests fail.
| condition: failed() | |
| - task: PublishPipelineArtifact@1 | |
| inputs: | |
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | |
| artifactName: 'TestResults_cDAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | |
| displayName: 'Publish Test Results and SOS Logs' | |
| continueOnError: true | |
| condition: failed() | |
| condition: or(failed(), eq(variables['Agent.JobStatus'], 'SucceededWithIssues')) | |
| - task: PublishPipelineArtifact@1 | |
| inputs: | |
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | |
| artifactName: 'TestResults_cDAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | |
| displayName: 'Publish Test Results and SOS Logs' | |
| continueOnError: true | |
| condition: or(failed(), eq(variables['Agent.JobStatus'], 'SucceededWithIssues')) |
| condition: failed() | ||
| - task: PublishPipelineArtifact@1 | ||
| inputs: | ||
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | ||
| artifactName: 'TestResults_DAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | ||
| displayName: 'Publish Test Results and SOS Logs' | ||
| continueOnError: true | ||
| condition: failed() |
There was a problem hiding this comment.
condition: failed() may not trigger when the job result is SucceededWithIssues (e.g., test failures reported by PublishTestResults@2 with continueOnError: true). If you want dumps on any test failure, include SucceededWithIssues in the condition (e.g., in(variables['Agent.JobStatus'], 'Failed', 'SucceededWithIssues')).
| condition: failed() | |
| - task: PublishPipelineArtifact@1 | |
| inputs: | |
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | |
| artifactName: 'TestResults_DAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | |
| displayName: 'Publish Test Results and SOS Logs' | |
| continueOnError: true | |
| condition: failed() | |
| condition: in(variables['Agent.JobStatus'], 'Failed', 'SucceededWithIssues') | |
| - task: PublishPipelineArtifact@1 | |
| inputs: | |
| targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults' | |
| artifactName: 'TestResults_DAC_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)' | |
| displayName: 'Publish Test Results and SOS Logs' | |
| continueOnError: true | |
| condition: in(variables['Agent.JobStatus'], 'Failed', 'SucceededWithIssues') |
No description provided.