diff --git a/internal/planner/planner.go b/internal/planner/planner.go index 19dfd6e0..b65f4a8c 100644 --- a/internal/planner/planner.go +++ b/internal/planner/planner.go @@ -339,8 +339,7 @@ func getTestWorkflows( // Skip if there's no gate workflow defined, if the target version is already the current, or if the target // version is not yet registered in temporal if config.RolloutStrategy.Gate == nil || - status.CurrentVersion == nil || - status.CurrentVersion.BuildID == status.TargetVersion.BuildID || + (status.CurrentVersion != nil && status.CurrentVersion.BuildID == status.TargetVersion.BuildID) || status.TargetVersion.Status == temporaliov1alpha1.VersionStatusNotRegistered { return nil } diff --git a/internal/planner/planner_test.go b/internal/planner/planner_test.go index ccc62469..2a74254d 100644 --- a/internal/planner/planner_test.go +++ b/internal/planner/planner_test.go @@ -1204,6 +1204,42 @@ func TestGetVersionConfigDiff(t *testing.T) { expectSetCurrent: true, expectRampPercent: func() *int32 { f := int32(0); return &f }(), }, + { + name: "gate configured with no current version should set current immediately", + strategy: temporaliov1alpha1.RolloutStrategy{ + Strategy: temporaliov1alpha1.UpdateProgressive, + Gate: &temporaliov1alpha1.GateWorkflowConfig{WorkflowType: "TestWorkflow"}, + Steps: []temporaliov1alpha1.RolloutStep{ + {RampPercentage: 1, PauseDuration: metav1Duration(30 * time.Second)}, + }, + }, + status: &temporaliov1alpha1.TemporalWorkerDeploymentStatus{ + TargetVersion: temporaliov1alpha1.TargetWorkerDeploymentVersion{ + BaseWorkerDeploymentVersion: temporaliov1alpha1.BaseWorkerDeploymentVersion{ + BuildID: "123", + Status: temporaliov1alpha1.VersionStatusInactive, + HealthySince: &metav1.Time{Time: time.Now()}, + TaskQueues: []temporaliov1alpha1.TaskQueue{ + {Name: "queue1"}, + }, + }, + TestWorkflows: []temporaliov1alpha1.WorkflowExecution{ + { + TaskQueue: "queue1", + Status: temporaliov1alpha1.WorkflowExecutionStatusCompleted, + }, + }, + }, + CurrentVersion: nil, + }, + state: &temporal.TemporalWorkerState{ + Versions: map[string]*temporal.VersionInfo{ + "123": {BuildID: "123", AllTaskQueuesHaveUnversionedPoller: false}, + }, + }, + expectConfig: true, + expectSetCurrent: true, + }, } for _, tc := range testCases { diff --git a/internal/tests/internal/integration_test.go b/internal/tests/internal/integration_test.go index 0392c623..2045434e 100644 --- a/internal/tests/internal/integration_test.go +++ b/internal/tests/internal/integration_test.go @@ -63,6 +63,19 @@ func TestIntegration(t *testing.T) { WithTargetVersion("v1.0", temporaliov1alpha1.VersionStatusCurrent, -1, true, false). WithCurrentVersion("v1.0", true, false), ), + "progressive-rollout-with-gate-no-current-expect-all-at-once": testhelpers.NewTestCase(). + WithInput( + testhelpers.NewTemporalWorkerDeploymentBuilder(). + WithProgressiveStrategy(testhelpers.ProgressiveStep(10, time.Hour)). + WithReplicas(2). + WithGate(true). + WithTargetTemplate("v1.0"), + ). + WithExpectedStatus( + testhelpers.NewStatusBuilder(). + WithTargetVersion("v1.0", temporaliov1alpha1.VersionStatusCurrent, -1, true, false). + WithCurrentVersion("v1.0", true, false), + ), "progressive-rollout-no-unversioned-pollers-expect-all-at-once": testhelpers.NewTestCase(). WithInput( testhelpers.NewTemporalWorkerDeploymentBuilder().