diff --git a/pkg/deployments/deployment.go b/pkg/deployments/deployment.go index af0230e0..10cb51c2 100644 --- a/pkg/deployments/deployment.go +++ b/pkg/deployments/deployment.go @@ -27,6 +27,7 @@ type Deployment struct { FormValues map[string]string `json:"FormValues,omitempty"` ManifestVariableSetID string `json:"ManifestVariableSetId,omitempty"` Name string `json:"Name,omitempty"` + Priority string `json:"Priority,omitempty" validate:"oneof=On Off LifecycleDefault"` ProjectID string `json:"ProjectId,omitempty"` QueueTime *time.Time `json:"QueueTime,omitempty"` QueueTimeExpiry *time.Time `json:"QueueTimeExpiry,omitempty"` @@ -49,6 +50,7 @@ func NewDeployment(environmentID string, releaseID string) *Deployment { EnvironmentID: environmentID, ReleaseID: releaseID, Resource: *resources.NewResource(), + Priority: "LifecycleDefault", } } diff --git a/pkg/lifecycles/lifecycle_test.go b/pkg/lifecycles/lifecycle_test.go index e94a88ef..4e5cf716 100644 --- a/pkg/lifecycles/lifecycle_test.go +++ b/pkg/lifecycles/lifecycle_test.go @@ -30,6 +30,7 @@ func TestLifecycleAsJSON(t *testing.T) { lifecycle.Phases[1].ID = "test-phase-id-2" lifecycle.Phases[1].ReleaseRetentionPolicy = nil lifecycle.Phases[1].TentacleRetentionPolicy = nil + lifecycle.Phases[1].IsPriorityPhase = true lifecycle.TentacleRetentionPolicy.Unit = "Items" lifecycle.ReleaseRetentionPolicy.QuantityToKeep = 3 @@ -44,6 +45,7 @@ func TestLifecycleAsJSON(t *testing.T) { "AutomaticDeploymentTargets": ["test-AutomaticDeploymentTargets-1"], "Id": "test-phase-id-1", "IsOptionalPhase": true, + "IsPriorityPhase": false, "MinimumEnvironmentsBeforePromotion": 123, "Name": "test-phase-name-1", "OptionalDeploymentTargets": ["Environments-1"], @@ -65,6 +67,7 @@ func TestLifecycleAsJSON(t *testing.T) { "OptionalDeploymentTargets": [], "MinimumEnvironmentsBeforePromotion": 0, "IsOptionalPhase": false, + "IsPriorityPhase": true, "ReleaseRetentionPolicy": null, "TentacleRetentionPolicy": null } @@ -206,6 +209,7 @@ func TestLifecycleFromJson(t *testing.T) { ], "MinimumEnvironmentsBeforePromotion": 1, "IsOptionalPhase": true, + "IsPriorityPhase": false, "ReleaseRetentionPolicy": { "Unit": "Days", "QuantityToKeep": 1, @@ -256,6 +260,7 @@ func TestLifecycleFromJson(t *testing.T) { require.Equal(t, "A", phase0.Name) require.Equal(t, int32(1), phase0.MinimumEnvironmentsBeforePromotion) require.Equal(t, true, phase0.IsOptionalPhase) + require.Equal(t, false, phase0.IsPriorityPhase) require.Equal(t, 1, len(phase0.AutomaticDeploymentTargets)) require.Equal(t, "Environments-2", phase0.AutomaticDeploymentTargets[0]) require.Equal(t, 1, len(phase0.OptionalDeploymentTargets)) diff --git a/pkg/lifecycles/phase.go b/pkg/lifecycles/phase.go index 2124e673..9af78610 100644 --- a/pkg/lifecycles/phase.go +++ b/pkg/lifecycles/phase.go @@ -6,6 +6,7 @@ type Phase struct { AutomaticDeploymentTargets []string `json:"AutomaticDeploymentTargets"` ID string `json:"Id,omitempty"` IsOptionalPhase bool `json:"IsOptionalPhase"` + IsPriorityPhase bool `json:"IsPriorityPhase"` MinimumEnvironmentsBeforePromotion int32 `json:"MinimumEnvironmentsBeforePromotion"` Name string `json:"Name" validate:"required"` OptionalDeploymentTargets []string `json:"OptionalDeploymentTargets"` diff --git a/test/e2e/lifecycle_service_test.go b/test/e2e/lifecycle_service_test.go index 880fae35..c464a63b 100644 --- a/test/e2e/lifecycle_service_test.go +++ b/test/e2e/lifecycle_service_test.go @@ -254,6 +254,29 @@ func TestLifecycleAddGetAndDelete_NewClient(t *testing.T) { assert.Equal(t, lifecycle.Name, getLifecycle.Name) } +func TestLifecycleAddGetUpdateAndDeleteWithPhases_NewClient(t *testing.T) { + octopusClient := getOctopusClient() + require.NotNil(t, octopusClient) + + lifecycle := createTestLifecycle_NewClient(t, octopusClient, internal.GetRandomName()) + defer cleanLifecycle_NewClient(t, octopusClient, lifecycle) + + priorityPhase := lifecycles.NewPhase(internal.GetRandomName()) + priorityPhase.IsPriorityPhase = true + + lifecycle.Phases = append(lifecycle.Phases, priorityPhase) + updatedLifecycle, err := lifecycles.Update(octopusClient, lifecycle) + + assert.NoError(t, err, "there was an error when updating the lifecycle") + require.NotNil(t, updatedLifecycle) + + getLifecycle, err := lifecycles.GetByID(octopusClient, lifecycle.SpaceID, lifecycle.GetID()) + assert.NoError(t, err, "there was an error raised getting lifecycle when there should not be") + assert.Equal(t, lifecycle.Name, getLifecycle.Name) + + assert.True(t, getLifecycle.Phases[0].IsPriorityPhase) +} + func createTestLifecycle_NewClient(t *testing.T, client *client.Client, lifecycleName string) *lifecycles.Lifecycle { if client == nil { client = getOctopusClient()