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  }