in pkg/runner/sequence_of_steps.go [38:59]
func (s *SequenceOfSteps) Run(ctx ctx.Context, stepsCtx *StepsContext) (*proto.StepResult, error) {
result := NewStepResultBuilder(s.loadedFrom, s.params, s.specDef)
if err := result.ObserveEnv(stepsCtx.ExpandAndApplyEnv(s.specDef.Env())); err != nil {
return result.BuildFailure(), fmt.Errorf("expand step env: %w", err)
}
for _, step := range s.steps {
stepResult, err := result.ObserveStepResult(step.Run(ctx, stepsCtx))
stepsCtx.RecordResult(stepResult)
if err != nil {
return result.BuildFailure(), err // expose underlying step error (no need to wrap)
}
}
if err := result.ObserveOutputs(s.readOutputs(stepsCtx, stepsCtx.StepResults())); err != nil {
return result.BuildFailure(), fmt.Errorf("outputs: %w", err)
}
return result.Build(), nil
}