File tree Expand file tree Collapse file tree 2 files changed +25
-0
lines changed
Expand file tree Collapse file tree 2 files changed +25
-0
lines changed Original file line number Diff line number Diff line change @@ -454,6 +454,15 @@ var ErrPlanPhaseDurationLessThenAnHour = models.NewValidationIssue(
454454 models .WithWarningSeverity (),
455455)
456456
457+ const ErrCodePlanPhaseDuplicatedKey models.ErrorCode = "plan_phase_duplicated_key"
458+
459+ var ErrPlanPhaseDuplicatedKey = models .NewValidationIssue (
460+ ErrCodePlanPhaseDuplicatedKey ,
461+ "duplicated key" ,
462+ models .WithFieldString ("key" ),
463+ models .WithCriticalSeverity (),
464+ )
465+
457466const ErrCodePlanInvalidStatus models.ErrorCode = "plan_invalid_status"
458467
459468var ErrPlanInvalidStatus = models .NewValidationIssue (
Original file line number Diff line number Diff line change @@ -68,6 +68,8 @@ func ValidatePlanPhases() models.ValidatorFunc[Plan] {
6868 return ErrPlanWithNoPhases
6969 }
7070
71+ phaseKeys := make (map [string ]struct {}, len (p .Phases ))
72+
7173 lastPhaseIdx := len (p .Phases ) - 1
7274
7375 for idx , phase := range p .Phases {
@@ -88,6 +90,20 @@ func ValidatePlanPhases() models.ValidatorFunc[Plan] {
8890 }
8991 }
9092
93+ // Check for duplicated phase keys
94+ if _ , ok := phaseKeys [phase .Key ]; ok {
95+ selector := models .NewFieldSelectors (
96+ models .NewFieldSelector ("phases" ).
97+ WithExpression (
98+ models .NewFieldAttrValue ("key" , phase .Key ),
99+ ),
100+ models .NewFieldSelector ("key" ),
101+ )
102+
103+ errs = append (errs , models .ErrorWithFieldPrefix (selector , ErrPlanPhaseDuplicatedKey ))
104+ }
105+ phaseKeys [phase .Key ] = struct {}{}
106+
91107 if err := phase .Validate (); err != nil {
92108 errs = append (errs , models .ErrorWithFieldPrefix (phaseFieldSelector , err ))
93109 }
You can’t perform that action at this time.
0 commit comments