Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pkg/constants/constants_services.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ const (
ServiceServerConfigurationService string = "ServerConfigurationService"
ServiceServerStatusService string = "ServerStatusService"
ServiceSpaceService string = "SpaceService"
ServiceSpaceDefaultRetentionPolicyService string = "SpaceDefaultRetentionPolicyService"
ServiceSMTPConfigurationService string = "SMTPConfigurationService"
ServiceSubscriptionService string = "SubscriptionService"
ServiceTagSetService string = "TagSetService"
Expand Down
18 changes: 18 additions & 0 deletions pkg/retention/retention_policy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package retention

type RetentionType string

const (
LifecycleReleaseRetentionType = RetentionType("LifecycleRelease")
LifecycleTentacleRetentionType = RetentionType("LifecycleTentacle")
)

const (
RetentionStrategyForever string = "Forever"
RetentionStrategyCount string = "Count"
)

const (
RetentionUnitDays string = "Days"
RetentionUnitItems string = "Items"
)
40 changes: 40 additions & 0 deletions pkg/retention/space_default_lifecycle_release_retention_policy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package retention

import "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/resources"

type LifecycleReleaseRetentionPolicy struct {
QuantityToKeep int `json:"QuantityToKeep"`
Strategy string `json:"Strategy"`
Unit string `json:"Unit"`
SpaceDefaultRetentionPolicy
}

func NewCountBasedLifecycleReleaseRetentionPolicy(quantityToKeep int, unit string, spaceId string, policyId string) *LifecycleReleaseRetentionPolicy {
return &LifecycleReleaseRetentionPolicy{
QuantityToKeep: quantityToKeep,
Strategy: RetentionStrategyCount,
Unit: unit,
SpaceDefaultRetentionPolicy: SpaceDefaultRetentionPolicy{
SpaceId: spaceId,
RetentionType: LifecycleReleaseRetentionType,
Resource: resources.Resource{
ID: policyId,
},
},
}
}

func NewKeepForeverLifecycleReleaseRetentionPolicy(spaceId string, policyId string) *LifecycleReleaseRetentionPolicy {
return &LifecycleReleaseRetentionPolicy{
QuantityToKeep: 0,
Strategy: RetentionStrategyForever,
Unit: RetentionUnitItems,
SpaceDefaultRetentionPolicy: SpaceDefaultRetentionPolicy{
SpaceId: spaceId,
RetentionType: LifecycleReleaseRetentionType,
Resource: resources.Resource{
ID: policyId,
},
},
}
}
40 changes: 40 additions & 0 deletions pkg/retention/space_default_lifecycle_tentacle_retention_policy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package retention

import "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/resources"

type LifecycleTentacleRetentionPolicy struct {
QuantityToKeep int `json:"QuantityToKeep"`
Strategy string `json:"Strategy"`
Unit string `json:"Unit"`
SpaceDefaultRetentionPolicy
}

func NewCountBasedLifecycleTentacleRetentionPolicy(quantityToKeep int, unit string, spaceId string, policyId string) *LifecycleTentacleRetentionPolicy {
return &LifecycleTentacleRetentionPolicy{
QuantityToKeep: quantityToKeep,
Strategy: RetentionStrategyCount,
Unit: unit,
SpaceDefaultRetentionPolicy: SpaceDefaultRetentionPolicy{
SpaceId: spaceId,
RetentionType: LifecycleTentacleRetentionType,
Resource: resources.Resource{
ID: policyId,
},
},
}
}

func NewKeepForeverLifecycleTentacleRetentionPolicy(spaceId string, policyId string) *LifecycleTentacleRetentionPolicy {
return &LifecycleTentacleRetentionPolicy{
QuantityToKeep: 0,
Strategy: RetentionStrategyForever,
Unit: RetentionUnitItems,
SpaceDefaultRetentionPolicy: SpaceDefaultRetentionPolicy{
SpaceId: spaceId,
RetentionType: LifecycleTentacleRetentionType,
Resource: resources.Resource{
ID: policyId,
},
},
}
}
28 changes: 28 additions & 0 deletions pkg/retention/space_default_retention_policy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package retention

import (
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/resources"
)

type SpaceDefaultRetentionPolicy struct {
SpaceId string `json:"SpaceId"`
Name string `json:"Name"`
RetentionType RetentionType `json:"RetentionType"`
resources.Resource
}

type SpaceDefaultRetentionPolicyResource struct {
SpaceDefaultRetentionPolicy
QuantityToKeep int `json:"QuantityToKeep"`
Strategy string `json:"Strategy"`
Unit string `json:"Unit"`
}

type ISpaceDefaultRetentionPolicy interface {
GetSpaceID() string
resources.IResource
}

func (policy *SpaceDefaultRetentionPolicy) GetSpaceID() string {
return policy.SpaceId
}
6 changes: 6 additions & 0 deletions pkg/retention/space_default_retention_policy_query.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package retention

type SpaceDefaultRetentionPolicyQuery struct {
RetentionType RetentionType `uri:"RetentionType"`
SpaceID string `uri:"spaceId"`
}
28 changes: 28 additions & 0 deletions pkg/retention/space_default_retention_policy_service.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package retention

import (
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/newclient"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/services"
)

type SpaceDefaultRetentionPolicyService struct {
services.Service
}

const template = "/api/{spaceId}/retentionpolicies{/id}{?RetentionType}"

func Get(client newclient.Client, spaceDefaultRetentionPolicyQuery SpaceDefaultRetentionPolicyQuery) (*SpaceDefaultRetentionPolicy, error) {
res, err := newclient.GetResourceByQuery[SpaceDefaultRetentionPolicy](client, template, spaceDefaultRetentionPolicyQuery)
if err != nil {
return nil, err
}
return res, nil
}

func Update(client newclient.Client, spaceDefaultRetentionPolicy ISpaceDefaultRetentionPolicy) (*SpaceDefaultRetentionPolicyResource, error) {
res, err := newclient.Update[SpaceDefaultRetentionPolicyResource](client, template, spaceDefaultRetentionPolicy.GetSpaceID(), spaceDefaultRetentionPolicy.GetID(), spaceDefaultRetentionPolicy)
if err != nil {
return nil, err
}
return res, err
}
85 changes: 85 additions & 0 deletions test/e2e/space_default_retention_policy_service_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package e2e

import (
"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) {
client := getOctopusClient()
require.NotNil(t, client)

defaultSpace, _ := spaces.GetDefaultSpace(client)
query := retention.SpaceDefaultRetentionPolicyQuery{
RetentionType: retention.LifecycleReleaseRetentionType,
SpaceID: defaultSpace.ID,
}
res, err := retention.Get(client, query)

require.NoError(t, err)
require.NotNil(t, res)
require.Equal(t, res.RetentionType, retention.LifecycleReleaseRetentionType)
}

func TestReadLifecycleTentacleRetentionDefaultPolicy(t *testing.T) {
client := getOctopusClient()
require.NotNil(t, client)

defaultSpace, _ := spaces.GetDefaultSpace(client)
query := retention.SpaceDefaultRetentionPolicyQuery{
RetentionType: retention.LifecycleTentacleRetentionType,
SpaceID: defaultSpace.ID,
}
res, err := retention.Get(client, query)

require.NoError(t, err)
require.NotNil(t, res)
require.Equal(t, res.RetentionType, retention.LifecycleTentacleRetentionType)
}

func TestModifyLifecycleReleaseRetentionDefaultPolicy(t *testing.T) {
client := getOctopusClient()
require.NotNil(t, client)
defaultSpace, _ := spaces.GetDefaultSpace(client)
query := retention.SpaceDefaultRetentionPolicyQuery{
RetentionType: retention.LifecycleReleaseRetentionType,
SpaceID: defaultSpace.ID,
}
defaultSpaceLifecycleReleasePolicy, err := retention.Get(client, query)
if err != nil {
t.Fatal(err)
}

policy := retention.NewCountBasedLifecycleReleaseRetentionPolicy(4, retention.RetentionUnitItems, defaultSpace.ID, defaultSpaceLifecycleReleasePolicy.ID)

res, err := retention.Update(client, policy)
require.NoError(t, err)
require.NotNil(t, res)
require.Equal(t, res.QuantityToKeep, 4)
require.Equal(t, res.Strategy, retention.RetentionStrategyCount)
require.Equal(t, res.Unit, retention.RetentionUnitItems)
}

func TestModifyLifecycleTentacleRetentionDefaultPolicy(t *testing.T) {
client := getOctopusClient()
require.NotNil(t, client)
defaultSpace, _ := spaces.GetDefaultSpace(client)
query := retention.SpaceDefaultRetentionPolicyQuery{
RetentionType: retention.LifecycleTentacleRetentionType,
SpaceID: defaultSpace.ID,
}
defaultSpaceLifecycleReleasePolicy, err := retention.Get(client, query)
if err != nil {
t.Fatal(err)
}

policy := retention.NewCountBasedLifecycleTentacleRetentionPolicy(3, retention.RetentionUnitDays, defaultSpace.ID, defaultSpaceLifecycleReleasePolicy.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)
}
Loading