forked from toolshed/abra
Merge remote-tracking branch 'coopcloud/main' into add-waiting-interrupt-handling
This commit is contained in:
@ -236,9 +236,10 @@ func Get(recipeName string, conf *runtime.Config) (Recipe, error) {
|
||||
|
||||
meta, err := GetRecipeMeta(recipeName, conf)
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "does not exist") {
|
||||
switch err.(type) {
|
||||
case RecipeMissingFromCatalogue:
|
||||
meta = RecipeMeta{}
|
||||
} else {
|
||||
default:
|
||||
return Recipe{}, err
|
||||
}
|
||||
}
|
||||
@ -252,6 +253,11 @@ func Get(recipeName string, conf *runtime.Config) (Recipe, error) {
|
||||
|
||||
// EnsureExists ensures that a recipe is locally cloned
|
||||
func EnsureExists(recipeName string, conf *runtime.Config) error {
|
||||
if !conf.RecipeExists {
|
||||
logrus.Debug("skipping ensuring recipe locally exists")
|
||||
return nil
|
||||
}
|
||||
|
||||
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||
|
||||
if _, err := os.Stat(recipeDir); os.IsNotExist(err) {
|
||||
@ -339,6 +345,11 @@ func EnsureVersion(recipeName, version string) error {
|
||||
|
||||
// EnsureLatest makes sure the latest commit is checked out for a local recipe repository
|
||||
func EnsureLatest(recipeName string, conf *runtime.Config) error {
|
||||
if !conf.RecipeLatest {
|
||||
logrus.Debug("skipping ensuring recipe is synced with remote")
|
||||
return nil
|
||||
}
|
||||
|
||||
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||
|
||||
isClean, err := gitPkg.IsClean(recipeDir)
|
||||
@ -368,7 +379,12 @@ func EnsureLatest(recipeName string, conf *runtime.Config) error {
|
||||
|
||||
meta, err := GetRecipeMeta(recipeName, conf)
|
||||
if err != nil {
|
||||
return err
|
||||
switch err.(type) {
|
||||
case RecipeMissingFromCatalogue:
|
||||
meta = RecipeMeta{}
|
||||
default:
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
var branch plumbing.ReferenceName
|
||||
@ -584,6 +600,11 @@ func GetStringInBetween(recipeName, str, start, end string) (result string, err
|
||||
|
||||
// EnsureUpToDate ensures that the local repo is synced to the remote
|
||||
func EnsureUpToDate(recipeName string, conf *runtime.Config) error {
|
||||
if !conf.RecipeLatest {
|
||||
logrus.Debug("skipping ensuring recipe is synced with remote")
|
||||
return nil
|
||||
}
|
||||
|
||||
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||
|
||||
isClean, err := gitPkg.IsClean(recipeDir)
|
||||
@ -719,6 +740,14 @@ func VersionsOfService(recipe, serviceName string, conf *runtime.Config) ([]stri
|
||||
return versions, nil
|
||||
}
|
||||
|
||||
// RecipeMissingFromCatalogue signifies a recipe is not present in the catalogue.
|
||||
type RecipeMissingFromCatalogue struct{ err string }
|
||||
|
||||
// Error outputs the error message.
|
||||
func (r RecipeMissingFromCatalogue) Error() string {
|
||||
return r.err
|
||||
}
|
||||
|
||||
// GetRecipeMeta retrieves the recipe metadata from the recipe catalogue.
|
||||
func GetRecipeMeta(recipeName string, conf *runtime.Config) (RecipeMeta, error) {
|
||||
catl, err := ReadRecipeCatalogue(conf)
|
||||
@ -728,7 +757,9 @@ func GetRecipeMeta(recipeName string, conf *runtime.Config) (RecipeMeta, error)
|
||||
|
||||
recipeMeta, ok := catl[recipeName]
|
||||
if !ok {
|
||||
return RecipeMeta{}, fmt.Errorf("recipe %s does not exist?", recipeName)
|
||||
return RecipeMeta{}, RecipeMissingFromCatalogue{
|
||||
err: fmt.Sprintf("recipe %s does not exist?", recipeName),
|
||||
}
|
||||
}
|
||||
|
||||
if err := EnsureExists(recipeName, conf); err != nil {
|
||||
|
||||
@ -2,14 +2,23 @@ package runtime
|
||||
|
||||
import "github.com/sirupsen/logrus"
|
||||
|
||||
// Config is a runtime behaviour modifier.
|
||||
type Config struct {
|
||||
Offline bool
|
||||
Offline bool // Whether or not Abra should prefer local / offline access
|
||||
RecipeExists bool // Whether or not Abra should ensure the recipe is locally cloned
|
||||
RecipeLatest bool // Whether or not Abra should ensure the recipe has the latest commit
|
||||
}
|
||||
|
||||
// Option is a runtime configuration option.
|
||||
type Option func(c *Config)
|
||||
|
||||
// New creates a new runtime configuration.
|
||||
func New(opts ...Option) *Config {
|
||||
conf := &Config{Offline: false}
|
||||
conf := &Config{
|
||||
Offline: false,
|
||||
RecipeExists: true,
|
||||
RecipeLatest: true,
|
||||
}
|
||||
|
||||
for _, optFunc := range opts {
|
||||
optFunc(conf)
|
||||
@ -18,6 +27,8 @@ func New(opts ...Option) *Config {
|
||||
return conf
|
||||
}
|
||||
|
||||
// WithOffline ensures Abra attempts to prefer local file system and offline
|
||||
// access.
|
||||
func WithOffline(offline bool) Option {
|
||||
return func(c *Config) {
|
||||
if offline {
|
||||
@ -26,3 +37,23 @@ func WithOffline(offline bool) Option {
|
||||
c.Offline = offline
|
||||
}
|
||||
}
|
||||
|
||||
// WithEnsureRecipeExists ensures recipe exists locally.
|
||||
func WithEnsureRecipeExists(exists bool) Option {
|
||||
return func(c *Config) {
|
||||
if exists {
|
||||
logrus.Debugf("runtime config: ensuring recipe exists")
|
||||
}
|
||||
c.RecipeExists = exists
|
||||
}
|
||||
}
|
||||
|
||||
// WithEnsureRecipeUpToDate ensures recipe is synced with the remote.
|
||||
func WithEnsureRecipeUpToDate(upToDate bool) Option {
|
||||
return func(c *Config) {
|
||||
if upToDate {
|
||||
logrus.Debugf("runtime config: ensuring recipe is synced with remote")
|
||||
}
|
||||
c.RecipeLatest = upToDate
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user