package execution import ( "context" "golang.org/x/sync/errgroup" ) type TaskDependencies []Task func (d *TaskDependencies) AddDependentTask(other Task) { deps := *d deps = append(deps, other) *d = deps } func (d *TaskDependencies) Execute(ctx context.Context, spec Spec) error { if len(*d) < 1 { return nil } deps := *d grp, grpCtx := errgroup.WithContext(ctx) for i := range deps { dep := deps[i] grp.Go(func() error { return dep.Execute(grpCtx, spec) }) } return grp.Wait() }