in job_instance.go [74:94]
func (ji *JobInstance[T]) start(ctx context.Context) {
// create root step instance
ji.rootStep = newStepInstance(ji.Definition.rootStep, ji)
ji.rootStep.task = asynctask.NewCompletedTask(ji.input)
ji.rootStep.state = StepStateCompleted
ji.steps[ji.rootStep.GetName()] = ji.rootStep
ji.stepsDag.AddNode(ji.rootStep)
// construct job instance graph, with TopologySort ordering
orderedSteps := ji.Definition.stepsDag.TopologicalSort()
for _, stepDef := range orderedSteps {
if stepDef.GetName() == ji.Definition.GetName() {
continue
}
ji.steps[stepDef.GetName()] = stepDef.createStepInstance(ctx, ji)
if ji.jobOptions.RunSequentially {
ji.steps[stepDef.GetName()].Waitable().Wait(ctx)
}
}
}