in workflow.go [438:451]
func (w *Workflow) runStep(ctx context.Context, step Steper, state *State) error {
// set Step-level timeout for the Step
var notAfter time.Time
option := state.Option()
if option != nil && option.Timeout != nil {
notAfter = w.Clock.Now().Add(*option.Timeout)
var cancel func()
ctx, cancel = w.Clock.WithDeadline(ctx, notAfter)
defer cancel()
}
// run the Step with or without retry
do := w.makeDoForStep(step, state)
return w.retry(option.RetryOption)(ctx, do, notAfter)
}