forked from coop-cloud/abra
fix: keep abra working if recipe catalogue is offline (!235)
Co-authored-by: Moritz <moritz.m@local-it.org> Reviewed-on: coop-cloud/abra#235
This commit is contained in:
parent
4e78b060e0
commit
e788ac21f6
|
@ -2,6 +2,7 @@ package recipe
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
@ -665,13 +666,21 @@ func CheckoutDefaultBranch(repo *git.Repository, recipeName string) (plumbing.Re
|
||||||
return branch, nil
|
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
|
// recipeCatalogueFSIsLatest checks whether the recipe catalogue stored locally
|
||||||
// is up to date.
|
// is up to date.
|
||||||
func recipeCatalogueFSIsLatest() (bool, error) {
|
func recipeCatalogueFSIsLatest() (bool, error) {
|
||||||
httpClient := web.NewHTTPRetryClient()
|
httpClient := web.NewHTTPRetryClient()
|
||||||
res, err := httpClient.Head(RecipeCatalogueURL)
|
res, err := httpClient.Head(RecipeCatalogueURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, &CatalogueOfflineError{err.Error()}
|
||||||
}
|
}
|
||||||
|
|
||||||
lastModified := res.Header["Last-Modified"][0]
|
lastModified := res.Header["Last-Modified"][0]
|
||||||
|
@ -712,7 +721,14 @@ func ReadRecipeCatalogue() (RecipeCatalogue, error) {
|
||||||
|
|
||||||
recipeFSIsLatest, err := recipeCatalogueFSIsLatest()
|
recipeFSIsLatest, err := recipeCatalogueFSIsLatest()
|
||||||
if err != nil {
|
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 {
|
if !recipeFSIsLatest {
|
||||||
|
|
Loading…
Reference in New Issue