package app import ( "errors" "fmt" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/client" stack "coopcloud.tech/abra/client/stack" "coopcloud.tech/abra/config" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) var appDeployCommand = &cli.Command{ Name: "deploy", Usage: "Deploy an app", Action: func(c *cli.Context) error { appName := c.Args().First() if appName == "" { internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided")) } appFiles, err := config.LoadAppFiles("") if err != nil { logrus.Fatal(err) } appEnv, err := config.GetApp(appFiles, appName) if err != nil { logrus.Fatal(err) } host := appFiles[appName].Server cl, err := client.NewClientWithContext(host) if err != nil { logrus.Fatal(err) } abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, appEnv.Type, "abra.sh") abraShEnv, err := config.ReadAbraShEnvVars(abraShPath) if err != nil { logrus.Fatal(err) } for k, v := range abraShEnv { appEnv.Env[k] = v } appEnv.Env["STACK_NAME"] = appEnv.StackName() composeFiles, err := config.GetAppComposeFiles(appEnv.Type, appEnv.Env) if err != nil { logrus.Fatal(err) } deployOpts := stack.Deploy{ Composefiles: composeFiles, Namespace: appEnv.StackName(), Prune: false, ResolveImage: stack.ResolveImageAlways, } compose, err := config.GetAppComposeConfig(appName, deployOpts, appEnv.Env) if err != nil { logrus.Fatal(err) } if err := stack.RunDeploy(cl, deployOpts, compose); err != nil { logrus.Fatal(err) } return nil }, }