// Copyright © 2019 Ettore Di Giacinto // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see . package cmd import ( "os" "path" "path/filepath" . "github.com/mudler/luet/pkg/logger" "github.com/spf13/cobra" "github.com/spf13/viper" ) var cfgFile string var Verbose bool const LuetCLIVersion = "0.1" // RootCmd represents the base command when called without any subcommands var RootCmd = &cobra.Command{ Use: "luet", Short: "Package manager for the XXth century!", Long: `Package manager which uses containers to build packages`, Version: LuetCLIVersion, } // Execute adds all child commands to the root command sets flags appropriately. // This is called by main.main(). It only needs to happen once to the rootCmd. func Execute() { if err := RootCmd.Execute(); err != nil { Error(err) os.Exit(-1) } } func init() { cobra.OnInitialize(initConfig) RootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.luet.yaml)") RootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output") } // initConfig reads in config file and ENV variables if set. func initConfig() { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { Error(err) os.Exit(1) } viper.SetConfigName(".luet") // name of config file (without extension) if cfgFile != "" { // enable ability to specify config file via flag Info(">>> cfgFile: ", cfgFile) viper.SetConfigFile(cfgFile) configDir := path.Dir(cfgFile) if configDir != "." && configDir != dir { viper.AddConfigPath(configDir) } } viper.AddConfigPath(dir) viper.AddConfigPath(".") viper.AddConfigPath("$HOME") viper.AutomaticEnv() // read in environment variables that match // If a config file is found, read it in. if err := viper.ReadInConfig(); err == nil { Info("Using config file:", viper.ConfigFileUsed()) } else { Warning(err) } }