diff --git a/cmd/bee.go b/cmd/bee.go index 2452041..fd615bf 100644 --- a/cmd/bee.go +++ b/cmd/bee.go @@ -27,6 +27,7 @@ import ( _ "github.com/beego/bee/cmd/commands/new" _ "github.com/beego/bee/cmd/commands/pack" _ "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/scripts/scripts.go b/cmd/commands/scripts/scripts.go new file mode 100644 index 0000000..b5576c5 --- /dev/null +++ b/cmd/commands/scripts/scripts.go @@ -0,0 +1,44 @@ +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 529b7ae..4b5f365 100644 --- a/config/conf.go +++ b/config/conf.go @@ -35,8 +35,9 @@ var Conf = struct { Envs []string Bale bale Database database - EnableReload bool `json:"enable_reload" yaml:"enable_reload"` - EnableNotification bool `json:"enable_notification" yaml:"enable_notification"` + EnableReload bool `json:"enable_reload" yaml:"enable_reload"` + EnableNotification bool `json:"enable_notification" yaml:"enable_notification"` + Scripts map[string]string `json:"scripts" yaml:"scripts"` }{ GoInstall: true, DirStruct: dirStruct{ @@ -52,6 +53,7 @@ var Conf = struct { Driver: "mysql", }, EnableNotification: true, + Scripts: map[string]string{}, } // gopm support diff --git a/utils/notification.go b/utils/notification.go index 1f5d124..b19b49f 100644 --- a/utils/notification.go +++ b/utils/notification.go @@ -1,3 +1,16 @@ +// 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 utils import ( @@ -21,9 +34,9 @@ func Notify(text, title string) { case "darwin": osxNotify(text, title) case "linux": - windowsNotify(text, title) - case "windows": linuxNotify(text, title) + case "windows": + windowsNotify(text, title) } } @@ -45,7 +58,7 @@ func windowsNotify(text, title string) { } func linuxNotify(text, title string) { - exec.Command("notify-send", "-i", "", title, text) + exec.Command("notify-send", "-i", "", title, text).Run() } func existTerminalNotifier() bool {