2026-01-20 10:03:55 +02:00

55 lines
1.5 KiB
Go

package upgrade
import (
"flag"
"fmt"
"os"
)
// Flags represents upgrade command flags
type Flags struct {
Force bool
RestartServices bool
NoPull bool
Branch string
}
// ParseFlags parses upgrade command flags
func ParseFlags(args []string) (*Flags, error) {
fs := flag.NewFlagSet("upgrade", flag.ContinueOnError)
fs.SetOutput(os.Stderr)
flags := &Flags{}
fs.BoolVar(&flags.Force, "force", false, "Reconfigure all settings")
fs.BoolVar(&flags.RestartServices, "restart", false, "Automatically restart services after upgrade")
fs.BoolVar(&flags.NoPull, "no-pull", false, "Skip git clone/pull, use existing /home/debros/src")
fs.StringVar(&flags.Branch, "branch", "", "Git branch to use (main or nightly, uses saved preference if not specified)")
// Support legacy flags for backwards compatibility
nightly := fs.Bool("nightly", false, "Use nightly branch (deprecated, use --branch nightly)")
main := fs.Bool("main", false, "Use main branch (deprecated, use --branch main)")
if err := fs.Parse(args); err != nil {
if err == flag.ErrHelp {
return nil, err
}
return nil, fmt.Errorf("failed to parse flags: %w", err)
}
// Handle legacy flags
if *nightly {
flags.Branch = "nightly"
}
if *main {
flags.Branch = "main"
}
// Validate branch if provided
if flags.Branch != "" && flags.Branch != "main" && flags.Branch != "nightly" {
return nil, fmt.Errorf("invalid branch: %s (must be 'main' or 'nightly')", flags.Branch)
}
return flags, nil
}