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/pkg/autocomplete/autocomplete.go b/pkg/autocomplete/autocomplete.go index 03986c63..ace0ac71 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" @@ -38,17 +39,27 @@ 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 } + localRecipes, err := recipe.GetRecipesLocal() + if err != nil && !strings.Contains(err.Error(), "empty") { + err := i18n.G("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 } 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 } 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" +}