diff --git a/cmd/dagger/cmd/up.go b/cmd/dagger/cmd/up.go index 925bf248..71032db6 100644 --- a/cmd/dagger/cmd/up.go +++ b/cmd/dagger/cmd/up.go @@ -143,10 +143,10 @@ func europaUp(ctx context.Context, cl *client.Client, args ...string) error { lg := log.Ctx(ctx) p, err := plan.Load(ctx, plan.Config{ - Args: args, - With: viper.GetStringSlice("with"), + Args: args, + With: viper.GetStringSlice("with"), + Target: viper.GetString("target"), }) - if err != nil { lg.Fatal().Err(err).Msg("failed to load plan") } @@ -225,6 +225,7 @@ func init() { upCmd.Flags().BoolP("force", "f", false, "Force up, disable inputs check") upCmd.Flags().String("output", "", "Write computed output. Prints on stdout if set to-") upCmd.Flags().StringArrayP("with", "w", []string{}, "") + upCmd.Flags().StringP("target", "t", "", "Run a single target of the DAG (for debugging only)") if err := viper.BindPFlags(upCmd.Flags()); err != nil { panic(err) diff --git a/plan/plan.go b/plan/plan.go index c3d5236b..7e8e0d1e 100644 --- a/plan/plan.go +++ b/plan/plan.go @@ -26,8 +26,9 @@ type Plan struct { } type Config struct { - Args []string - With []string + Args []string + With []string + Target string } func Load(ctx context.Context, cfg Config) (*Plan, error) { @@ -149,10 +150,17 @@ func (p *Plan) Up(ctx context.Context, s solver.Solver) (*compiler.Value, error) computed := compiler.NewValue() + cfg := &cueflow.Config{ + FindHiddenTasks: true, + } + if p.config.Target != "" { + cfg.Root = cue.ParsePath(p.config.Target) + // The target may reference dependencies outside of the target path. + // InferTasks will include them in the workflow. + cfg.InferTasks = true + } flow := cueflow.New( - &cueflow.Config{ - FindHiddenTasks: true, - }, + cfg, p.source.Cue(), newRunner(p.context, s, computed), )