in pkg/runner/job_status.go [212:250]
func (jr *JobRunner) BuildRunStatuses(ctx xcontext.Context, currentJob *job.Job) ([]job.RunStatus, error) {
// Calculate the status only for the runs which effectively were executed
runStartEvents, err := jr.frameworkEventManager.Fetch(ctx, frameworkevent.QueryEventName(EventRunStarted), frameworkevent.QueryJobID(currentJob.ID))
if err != nil {
return nil, fmt.Errorf("could not determine how many runs were executed: %v", err)
}
if len(runStartEvents) == 0 {
return nil, nil
}
numRuns := types.RunID(0)
for _, runStartEvent := range runStartEvents {
payload, err := runStartEvent.Payload.MarshalJSON()
if err != nil {
return nil, fmt.Errorf("could not extract JSON payload from RunStart event: %v", err)
}
payloadUnmarshaled := RunStartedPayload{}
if err := json.Unmarshal(payload, &payloadUnmarshaled); err != nil {
return nil, fmt.Errorf("could not unmarshal RunStarted event payload")
}
if payloadUnmarshaled.RunID > numRuns {
numRuns = payloadUnmarshaled.RunID
}
}
var runStatuses []job.RunStatus
for runID := types.RunID(1); runID <= numRuns; runID++ {
runCoordinates := job.RunCoordinates{JobID: currentJob.ID, RunID: runID}
runStatus, err := jr.BuildRunStatus(ctx, runCoordinates, currentJob)
if err != nil {
return nil, fmt.Errorf("could not rebuild run status for run %d: %v", runID, err)
}
runStatuses = append(runStatuses, *runStatus)
}
return runStatuses, nil
}