promptPresetSelection shows a CLI selection menu of the presets defined in the template version. Returns the selected preset
(inv *serpent.Invocation, presets []codersdk.Preset)
| 519 | // promptPresetSelection shows a CLI selection menu of the presets defined in the template version. |
| 520 | // Returns the selected preset |
| 521 | func promptPresetSelection(inv *serpent.Invocation, presets []codersdk.Preset) (*codersdk.Preset, error) { |
| 522 | presetMap := make(map[string]*codersdk.Preset) |
| 523 | var presetOptions []string |
| 524 | |
| 525 | for _, preset := range presets { |
| 526 | var option string |
| 527 | if preset.Description == "" { |
| 528 | option = preset.Name |
| 529 | } else { |
| 530 | option = fmt.Sprintf("%s: %s", preset.Name, preset.Description) |
| 531 | } |
| 532 | presetOptions = append(presetOptions, option) |
| 533 | presetMap[option] = &preset |
| 534 | } |
| 535 | |
| 536 | // Show selection UI |
| 537 | _, _ = fmt.Fprintln(inv.Stdout, pretty.Sprint(cliui.DefaultStyles.Wrap, "Select a preset below:")) |
| 538 | selected, err := cliui.Select(inv, cliui.SelectOptions{ |
| 539 | Options: presetOptions, |
| 540 | HideSearch: true, |
| 541 | }) |
| 542 | if err != nil { |
| 543 | return nil, xerrors.Errorf("failed to select preset: %w", err) |
| 544 | } |
| 545 | |
| 546 | return presetMap[selected], nil |
| 547 | } |
| 548 | |
| 549 | // displayAppliedPreset shows the user which preset was applied and its parameters |
| 550 | func displayAppliedPreset(inv *serpent.Invocation, preset *codersdk.Preset, parameters []codersdk.WorkspaceBuildParameter) { |