in build_step.go [17:38]
func (sb *StepBuilder) BuildStep(s Steper) {
if sb.built == nil {
sb.built = make(Set[Steper])
}
Traverse(s, func(s Steper, walked []Steper) TraverseDecision {
if sb.built.Has(s) {
return TraverseEndBranch // already built
}
if _, ok := s.(interface{ BuildStep(Steper) }); ok {
return TraverseEndBranch // it's a sub-workflow, let it manage its own steps
}
if b, ok := s.(interface{ BuildStep() }); ok {
if r, ok := s.(interface{ Reset() }); ok {
r.Reset() // reset the step before building
}
b.BuildStep()
sb.built.Add(s)
return TraverseEndBranch // not necessary to go deeper
}
return TraverseContinue
})
}