From 356c8f8c4e6e61a77f52123c7bd4cf052a36ebe3 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Mon, 6 Sep 2021 01:41:16 +0200 Subject: [PATCH] refactor: construct recipe struct proper --- cli/internal/validate.go | 7 ++++--- cli/recipe/create.go | 16 ++++++++-------- cli/recipe/sync.go | 10 ++-------- cli/recipe/upgrade.go | 10 ++-------- cli/recipe/version.go | 12 ++++++------ pkg/recipe/recipe.go | 4 ++++ 6 files changed, 26 insertions(+), 33 deletions(-) diff --git a/cli/internal/validate.go b/cli/internal/validate.go index 05a38d88..a4fd5c48 100644 --- a/cli/internal/validate.go +++ b/cli/internal/validate.go @@ -12,19 +12,20 @@ import ( ) // ValidateRecipe ensures the recipe arg is valid. -func ValidateRecipe(c *cli.Context) string { +func ValidateRecipe(c *cli.Context) recipe.Recipe { recipeName := c.Args().First() if recipeName == "" { ShowSubcommandHelpAndError(c, errors.New("no recipe provided")) } - if err := recipe.EnsureExists(recipeName); err != nil { + recipe, err := recipe.Get(recipeName) + if err != nil { logrus.Fatal(err) os.Exit(1) } - return recipeName + return recipe } // ValidateApp ensures the app name arg is valid. diff --git a/cli/recipe/create.go b/cli/recipe/create.go index 0f07f6c5..2e3552ba 100644 --- a/cli/recipe/create.go +++ b/cli/recipe/create.go @@ -19,9 +19,9 @@ var recipeCreateCommand = &cli.Command{ Aliases: []string{"c"}, ArgsUsage: "", Action: func(c *cli.Context) error { - recipeName := internal.ValidateRecipe(c) + recipe := internal.ValidateRecipe(c) - directory := path.Join(config.APPS_DIR, recipeName) + directory := path.Join(config.APPS_DIR, recipe.Name) if _, err := os.Stat(directory); !os.IsNotExist(err) { logrus.Fatalf("'%s' recipe directory already exists?", directory) return nil @@ -34,16 +34,16 @@ var recipeCreateCommand = &cli.Command{ return nil } - gitRepo := path.Join(config.APPS_DIR, recipeName, ".git") + gitRepo := path.Join(config.APPS_DIR, recipe.Name, ".git") if err := os.RemoveAll(gitRepo); err != nil { logrus.Fatal(err) return nil } toParse := []string{ - path.Join(config.APPS_DIR, recipeName, "README.md"), - path.Join(config.APPS_DIR, recipeName, ".env.sample"), - path.Join(config.APPS_DIR, recipeName, ".drone.yml"), + path.Join(config.APPS_DIR, recipe.Name, "README.md"), + path.Join(config.APPS_DIR, recipe.Name, ".env.sample"), + path.Join(config.APPS_DIR, recipe.Name, ".drone.yml"), } for _, path := range toParse { file, err := os.OpenFile(path, os.O_RDWR, 0755) @@ -64,7 +64,7 @@ var recipeCreateCommand = &cli.Command{ if err := tpl.Execute(file, struct { Name string Description string - }{recipeName, "TODO"}); err != nil { + }{recipe.Name, "TODO"}); err != nil { logrus.Fatal(err) return nil } @@ -72,7 +72,7 @@ var recipeCreateCommand = &cli.Command{ logrus.Infof( "New recipe '%s' created in %s, happy hacking!\n", - recipeName, path.Join(config.APPS_DIR, recipeName), + recipe.Name, path.Join(config.APPS_DIR, recipe.Name), ) return nil diff --git a/cli/recipe/sync.go b/cli/recipe/sync.go index 142f6d6b..99d259f7 100644 --- a/cli/recipe/sync.go +++ b/cli/recipe/sync.go @@ -5,7 +5,6 @@ import ( "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/recipe" "github.com/docker/distribution/reference" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -27,12 +26,7 @@ the versioning metadata of up-and-running containers are. `, ArgsUsage: "", Action: func(c *cli.Context) error { - recipeName := internal.ValidateRecipe(c) - - recipe, err := recipe.Get(recipeName) - if err != nil { - logrus.Fatal(err) - } + recipe := internal.ValidateRecipe(c) hasAppService := false for _, service := range recipe.Config.Services { @@ -42,7 +36,7 @@ the versioning metadata of up-and-running containers are. } if !hasAppService { - logrus.Fatal(fmt.Sprintf("No 'app' service defined in '%s', cannot proceed", recipeName)) + logrus.Fatal(fmt.Sprintf("No 'app' service defined in '%s', cannot proceed", recipe.Name)) } for _, service := range recipe.Config.Services { diff --git a/cli/recipe/upgrade.go b/cli/recipe/upgrade.go index 7a577b39..781685cf 100644 --- a/cli/recipe/upgrade.go +++ b/cli/recipe/upgrade.go @@ -8,7 +8,6 @@ import ( "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/catalogue" "coopcloud.tech/abra/pkg/client" - "coopcloud.tech/abra/pkg/recipe" "coopcloud.tech/tagcmp" "github.com/AlecAivazis/survey/v2" "github.com/docker/distribution/reference" @@ -34,15 +33,10 @@ This is step 1 of upgrading a recipe. Step 2 is running "abra recipe sync `, ArgsUsage: "", Action: func(c *cli.Context) error { - recipeName := internal.ValidateRecipe(c) - - recipe, err := recipe.Get(recipeName) - if err != nil { - logrus.Fatal(err) - } + recipe := internal.ValidateRecipe(c) for _, service := range recipe.Config.Services { - catlVersions, err := catalogue.VersionsOfService(recipeName, service.Name) + catlVersions, err := catalogue.VersionsOfService(recipe.Name, service.Name) if err != nil { logrus.Fatal(err) } diff --git a/cli/recipe/version.go b/cli/recipe/version.go index 897e2940..e661918f 100644 --- a/cli/recipe/version.go +++ b/cli/recipe/version.go @@ -14,7 +14,7 @@ var recipeVersionCommand = &cli.Command{ Aliases: []string{"v"}, ArgsUsage: "", Action: func(c *cli.Context) error { - recipeName := internal.ValidateRecipe(c) + recipe := internal.ValidateRecipe(c) catalogue, err := catalogue.ReadRecipeCatalogue() if err != nil { @@ -22,17 +22,17 @@ var recipeVersionCommand = &cli.Command{ return nil } - recipe, ok := catalogue[recipeName] + rec, ok := catalogue[recipe.Name] if !ok { - logrus.Fatalf("'%s' recipe doesn't exist?", recipeName) + logrus.Fatalf("'%s' recipe doesn't exist?", recipe.Name) } tableCol := []string{"Version", "Service", "Image", "Digest"} table := formatter.CreateTable(tableCol) - for version := range recipe.Versions { - for service := range recipe.Versions[version] { - meta := recipe.Versions[version][service] + for version := range rec.Versions { + for service := range rec.Versions[version] { + meta := rec.Versions[version][service] table.Append([]string{version, service, meta.Image, meta.Digest}) } } diff --git a/pkg/recipe/recipe.go b/pkg/recipe/recipe.go index 140297cc..3591724c 100644 --- a/pkg/recipe/recipe.go +++ b/pkg/recipe/recipe.go @@ -42,6 +42,10 @@ func (r Recipe) UpdateTag(image, tag string) error { // Get retrieves a recipe. func Get(recipeName string) (Recipe, error) { + if err := EnsureExists(recipeName); err != nil { + return Recipe{}, err + } + pattern := fmt.Sprintf("%s/%s/compose**yml", config.APPS_DIR, recipeName) composeFiles, err := filepath.Glob(pattern) if err != nil {