Is your feature request related to a problem? Please describe.
item 1 and 2 of Feature Request #365.
Describe the solution you'd like
Gate per step of a progressive rollout, not just at the start. The current gate feature only runs once, before any workflows have been ramped to the new build. I'm imagining a rollout.steps[*].gate field, structured similar to rollout.gate. A step completes when its ramp percentage, pause duration, and gate (if present) have all completed (successfully). I think the simplest semantics are for the ramp change, pause timer, and gate to begin simultaneously; to gate on a stable system, multiple steps can be used.
A failed gate should rollback, not pause. The if wf.Status != WorkflowExecutionStatusCompleted: return nil check means that the pods stay up until human intervention. Currently the pods are not ramped and receive no workflows, but combined with item (1), this would mean the partially ramped build continues to serve a percentage of traffic. The feature request is for a failed gate to cause the new ramping deployment to immediately drain (work in-flight completes). This can be the default for step gates, or configurable.
Additional context
Potential representation of rollout.steps[*].gate on the spec.
rollout:
strategy: Progressive
gate: # existing: pre-flight, before any traffic
workflowType: SmokeTest
steps:
- rampPercentage: 5
pauseDuration: 5m
- rampPercentage: 20
pauseDuration: 20m
gate: # new: runs while serving 20%
workflowType: ErrorRateCheck
input: {"threshold": 0.02}
Is your feature request related to a problem? Please describe.
item 1 and 2 of Feature Request #365.
Describe the solution you'd like
Additional context
Potential representation of rollout.steps[*].gate on the spec.