diff --git a/cli/catalogue/catalogue.go b/cli/catalogue/catalogue.go index cb7eaecb..f6ab2f88 100644 --- a/cli/catalogue/catalogue.go +++ b/cli/catalogue/catalogue.go @@ -94,12 +94,6 @@ keys configured on your account. internal.ValidateRecipe(c) } - catalogueDir := path.Join(config.ABRA_DIR, "catalogue") - url := fmt.Sprintf("%s/%s.git", config.REPOS_BASE_URL, "recipes") - if err := gitPkg.Clone(catalogueDir, url); err != nil { - return err - } - repos, err := recipe.ReadReposMetadata() if err != nil { logrus.Fatal(err) diff --git a/cli/recipe/list.go b/cli/recipe/list.go index ad4edb2d..cc337889 100644 --- a/cli/recipe/list.go +++ b/cli/recipe/list.go @@ -2,14 +2,11 @@ package recipe import ( "fmt" - "path" "sort" "strconv" "strings" - "coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/formatter" - gitPkg "coopcloud.tech/abra/pkg/git" "coopcloud.tech/abra/pkg/recipe" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -32,12 +29,6 @@ var recipeListCommand = &cli.Command{ patternFlag, }, Action: func(c *cli.Context) error { - catalogueDir := path.Join(config.ABRA_DIR, "catalogue") - url := fmt.Sprintf("%s/%s.git", config.REPOS_BASE_URL, "recipes") - if err := gitPkg.Clone(catalogueDir, url); err != nil { - return err - } - catl, err := recipe.ReadRecipeCatalogue() if err != nil { logrus.Fatal(err.Error()) diff --git a/cli/recipe/version.go b/cli/recipe/version.go index f5f6f0a1..48dd7fce 100644 --- a/cli/recipe/version.go +++ b/cli/recipe/version.go @@ -1,14 +1,9 @@ package recipe import ( - "fmt" - "path" - "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/autocomplete" - "coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/formatter" - gitPkg "coopcloud.tech/abra/pkg/git" recipePkg "coopcloud.tech/abra/pkg/recipe" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" @@ -23,12 +18,6 @@ var recipeVersionCommand = &cli.Command{ Action: func(c *cli.Context) error { recipe := internal.ValidateRecipe(c) - catalogueDir := path.Join(config.ABRA_DIR, "catalogue") - url := fmt.Sprintf("%s/%s.git", config.REPOS_BASE_URL, "recipes") - if err := gitPkg.Clone(catalogueDir, url); err != nil { - return err - } - catalogue, err := recipePkg.ReadRecipeCatalogue() if err != nil { logrus.Fatal(err) diff --git a/pkg/recipe/recipe.go b/pkg/recipe/recipe.go index 6fd0f43f..01c8259b 100644 --- a/pkg/recipe/recipe.go +++ b/pkg/recipe/recipe.go @@ -698,6 +698,10 @@ func recipeCatalogueFSIsLatest() (bool, error) { func ReadRecipeCatalogue() (RecipeCatalogue, error) { recipes := make(RecipeCatalogue) + if err := EnsureCatalogue(); err != nil { + return nil, err + } + recipeFSIsLatest, err := recipeCatalogueFSIsLatest() if err != nil { return nil, err @@ -1064,3 +1068,18 @@ func StripTagMeta(image string) string { return image } + +// EnsureCatalogue ensures that the catalogue is cloned locally & present. +func EnsureCatalogue() error { + catalogueDir := path.Join(config.ABRA_DIR, "catalogue") + if _, err := os.Stat(catalogueDir); err != nil && os.IsNotExist(err) { + url := fmt.Sprintf("%s/%s.git", config.REPOS_BASE_URL, "recipes") + if err := gitPkg.Clone(catalogueDir, url); err != nil { + return err + } + + logrus.Debugf("cloned catalogue repository to %s", catalogueDir) + } + + return nil +}