func DependsOn()

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
	}
}