in command-runner/pkg/features/depends_on.go [25:53]
func DependsOn(progressHandle ProgressHandle) runner.Feature {
logged := make([]string, 0)
return func(ctx context.Context, plan runner.Plan, e runner.PlanExecutor) error {
log.Ctx(ctx).Debug().Msg("ENTER DependsOn")
for _, dependsOn := range plan.DependsOn() {
if ready, err := progressHandle.IsReady(dependsOn); err != nil {
log.Ctx(ctx).Err(err).Msgf("❌ aborted while waiting for %s", dependsOn)
progressHandle.Failure(err)
return err
} else if !ready {
if !slices.Contains(logged, dependsOn) {
log.Ctx(ctx).Info().Msgf("⏳ WAITING for %s to succeed", dependsOn)
logged = append(logged, dependsOn)
}
return common.ErrDefer
}
}
err := e(ctx)
if err != nil {
if !errors.Is(err, common.ErrDefer) {
progressHandle.Failure(err)
}
return err
}
progressHandle.Success()
log.Ctx(ctx).Debug().Msg("EXIT DependsOn")
return err
}
}