From a5104336a29e9bc3573460406aa85ae18d0459d7 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Mon, 18 Aug 2025 10:10:52 +0200 Subject: [PATCH 1/4] feat: catalogue sync command --- cli/catalogue/catalogue.go | 18 ++++++++++++++++++ cli/run.go | 1 + tests/integration/catalogue.bats | 21 +++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/cli/catalogue/catalogue.go b/cli/catalogue/catalogue.go index 6998f1aa..6b21bc50 100644 --- a/cli/catalogue/catalogue.go +++ b/cli/catalogue/catalogue.go @@ -20,6 +20,24 @@ import ( "github.com/spf13/cobra" ) +var CatalogueSyncCommand = &cobra.Command{ + Use: i18n.G("sync [flags]"), + Aliases: []string{i18n.G("g")}, + Short: i18n.G("Sync recipe catalogue for latest changes"), + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, args []string) { + if err := catalogue.EnsureCatalogue(); err != nil { + log.Fatal(err) + } + + if err := catalogue.EnsureUpToDate(); err != nil { + log.Fatal(err) + } + + log.Info(i18n.G("catalogue successfully synced")) + }, +} + var CatalogueGenerateCommand = &cobra.Command{ Use: i18n.G("generate [recipe] [flags]"), Aliases: []string{i18n.G("g")}, diff --git a/cli/run.go b/cli/run.go index 72d98088..647c57d4 100644 --- a/cli/run.go +++ b/cli/run.go @@ -143,6 +143,7 @@ func Run(version, commit string) { catalogue.CatalogueCommand.AddCommand( catalogue.CatalogueGenerateCommand, + catalogue.CatalogueSyncCommand, ) server.ServerCommand.AddCommand( diff --git a/tests/integration/catalogue.bats b/tests/integration/catalogue.bats index 0d4c25f7..27938a83 100644 --- a/tests/integration/catalogue.bats +++ b/tests/integration/catalogue.bats @@ -47,3 +47,24 @@ setup(){ assert_success assert_exists "$ABRA_DIR/recipes/gitea/.git" } + +# bats test_tags=slow +@test "sync latest changes" { + _ensure_catalogue + + latestHash=$(git -C "$ABRA_DIR/catalogue" show -s --format="%H") + + wantHash=$(git -C "$ABRA_DIR/catalogue" show -s --format="%H" "HEAD~3") + + run git -C "$ABRA_DIR/catalogue" reset --hard HEAD~3 + assert_success + + currHash=$(git -C "$ABRA_DIR/catalogue" show -s --format="%H") + assert_equal "$currHash" "$wantHash" + + run $ABRA catalogue sync + assert_success + + syncHash=$(git -C "$ABRA_DIR/catalogue" show -s --format="%H") + assert_equal "$syncHash" "$latestHash" +} -- 2.49.0 From e421e00631ba2f05af7e8300ae0ad9cc549fcc02 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Mon, 18 Aug 2025 10:11:23 +0200 Subject: [PATCH 2/4] fix: don't ensure latest on auto-complete See https://git.coopcloud.tech/toolshed/abra/issues/567 --- pkg/autocomplete/autocomplete.go | 2 +- pkg/recipe/recipe.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/autocomplete/autocomplete.go b/pkg/autocomplete/autocomplete.go index 03986c63..e489850d 100644 --- a/pkg/autocomplete/autocomplete.go +++ b/pkg/autocomplete/autocomplete.go @@ -38,7 +38,7 @@ func ServiceNameComplete(appName string) ([]string, cobra.ShellCompDirective) { // RecipeNameComplete completes recipe names. func RecipeNameComplete() ([]string, cobra.ShellCompDirective) { - catl, err := recipe.ReadRecipeCatalogue(false) + catl, err := recipe.ReadRecipeCatalogue(true) if err != nil { err := i18n.G("autocomplete failed: %s", err) return []string{err}, cobra.ShellCompDirectiveError diff --git a/pkg/recipe/recipe.go b/pkg/recipe/recipe.go index 85ac951a..4ff35103 100644 --- a/pkg/recipe/recipe.go +++ b/pkg/recipe/recipe.go @@ -373,8 +373,6 @@ func GetStringInBetween(recipeName, str, start, end string) (result string, err // ReadRecipeCatalogue reads the recipe catalogue. func ReadRecipeCatalogue(offline bool) (RecipeCatalogue, error) { - recipes := make(RecipeCatalogue) - if err := catalogue.EnsureCatalogue(); err != nil { return nil, err } @@ -385,6 +383,8 @@ func ReadRecipeCatalogue(offline bool) (RecipeCatalogue, error) { } } + recipes := make(RecipeCatalogue) + if err := readRecipeCatalogueFS(&recipes); err != nil { return nil, err } -- 2.49.0 From 7ccbbe89169042700be870063a9c17430dcbcd00 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Mon, 18 Aug 2025 10:11:41 +0200 Subject: [PATCH 3/4] feat: include local recipes on auto-complete --- pkg/autocomplete/autocomplete.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/autocomplete/autocomplete.go b/pkg/autocomplete/autocomplete.go index e489850d..8ceaae82 100644 --- a/pkg/autocomplete/autocomplete.go +++ b/pkg/autocomplete/autocomplete.go @@ -2,6 +2,7 @@ package autocomplete import ( "sort" + "strings" "coopcloud.tech/abra/pkg/app" appPkg "coopcloud.tech/abra/pkg/app" @@ -44,11 +45,21 @@ func RecipeNameComplete() ([]string, cobra.ShellCompDirective) { return []string{err}, cobra.ShellCompDirectiveError } + localRecipes, err := recipe.GetRecipesLocal() + if err != nil && !strings.Contains(err.Error(), "empty") { + err := fmt.Sprintf("autocomplete failed: %s", err) + return []string{err}, cobra.ShellCompDirectiveError + } + var recipeNames []string for name := range catl { recipeNames = append(recipeNames, name) } + for _, recipeLocal := range localRecipes { + recipeNames = append(recipeNames, recipeLocal) + } + return recipeNames, cobra.ShellCompDirectiveDefault } -- 2.49.0 From 42dde0930dcfba9f4980ec570ff0d7be3caee2c7 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Sun, 24 Aug 2025 09:16:44 +0200 Subject: [PATCH 4/4] fix: handle translations --- pkg/autocomplete/autocomplete.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/autocomplete/autocomplete.go b/pkg/autocomplete/autocomplete.go index 8ceaae82..ace0ac71 100644 --- a/pkg/autocomplete/autocomplete.go +++ b/pkg/autocomplete/autocomplete.go @@ -47,7 +47,7 @@ func RecipeNameComplete() ([]string, cobra.ShellCompDirective) { localRecipes, err := recipe.GetRecipesLocal() if err != nil && !strings.Contains(err.Error(), "empty") { - err := fmt.Sprintf("autocomplete failed: %s", err) + err := i18n.G("autocomplete failed: %s", err) return []string{err}, cobra.ShellCompDirectiveError } -- 2.49.0