Skip to content
Open
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
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,5 @@ require (
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

replace github.com/OctopusDeploy/go-octopusdeploy/v2 => github.com/chen-keinan/go-octopusdeploy/v2 v2.0.0-20260215141226-f0761d37b8a3
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63n
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
github.com/OctopusDeploy/go-octodiff v1.0.0 h1:U+ORg6azniwwYo+O44giOw6TiD5USk8S4VDhOQ0Ven0=
github.com/OctopusDeploy/go-octodiff v1.0.0/go.mod h1:Mze0+EkOWTgTmi8++fyUc6r0aLZT7qD9gX+31t8MmIU=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.99.0 h1:0HzgNBPiOGY7ekP+uoRbX1DeMs0Y2JpJ3ecmUxFtC1o=
github.com/OctopusDeploy/go-octopusdeploy/v2 v2.99.0/go.mod h1:VkTXDoIPbwGFi5+goo1VSwFNdMVo784cVtJdKIEvfus=
github.com/bmatcuk/doublestar/v4 v4.4.0 h1:LmAwNwhjEbYtyVLzjcP/XeVw4nhuScHGkF/XWXnvIic=
github.com/bmatcuk/doublestar/v4 v4.4.0/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
github.com/briandowns/spinner v1.19.0 h1:s8aq38H+Qju89yhp89b4iIiMzMm8YN3p6vGpwyh/a8E=
github.com/briandowns/spinner v1.19.0/go.mod h1:mQak9GHqbspjC/5iUx3qMlIho8xBS/ppAL/hX5SmPJU=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chen-keinan/go-octopusdeploy/v2 v2.0.0-20260215141226-f0761d37b8a3 h1:M0JgP8bc/Q4/BO1jExusi3Mr9h9W037TB/Qby+lYZ6Q=
github.com/chen-keinan/go-octopusdeploy/v2 v2.0.0-20260215141226-f0761d37b8a3/go.mod h1:VkTXDoIPbwGFi5+goo1VSwFNdMVo784cVtJdKIEvfus=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
Expand Down
50 changes: 25 additions & 25 deletions pkg/cmd/release/deploy/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -403,12 +403,12 @@ func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker ques
}
options.ProjectName = selectedProject.Name

isTenanted, err := determineIsTenanted(selectedProject, asker)
isTenanted, err := DetermineIsTenanted(selectedProject, asker)
if err != nil {
return err
}

err = validateDeployment(isTenanted, options.Environments)
err = ValidateDeployment(isTenanted, options.Environments)
if err != nil {
return err
}
Expand Down Expand Up @@ -446,7 +446,7 @@ func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker ques

