package main import ( "context" "fmt" "os" "os/signal" "syscall" "github.com/spf13/cobra" "gitea.oblak.solutions/dimitar/gitFlow/internal/version" ) // newRootCmd builds the top-level gitflow command. func newRootCmd() *cobra.Command { root := &cobra.Command{ Use: "gitflow", Short: "Scan Git repositories and get suggested next steps", Long: `gitflow discovers every Git repository under a parent directory, scans each one's status, and presents the findings. It can rescan on a schedule and, when enabled, uses an AI agent to suggest next actions for repositories that need attention.`, SilenceUsage: true, SilenceErrors: true, } root.AddCommand( newScanCmd(), newConfigCmd(), newVersionCmd(), ) return root } // signalContext returns a context that is cancelled on SIGINT/SIGTERM so // scans and watch loops shut down gracefully. func signalContext() (context.Context, context.CancelFunc) { return signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) } // newVersionCmd prints the build version. func newVersionCmd() *cobra.Command { return &cobra.Command{ Use: "version", Short: "Print version information", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, _ []string) error { fmt.Printf("gitflow %s\n", version.Version) return nil }, } }