From 8ad51c1fd5983516f7656fba7bcd773eb1179c9f Mon Sep 17 00:00:00 2001 From: decentral1se Date: Sat, 28 Aug 2021 20:13:56 +0200 Subject: [PATCH] feat: implement check command --- TODO.md | 2 +- cli/app/check.go | 62 ++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index 582f3592..f4fd4d5c 100644 --- a/TODO.md +++ b/TODO.md @@ -16,7 +16,7 @@ - [x] `new` - [x] `backup` - [ ] `deploy` (WIP: decentral1se) - - [ ] `check` (WIP: decentral1se) + - [x] `check` - [x] `version` - [ ] `config` - [ ] `cp` diff --git a/cli/app/check.go b/cli/app/check.go index 50cb5e9e..4254905e 100644 --- a/cli/app/check.go +++ b/cli/app/check.go @@ -1,7 +1,65 @@ package app -import "github.com/urfave/cli/v2" +import ( + "errors" + "fmt" + "os" + "path" + "strings" + + "coopcloud.tech/abra/cli/internal" + "coopcloud.tech/abra/config" + "github.com/sirupsen/logrus" + "github.com/urfave/cli/v2" +) var appCheckCommand = &cli.Command{ - Name: "check", + Name: "check", + ArgsUsage: "", + 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) + } + + envSamplePath := path.Join(config.ABRA_DIR, "apps", appEnv.Type, ".env.sample") + if _, err := os.Stat(envSamplePath); err != nil { + if os.IsNotExist(err) { + logrus.Fatalf("'%s' does not exist?", envSamplePath) + } + logrus.Fatal(err) + } + + envSample, err := config.ReadEnv(envSamplePath) + if err != nil { + logrus.Fatal(err) + } + + var missing []string + for k, _ := range envSample { + if _, ok := appEnv.Env[k]; !ok { + missing = append(missing, k) + } + } + + if len(missing) > 0 { + path := appFiles[appName].Path + missingEnvVars := fmt.Sprintf(strings.Join(missing, ", ")) + logrus.Fatalf("%s is missing %s", path, missingEnvVars) + } + + logrus.Info("All necessary environment variables defined") + + return nil + }, }