indicateMissingPackagesForReleaseFeatureToggleValue, err := featuretoggle.IsToggleEnabled(octopus, "indicate-missing-packages-for-release")
if indicateMissingPackagesForReleaseFeatureToggleValue {
proceed := promptMissingPackages(octopus, stdout, asker, selectedRelease)
proceed := PromptMissingPackages(octopus, stdout, asker, selectedRelease)
if !proceed {
return errors.New("aborting deployment creation as requested")
}
Expand All @@ -456,12 +456,12 @@ func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker ques
// NOTE: this is allowed to remain nil; environments will get looked up later on if needed
var deploymentEnvironmentIDs []string
if selectedChannel.Type == channels.ChannelTypeLifecycle {
deploymentEnvironmentIDs, err = selectDeploymentEnvironmentsForLifecycleChannel(octopus, stdout, asker, options, selectedRelease, isTenanted)
deploymentEnvironmentIDs, err = SelectDeploymentEnvironmentsForLifecycleChannel(octopus, stdout, asker, options, selectedRelease, isTenanted)
if err != nil {
return err
}
} else if selectedChannel.Type == channels.ChannelTypeEphemeral {
deploymentEnvironmentIDs, err = selectDeploymentEnvironmentsForEphemeralChannel(octopus, stdout, asker, options, selectedRelease)
deploymentEnvironmentIDs, err = SelectDeploymentEnvironmentsForEphemeralChannel(octopus, stdout, asker, options, selectedRelease)
if err != nil {
return err
}
Expand All @@ -483,7 +483,7 @@ func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker ques

deploymentEnvironmentIDs = util.SliceTransform(selectedEnvironments, func(env *environments.Environment) string { return env.ID })
} else if selectedChannel.Type == channels.ChannelTypeEphemeral {
deploymentEnvironmentIDs, err = findEphemeralEnvironmentIDs(octopus, space, options.Environments)
deploymentEnvironmentIDs, err = FindEphemeralEnvironmentIDs(octopus, space, options.Environments)

if err != nil {
return err
Expand All @@ -502,7 +502,7 @@ func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker ques
deploymentPreviewRequests = append(deploymentPreviewRequests, preview)
}

options.Variables, err = askDeploymentPreviewVariables(octopus, options.Variables, asker, space.ID, selectedRelease.ID, deploymentPreviewRequests)
options.Variables, err = AskDeploymentPreviewVariables(octopus, options.Variables, asker, space.ID, selectedRelease.ID, deploymentPreviewRequests)
if err != nil {
return err
}
Expand Down Expand Up @@ -614,7 +614,7 @@ func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker ques
}
deploymentEnvironmentIDs = util.SliceTransform(selectedEnvironments, func(env *environments.Environment) string { return env.ID })
}
options.DeploymentTargets, err = askDeploymentTargets(octopus, asker, space.ID, selectedRelease.ID, deploymentEnvironmentIDs)
options.DeploymentTargets, err = AskDeploymentTargets(octopus, asker, space.ID, selectedRelease.ID, deploymentEnvironmentIDs)
if err != nil {
return err
}
Expand All @@ -624,7 +624,7 @@ func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker ques
return nil
}

