package app import ( "errors" "fmt" "path/filepath" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/client" loader "coopcloud.tech/abra/client/stack" stack "coopcloud.tech/abra/client/stack" "coopcloud.tech/abra/config" "github.com/docker/cli/cli/command/stack/options" "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) } pattern := fmt.Sprintf("%s/%s/compose**yml", config.APPS_DIR, appEnv.Type) composeFiles, err := filepath.Glob(pattern) if err != nil { logrus.Fatal(err) } deployOpts := options.Deploy{ Composefiles: composeFiles, Namespace: appEnv.StackName(), Prune: false, ResolveImage: stack.ResolveImageAlways, } compose, err := loader.LoadComposefile(deployOpts, appEnv.Env) if err != nil { logrus.Fatal(err) } if err := stack.RunDeploy(cl, deployOpts, compose); err != nil { logrus.Fatal(err) } return nil }, }