-
steeve.chailloux authoredsteeve.chailloux authored
build.go 1.88 KiB
package cmd
import (
"fmt"
"os"
"github.com/rs/zerolog"
"orus.io/orus-io/beaver/lib/logging"
"orus.io/orus-io/beaver/runner"
)
type BuildCmd struct {
Args struct {
DryRun bool `short:"d" long:"dry-run" description:"if set only prints commands but do not run them"`
Keep bool `short:"k" long:"keep" description:"Keep the temporary files"`
Output string `short:"o" long:"output" description:"output directory, use \"stdout\" to print to stdout"`
}
PositionalArgs struct {
DirName string `required:"yes" positional-arg-name:"directory"`
} `positional-args:"yes"`
log zerolog.Logger `no-flag:"t"`
}
// NewBuildCmd ...
func NewBuildCmd(loggingOptions *logging.Options) *BuildCmd {
cmd := BuildCmd{log: loggingOptions.Logger()}
return &cmd
}
// Execute ...
func (cmd *BuildCmd) Execute([]string) error {
cmd.log.Debug().Str("directory", cmd.PositionalArgs.DirName).Msg("starting beaver")
config := runner.NewCmdConfig(cmd.log, ".", cmd.PositionalArgs.DirName, cmd.Args.DryRun, cmd.Args.Output)
path, err := os.Getwd()
if err != nil {
cmd.log.Fatal().Err(err).Msg("cannot get current working directory")
}
tmpDir, err := os.MkdirTemp(path, ".beaver-")
if err != nil {
return fmt.Errorf("failed to create temp dir: %w", err)
}
if !cmd.Args.Keep {
defer func() {
if err := os.RemoveAll(tmpDir); err != nil {
cmd.log.Err(err).Str("tempdir", tmpDir).Msg("failed to remove temp dir")
}
}()
}
if err := config.Initialize(tmpDir); err != nil {
return fmt.Errorf("failed to prepare config: %w", err)
}
r := runner.NewRunner(config)
return r.Build(tmpDir)
}
func init() {
buildCmd := NewBuildCmd(LoggingOptions)
_, err := parser.AddCommand("build", "Build new environment", "", buildCmd)
if err != nil {
Logger.Fatal().Msg(err.Error())
}
g, err := parser.AddGroup("Logging", "Logging options", LoggingOptions)
if err != nil {
panic(err)
}
g.Namespace = "log"
}