(opts *PreventOptions)
| 91 | } |
| 92 | |
| 93 | func 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 | } |
no test coverage detected