diff --git a/cmd/bee.go b/cmd/bee.go index fd615bf..702340e 100644 --- a/cmd/bee.go +++ b/cmd/bee.go @@ -26,8 +26,8 @@ import ( _ "github.com/beego/bee/cmd/commands/migrate" _ "github.com/beego/bee/cmd/commands/new" _ "github.com/beego/bee/cmd/commands/pack" + _ "github.com/beego/bee/cmd/commands/rs" _ "github.com/beego/bee/cmd/commands/run" - _ "github.com/beego/bee/cmd/commands/scripts" _ "github.com/beego/bee/cmd/commands/version" "github.com/beego/bee/utils" ) diff --git a/cmd/commands/rs/rs.go b/cmd/commands/rs/rs.go new file mode 100644 index 0000000..bf6383e --- /dev/null +++ b/cmd/commands/rs/rs.go @@ -0,0 +1,96 @@ +// Copyright 2017 bee authors +// +// Licensed under the Apache License, Version 2.0 (the "License"): you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +// Package rs ... +package rs + +import ( + "fmt" + "os" + "os/exec" + "runtime" + "time" + + "github.com/beego/bee/cmd/commands" + "github.com/beego/bee/cmd/commands/version" + "github.com/beego/bee/config" + "github.com/beego/bee/logger" + "github.com/beego/bee/logger/colors" + "github.com/beego/bee/utils" +) + +var cmdRs = &commands.Command{ + UsageLine: "rs", + Short: "Run customized scripts", + Long: `Run script allows you to run arbitrary commands using Bee. + Custom commands are provided from the "scripts" object inside bee.json or Beefile. + + To run a custom command, use: {{"$ bee rs mycmd" | bold}} + {{if len .}} +{{"AVAILABLE SCRIPTS"|headline}}{{range $cmdName, $cmd := .}} + {{$cmdName | printf "-%s" | bold}} + {{$cmd}}{{end}}{{end}} +`, + PreRun: func(cmd *commands.Command, args []string) { version.ShowShortVersionBanner() }, + Run: runScript, +} + +func init() { + config.LoadConfig() + cmdRs.Long = utils.TmplToString(cmdRs.Long, config.Conf.Scripts) + commands.AvailableCommands = append(commands.AvailableCommands, cmdRs) +} + +func runScript(cmd *commands.Command, args []string) int { + if len(args) == 0 { + cmd.Usage() + } + + start := time.Now() + for _, arg := range args { + if c, exist := config.Conf.Scripts[arg]; exist { + command := customCommand{ + Name: arg, + Command: c, + } + if err := command.run(); err != nil { + beeLogger.Log.Error(err.Error()) + } + } else { + beeLogger.Log.Errorf("Command '%s' not found in Beefile/bee.json", arg) + } + } + elapsed := time.Since(start) + fmt.Println(colors.GreenBold(fmt.Sprintf("Finished in %s.", elapsed))) + return 0 +} + +type customCommand struct { + Name string + Command string +} + +func (c *customCommand) run() error { + beeLogger.Log.Info(colors.GreenBold(fmt.Sprintf("Running '%s'...", c.Name))) + var cmd *exec.Cmd + switch runtime.GOOS { + case "darwin", "linux": + cmd = exec.Command("sh", "-c", c.Command) + case "windows": + cmd = exec.Command("cmd", "/C", c.Command) + } + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() +} diff --git a/cmd/commands/scripts/scripts.go b/cmd/commands/scripts/scripts.go deleted file mode 100644 index b5576c5..0000000 --- a/cmd/commands/scripts/scripts.go +++ /dev/null @@ -1,44 +0,0 @@ -package scripts - -import ( - "os/exec" - - "os" - - "runtime" - - "strings" - - "github.com/beego/bee/cmd/commands" - "github.com/beego/bee/cmd/commands/version" - "github.com/beego/bee/config" - "github.com/beego/bee/logger" -) - -func init() { - for commandName, command := range config.Conf.Scripts { - CmdNew := &commands.Command{ - UsageLine: commandName, - Short: command, - PreRun: func(cmd *commands.Command, args []string) { version.ShowShortVersionBanner() }, - Run: RunScript, - } - commands.AvailableCommands = append(commands.AvailableCommands, CmdNew) - } -} - -func RunScript(cmd *commands.Command, args []string) int { - var c *exec.Cmd - switch runtime.GOOS { - case "darwin", "linux": - c = exec.Command("sh", "-c", cmd.Short+" "+strings.Join(args, " ")) - case "windows": //TODO - } - c.Stdout = os.Stdout - c.Stderr = os.Stderr - err := c.Run() - if err != nil { - beeLogger.Log.Error(err.Error()) - } - return 0 -} diff --git a/config/conf.go b/config/conf.go index a69f2b8..eebbce2 100644 --- a/config/conf.go +++ b/config/conf.go @@ -99,7 +99,6 @@ func LoadConfig() { switch file.Name() { case "bee.json": { - beeLogger.Log.Info("Loading configuration from 'bee.json'...") err = parseJSON(filepath.Join(currentPath, file.Name()), &Conf) if err != nil { beeLogger.Log.Errorf("Failed to parse JSON file: %s", err) @@ -108,7 +107,6 @@ func LoadConfig() { } case "Beefile": { - beeLogger.Log.Info("Loading configuration from 'Beefile'...") err = parseYAML(filepath.Join(currentPath, file.Name()), &Conf) if err != nil { beeLogger.Log.Errorf("Failed to parse YAML file: %s", err)