60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package runtime
|
|
|
|
import "github.com/sirupsen/logrus"
|
|
|
|
// Config is a runtime behaviour modifier.
|
|
type Config struct {
|
|
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,
|
|
RecipeExists: true,
|
|
RecipeLatest: true,
|
|
}
|
|
|
|
for _, optFunc := range opts {
|
|
optFunc(conf)
|
|
}
|
|
|
|
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 {
|
|
logrus.Debugf("runtime config: attempting to run in offline mode")
|
|
}
|
|
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
|
|
}
|
|
}
|