Harden diagnostic handling and warning presentation
This commit is contained in:
@@ -33,6 +33,14 @@ type runResult struct {
|
||||
}
|
||||
|
||||
func newRunResult(resolved pipeline.ResolvedPipeline, output pipeline.RunOutput, outputDirectory, debugDirectory string) (runResult, error) {
|
||||
diagnosticProjection, err := contracts.ProjectDiagnosticCollection(output.Diagnostics)
|
||||
if err != nil {
|
||||
return runResult{}, fmt.Errorf("summarize run diagnostics: %w", err)
|
||||
}
|
||||
return newRunResultWithDiagnostics(resolved, output, outputDirectory, debugDirectory, diagnosticProjection)
|
||||
}
|
||||
|
||||
func newRunResultWithDiagnostics(resolved pipeline.ResolvedPipeline, output pipeline.RunOutput, outputDirectory, debugDirectory string, diagnosticProjection contracts.DiagnosticProjection) (runResult, error) {
|
||||
if strings.TrimSpace(output.Manifest.RunID) == "" {
|
||||
return runResult{}, fmt.Errorf("run result requires a run ID")
|
||||
}
|
||||
@@ -64,10 +72,10 @@ func newRunResult(resolved pipeline.ResolvedPipeline, output pipeline.RunOutput,
|
||||
OutputDirectory: absOutputDirectory,
|
||||
NormalizedOutputCount: len(output.NormalizeOutputs),
|
||||
RejectedOutputCount: len(output.Rejected),
|
||||
WarningGroupCount: warningGroupCount(output.Diagnostics),
|
||||
WarningOccurrenceCount: warningOccurrenceCount(output.Diagnostics),
|
||||
DiagnosticGroupCount: diagnosticGroupCount(output.Diagnostics),
|
||||
DiagnosticOccurrenceCount: diagnosticOccurrenceCount(output.Diagnostics),
|
||||
WarningGroupCount: len(diagnosticProjection.Warnings),
|
||||
WarningOccurrenceCount: diagnosticProjection.WarningOccurrenceCount,
|
||||
DiagnosticGroupCount: len(diagnosticProjection.Diagnostics),
|
||||
DiagnosticOccurrenceCount: diagnosticProjection.DiagnosticOccurrenceCount,
|
||||
DiagnosticsTruncated: output.Diagnostics.Truncated,
|
||||
ValidationStatus: output.Manifest.ValidationStatus,
|
||||
ValidationSummaries: cloneValidationSummaries(output.Manifest.ValidationSummaries),
|
||||
@@ -97,44 +105,6 @@ func newRunResult(resolved pipeline.ResolvedPipeline, output pipeline.RunOutput,
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func warningGroupCount(diagnostics contracts.DiagnosticCollection) int {
|
||||
count := 0
|
||||
for _, group := range diagnostics.Groups {
|
||||
if group.Disposition == contracts.DiagnosticDispositionWarning {
|
||||
count++
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
func warningOccurrenceCount(diagnostics contracts.DiagnosticCollection) int {
|
||||
return occurrenceCountByDisposition(diagnostics, contracts.DiagnosticDispositionWarning, true)
|
||||
}
|
||||
|
||||
func diagnosticGroupCount(diagnostics contracts.DiagnosticCollection) int {
|
||||
count := 0
|
||||
for _, group := range diagnostics.Groups {
|
||||
if group.Disposition != contracts.DiagnosticDispositionWarning {
|
||||
count++
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
func diagnosticOccurrenceCount(diagnostics contracts.DiagnosticCollection) int {
|
||||
return occurrenceCountByDisposition(diagnostics, contracts.DiagnosticDispositionWarning, false) + diagnostics.UnrepresentedOccurrenceCount
|
||||
}
|
||||
|
||||
func occurrenceCountByDisposition(diagnostics contracts.DiagnosticCollection, disposition contracts.DiagnosticDisposition, include bool) int {
|
||||
count := 0
|
||||
for _, group := range diagnostics.Groups {
|
||||
if (group.Disposition == disposition) == include {
|
||||
count += group.OccurrenceCount
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
func cloneValidationSummaries(summaries []artifacts.ValidationSummary) []artifacts.ValidationSummary {
|
||||
if len(summaries) == 0 {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user