Keep failed processing reports consistent

This commit is contained in:
2026-11-10 20:16:59 +00:00
parent 3eacb33eb0
commit af0f9ac960
9 changed files with 115 additions and 41 deletions

View File

@@ -19,7 +19,7 @@ type Input struct {
Transcript *schema.SourceTranscript
Output diagnostics.OutputSelection
InitialReports diagnostics.ReportBundle
FailedReports diagnostics.ReportBundle
FailedReports func(error, []diagnostics.FileFailure) diagnostics.ReportBundle
Debug *DebugInput
}
@@ -65,18 +65,30 @@ func Prepare(ctx context.Context, input Input) (*Prepared, error) {
_ = session.Close()
return nil, err
}
if err := session.Initialize(input.InitialReports, input.FailedReports); err != nil {
failedReports := func(primary error) func([]diagnostics.FileFailure) diagnostics.ReportBundle {
return func(failures []diagnostics.FileFailure) diagnostics.ReportBundle {
if input.FailedReports == nil {
return diagnostics.ReportBundle{}
}
return input.FailedReports(primary, failures)
}
}
if err := session.Initialize(input.InitialReports, failedReports(nil)); err != nil {
return nil, err
}
cancelOutput := func(err error) error {
failed := failedReports(err)
return session.Finish(err, nil, failed(nil), failed)
}
if err := ctx.Err(); err != nil {
return nil, session.Finish(err, nil, input.FailedReports, func([]diagnostics.FileFailure) diagnostics.ReportBundle { return input.FailedReports })
return nil, cancelOutput(err)
}
result := &Prepared{Output: session}
if input.Debug != nil {
result.Debug, result.Warnings = session.PrepareDebug(input.Debug.WorkDir, input.Debug.RunID, input.Debug.Metadata, input.Debug.EffectiveConfig, input.Debug.Secrets...)
}
if err := ctx.Err(); err != nil {
return nil, session.Finish(err, nil, input.FailedReports, func([]diagnostics.FileFailure) diagnostics.ReportBundle { return input.FailedReports })
return nil, cancelOutput(err)
}
return result, nil
}

View File

@@ -122,8 +122,10 @@ func Build(input BuildInput) reporting.Snapshot {
if record.StageIndex == nil {
record.StageIndex = failure.Origin.StageIndex
}
chunk := failure.Origin.SectionIndex
record.ChunkIndex = &chunk
if failure.Origin.Kind != "" {
chunk := failure.Origin.SectionIndex
record.ChunkIndex = &chunk
}
record.Operation = string(failure.Origin.Kind)
record.Validator = failure.Origin.ValidatorName
record.BatchIndex = failure.Origin.BatchIndex