temporalio / temporalio/temporal-worker-controller

[Feature Request] Gate per step of a progressive rollout

Open
#586 3 comments 0 reactions 1 assignee View on GitHub

@zainawaisn is already working on this.

Since Sep 17, 2026.

Dominant language
Go
Stars
187
Forks
70
Avg merge
4d 1h
Merged PRs (30d)
31

Description

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}

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.