diff --git a/main.go b/main.go index 4fe9339..68f5c30 100644 --- a/main.go +++ b/main.go @@ -44,10 +44,9 @@ func main() { Usage: "ssh private key", EnvVar: "PLUGIN_KEY,SCP_KEY", }, - cli.StringFlag{ + cli.StringSliceFlag{ Name: "target", - Value: "/", - Usage: "Target path on the server, default to '/'", + Usage: "Target path on the server", EnvVar: "PLUGIN_TARGET", }, cli.StringSliceFlag{ @@ -153,7 +152,7 @@ func run(c *cli.Context) error { Username: c.String("username"), Password: c.String("password"), Key: c.String("key"), - Target: c.String("target"), + Target: c.StringSlice("target"), Source: c.StringSlice("source"), Debug: c.Bool("debug"), Remove: c.Bool("rm"), diff --git a/plugin.go b/plugin.go index 2134224..348f570 100644 --- a/plugin.go +++ b/plugin.go @@ -39,7 +39,7 @@ type ( Username string Password string Key string - Target string + Target []string Source []string Debug bool Remove bool @@ -77,10 +77,10 @@ func (p Plugin) Exec() error { return errors.New("missing ssh config (Host, Username, Password or Key)") } - if len(p.Config.Source) == 0 { - log.Println("missing source file list config") + if len(p.Config.Source) == 0 || len(p.Config.Target) == 0 { + log.Println("missing source or target config") - return errors.New("missing source file list config") + return errors.New("missing source or target config") } files := trimPath(p.Config.Source) @@ -123,11 +123,39 @@ func (p Plugin) Exec() error { return err } - // remove target before upload data - if p.Config.Remove { - log.Println("Remove target folder: " + p.Config.Target) + for _, target := range p.Config.Target { + // remove target before upload data + if p.Config.Remove { + log.Println("Remove target folder: " + target) - response, err := ssh.Run(fmt.Sprintf("rm -rf %s", p.Config.Target)) + response, err := ssh.Run(fmt.Sprintf("rm -rf %s", target)) + + if p.Config.Debug { + log.Println(response) + } + + if err != nil { + log.Println(err.Error()) + return err + } + } + + // mkdir path + log.Println("create remote folder " + target) + response, err := ssh.Run(fmt.Sprintf("mkdir -p %s", target)) + + if p.Config.Debug { + log.Println(response) + } + + if err != nil { + log.Println(err.Error()) + return err + } + + // untar file + log.Println("untar remote file " + dest) + response, err = ssh.Run(fmt.Sprintf("tar -xf %s -C %s", dest, target)) if p.Config.Debug { log.Println(response) @@ -139,35 +167,9 @@ func (p Plugin) Exec() error { } } - // mkdir path - log.Println("create remote folder " + p.Config.Target) - response, err := ssh.Run(fmt.Sprintf("mkdir -p %s", p.Config.Target)) - - if p.Config.Debug { - log.Println(response) - } - - if err != nil { - log.Println(err.Error()) - return err - } - - // untar file - log.Println("untar remote file " + dest) - response, err = ssh.Run(fmt.Sprintf("tar -xf %s -C %s", dest, p.Config.Target)) - - if p.Config.Debug { - log.Println(response) - } - - if err != nil { - log.Println(err.Error()) - return err - } - // remove tar file log.Println("remove remote file " + dest) - response, err = ssh.Run(fmt.Sprintf("rm -rf %s", dest)) + response, err := ssh.Run(fmt.Sprintf("rm -rf %s", dest)) if p.Config.Debug { log.Println(response)