autorestic/cmd/root.go

93 lines
2.5 KiB
Go
Raw Permalink Normal View History

2021-04-09 01:55:10 +02:00
package cmd
import (
"os"
2021-10-06 15:50:23 +02:00
"path/filepath"
2022-02-16 21:28:13 +01:00
"strings"
2021-04-09 01:55:10 +02:00
"github.com/cupcakearmy/autorestic/internal"
2021-04-12 10:55:57 +02:00
"github.com/cupcakearmy/autorestic/internal/colors"
2022-02-16 21:42:54 +01:00
"github.com/cupcakearmy/autorestic/internal/flags"
"github.com/cupcakearmy/autorestic/internal/lock"
2021-04-09 01:55:10 +02:00
"github.com/spf13/cobra"
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
)
func CheckErr(err error) {
if err != nil {
2021-04-12 16:15:17 +02:00
colors.Error.Fprintln(os.Stderr, "Error:", err)
lock.Unlock()
os.Exit(1)
}
}
2021-04-09 01:55:10 +02:00
var cfgFile string
var rootCmd = &cobra.Command{
2021-04-11 13:04:11 +02:00
Version: internal.VERSION,
Use: "autorestic",
Short: "CLI Wrapper for restic",
2021-12-22 14:45:04 +01:00
Long: "Documentation:\thttps://autorestic.vercel.app\nSupport:\thttps://discord.gg/wS7RpYTYd2",
2021-04-09 01:55:10 +02:00
}
func Execute() {
CheckErr(rootCmd.Execute())
2021-04-09 01:55:10 +02:00
}
func init() {
2021-04-16 00:27:06 +02:00
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file (default is $HOME/.autorestic.yml or ./.autorestic.yml)")
2022-02-16 21:42:54 +01:00
rootCmd.PersistentFlags().BoolVar(&flags.CI, "ci", false, "CI mode disabled interactive mode and colors and enables verbosity")
rootCmd.PersistentFlags().BoolVarP(&flags.VERBOSE, "verbose", "v", false, "verbose mode")
rootCmd.PersistentFlags().StringVar(&flags.RESTIC_BIN, "restic-bin", "restic", "specify custom restic binary")
rootCmd.PersistentFlags().StringVar(&flags.DOCKER_IMAGE, "docker-image", "cupcakearmy/autorestic:"+internal.VERSION, "specify a custom docker image")
2021-04-12 16:15:17 +02:00
cobra.OnInitialize(initConfig)
2021-04-09 01:55:10 +02:00
}
func initConfig() {
2021-04-12 16:15:17 +02:00
if ci, _ := rootCmd.Flags().GetBool("ci"); ci {
colors.DisableColors(true)
2022-02-16 21:42:54 +01:00
flags.VERBOSE = true
2021-04-12 16:15:17 +02:00
}
2021-04-09 01:55:10 +02:00
if cfgFile != "" {
viper.SetConfigFile(cfgFile)
viper.AutomaticEnv()
if viper.ConfigFileUsed() == "" {
colors.Error.Printf("cannot read config file %s\n", cfgFile)
os.Exit(1)
}
2021-04-09 01:55:10 +02:00
} else {
configPaths := getConfigPaths()
for _, cfgPath := range configPaths {
viper.AddConfigPath(cfgPath)
}
2022-02-16 21:42:54 +01:00
if flags.VERBOSE {
2022-02-16 21:28:13 +01:00
colors.Faint.Printf("Using config paths: %s\n", strings.Join(configPaths, " "))
}
cfgFileName := ".autorestic"
viper.SetConfigName(cfgFileName)
viper.AutomaticEnv()
2021-04-09 01:55:10 +02:00
}
}
func getConfigPaths() []string {
result := []string{"."}
if home, err := homedir.Dir(); err == nil {
result = append(result, home)
}
{
xdgConfigHome, found := os.LookupEnv("XDG_CONFIG_HOME")
if !found {
if home, err := homedir.Dir(); err == nil {
xdgConfigHome = filepath.Join(home, ".config")
}
}
xdgConfig := filepath.Join(xdgConfigHome, "autorestic")
result = append(result, xdgConfig)
}
return result
}