| 374 | } |
| 375 | |
| 376 | func AskQuestions(octopus *octopusApiClient.Client, stdout io.Writer, asker question.Asker, space *spaces.Space, options *executor.TaskOptionsDeployRelease, now func() time.Time) error { |
| 377 | if octopus == nil { |
| 378 | return cliErrors.NewArgumentNullOrEmptyError("octopus") |
| 379 | } |
| 380 | if asker == nil { |
| 381 | return cliErrors.NewArgumentNullOrEmptyError("asker") |
| 382 | } |
| 383 | if options == nil { |
| 384 | return cliErrors.NewArgumentNullOrEmptyError("options") |
| 385 | } |
| 386 | // Note: we don't get here at all if no-prompt is enabled, so we know we are free to ask questions |
| 387 | |
| 388 | // Note on output: survey prints things; if the option is specified already from the command line, |
| 389 | // we should emulate that so there is always a line where you can see what the item was when specified on the command line, |
| 390 | // however if we support a "quiet mode" then we shouldn't emit those |
| 391 | |
| 392 | var err error |
| 393 | |
| 394 | // select project |
| 395 | var selectedProject *projects.Project |
| 396 | if options.ProjectName == "" { |
| 397 | selectedProject, err = selectors.Project("Select project", octopus, asker) |
| 398 | if err != nil { |
| 399 | return err |
| 400 | } |
| 401 | } else { // project name is already provided, fetch the object because it's needed for further questions |
| 402 | selectedProject, err = selectors.FindProject(octopus, options.ProjectName) |
| 403 | if err != nil { |
| 404 | return err |
| 405 | } |
| 406 | _, _ = fmt.Fprintf(stdout, "Project %s\n", output.Cyan(selectedProject.Name)) |
| 407 | } |
| 408 | options.ProjectName = selectedProject.Name |
| 409 | |
| 410 | isTenanted, err := determineIsTenanted(selectedProject, asker) |
| 411 | if err != nil { |
| 412 | return err |
| 413 | } |
| 414 | |
| 415 | err = validateDeployment(isTenanted, options.Environments) |
| 416 | if err != nil { |
| 417 | return err |
| 418 | } |
| 419 | |
| 420 | // select release |
| 421 | |
| 422 | var selectedRelease *releases.Release |
| 423 | var selectedChannel *channels.Channel |
| 424 | if options.ReleaseVersion == "" { |
| 425 | // first we want to ask them to pick a channel just to narrow down the search space for releases (not sent to server) |
| 426 | selectedChannel, err = selectors.Channel(octopus, asker, stdout, "Select channel", selectedProject) |
| 427 | if err != nil { |
| 428 | return err |
| 429 | } |
| 430 | selectedRelease, err = selectRelease(octopus, asker, "Select a release to deploy", space, selectedProject, selectedChannel) |
| 431 | if err != nil { |
| 432 | return err |
| 433 | } |