From aa6150cf6d0c17e42f28a27400622732f4d3579a Mon Sep 17 00:00:00 2001 From: Rose Northey Date: Thu, 20 Nov 2025 09:37:36 +1300 Subject: [PATCH 1/5] add testing for get and modify runbook retention --- ...e_default_retention_policy_service_test.go | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/test/e2e/space_default_retention_policy_service_test.go b/test/e2e/space_default_retention_policy_service_test.go index 48a25856..dc2407f2 100644 --- a/test/e2e/space_default_retention_policy_service_test.go +++ b/test/e2e/space_default_retention_policy_service_test.go @@ -1,10 +1,11 @@ package e2e import ( + "testing" + "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/retention" "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/spaces" "github.com/stretchr/testify/require" - "testing" ) func TestReadLifecycleReleaseRetentionDefaultPolicy(t *testing.T) { @@ -39,6 +40,22 @@ func TestReadLifecycleTentacleRetentionDefaultPolicy(t *testing.T) { require.Equal(t, res.RetentionType, retention.LifecycleTentacleRetentionType) } +func TestReadRunbookRetentionDefaultPolicy(t *testing.T) { + client := getOctopusClient() + require.NotNil(t, client) + + defaultSpace, _ := spaces.GetDefaultSpace(client) + query := retention.SpaceDefaultRetentionPolicyQuery{ + RetentionType: retention.RunbookRetentionType, + SpaceID: defaultSpace.ID, + } + res, err := retention.Get(client, query) + + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, res.RetentionType, retention.RunbookRetentionType) +} + func TestModifyLifecycleReleaseRetentionDefaultPolicy(t *testing.T) { client := getOctopusClient() require.NotNil(t, client) @@ -83,3 +100,25 @@ func TestModifyLifecycleTentacleRetentionDefaultPolicy(t *testing.T) { require.Equal(t, res.Strategy, retention.RetentionStrategyCount) require.Equal(t, res.Unit, retention.RetentionUnitDays) } + +func TestModifyRunbookRetentionDefaultPolicy(t *testing.T) { + client := getOctopusClient() + require.NotNil(t, client) + defaultSpace, _ := spaces.GetDefaultSpace(client) + query := retention.SpaceDefaultRetentionPolicyQuery{ + RetentionType: retention.RunbookRetentionType, + SpaceID: defaultSpace.ID, + } + defaultSpaceRunbookPolicy, err := retention.Get(client, query) + if err != nil { + t.Fatal(err) + } + + policy := retention.NewCountBasedLifecycleTentacleRetentionPolicy(3, retention.RetentionUnitDays, defaultSpace.ID, defaultSpaceRunbookPolicy.ID) + res, err := retention.Update(client, policy) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, res.QuantityToKeep, 3) + require.Equal(t, res.Strategy, retention.RetentionStrategyCount) + require.Equal(t, res.Unit, retention.RetentionUnitDays) +} From 4f7d5c7d340d23e3ad8b55e9496e8a46b3ca971b Mon Sep 17 00:00:00 2001 From: Rose Northey Date: Thu, 20 Nov 2025 09:38:12 +1300 Subject: [PATCH 2/5] add runbook retention to list of types --- pkg/retention/retention_policy.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/retention/retention_policy.go b/pkg/retention/retention_policy.go index 1e5873cb..23cd97d8 100644 --- a/pkg/retention/retention_policy.go +++ b/pkg/retention/retention_policy.go @@ -5,6 +5,7 @@ type RetentionType string const ( LifecycleReleaseRetentionType = RetentionType("LifecycleRelease") LifecycleTentacleRetentionType = RetentionType("LifecycleTentacle") + RunbookRetentionType = RetentionType("RunbookRetention") ) const ( From 99c15f3eb0c7388d939e35ed57db2a09ed027823 Mon Sep 17 00:00:00 2001 From: Rose Northey Date: Thu, 20 Nov 2025 09:53:58 +1300 Subject: [PATCH 3/5] create runbooks policy file --- .../space_default_runbook_retention_policy.go | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 pkg/retention/space_default_runbook_retention_policy.go diff --git a/pkg/retention/space_default_runbook_retention_policy.go b/pkg/retention/space_default_runbook_retention_policy.go new file mode 100644 index 00000000..d9625f42 --- /dev/null +++ b/pkg/retention/space_default_runbook_retention_policy.go @@ -0,0 +1,40 @@ +package retention + +import "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/resources" + +type RunbookRetentionPolicy struct { + QuantityToKeep int `json:"QuantityToKeep"` + Strategy string `json:"Strategy"` + Unit string `json:"Unit"` + SpaceDefaultRetentionPolicy +} + +func NewCountBasedRunbookRetentionPolicy(quantityToKeep int, unit string, spaceId string, policyId string) *RunbookRetentionPolicy { + return &RunbookRetentionPolicy{ + QuantityToKeep: quantityToKeep, + Strategy: RetentionStrategyCount, + Unit: unit, + SpaceDefaultRetentionPolicy: SpaceDefaultRetentionPolicy{ + SpaceId: spaceId, + RetentionType: RunbookRetentionType, + Resource: resources.Resource{ + ID: policyId, + }, + }, + } +} + +func NewKeepForeverRunbookRetentionPolicy(spaceId string, policyId string) *RunbookRetentionPolicy { + return &RunbookRetentionPolicy{ + QuantityToKeep: 0, + Strategy: RetentionStrategyForever, + Unit: RetentionUnitItems, + SpaceDefaultRetentionPolicy: SpaceDefaultRetentionPolicy{ + SpaceId: spaceId, + RetentionType: RunbookRetentionType, + Resource: resources.Resource{ + ID: policyId, + }, + }, + } +} From eceba7a3e77cad36d6491ee85ac2731a94f86cc7 Mon Sep 17 00:00:00 2001 From: Rose Northey Date: Thu, 20 Nov 2025 10:30:26 +1300 Subject: [PATCH 4/5] fix error in tests --- test/e2e/space_default_retention_policy_service_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/space_default_retention_policy_service_test.go b/test/e2e/space_default_retention_policy_service_test.go index dc2407f2..0673755e 100644 --- a/test/e2e/space_default_retention_policy_service_test.go +++ b/test/e2e/space_default_retention_policy_service_test.go @@ -114,7 +114,7 @@ func TestModifyRunbookRetentionDefaultPolicy(t *testing.T) { t.Fatal(err) } - policy := retention.NewCountBasedLifecycleTentacleRetentionPolicy(3, retention.RetentionUnitDays, defaultSpace.ID, defaultSpaceRunbookPolicy.ID) + policy := retention.NewCountBasedRunbookRetentionPolicy(3, retention.RetentionUnitDays, defaultSpace.ID, defaultSpaceRunbookPolicy.ID) res, err := retention.Update(client, policy) require.NoError(t, err) require.NotNil(t, res) From 23f9db24723b6073752fbac050d104a79fb1c390 Mon Sep 17 00:00:00 2001 From: Rose Northey Date: Wed, 26 Nov 2025 10:11:03 +1300 Subject: [PATCH 5/5] add test for keep forever --- ...e_default_retention_policy_service_test.go | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/test/e2e/space_default_retention_policy_service_test.go b/test/e2e/space_default_retention_policy_service_test.go index 0673755e..dcc5d62a 100644 --- a/test/e2e/space_default_retention_policy_service_test.go +++ b/test/e2e/space_default_retention_policy_service_test.go @@ -101,7 +101,7 @@ func TestModifyLifecycleTentacleRetentionDefaultPolicy(t *testing.T) { require.Equal(t, res.Unit, retention.RetentionUnitDays) } -func TestModifyRunbookRetentionDefaultPolicy(t *testing.T) { +func TestModifyRunbookRetentionDefaultPolicyUsingCount(t *testing.T) { client := getOctopusClient() require.NotNil(t, client) defaultSpace, _ := spaces.GetDefaultSpace(client) @@ -122,3 +122,24 @@ func TestModifyRunbookRetentionDefaultPolicy(t *testing.T) { require.Equal(t, res.Strategy, retention.RetentionStrategyCount) require.Equal(t, res.Unit, retention.RetentionUnitDays) } + +func TestModifyRunbookRetentionDefaultPolicyUsingForever(t *testing.T) { + client := getOctopusClient() + require.NotNil(t, client) + defaultSpace, _ := spaces.GetDefaultSpace(client) + query := retention.SpaceDefaultRetentionPolicyQuery{ + RetentionType: retention.RunbookRetentionType, + SpaceID: defaultSpace.ID, + } + defaultSpaceRunbookPolicy, err := retention.Get(client, query) + if err != nil { + t.Fatal(err) + } + + policy := retention.NewKeepForeverRunbookRetentionPolicy(defaultSpace.ID, defaultSpaceRunbookPolicy.ID) + res, err := retention.Update(client, policy) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, res.QuantityToKeep, 0) + require.Equal(t, res.Strategy, retention.RetentionStrategyForever) +}