abra/cli/app/deploy.go

105 lines
2.3 KiB
Go
Raw Normal View History

package app
import (
2021-09-01 12:03:39 +00:00
"fmt"
2021-10-12 11:25:23 +00:00
"strings"
2021-09-01 12:03:39 +00:00
2021-10-12 11:25:23 +00:00
abraFormatter "coopcloud.tech/abra/cli/formatter"
2021-09-01 12:03:39 +00:00
"coopcloud.tech/abra/cli/internal"
2021-09-05 19:37:03 +00:00
"coopcloud.tech/abra/pkg/client"
stack "coopcloud.tech/abra/pkg/client/stack"
"coopcloud.tech/abra/pkg/config"
2021-10-12 11:25:23 +00:00
"github.com/AlecAivazis/survey/v2"
2021-09-01 12:03:39 +00:00
"github.com/sirupsen/logrus"
"github.com/urfave/cli/v2"
)
2021-09-01 12:03:39 +00:00
var appDeployCommand = &cli.Command{
2021-09-04 23:34:56 +00:00
Name: "deploy",
Aliases: []string{"d"},
Usage: "Deploy an app",
2021-09-01 12:03:39 +00:00
Action: func(c *cli.Context) error {
app := internal.ValidateApp(c)
cl, err := client.New(app.Server)
2021-09-01 12:03:39 +00:00
if err != nil {
logrus.Fatal(err)
}
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, app.Type, "abra.sh")
abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
if err != nil {
logrus.Fatal(err)
}
for k, v := range abraShEnv {
app.Env[k] = v
}
2021-10-05 18:40:05 +00:00
composeFiles, err := config.GetAppComposeFiles(app.Type, app.Env)
if err != nil {
logrus.Fatal(err)
}
deployOpts := stack.Deploy{
2021-09-01 12:03:39 +00:00
Composefiles: composeFiles,
Namespace: app.StackName(),
2021-09-01 12:03:39 +00:00
Prune: false,
ResolveImage: stack.ResolveImageAlways,
}
compose, err := config.GetAppComposeConfig(app.Name, deployOpts, app.Env)
2021-09-01 12:03:39 +00:00
if err != nil {
logrus.Fatal(err)
}
2021-10-12 11:25:23 +00:00
if err := DeployOverview(app); err != nil {
logrus.Fatal(err)
}
2021-09-01 12:03:39 +00:00
if err := stack.RunDeploy(cl, deployOpts, compose); err != nil {
logrus.Fatal(err)
}
return nil
},
BashComplete: func(c *cli.Context) {
appNames, err := config.GetAppNames()
if err != nil {
logrus.Warn(err)
}
if c.NArg() > 0 {
return
}
for _, a := range appNames {
fmt.Println(a)
}
},
}
2021-10-12 11:25:23 +00:00
// DeployOverview shows a deployment overview
func DeployOverview(app config.App) error {
tableCol := []string{"server", "compose", "domain", "stack", "version"}
table := abraFormatter.CreateTable(tableCol)
deployConfig := "compose.yml"
if composeFiles, ok := app.Env["COMPOSE_FILE"]; ok {
deployConfig = strings.Join(strings.Split(composeFiles, ":"), "\n")
}
table.Append([]string{app.Server, deployConfig, app.Domain, app.StackName(), "unknown"})
table.Render()
response := false
prompt := &survey.Confirm{
Message: "continue with deployment?",
}
if err := survey.AskOne(prompt, &response); err != nil {
return err
}
if !response {
logrus.Fatal("exiting as requested")
}
return nil
}