Merge remote-tracking branch 'coopcloud/main' into add-waiting-interrupt-handling
continuous-integration/drone/pr Build is passing
Details
continuous-integration/drone/pr Build is passing
Details
This commit is contained in:
commit
412e366200
|
@ -33,7 +33,7 @@ steps:
|
||||||
event: tag
|
event: tag
|
||||||
|
|
||||||
- name: release
|
- name: release
|
||||||
image: goreleaser/goreleaser:v1.19.2
|
image: goreleaser/goreleaser:v1.18.2
|
||||||
environment:
|
environment:
|
||||||
GITEA_TOKEN:
|
GITEA_TOKEN:
|
||||||
from_secret: goreleaser_gitea_token
|
from_secret: goreleaser_gitea_token
|
||||||
|
|
|
@ -93,6 +93,7 @@ recipes.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isLatestHash := false
|
||||||
version := deployedVersion
|
version := deployedVersion
|
||||||
if version == "unknown" && !internal.Chaos {
|
if version == "unknown" && !internal.Chaos {
|
||||||
catl, err := recipe.ReadRecipeCatalogue(conf)
|
catl, err := recipe.ReadRecipeCatalogue(conf)
|
||||||
|
@ -114,6 +115,7 @@ recipes.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
isLatestHash = true
|
||||||
version = formatter.SmallSHA(head.String())
|
version = formatter.SmallSHA(head.String())
|
||||||
logrus.Warn("no versions detected, using latest commit")
|
logrus.Warn("no versions detected, using latest commit")
|
||||||
if err := recipe.EnsureLatest(app.Recipe, conf); err != nil {
|
if err := recipe.EnsureLatest(app.Recipe, conf); err != nil {
|
||||||
|
@ -129,7 +131,7 @@ recipes.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if version != "unknown" && !internal.Chaos {
|
if version != "unknown" && !internal.Chaos && !isLatestHash {
|
||||||
if err := recipe.EnsureVersion(app.Recipe, version); err != nil {
|
if err := recipe.EnsureVersion(app.Recipe, version); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,11 @@ var appLogsCommand = cli.Command{
|
||||||
Before: internal.SubCommandBefore,
|
Before: internal.SubCommandBefore,
|
||||||
BashComplete: autocomplete.AppNameComplete,
|
BashComplete: autocomplete.AppNameComplete,
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
conf := runtime.New(runtime.WithOffline(internal.Offline))
|
conf := runtime.New(
|
||||||
|
runtime.WithOffline(internal.Offline),
|
||||||
|
runtime.WithEnsureRecipeExists(false),
|
||||||
|
)
|
||||||
|
|
||||||
app := internal.ValidateApp(c, conf)
|
app := internal.ValidateApp(c, conf)
|
||||||
|
|
||||||
cl, err := client.New(app.Server)
|
cl, err := client.New(app.Server)
|
||||||
|
|
|
@ -58,7 +58,11 @@ var appNewCommand = cli.Command{
|
||||||
Before: internal.SubCommandBefore,
|
Before: internal.SubCommandBefore,
|
||||||
ArgsUsage: "[<recipe>]",
|
ArgsUsage: "[<recipe>]",
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
conf := runtime.New(runtime.WithOffline(internal.Offline))
|
conf := runtime.New(
|
||||||
|
runtime.WithOffline(internal.Offline),
|
||||||
|
runtime.WithEnsureRecipeUpToDate(false),
|
||||||
|
)
|
||||||
|
|
||||||
recipe := internal.ValidateRecipeWithPrompt(c, conf)
|
recipe := internal.ValidateRecipeWithPrompt(c, conf)
|
||||||
|
|
||||||
if err := recipePkg.EnsureUpToDate(recipe.Name, conf); err != nil {
|
if err := recipePkg.EnsureUpToDate(recipe.Name, conf); err != nil {
|
||||||
|
|
|
@ -60,7 +60,11 @@ your SSH keys configured on your account.
|
||||||
Before: internal.SubCommandBefore,
|
Before: internal.SubCommandBefore,
|
||||||
BashComplete: autocomplete.RecipeNameComplete,
|
BashComplete: autocomplete.RecipeNameComplete,
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
conf := runtime.New(runtime.WithOffline(internal.Offline))
|
conf := runtime.New(
|
||||||
|
runtime.WithOffline(internal.Offline),
|
||||||
|
runtime.WithEnsureRecipeUpToDate(false),
|
||||||
|
)
|
||||||
|
|
||||||
recipe := internal.ValidateRecipeWithPrompt(c, conf)
|
recipe := internal.ValidateRecipeWithPrompt(c, conf)
|
||||||
|
|
||||||
imagesTmp, err := getImageVersions(recipe)
|
imagesTmp, err := getImageVersions(recipe)
|
||||||
|
|
|
@ -43,7 +43,11 @@ auto-generate it for you. The <recipe> configuration will be updated on the
|
||||||
local file system.
|
local file system.
|
||||||
`,
|
`,
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
conf := runtime.New(runtime.WithOffline(internal.Offline))
|
conf := runtime.New(
|
||||||
|
runtime.WithOffline(internal.Offline),
|
||||||
|
runtime.WithEnsureRecipeUpToDate(false),
|
||||||
|
)
|
||||||
|
|
||||||
recipe := internal.ValidateRecipeWithPrompt(c, conf)
|
recipe := internal.ValidateRecipeWithPrompt(c, conf)
|
||||||
|
|
||||||
mainApp, err := internal.GetMainAppImage(recipe)
|
mainApp, err := internal.GetMainAppImage(recipe)
|
||||||
|
|
|
@ -22,7 +22,11 @@ var recipeVersionCommand = cli.Command{
|
||||||
Before: internal.SubCommandBefore,
|
Before: internal.SubCommandBefore,
|
||||||
BashComplete: autocomplete.RecipeNameComplete,
|
BashComplete: autocomplete.RecipeNameComplete,
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
conf := runtime.New(runtime.WithOffline(internal.Offline))
|
conf := runtime.New(
|
||||||
|
runtime.WithOffline(internal.Offline),
|
||||||
|
runtime.WithEnsureRecipeUpToDate(false),
|
||||||
|
)
|
||||||
|
|
||||||
recipe := internal.ValidateRecipe(c, conf)
|
recipe := internal.ValidateRecipe(c, conf)
|
||||||
|
|
||||||
catalogue, err := recipePkg.ReadRecipeCatalogue(conf)
|
catalogue, err := recipePkg.ReadRecipeCatalogue(conf)
|
||||||
|
|
|
@ -236,9 +236,10 @@ func Get(recipeName string, conf *runtime.Config) (Recipe, error) {
|
||||||
|
|
||||||
meta, err := GetRecipeMeta(recipeName, conf)
|
meta, err := GetRecipeMeta(recipeName, conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if strings.Contains(err.Error(), "does not exist") {
|
switch err.(type) {
|
||||||
|
case RecipeMissingFromCatalogue:
|
||||||
meta = RecipeMeta{}
|
meta = RecipeMeta{}
|
||||||
} else {
|
default:
|
||||||
return Recipe{}, err
|
return Recipe{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,6 +253,11 @@ func Get(recipeName string, conf *runtime.Config) (Recipe, error) {
|
||||||
|
|
||||||
// EnsureExists ensures that a recipe is locally cloned
|
// EnsureExists ensures that a recipe is locally cloned
|
||||||
func EnsureExists(recipeName string, conf *runtime.Config) error {
|
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)
|
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||||
|
|
||||||
if _, err := os.Stat(recipeDir); os.IsNotExist(err) {
|
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
|
// EnsureLatest makes sure the latest commit is checked out for a local recipe repository
|
||||||
func EnsureLatest(recipeName string, conf *runtime.Config) error {
|
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)
|
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||||
|
|
||||||
isClean, err := gitPkg.IsClean(recipeDir)
|
isClean, err := gitPkg.IsClean(recipeDir)
|
||||||
|
@ -368,7 +379,12 @@ func EnsureLatest(recipeName string, conf *runtime.Config) error {
|
||||||
|
|
||||||
meta, err := GetRecipeMeta(recipeName, conf)
|
meta, err := GetRecipeMeta(recipeName, conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
switch err.(type) {
|
||||||
|
case RecipeMissingFromCatalogue:
|
||||||
|
meta = RecipeMeta{}
|
||||||
|
default:
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var branch plumbing.ReferenceName
|
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
|
// EnsureUpToDate ensures that the local repo is synced to the remote
|
||||||
func EnsureUpToDate(recipeName string, conf *runtime.Config) error {
|
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)
|
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||||
|
|
||||||
isClean, err := gitPkg.IsClean(recipeDir)
|
isClean, err := gitPkg.IsClean(recipeDir)
|
||||||
|
@ -719,6 +740,14 @@ func VersionsOfService(recipe, serviceName string, conf *runtime.Config) ([]stri
|
||||||
return versions, nil
|
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.
|
// GetRecipeMeta retrieves the recipe metadata from the recipe catalogue.
|
||||||
func GetRecipeMeta(recipeName string, conf *runtime.Config) (RecipeMeta, error) {
|
func GetRecipeMeta(recipeName string, conf *runtime.Config) (RecipeMeta, error) {
|
||||||
catl, err := ReadRecipeCatalogue(conf)
|
catl, err := ReadRecipeCatalogue(conf)
|
||||||
|
@ -728,7 +757,9 @@ func GetRecipeMeta(recipeName string, conf *runtime.Config) (RecipeMeta, error)
|
||||||
|
|
||||||
recipeMeta, ok := catl[recipeName]
|
recipeMeta, ok := catl[recipeName]
|
||||||
if !ok {
|
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 {
|
if err := EnsureExists(recipeName, conf); err != nil {
|
||||||
|
|
|
@ -2,14 +2,23 @@ package runtime
|
||||||
|
|
||||||
import "github.com/sirupsen/logrus"
|
import "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
// Config is a runtime behaviour modifier.
|
||||||
type Config struct {
|
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)
|
type Option func(c *Config)
|
||||||
|
|
||||||
|
// New creates a new runtime configuration.
|
||||||
func New(opts ...Option) *Config {
|
func New(opts ...Option) *Config {
|
||||||
conf := &Config{Offline: false}
|
conf := &Config{
|
||||||
|
Offline: false,
|
||||||
|
RecipeExists: true,
|
||||||
|
RecipeLatest: true,
|
||||||
|
}
|
||||||
|
|
||||||
for _, optFunc := range opts {
|
for _, optFunc := range opts {
|
||||||
optFunc(conf)
|
optFunc(conf)
|
||||||
|
@ -18,6 +27,8 @@ func New(opts ...Option) *Config {
|
||||||
return conf
|
return conf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithOffline ensures Abra attempts to prefer local file system and offline
|
||||||
|
// access.
|
||||||
func WithOffline(offline bool) Option {
|
func WithOffline(offline bool) Option {
|
||||||
return func(c *Config) {
|
return func(c *Config) {
|
||||||
if offline {
|
if offline {
|
||||||
|
@ -26,3 +37,23 @@ func WithOffline(offline bool) Option {
|
||||||
c.Offline = offline
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
"gomodTidy"
|
"gomodTidy"
|
||||||
],
|
],
|
||||||
"ignoreDeps": [
|
"ignoreDeps": [
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli",
|
||||||
|
"goreleaser/goreleaser"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue