grim/convey

ee239409c3de
Add a docker/build task for backwards compatibility
package runner
import (
"fmt"
"os"
"path/filepath"
"time"
"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/runtime"
)
type RunnerCmd struct {
ConfigFile string `kong:"flag,help='The config file to load',placeholder='FILE',short='f',default='convey.yml'"`
ForceSequential bool `kong:"flag,help='Force concurrent stages to be ran sequentially',short='S',default='false'"`
KeepWorkspace bool `kong:"flag,help='Keep the workspace directory after running',default='false'"`
Timeout time.Duration `kong:"flag,help='The maximum amount of time a plan can run. 0 to disable. Units must be specified.',placeholder='DURATION',default='15m'"`
Environment []string `kong:"flag,name='env',help='Set an environment variable',short='e',placeholder='ENV'"`
Plans []string `kong:"arg,help='The names of the plans to run',default='default'"`
}
func (c *RunnerCmd) Run(g *globals.Globals) error {
cfg, err := config.LoadFile(c.ConfigFile)
if err != nil {
return err
}
err = cfg.Valid()
if err != nil {
return fmt.Errorf("config is invalid: %s", err)
}
err = cfg.HasPlans(c.Plans)
if err != nil {
return err
}
configPath, _ := filepath.Split(c.ConfigFile)
if configPath == "" {
cwd, err := os.Getwd()
if err != nil {
return err
}
configPath = cwd
}
logging.Setup(g.Color, g.Verbose)
env := environment.New(c.Environment...)
rt := runtime.New(env, configPath, c.ForceSequential, c.KeepWorkspace, c.Timeout)
defer rt.Shutdown()
configEnv := environment.New(cfg.Environment...)
for _, name := range c.Plans {
plan := cfg.Plans[name]
err := plan.Execute(name, cfg.Tasks, configEnv, rt)
if err != nil {
return err
}
}
return nil
}