From e788ac21f6a5ebb963eee4f44a04114776747479 Mon Sep 17 00:00:00 2001 From: moritz Date: Tue, 13 Dec 2022 14:42:45 +0000 Subject: [PATCH] fix: keep abra working if recipe catalogue is offline (!235) Co-authored-by: Moritz Reviewed-on: https://git.coopcloud.tech/coop-cloud/abra/pulls/235 --- pkg/recipe/recipe.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/pkg/recipe/recipe.go b/pkg/recipe/recipe.go index 57f840fb..1042d042 100644 --- a/pkg/recipe/recipe.go +++ b/pkg/recipe/recipe.go @@ -2,6 +2,7 @@ package recipe import ( "encoding/json" + "errors" "fmt" "io/ioutil" "os" @@ -665,13 +666,21 @@ func CheckoutDefaultBranch(repo *git.Repository, recipeName string) (plumbing.Re return branch, nil } +type CatalogueOfflineError struct { + msg string +} + +func (e *CatalogueOfflineError) Error() string { + return fmt.Sprintf("catalogue offline: %s", e.msg) +} + // recipeCatalogueFSIsLatest checks whether the recipe catalogue stored locally // is up to date. func recipeCatalogueFSIsLatest() (bool, error) { httpClient := web.NewHTTPRetryClient() res, err := httpClient.Head(RecipeCatalogueURL) if err != nil { - return false, err + return false, &CatalogueOfflineError{err.Error()} } lastModified := res.Header["Last-Modified"][0] @@ -712,7 +721,14 @@ func ReadRecipeCatalogue() (RecipeCatalogue, error) { recipeFSIsLatest, err := recipeCatalogueFSIsLatest() if err != nil { - return nil, err + var offlineErr *CatalogueOfflineError + if errors.As(err, &offlineErr) { + logrus.Error(err) + logrus.Error("unable to retrieve catalogue from internet, using local copy.") + recipeFSIsLatest = true + } else { + return nil, err + } } if !recipeFSIsLatest {