func findEphemeralEnvironmentIDs(octopus *octopusApiClient.Client, space *spaces.Space, environments []string) ([]string, error) {
func FindEphemeralEnvironmentIDs(octopus *octopusApiClient.Client, space *spaces.Space, environments []string) ([]string, error) {
allEphemeralEnvironments, err := ephemeralenvironments.GetAll(octopus, space.ID)
if err != nil {
return nil, err
Expand Down Expand Up @@ -656,7 +656,7 @@ func findEphemeralEnvironmentIDs(octopus *octopusApiClient.Client, space *spaces
return selectedEnvironments, nil
}

func selectDeploymentEnvironmentsForEphemeralChannel(octopus *octopusApiClient.Client, stdout io.Writer, asker question.Asker, options *executor.TaskOptionsDeployRelease, selectedRelease *releases.Release) ([]string, error) {
func SelectDeploymentEnvironmentsForEphemeralChannel(octopus *octopusApiClient.Client, stdout io.Writer, asker question.Asker, options *executor.TaskOptionsDeployRelease, selectedRelease *releases.Release) ([]string, error) {
var deploymentEnvironmentIds []string
var selectedEnvironments []*ephemeralenvironments.EphemeralEnvironment

Expand Down Expand Up @@ -687,7 +687,7 @@ func selectDeploymentEnvironmentsForEphemeralChannel(octopus *octopusApiClient.C
}

if len(availableEnvironments) > 0 {
selectedEnvironments, err = selectEphemeralDeploymentEnvironments(asker, availableEnvironments)
selectedEnvironments, err = SelectEphemeralDeploymentEnvironments(asker, availableEnvironments, "Select environment(s)")
if err != nil {
return nil, err
}
Expand All @@ -701,7 +701,7 @@ func selectDeploymentEnvironmentsForEphemeralChannel(octopus *octopusApiClient.C
return deploymentEnvironmentIds, nil
}

func selectDeploymentEnvironmentsForLifecycleChannel(octopus *octopusApiClient.Client, stdout io.Writer, asker question.Asker, options *executor.TaskOptionsDeployRelease, selectedRelease *releases.Release, isTenanted bool) ([]string, error) {
func SelectDeploymentEnvironmentsForLifecycleChannel(octopus *octopusApiClient.Client, stdout io.Writer, asker question.Asker, options *executor.TaskOptionsDeployRelease, selectedRelease *releases.Release, isTenanted bool) ([]string, error) {
var deploymentEnvironmentIds []string
var selectedEnvironments []*environments.Environment
var err error
Expand All @@ -713,7 +713,7 @@ func selectDeploymentEnvironmentsForLifecycleChannel(octopus *octopusApiClient.C
if err != nil {
return nil, err
}
selectedEnvironment, err = selectDeploymentEnvironment(asker, octopus, deployableEnvironmentIDs, nextEnvironmentID)
selectedEnvironment, err = SelectDeploymentEnvironment(asker, octopus, deployableEnvironmentIDs, nextEnvironmentID, "Select environment")
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -751,7 +751,7 @@ func selectDeploymentEnvironmentsForLifecycleChannel(octopus *octopusApiClient.C
if err != nil {
return nil, err
}
selectedEnvironments, err = selectDeploymentEnvironments(asker, octopus, deployableEnvironmentIDs, nextEnvironmentID)
selectedEnvironments, err = SelectDeploymentEnvironments(asker, octopus, deployableEnvironmentIDs, nextEnvironmentID, "Select environment(s)")
if err != nil {
return nil, err
}
Expand All @@ -766,15 +766,15 @@ func selectDeploymentEnvironmentsForLifecycleChannel(octopus *octopusApiClient.C
return deploymentEnvironmentIds, nil
}

func validateDeployment(isTenanted bool, environments []string) error {
func ValidateDeployment(isTenanted bool, environments []string) error {
if isTenanted && len(environments) > 1 {
return fmt.Errorf("tenanted deployments can only specify one environment")
}

return nil
}

func askDeploymentTargets(octopus *octopusApiClient.Client, asker question.Asker, spaceID string, releaseID string, deploymentEnvironmentIDs []string) ([]string, error) {
func AskDeploymentTargets(octopus *octopusApiClient.Client, asker question.Asker, spaceID string, releaseID string, deploymentEnvironmentIDs []string) ([]string, error) {
var results []string

// this is what the portal does. Can we do it better? I don't know
Expand Down Expand Up @@ -812,7 +812,7 @@ func askDeploymentTargets(octopus *octopusApiClient.Client, asker question.Asker
return nil, nil
}

func askDeploymentPreviewVariables(octopus *octopusApiClient.Client, variablesFromCmd map[string]string, asker question.Asker, spaceID string, releaseID string, deploymentPreviewsReqests []deployments.DeploymentPreviewRequest) (map[string]string, error) {
func AskDeploymentPreviewVariables(octopus *octopusApiClient.Client, variablesFromCmd map[string]string, asker question.Asker, spaceID string, releaseID string, deploymentPreviewsReqests []deployments.DeploymentPreviewRequest) (map[string]string, error) {
previews, err := deployments.GetReleaseDeploymentPreviews(octopus, spaceID, releaseID, deploymentPreviewsReqests, true)
if err != nil {
return nil, err
Expand Down Expand Up @@ -868,7 +868,7 @@ func askDeploymentPreviewVariables(octopus *octopusApiClient.Client, variablesFr
return result, nil
}

func promptMissingPackages(octopus *octopusApiClient.Client, stdout io.Writer, asker question.Asker, release *releases.Release) bool {
func PromptMissingPackages(octopus *octopusApiClient.Client, stdout io.Writer, asker question.Asker, release *releases.Release) bool {
missingPackages, err := releases.GetMissingPackages(octopus, release)
if err != nil {
// We don't want to prevent deployments from going through because of this check
Expand Down Expand Up @@ -952,7 +952,7 @@ func loadEnvironmentsForDeploy(octopus *octopusApiClient.Client, deployableEnvir
return allEnvs, nextDeployEnvironmentName, nil
}

func selectDeploymentEnvironment(asker question.Asker, octopus *octopusApiClient.Client, deployableEnvironmentIDs []string, nextDeployEnvironmentID string) (*environments.Environment, error) {
func SelectDeploymentEnvironment(asker question.Asker, octopus *octopusApiClient.Client, deployableEnvironmentIDs []string, nextDeployEnvironmentID string, message string) (*environments.Environment, error) {
allEnvs, nextDeployEnvironmentName, err := loadEnvironmentsForDeploy(octopus, deployableEnvironmentIDs, nextDeployEnvironmentID)
if err != nil {
return nil, err
Expand All @@ -961,7 +961,7 @@ func selectDeploymentEnvironment(asker question.Asker, octopus *octopusApiClient
optionMap, options := question.MakeItemMapAndOptions(allEnvs, func(e *environments.Environment) string { return e.Name })
var selectedKey string
err = asker(&survey.Select{
Message: "Select environment",
Message: message,
Options: options,
Default: nextDeployEnvironmentName,
}, &selectedKey)
Expand All @@ -975,12 +975,12 @@ func selectDeploymentEnvironment(asker question.Asker, octopus *octopusApiClient
return selectedValue, nil
}

func selectEphemeralDeploymentEnvironments(asker question.Asker, deployableEnvironments []*ephemeralenvironments.EphemeralEnvironment) ([]*ephemeralenvironments.EphemeralEnvironment, error) {
func SelectEphemeralDeploymentEnvironments(asker question.Asker, deployableEnvironments []*ephemeralenvironments.EphemeralEnvironment, message string) ([]*ephemeralenvironments.EphemeralEnvironment, error) {
var err error
optionMap, options := question.MakeItemMapAndOptions(deployableEnvironments, func(e *ephemeralenvironments.EphemeralEnvironment) string { return e.Name })
var selectedKeys []string
err = asker(&survey.MultiSelect{
Message: "Select environment(s)",
Message: message,
Options: options,
Default: nil,
}, &selectedKeys, survey.WithValidator(survey.Required))
Expand All @@ -997,7 +997,7 @@ func selectEphemeralDeploymentEnvironments(asker question.Asker, deployableEnvir
return selectedValues, nil
}

func selectDeploymentEnvironments(asker question.Asker, octopus *octopusApiClient.Client, deployableEnvironmentIDs []string, nextDeployEnvironmentID string) ([]*environments.Environment, error) {
func SelectDeploymentEnvironments(asker question.Asker, octopus *octopusApiClient.Client, deployableEnvironmentIDs []string, nextDeployEnvironmentID string, message string) ([]*environments.Environment, error) {
allEnvs, nextDeployEnvironmentName, err := loadEnvironmentsForDeploy(octopus, deployableEnvironmentIDs, nextDeployEnvironmentID)
if err != nil {
return nil, err
Expand All @@ -1006,7 +1006,7 @@ func selectDeploymentEnvironments(asker question.Asker, octopus *octopusApiClien
optionMap, options := question.MakeItemMapAndOptions(allEnvs, func(e *environments.Environment) string { return e.Name })
var selectedKeys []string
err = asker(&survey.MultiSelect{
Message: "Select environment(s)",
Message: message,
Options: options,
Default: []string{nextDeployEnvironmentName},
}, &selectedKeys, survey.WithValidator(survey.Required))
Expand Down Expand Up @@ -1093,7 +1093,7 @@ func selectRelease(octopus *octopusApiClient.Client, ask question.Asker, questio
// is to allow for graceful migrations of older projects, and we don't expect it to happen very often.
// We COULD do a little bit of a shortcut; if tenant is 'allowed but not required' but the project has no
// linked tenants, then it can't be tenanted, but is this worth the extra complexity? Decision: no
func determineIsTenanted(project *projects.Project, ask question.Asker) (bool, error) {
func DetermineIsTenanted(project *projects.Project, ask question.Asker) (bool, error) {
switch project.TenantedDeploymentMode {
case core.TenantedDeploymentModeUntenanted:
return false, nil
Expand Down
Loading