grim/convey

652910a39bfa
Parents 3702d744bdb6
Children c83c2b0ad9f8
Add Plan.Valid to do basic plan validation. Fixes #129
--- a/plans/plans.go Wed Dec 27 01:13:19 2017 -0600
+++ b/plans/plans.go Wed Dec 27 01:37:46 2017 -0600
@@ -18,6 +18,7 @@
package plans
import (
+ "errors"
"fmt"
"time"
@@ -32,6 +33,10 @@
"bitbucket.org/rw_grim/convey/yaml"
)
+var (
+ ErrNoStages = errors.New("no stages found")
+)
+
type Plan struct {
Environment yaml.StringOrSlice `yaml:"environment"`
Stages []stages.Stage `yaml:"stages"`
@@ -138,3 +143,11 @@
return planErr
}
+
+func (p *Plan) Valid() error {
+ if len(p.Stages) == 0 {
+ return ErrNoStages
+ }
+
+ return nil
+}
--- a/plans/plans_test.go Wed Dec 27 01:13:19 2017 -0600
+++ b/plans/plans_test.go Wed Dec 27 01:37:46 2017 -0600
@@ -63,3 +63,28 @@
Expect(err).To(BeNil())
Expect(p.Environment).To(Equal(cYaml.StringOrSlice{"foo=bar"}))
}
+
+func (s *planSuite) TestStagesRequired(t sweet.T) {
+ data := ``
+
+ p := Plan{}
+ err := yaml.Unmarshal([]byte(data), &p)
+ Expect(err).To(BeNil())
+
+ err = p.Valid()
+ Expect(err).To(Equal(ErrNoStages))
+ Expect(len(p.Stages)).To(Equal(0))
+}
+
+func (s *planSuite) TestValid(t sweet.T) {
+ data := `stages:
+ - tasks:
+ - foo`
+
+ p := Plan{}
+ err := yaml.Unmarshal([]byte(data), &p)
+ Expect(err).To(BeNil())
+
+ err = p.Valid()
+ Expect(err).To(BeNil())
+}
--- a/runners/default.go Wed Dec 27 01:13:19 2017 -0600
+++ b/runners/default.go Wed Dec 27 01:37:46 2017 -0600
@@ -30,7 +30,13 @@
/* now look for the plan */
for _, planName := range plans {
if plan, found := cfg.Plans[planName]; found {
- err := plan.Execute(planName, cfg.Tasks, cfg.Environment, st)
+ err := plan.Valid()
+ if err != nil {
+ logger.Errorf("%s", err)
+ return 1
+ }
+
+ err = plan.Execute(planName, cfg.Tasks, cfg.Environment, st)
if err != nil {
logger.Errorf("%s", err)
return 1