Added fn update too to get latest version.

This commit is contained in:
Travis Reeder
2017-05-22 16:41:51 -07:00
parent a546f1e93b
commit e6d963f0dd
3 changed files with 74 additions and 4 deletions

View File

@@ -71,6 +71,7 @@ GLOBAL OPTIONS:
}
app.Commands = []cli.Command{
startCmd(),
updateCmd(),
initFn(),
apps(),
routes(),

View File

@@ -35,21 +35,26 @@ func startCmd() cli.Command {
}
func start(c *cli.Context) error {
denvs := ""
denvs := []string{}
if c.String("log-level") != "" {
denvs += "-e GIN_MODE=" + c.String("log-level")
denvs = append(denvs, "GIN_MODE="+c.String("log-level"))
}
// docker run --rm -it --name functions -v ${PWD}/data:/app/data -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 treeder/functions
wd, err := os.Getwd()
if err != nil {
logrus.WithError(err).Fatalln("Getwd failed")
}
cmd := exec.Command("docker", "run", "--rm", "-i",
args := []string{"run", "--rm", "-i",
"--name", "functions",
"-v", fmt.Sprintf("%s/data:/app/data", wd),
"-v", "/var/run/docker.sock:/var/run/docker.sock",
"-p", "8080:8080",
"treeder/functions")
}
for _, v := range denvs {
args = append(args, "-e", v)
}
args = append(args, "treeder/functions")
cmd := exec.Command("docker", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Start()

64
fn/update.go Normal file
View File

@@ -0,0 +1,64 @@
package main
/*
usage: fn init <name>
If there's a Dockerfile found, this will generate the basic file with just the image name. exit
It will then try to decipher the runtime based on the files in the current directory, if it can't figure it out, it will ask.
It will then take a best guess for what the entrypoint will be based on the language, it it can't guess, it will ask.
*/
import (
"os"
"os/exec"
"os/signal"
"syscall"
"github.com/Sirupsen/logrus"
"github.com/urfave/cli"
)
func updateCmd() cli.Command {
return cli.Command{
Name: "update",
Usage: "pulls latest functions server",
Action: update,
}
}
func update(c *cli.Context) error {
args := []string{"pull",
"treeder/functions:latest",
}
cmd := exec.Command("docker", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Start()
if err != nil {
logrus.WithError(err).Fatalln("starting command failed")
}
done := make(chan error, 1)
go func() {
done <- cmd.Wait()
}()
// catch ctrl-c and kill
sigC := make(chan os.Signal, 2)
signal.Notify(sigC, os.Interrupt, syscall.SIGTERM)
select {
case <-sigC:
logrus.Infoln("interrupt caught, exiting")
err = cmd.Process.Kill()
if err != nil {
logrus.WithError(err).Errorln("Could not kill process")
}
case err := <-done:
if err != nil {
logrus.WithError(err).Errorln("processed finished with error")
} else {
logrus.Println("process done gracefully without error")
}
}
return nil
}