grim/convey

Parents d57adac1456d
Children 11ee6a9d8cac
Add stage.ShouldRun to make it easier to determine if a stage should be ran or not
--- a/plans/plans.go Mon Sep 04 21:04:34 2017 -0500
+++ b/plans/plans.go Mon Sep 04 21:46:07 2017 -0500
@@ -102,8 +102,7 @@
absStageName := fmt.Sprintf("%s/%s", path, stage.Name)
stageLogger := logging.NewAdapter(absStageName)
- if (planErr == nil || stage.Always) && stage.Enabled {
-
+ if stage.ShouldRun(planErr) {
stageLogger.Info("stage starting")
err := stage.Execute(absStageName, stageLogger, tasks, planEnv, st)
@@ -116,8 +115,6 @@
}
stageLogger.Info("stage finished")
- } else {
- stageLogger.Info("skipping (disabled)")
}
}
--- a/stages/stages.go Mon Sep 04 21:04:34 2017 -0500
+++ b/stages/stages.go Mon Sep 04 21:46:07 2017 -0500
@@ -49,8 +49,11 @@
return err
}
+ fmt.Printf("enabled: %#v\n", raw.Enabled)
+
*s = Stage(raw)
+ // validate the run attribute
if s.Run == "" {
// If the always attribute is set, convert it to run syntax
if s.Always {
@@ -63,10 +66,16 @@
}
// now validate the run attribute
- if s.Run != "on-success" || s.Run != "on-failure" || s.Run != "always" {
+ switch s.Run {
+ case "on-success":
+ case "on-failure":
+ case "always":
+ default:
return fmt.Errorf("Invalid value '%s' for run attribute", s.Run)
}
+ // All good, return success
+
return nil
}
--- a/stages/stages_test.go Mon Sep 04 21:04:34 2017 -0500
+++ b/stages/stages_test.go Mon Sep 04 21:46:07 2017 -0500
@@ -40,7 +40,7 @@
}
func (s *stagesSuite) TestShouldRunOnFailEnabled(t sweet.T) {
- stage := Stage{}
+ stage := Stage{Enabled: true}
err := errors.New("testing")
stage.Run = "on-failure"
@@ -68,7 +68,7 @@
}
func (s *stagesSuite) TestShouldRunOnSuccessEnabled(t sweet.T) {
- stage := Stage{}
+ stage := Stage{Enabled: true}
stage.Run = "on-success"
Expect(stage.ShouldRun(nil)).To(BeTrue())
--- a/stages/unmarshal_test.go Mon Sep 04 21:04:34 2017 -0500
+++ b/stages/unmarshal_test.go Mon Sep 04 21:46:07 2017 -0500
@@ -25,6 +25,17 @@
type unmarshalSuite struct{}
+func (s *unmarshalSuite) TestDefaults(t sweet.T) {
+ // we need a non empty string to get go-yaml to call our UnmarshalYAML
+ // function
+ data := `name: foo`
+ var stage Stage
+ err := yaml.Unmarshal([]byte(data), &stage)
+
+ Expect(err).To(BeNil())
+ Expect(stage.Run).To(Equal("on-success"))
+}
+
func (s *unmarshalSuite) TestAlwaysAttribute(t sweet.T) {
data := `always: true`
@@ -36,14 +47,6 @@
Expect(stage.Run).To(Equal("always"))
}
-func (s *unmarshalSuite) TestDefaults(t sweet.T) {
- var stage Stage
- err := yaml.Unmarshal([]byte(""), &stage)
-
- Expect(err).To(BeNil())
- Expect(stage.Run).To(Equal("on-success"))
-}
-
func (s *unmarshalSuite) TestInvalidRun(t sweet.T) {
data := `run: invalid`