func NewDagFromTask()

in graph/dag.go [60:101]


func NewDagFromTask(t *Task) (*Dag, error) {
	dag := NewDag()

	var prevStep *Step
	for _, step := range t.Steps {
		if err := step.Validate(); err != nil {
			return dag, err
		}
		if _, err := dag.AddVertex(step); err != nil {
			return dag, err
		}

		// If the step is parallel, add it to the root
		if step.ShouldExecuteImmediately() {
			if err := dag.AddEdge(rootNodeID, step.ID); err != nil {
				return dag, err
			}
		} else if step.HasNoWhen() {
			// If the step has no when, add it to the root or the previous step
			if prevStep == nil {
				if err := dag.AddEdge(rootNodeID, step.ID); err != nil {
					return dag, err
				}
			} else {
				if err := dag.AddEdge(prevStep.ID, step.ID); err != nil {
					return dag, err
				}
			}
		} else {
			// Otherwise, add edges according to when
			for _, dep := range step.When {
				if err := dag.AddEdge(dep, step.ID); err != nil {
					return dag, err
				}
			}
		}

		prevStep = step
	}

	return dag, nil
}