--- a/runner/cmd.go Mon Oct 11 21:50:45 2021 -0500
+++ b/runner/cmd.go Fri Oct 15 23:56:14 2021 -0500
@@ -1,15 +1,21 @@
+ log "github.com/sirupsen/logrus" "keep.imfreedom.org/grim/convey/config"
"keep.imfreedom.org/grim/convey/environment"
"keep.imfreedom.org/grim/convey/globals"
"keep.imfreedom.org/grim/convey/logging"
+ "keep.imfreedom.org/grim/convey/plans" "keep.imfreedom.org/grim/convey/runtime"
@@ -23,6 +29,57 @@
Plans []string `kong:"arg,help='The names of the plans to run',default='default'"`
+func (c *RunnerCmd) runPlan(name string, cfg *config.Config, plan plans.Plan) error { + configPath, _ := filepath.Split(c.ConfigFile) + env := environment.New(c.Environment...) + rt := runtime.New(env, configPath, c.ForceSequential, c.KeepWorkspace, c.Timeout) + configEnv := environment.New(cfg.Environment...) + return plan.Execute(name, cfg.Tasks, configEnv, rt) +func (c *RunnerCmd) runPlans(ctx context.Context, cfg *config.Config) error { + errChan := make(chan error, 1) + for _, name := range c.Plans { + plan := cfg.Plans[name] + if err := c.runPlan(name, cfg, plan); err != nil { func (c *RunnerCmd) Run(g *globals.Globals) error {
logging.Setup(g.Color, g.Verbose)
@@ -41,28 +98,26 @@
- configPath, _ := filepath.Split(c.ConfigFile)
+ signalChan := make(chan os.Signal, 1) + signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
+ errChan := make(chan error, 1) + ctx, cancel := context.WithCancel(context.Background()) - env := environment.New(c.Environment...)
- rt := runtime.New(env, configPath, c.ForceSequential, c.KeepWorkspace, c.Timeout)
- configEnv := environment.New(cfg.Environment...)
+ go func(ctx context.Context, cfg *config.Config) { + errChan <- c.runPlans(ctx, cfg) - for _, name := range c.Plans {
- plan := cfg.Plans[name]
- err := plan.Execute(name, cfg.Tasks, configEnv, rt)
+ case s := <-signalChan: + log.Infof("caught signal %s, exiting...", s)