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..ec4d067 --- /dev/null +++ b/cmd/commands/rs/rs.go @@ -0,0 +1,88 @@ +// 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 + +import ( + "os/exec" + + "os" + + "runtime" + + "fmt" + + "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" +) + +type customCommand struct { + Name string + Command string +} + +var description = `Run script allows you to run arbitrary commands using Bee. + Custom commands are provided from the "scripts" object inside bee.json or Beefile. +` + +func init() { + CmdNew := &commands.Command{ + UsageLine: "rs", + Short: "Run customized scripts", + PreRun: func(cmd *commands.Command, args []string) { version.ShowShortVersionBanner() }, + Run: RunScript, + } + config.LoadConfig() + CmdNew.Long = description + for commandName, command := range config.Conf.Scripts { + CmdNew.Long += fmt.Sprintf(" ▶ $ bee %s %s ==> %s\n", CmdNew.UsageLine, commandName, command) + } + commands.AvailableCommands = append(commands.AvailableCommands, CmdNew) +} + +func RunScript(cmd *commands.Command, args []string) int { + if len(args) == 0 { + cmd.Usage() + return 0 + } + 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", arg) + } + } + return 0 +} + +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": //TODO + } + 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 -}