diff --git a/cli/cli.go b/cli/cli.go
index 3da7422844..e338d39048 100644
--- a/cli/cli.go
+++ b/cli/cli.go
@@ -14,8 +14,8 @@ import (
 	"coopcloud.tech/abra/cli/recipe"
 	"coopcloud.tech/abra/cli/server"
 	"coopcloud.tech/abra/pkg/autocomplete"
+	cataloguePkg "coopcloud.tech/abra/pkg/catalogue"
 	"coopcloud.tech/abra/pkg/config"
-	"coopcloud.tech/abra/pkg/git"
 	"coopcloud.tech/abra/pkg/web"
 	"github.com/sirupsen/logrus"
 	"github.com/urfave/cli"
@@ -184,12 +184,8 @@ func newAbraApp(version, commit string) *cli.App {
 			}
 		}
 
-		if _, err := os.Stat(config.CATALOGUE_DIR); os.IsNotExist(err) {
-			url := fmt.Sprintf("%s/%s.git", config.REPOS_BASE_URL, config.CATALOGUE_JSON_REPO_NAME)
-			logrus.Warnf("local recipe catalogue is missing, retrieving now")
-			if err := git.Clone(config.CATALOGUE_DIR, url); err != nil {
-				logrus.Fatal(err)
-			}
+		if err := cataloguePkg.EnsureCatalogue(); err != nil {
+			logrus.Fatal(err)
 		}
 
 		logrus.Debugf("abra version %s, commit %s", version, commit)
diff --git a/pkg/catalogue/catalogue.go b/pkg/catalogue/catalogue.go
index 413aec6160..1b1086705e 100644
--- a/pkg/catalogue/catalogue.go
+++ b/pkg/catalogue/catalogue.go
@@ -56,6 +56,7 @@ var CatalogueSkipList = map[string]bool{
 func EnsureCatalogue() error {
 	catalogueDir := path.Join(config.ABRA_DIR, "catalogue")
 	if _, err := os.Stat(catalogueDir); err != nil && os.IsNotExist(err) {
+		logrus.Warnf("local recipe catalogue is missing, retrieving now")
 		url := fmt.Sprintf("%s/%s.git", config.REPOS_BASE_URL, config.CATALOGUE_JSON_REPO_NAME)
 		if err := gitPkg.Clone(catalogueDir, url); err != nil {
 			return err
diff --git a/pkg/recipe/recipe_test.go b/pkg/recipe/recipe_test.go
index 59a57ebcfa..fb0f29aecc 100644
--- a/pkg/recipe/recipe_test.go
+++ b/pkg/recipe/recipe_test.go
@@ -3,10 +3,15 @@ package recipe
 import (
 	"testing"
 
+	"coopcloud.tech/abra/pkg/catalogue"
 	"github.com/stretchr/testify/assert"
 )
 
 func TestGetVersionLabelLocalDoesNotUseTimeoutLabel(t *testing.T) {
+	if err := catalogue.EnsureCatalogue(); err != nil {
+		t.Fatal(err)
+	}
+
 	offline := true
 	recipe, err := Get("traefik", offline)
 	if err != nil {
diff --git a/pkg/secret/secret_test.go b/pkg/secret/secret_test.go
index 443b3bab18..82dd200c07 100644
--- a/pkg/secret/secret_test.go
+++ b/pkg/secret/secret_test.go
@@ -4,6 +4,7 @@ import (
 	"path"
 	"testing"
 
+	"coopcloud.tech/abra/pkg/catalogue"
 	"coopcloud.tech/abra/pkg/config"
 	"coopcloud.tech/abra/pkg/recipe"
 	"coopcloud.tech/abra/pkg/upstream/stack"
@@ -12,6 +13,10 @@ import (
 )
 
 func TestReadSecretsConfig(t *testing.T) {
+	if err := catalogue.EnsureCatalogue(); err != nil {
+		t.Fatal(err)
+	}
+
 	offline := true
 	recipe, err := recipe.Get("matrix-synapse", offline)
 	if err != nil {