func()

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
}