// Package cli provides the interface for the command-line. package cli import ( "fmt" "os" "coopcloud.tech/abra/cli/app" "coopcloud.tech/abra/cli/catalogue" "coopcloud.tech/abra/cli/recipe" "coopcloud.tech/abra/cli/server" logrus_stack "github.com/Gurpartap/logrus-stack" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) // Verbose stores the variable from VerboseFlag. var Verbose bool // VerboseFlag turns on/off verbose logging down to the INFO level. var VerboseFlag = &cli.BoolFlag{ Name: "verbose", Aliases: []string{"V"}, Value: false, Destination: &Verbose, Usage: "Show INFO messages", } // Debug stores the variable from DebugFlag. var Debug bool // DebugFlag turns on/off verbose logging down to the DEBUG level. var DebugFlag = &cli.BoolFlag{ Name: "debug", Aliases: []string{"d"}, Value: false, Destination: &Debug, Usage: "Show DEBUG messages", } // RunApp runs CLI abra app. func RunApp(version, commit string) { app := &cli.App{ Name: "abra", Usage: `The Co-op Cloud command-line utility belt 🎩🐇 ____ ____ _ _ / ___|___ ___ _ __ / ___| | ___ _ _ __| | | | / _ \ _____ / _ \| '_ \ | | | |/ _ \| | | |/ _' | | |__| (_) |_____| (_) | |_) | | |___| | (_) | |_| | (_| | \____\___/ \___/| .__/ \____|_|\___/ \__,_|\__,_| |_| `, Version: fmt.Sprintf("%s-%s", version, commit[:7]), Commands: []*cli.Command{ app.AppCommand, server.ServerCommand, recipe.RecipeCommand, catalogue.CatalogueCommand, VersionCommand, UpgradeCommand, }, Flags: []cli.Flag{ VerboseFlag, DebugFlag, }, Authors: []*cli.Author{ { Name: "Autonomic Co-op", Email: "helo@autonomic.zone", }, }, } app.EnableBashCompletion = true app.Before = func(c *cli.Context) error { if Debug { logrus.SetLevel(logrus.DebugLevel) logrus.SetFormatter(&logrus.TextFormatter{}) logrus.SetOutput(os.Stderr) logrus.AddHook(logrus_stack.StandardHook()) } return nil } logrus.Debugf("Flying abra version '%s', commit '%s', enjoy the ride", version, commit) if err := app.Run(os.Args); err != nil { logrus.Fatal(err) } }