diff --git a/cli/app/deploy.go b/cli/app/deploy.go index 057edc8e..a6b8b1d6 100644 --- a/cli/app/deploy.go +++ b/cli/app/deploy.go @@ -1,44 +1,65 @@ 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 force bool -var forceFlag = &cli.BoolFlag{ - Name: "force", - Value: false, - Destination: &force, -} - -var update bool -var updateFlag = &cli.BoolFlag{ - Name: "update", - Value: false, - Destination: &update, -} - -var noDomainPoll bool -var noDomainPollFlag = &cli.BoolFlag{ - Name: "no-domain-poll", - Value: false, - Destination: &noDomainPoll, -} - -// skipVersionCheck stores the variable from SkipVersionCheckFlag -var skipVersionCheck bool -var skipVersionCheckFlag = &cli.BoolFlag{ - Name: "skip-version-check", - Value: false, - Destination: &skipVersionCheck, -} - var appDeployCommand = &cli.Command{ - Name: "deploy", - Flags: []cli.Flag{ - updateFlag, - forceFlag, - skipVersionCheckFlag, - noDomainPollFlag, + 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, + Prune: false, + ResolveImage: stack.ResolveImageAlways, + } + compose, err := loader.LoadComposefile(deployOpts) + if err != nil { + logrus.Fatal(err) + } + + if err := stack.RunDeploy(cl, deployOpts, compose); err != nil { + logrus.Fatal(err) + } + + return nil }, } diff --git a/client/stack/stack.go b/client/stack/stack.go index 68a17c19..68f928cc 100644 --- a/client/stack/stack.go +++ b/client/stack/stack.go @@ -136,9 +136,6 @@ func quotesOrWhitespace(r rune) bool { return unicode.IsSpace(r) || r == '"' || r == '\'' } -func DeployStack(namespace string) { -} - // pruneServices removes services that are no longer referenced in the source func pruneServices(ctx context.Context, cl *apiclient.Client, namespace convert.Namespace, services map[string]struct{}) { oldServices, err := getStackServices(ctx, cl, namespace.Name())