subcommand/run.go
package subcommand
import (
"context"
"fmt"
"time"
"github.com/efritz/ij/command"
"github.com/efritz/ij/config"
"github.com/efritz/ij/options"
"github.com/efritz/ij/runner"
)
var ErrBuildFailed = fmt.Errorf("subcommand failed")
func NewRunCommand(appOptions *options.AppOptions, runOptions *options.RunOptions) CommandRunner {
return func(config *config.Config) error {
if !ensureDocker() {
return fmt.Errorf("docker is not running")
}
for _, name := range runOptions.Plans {
if !config.IsPlanDefined(name) {
return fmt.Errorf(
"unknown plan %s",
name,
)
}
}
runner, err := runner.SetupRunner(
config,
appOptions,
runOptions,
)
if err != nil {
return err
}
if !runner.Run(runOptions.Plans) {
return ErrBuildFailed
}
return nil
}
}
func ensureDocker() bool {
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
args := []string{
"docker",
"ps",
"-q",
}
_, _, err := command.NewRunner(nil).RunForOutput(
ctx,
args,
nil,
)
return err == nil
}