github.com/beauknowssoftware/makehcl@v0.0.0-20200322000747-1b9bb1e1c008/internal/run/run.go (about) 1 package run 2 3 import ( 4 "fmt" 5 6 "github.com/beauknowssoftware/makehcl/internal/parse" 7 "github.com/beauknowssoftware/makehcl/internal/plan" 8 ) 9 10 type ParseOptions = parse.Options 11 type PlanOptions = plan.Options 12 13 type Options struct { 14 Verbose bool 15 DryRun bool 16 } 17 18 type DoOptions struct { 19 ParseOptions 20 PlanOptions 21 Options 22 } 23 24 func Do(o DoOptions) error { 25 d, err := parse.Parse(o.ParseOptions) 26 if err != nil { 27 return err 28 } 29 30 p, err := plan.Definition(*d, o.PlanOptions) 31 if err != nil { 32 return err 33 } 34 35 for _, t := range p { 36 r := d.Rule(t.Target) 37 38 if o.DryRun && r.Command != "" { 39 fmt.Println(r.Command) 40 } else if r.Command != "" { 41 opts := bashOpts{ 42 verbose: o.Verbose, 43 env: r.Environment, 44 globalEnv: d.GlobalEnvironment, 45 shell: d.Shell, 46 shellFlags: d.ShellFlags, 47 } 48 if r.TeeTarget { 49 opts.teeTarget = &t.Target 50 } 51 if err := bash(r.Command, opts); err != nil { 52 return err 53 } 54 } 55 } 56 57 return nil 58 }