34 lines
510 B
Go
34 lines
510 B
Go
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()
|
|
}
|