Skip to content

Commit 38f9234

Browse files
committed
feat: update logic
Signed-off-by: Chen Keinan <hen.keinan@gmail.com>
1 parent 373d10d commit 38f9234

1 file changed

Lines changed: 67 additions & 57 deletions

File tree

pkg/cmd/release/promote/promote.go

Lines changed: 67 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -254,43 +254,16 @@ func promoteRun(cmd *cobra.Command, f factory.Factory, flags *PromoteFlags) erro
254254
}
255255
}
256256
} else {
257-
projectResource, err := proj.GetByName(octopus, f.GetCurrentSpace().Resource.ID, options.ProjectName)
257+
release, err := getPromotionReleaseVersion(octopus,
258+
f.GetCurrentSpace(),
259+
options.ProjectName,
260+
options.SourceEnvironment,
261+
options.LatestSuccessful)
258262
if err != nil {
259263
return err
260264
}
261-
environmentResource, err := env.Get(octopus, f.GetCurrentSpace().Resource.ID, env.EnvironmentsQuery{
262-
Name: options.SourceEnvironment,
263-
})
264-
if err != nil {
265-
return err
266-
}
267-
dashboardItem, err := dashboard.GetDynamicDashboardItem(octopus, f.GetCurrentSpace().Resource.ID, dashboard.DashboardDynamicQuery{
268-
Environments: []string{environmentResource.Items[0].ID},
269-
Projects: []string{projectResource.ID},
270-
IncludePrevious: options.LatestSuccessful,
271-
})
272-
if err != nil {
273-
return err
274-
}
275-
sort.Slice(dashboardItem.Items, func(i, j int) bool {
276-
return dashboardItem.Items[i].ReleaseVersion < dashboardItem.Items[j].ReleaseVersion
277-
})
278-
var version string
279-
if options.LatestSuccessful {
280-
for _, item := range dashboardItem.Items {
281-
if item.State == "Success" {
282-
version = item.ReleaseVersion
283-
break
284-
}
285-
}
286-
} else {
287-
version = dashboardItem.Items[0].ReleaseVersion
288-
}
289-
releaseResource, err := releases.GetReleaseInProject(octopus, f.GetCurrentSpace().Resource.ID, projectResource.ID, version)
290-
if err != nil {
291-
return err
292-
}
293-
options.ReleaseVersion = releaseResource.Version
265+
options.ReleaseVersion = release.Version
266+
options.ReleaseID = release.ID
294267
}
295268

296269
// the executor will raise errors if any required options are missing
@@ -399,30 +372,22 @@ func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker ques
399372
// Find release from source environment
400373
var selectedRelease *releases.Release
401374
var selectedChannel *channels.Channel
402-
if options.ReleaseVersion == "" {
403-
// Find release from source environment using dashboard API
404-
selectedRelease, err = findReleaseFromSourceEnvironment(octopus, space, selectedProject, options.SourceEnvironment, options.LatestSuccessful)
405-
if err != nil {
406-
return err
407-
}
408-
selectedChannel, err = channels.GetByID(octopus, space.ID, selectedRelease.ChannelID)
409-
if err != nil {
410-
return err
411-
}
412-
_, _ = fmt.Fprintf(stdout, "Release %s\n", output.Cyan(selectedRelease.Version))
413-
} else {
414-
selectedRelease, err = releases.GetReleaseInProject(octopus, space.ID, selectedProject.ID, options.ReleaseVersion)
415-
if err != nil {
416-
return err
417-
}
418-
selectedChannel, err = channels.GetByID(octopus, space.ID, selectedRelease.ChannelID)
419-
if err != nil {
420-
return err
421-
}
422-
_, _ = fmt.Fprintf(stdout, "Release %s\n", output.Cyan(selectedRelease.Version))
375+
376+
release, err := getPromotionReleaseVersion(octopus, space, selectedProject.Name, options.SourceEnvironment, options.LatestSuccessful)
377+
if err != nil {
378+
return err
423379
}
424-
options.ReleaseVersion = selectedRelease.Version
425-
options.ReleaseID = selectedRelease.ID
380+
if err != nil {
381+
return err
382+
}
383+
_, _ = fmt.Fprintf(stdout, "Release %s\n", output.Cyan(release.Version))
384+
selectedRelease = release
385+
selectedChannel, err = channels.GetByID(octopus, space.ID, selectedRelease.ChannelID)
386+
if err != nil {
387+
return err
388+
}
389+
options.ReleaseVersion = release.Version
390+
options.ReleaseID = release.ID
426391

427392
indicateMissingPackagesForReleaseFeatureToggleValue, err := featuretoggle.IsToggleEnabled(octopus, "indicate-missing-packages-for-release")
428393
if indicateMissingPackagesForReleaseFeatureToggleValue {
@@ -1124,3 +1089,48 @@ func determineIsTenanted(project *projects.Project, ask question.Asker) (bool, e
11241089
return false, fmt.Errorf("unhandled tenanted deployment mode %s", project.TenantedDeploymentMode)
11251090
}
11261091
}
1092+
1093+
func getPromotionReleaseVersion(octopus *octopusApiClient.Client,
1094+
space *spaces.Space,
1095+
projectName string,
1096+
sourceEnvironmentName string,
1097+
latestSuccessful bool) (*releases.Release, error) {
1098+
1099+
projectResource, err := proj.GetByName(octopus, space.Resource.ID, projectName)
1100+
if err != nil {
1101+
return nil, err
1102+
}
1103+
environmentResource, err := env.Get(octopus, space.Resource.ID, env.EnvironmentsQuery{
1104+
Name: sourceEnvironmentName,
1105+
})
1106+
if err != nil {
1107+
return nil, err
1108+
}
1109+
dashboardItem, err := dashboard.GetDynamicDashboardItem(octopus, space.Resource.ID, dashboard.DashboardDynamicQuery{
1110+
Environments: []string{environmentResource.Items[0].ID},
1111+
Projects: []string{projectResource.ID},
1112+
IncludePrevious: latestSuccessful,
1113+
})
1114+
if err != nil {
1115+
return nil, err
1116+
}
1117+
sort.Slice(dashboardItem.Items, func(i, j int) bool {
1118+
return dashboardItem.Items[i].ReleaseVersion < dashboardItem.Items[j].ReleaseVersion
1119+
})
1120+
var version string
1121+
if latestSuccessful {
1122+
for _, item := range dashboardItem.Items {
1123+
if item.State == "Success" {
1124+
version = item.ReleaseVersion
1125+
break
1126+
}
1127+
}
1128+
} else {
1129+
version = dashboardItem.Items[0].ReleaseVersion
1130+
}
1131+
releaseResource, err := releases.GetReleaseInProject(octopus, space.Resource.ID, projectResource.ID, version)
1132+
if err != nil {
1133+
return nil, err
1134+
}
1135+
return releaseResource, nil
1136+
}

0 commit comments

Comments
 (0)