Skip to content
Closed
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
52 changes: 52 additions & 0 deletions pkg/core/retention_period.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ type RetentionPeriod struct {
Strategy string `json:"Strategy,omitempty"`
}

type RetentionStrategy struct {
QuantityToKeep int32 `json:"QuantityToKeep,omitempty"`
Unit string `json:"Unit,omitempty"`
Strategy string `json:"Strategy"`
}

const (
RetentionStrategyDefault string = "Default"
RetentionStrategyForever string = "Forever"
Expand Down Expand Up @@ -86,3 +92,49 @@ func (r *RetentionPeriod) UnmarshalJSON(data []byte) error {

return nil
}

func CountBasedRetentionStrategy(quantityToKeep int32, unit string) *RetentionStrategy {
return &RetentionStrategy{
QuantityToKeep: quantityToKeep,
Unit: unit,
Strategy: RetentionStrategyCount,
}
}

func KeepForeverRetentionStrategy() *RetentionStrategy {
return &RetentionStrategy{
Strategy: RetentionStrategyForever,
}
}

func SpaceDefaultRetentionStrategy() *RetentionStrategy {
return &RetentionStrategy{
Strategy: RetentionStrategyDefault,
}
}

// UnmarshalJSON sets a retention strategy to its representation in JSON.
func (r *RetentionStrategy) UnmarshalJSON(data []byte) error {
var fields struct {
QuantityToKeep int32 `json:"QuantityToKeep"`
Unit string `json:"Unit"`
Strategy string `json:"Strategy,omitempty"`
}

if err := json.Unmarshal(data, &fields); err != nil {
return err
}

r.QuantityToKeep = fields.QuantityToKeep
r.Unit = fields.Unit

if fields.Strategy == "" {
if r.QuantityToKeep > 0 {
r.Strategy = RetentionStrategyCount
}
} else {
r.Strategy = RetentionStrategyDefault
}

return nil
}
57 changes: 29 additions & 28 deletions pkg/deployments/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,35 @@ import (
)

type Deployment struct {
Changes []*releases.ReleaseChanges `json:"Changes"`
ChangesMarkdown string `json:"ChangesMarkdown,omitempty"`
ChannelID string `json:"ChannelId,omitempty"`
Comments string `json:"Comments,omitempty"`
Created *time.Time `json:"Created,omitempty"`
DeployedBy string `json:"DeployedBy,omitempty"`
DeployedByID string `json:"DeployedById,omitempty"`
DeployedToMachineIDs []string `json:"DeployedToMachineIds"`
DeploymentProcessID string `json:"DeploymentProcessId,omitempty"`
EnvironmentID string `json:"EnvironmentId" validate:"required"`
ExcludedMachineIDs []string `json:"ExcludedMachineIds"`
FailureEncountered bool `json:"FailureEncountered"`
ForcePackageDownload bool `json:"ForcePackageDownload"`
ForcePackageRedeployment bool `json:"ForcePackageRedeployment"`
FormValues map[string]string `json:"FormValues,omitempty"`
ManifestVariableSetID string `json:"ManifestVariableSetId,omitempty"`
Name string `json:"Name,omitempty"`
ProjectID string `json:"ProjectId,omitempty"`
QueueTime *time.Time `json:"QueueTime,omitempty"`
QueueTimeExpiry *time.Time `json:"QueueTimeExpiry,omitempty"`
ReleaseID string `json:"ReleaseId" validate:"required"`
SkipActions []string `json:"SkipActions"`
SpaceID string `json:"SpaceId,omitempty"`
SpecificMachineIDs []string `json:"SpecificMachineIds"`
TaskID string `json:"TaskId,omitempty"`
TenantID string `json:"TenantId,omitempty"`
TentacleRetentionPeriod *core.RetentionPeriod `json:"TentacleRetentionPeriod,omitempty"`
UseGuidedFailure bool `json:"UseGuidedFailure"`
Changes []*releases.ReleaseChanges `json:"Changes"`
ChangesMarkdown string `json:"ChangesMarkdown,omitempty"`
ChannelID string `json:"ChannelId,omitempty"`
Comments string `json:"Comments,omitempty"`
Created *time.Time `json:"Created,omitempty"`
DeployedBy string `json:"DeployedBy,omitempty"`
DeployedByID string `json:"DeployedById,omitempty"`
DeployedToMachineIDs []string `json:"DeployedToMachineIds"`
DeploymentProcessID string `json:"DeploymentProcessId,omitempty"`
EnvironmentID string `json:"EnvironmentId" validate:"required"`
ExcludedMachineIDs []string `json:"ExcludedMachineIds"`
FailureEncountered bool `json:"FailureEncountered"`
ForcePackageDownload bool `json:"ForcePackageDownload"`
ForcePackageRedeployment bool `json:"ForcePackageRedeployment"`
FormValues map[string]string `json:"FormValues,omitempty"`
ManifestVariableSetID string `json:"ManifestVariableSetId,omitempty"`
Name string `json:"Name,omitempty"`
ProjectID string `json:"ProjectId,omitempty"`
QueueTime *time.Time `json:"QueueTime,omitempty"`
QueueTimeExpiry *time.Time `json:"QueueTimeExpiry,omitempty"`
ReleaseID string `json:"ReleaseId" validate:"required"`
SkipActions []string `json:"SkipActions"`
SpaceID string `json:"SpaceId,omitempty"`
SpecificMachineIDs []string `json:"SpecificMachineIds"`
TaskID string `json:"TaskId,omitempty"`
TenantID string `json:"TenantId,omitempty"`
TentacleRetentionPeriod *core.RetentionPeriod `json:"TentacleRetentionPeriod,omitempty"`
TentacleRetentionStrategy *core.RetentionStrategy `json:"TentacleRetentionStrategy,omitempty"`
UseGuidedFailure bool `json:"UseGuidedFailure"`

resources.Resource
}
Expand Down
26 changes: 15 additions & 11 deletions pkg/lifecycles/lifecycle.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ import (
)

type Lifecycle struct {
Description string `json:"Description,omitempty"`
Name string `json:"Name" validate:"required"`
Phases []*Phase `json:"Phases,omitempty"`
ReleaseRetentionPolicy *core.RetentionPeriod `json:"ReleaseRetentionPolicy,omitempty"`
SpaceID string `json:"SpaceId,omitempty"`
TentacleRetentionPolicy *core.RetentionPeriod `json:"TentacleRetentionPolicy,omitempty"`
Description string `json:"Description,omitempty"`
Name string `json:"Name" validate:"required"`
Phases []*Phase `json:"Phases,omitempty"`
SpaceID string `json:"SpaceId,omitempty"`
ReleaseRetentionPolicy *core.RetentionPeriod `json:"ReleaseRetentionPolicy,omitempty"`
TentacleRetentionPolicy *core.RetentionPeriod `json:"TentacleRetentionPolicy,omitempty"`
ReleaseRetentionStrategy *core.RetentionStrategy `json:"ReleaseRetentionStrategy,omitempty"`
TentacleRetentionStrategy *core.RetentionStrategy `json:"TentacleRetentionStrategy,omitempty"`

resources.Resource
}
Expand All @@ -26,11 +28,13 @@ const (

func NewLifecycle(name string) *Lifecycle {
return &Lifecycle{
Name: strings.TrimSpace(name),
Phases: []*Phase{},
ReleaseRetentionPolicy: core.CountBasedRetentionPeriod(30, RetentionUnitDays),
TentacleRetentionPolicy: core.CountBasedRetentionPeriod(30, RetentionUnitDays),
Resource: *resources.NewResource(),
Name: strings.TrimSpace(name),
Phases: []*Phase{},
ReleaseRetentionPolicy: core.CountBasedRetentionPeriod(30, RetentionUnitDays),
TentacleRetentionPolicy: core.CountBasedRetentionPeriod(30, RetentionUnitDays),
ReleaseRetentionStrategy: core.SpaceDefaultRetentionStrategy(),
TentacleRetentionStrategy: core.SpaceDefaultRetentionStrategy(),
Resource: *resources.NewResource(),
}
}

Expand Down
20 changes: 11 additions & 9 deletions pkg/lifecycles/phase.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,17 @@
import "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/core"

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"`
ReleaseRetentionPolicy *core.RetentionPeriod `json:"ReleaseRetentionPolicy"`
TentacleRetentionPolicy *core.RetentionPeriod `json:"TentacleRetentionPolicy"`
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"`
ReleaseRetentionPolicy *core.RetentionPeriod `json:"ReleaseRetentionPolicy"`
TentacleRetentionPolicy *core.RetentionPeriod `json:"TentacleRetentionPolicy"`
ReleaseRetentionStrategy *core.RetentionStrategy `json:"ReleaseRetentionPolicy"`

Check failure on line 15 in pkg/lifecycles/phase.go

View workflow job for this annotation

GitHub Actions / test

struct field ReleaseRetentionStrategy repeats json tag "ReleaseRetentionPolicy" also at phase.go:13
TentacleRetentionStrategy *core.RetentionStrategy `json:"TentacleRetentionPolicy"`

Check failure on line 16 in pkg/lifecycles/phase.go

View workflow job for this annotation

GitHub Actions / test

struct field TentacleRetentionStrategy repeats json tag "TentacleRetentionPolicy" also at phase.go:14
}

func NewPhase(name string) *Phase {
Expand Down
Loading