feat: lint before deploy/upgrade/rollback

See coop-cloud/organising#254.
This commit is contained in:
decentral1se 2021-12-25 23:35:45 +01:00
parent a84a5bc320
commit 8735a8f0ea
Signed by: decentral1se
GPG Key ID: 03789458B3D0C410
4 changed files with 51 additions and 0 deletions

View File

@ -45,6 +45,15 @@ recipes.
app := internal.ValidateApp(c)
stackName := app.StackName()
r, err := recipe.Get(app.Type)
if err != nil {
logrus.Fatal(err)
}
if err := recipe.LintForErrors(r); err != nil {
logrus.Fatal(err)
}
cl, err := client.New(app.Server)
if err != nil {
logrus.Fatal(err)

View File

@ -49,6 +49,15 @@ recipes.
app := internal.ValidateApp(c)
stackName := app.StackName()
r, err := recipe.Get(app.Type)
if err != nil {
logrus.Fatal(err)
}
if err := recipe.LintForErrors(r); err != nil {
logrus.Fatal(err)
}
cl, err := client.New(app.Server)
if err != nil {
logrus.Fatal(err)

View File

@ -22,6 +22,15 @@ func DeployAction(c *cli.Context) error {
app := ValidateApp(c)
stackName := app.StackName()
r, err := recipe.Get(app.Type)
if err != nil {
logrus.Fatal(err)
}
if err := recipe.LintForErrors(r); err != nil {
logrus.Fatal(err)
}
cl, err := client.New(app.Server)
if err != nil {
logrus.Fatal(err)

View File

@ -9,6 +9,7 @@ import (
"coopcloud.tech/abra/pkg/config"
"coopcloud.tech/tagcmp"
"github.com/docker/distribution/reference"
"github.com/sirupsen/logrus"
)
var Warn = "warn"
@ -122,6 +123,29 @@ var LintRules = map[string][]LintRule{
},
}
func LintForErrors(recipe Recipe) error {
logrus.Debugf("linting for critical errors in %s configs", recipe.Name)
for level := range LintRules {
if level != "error" {
continue
}
for _, rule := range LintRules[level] {
ok, err := rule.Function(recipe)
if err != nil {
return err
}
if !ok {
return fmt.Errorf("lint error in %s configs: \"%s\" failed lint checks (%s)", recipe.Name, rule.Description, rule.Ref)
}
}
}
logrus.Debugf("linting successful, %s is well configured", recipe.Name)
return nil
}
func LintComposeVersion(recipe Recipe) (bool, error) {
if recipe.Config.Version == "3.8" {
return true, nil