Phase 4: Migrate multi-option Select prompts to huh

Overview

Migrate Select prompts with 3+ options.

Files (16 total)

  1. internal/commands/mr/merge/mr_merge.go:335 - 3 options
  2. internal/commands/ssh-key/delete/delete.go:136 - Dynamic SSH key list
  3. internal/commands/ssh-key/get/get.go:132 - SSH key list
  4. internal/commands/ci/ciutils/utils.go:267 - Job selection
  5. internal/commands/ci/status/status.go:138 - Job selection
  6. internal/commands/issue/board/view/issue_board_view.go:261 - Board selection
  7. internal/commands/stack/navigate/stack_navigate.go:208 - Stack navigation
  8. 5 auth/login Select prompts

Key Improvement

Type-safe option mapping with huh:

// BEFORE: Manual map needed
keyOpts := make(map[string]int)
surveyOpts := []string{}
for _, key := range keys {
    keyOpts[key.Title] = key.ID
    surveyOpts = append(surveyOpts, key.Title)
}
var result string
prompt.AskOne(&survey.Select{Options: surveyOpts}, &result)
selectedID := keyOpts[result]

// AFTER: Type-safe
options := []huh.Option[int]{}
for _, key := range keys {
    options = append(options, huh.NewOption(key.Title, key.ID))
}
var selectedID int
huh.NewSelect[int]().Options(options...).Value(&selectedID).Run()

Effort: 3-4 days

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information