github.com/omnigres/cli@v0.1.4/orb/config.go (about)

     1  package orb
     2  
     3  import (
     4  	"errors"
     5  	"github.com/charmbracelet/log"
     6  	"github.com/omnigres/cli/internal/fileutils"
     7  	"github.com/spf13/viper"
     8  	"os"
     9  	"path/filepath"
    10  )
    11  
    12  type Config struct {
    13  	Orbs  []OrbCfg
    14  	Image ImageConfig
    15  	path  string
    16  }
    17  
    18  type OrbCfg struct {
    19  	Name       string
    20  	Extensions []string
    21  }
    22  
    23  type ImageConfig struct {
    24  	Name   string
    25  	Digest string `mapstructure:",omitempty"`
    26  }
    27  
    28  func NewConfig() *Config {
    29  	return &Config{Image: ImageConfig{Name: "ghcr.io/omnigres/omnigres-17"}}
    30  }
    31  
    32  func (c *Config) Save() (err error) {
    33  	if c.path != "" {
    34  		c.SaveAs(c.path)
    35  	} else {
    36  		err = errors.New("Config has no path")
    37  	}
    38  	return
    39  }
    40  func (c *Config) SaveAs(path string) (err error) {
    41  	v := viper.New()
    42  	v.SetConfigName("omnigres")
    43  	v.SetConfigType("yaml")
    44  	v.AddConfigPath(path)
    45  
    46  	v.Set("orbs", c.Orbs)
    47  	v.Set("image", c.Image)
    48  
    49  	err = fileutils.CreateIfNotExists(filepath.Join(path, "omnigres.yaml"), false)
    50  	if err != nil {
    51  		return
    52  	}
    53  
    54  	err = v.WriteConfig()
    55  	if err != nil {
    56  		return
    57  	}
    58  	return
    59  }
    60  
    61  func LoadConfig(path string) (cfg *Config, err error) {
    62  	v := viper.New()
    63  	configPath := filepath.Join(path, "omnigres.yaml")
    64  	log.Debug("Loading config", "path", configPath)
    65  	v.SetConfigFile(configPath)
    66  	err = v.ReadInConfig()
    67  	if err != nil {
    68  		if _, ok := err.(*os.PathError); ok {
    69  			log.Debug("Creating blank config")
    70  			cfg = NewConfig()
    71  			err = nil
    72  			return
    73  		}
    74  		return
    75  	}
    76  
    77  	cfg = NewConfig()
    78  	cfg.path = path
    79  	err = v.Unmarshal(cfg)
    80  	if err != nil {
    81  		return
    82  	}
    83  	return
    84  }