MCPcopy Create free account
hub / github.com/OctopusDeploy/cli / createReleaseDefectRun

Function createReleaseDefectRun

pkg/cmd/release/progression/prevent/prevent.go:93–153  ·  view source on GitHub ↗
(opts *PreventOptions)

Source from the content-addressed store, hash-verified

91}
92
93func createReleaseDefectRun(opts *PreventOptions) error {
94 if !opts.NoPrompt {
95 if err := PromptMissing(opts); err != nil {
96 return err
97 }
98 }
99
100 var err error
101 opts.ReleaseID, err = shared.GetReleaseID(opts.Client, opts.Client.GetSpaceID(), opts.Project.Value, opts.Version.Value)
102 if err != nil {
103 return err
104 }
105
106 existingDefects, err := defects.GetAll(opts.Client, opts.Client.GetSpaceID(), opts.ReleaseID)
107 if err != nil {
108 return err
109 }
110
111 isReleasePreventedToProgressAlready := util.SliceContainsAny(existingDefects, func(item *defects.Defect) bool {
112 return item.Status == defects.DefectStatusUnresolved
113 })
114
115 if isReleasePreventedToProgressAlready {
116 _, _ = fmt.Fprintf(opts.Out, "Release with version/release number '%s' (%s) is already prevented from progressing to the next phase.\n", opts.Version.Value, output.Dim(opts.ReleaseID))
117 return nil
118 }
119
120 if opts.Reason.Value == "" {
121 if err := opts.Ask(&survey.Input{
122 Message: "Reason",
123 Help: "Reason to prevent this release from progressing to the next phase.",
124 }, &opts.Reason.Value, survey.WithValidator(survey.ComposeValidators(
125 survey.MinLength(1),
126 survey.Required,
127 ))); err != nil {
128 return err
129 }
130 }
131
132 createReleaseDefectCommand, err := defects.NewCreateReleaseDefectCommand(opts.ReleaseID, opts.Reason.Value)
133 if err != nil {
134 return err
135 }
136
137 _, err = defects.Create(opts.Client, opts.Client.GetSpaceID(), createReleaseDefectCommand)
138 if err != nil {
139 return err
140 }
141
142 _, err = fmt.Fprintf(opts.Out, "Successfully prevented progression for release %s (%s) in project %s", opts.Version.Value, output.Dim(opts.ReleaseID), opts.Project.Value)
143 if err != nil {
144 return err
145 }
146
147 if !opts.NoPrompt {
148 autoCmd := flag.GenerateAutomationCmd(opts.CmdPath, opts.GetSpaceNameOrEmpty(), opts.Project, opts.Version, opts.Reason)
149 _, _ = fmt.Fprintf(opts.Out, "\nAutomation Command: %s\n", autoCmd)
150 }

Callers 1

NewCmdPreventFunction · 0.85

Calls 7

GetReleaseIDFunction · 0.92
SliceContainsAnyFunction · 0.92
DimFunction · 0.92
GenerateAutomationCmdFunction · 0.92
GetSpaceNameOrEmptyMethod · 0.80
PromptMissingFunction · 0.70
AskMethod · 0.65

Tested by

no test coverage detected