diff --git a/internal/cache/cache.go b/internal/cache/cache.go index 386f06e..5fa133c 100644 --- a/internal/cache/cache.go +++ b/internal/cache/cache.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "os" + "path/filepath" "time" ) @@ -44,6 +45,10 @@ func (c *FileCache) Write(in any) error { return err } + if err := os.MkdirAll(filepath.Dir(c.path), 0755); err != nil { + return err + } + return os.WriteFile(c.path, marshalled, 0644) } diff --git a/internal/cmd/config.go b/internal/cmd/config.go index 6311e3d..8ac3cff 100644 --- a/internal/cmd/config.go +++ b/internal/cmd/config.go @@ -26,12 +26,14 @@ func init() { rootCmd.AddCommand(configCmd) configCmd.Flags().BoolVarP(&editConfigFlag, "edit", "e", false, "Edit the config in $EDITOR") - configCmd.Flags().BoolVarP(&initConfigFlag, "init", "i", false, "Print the default config to stdout") + configCmd.Flags().BoolVarP(&initConfigFlag, "init", "i", false, "Create the default config file") } func runConfig(cmd *cobra.Command, args []string) error { if initConfigFlag { - return initConfig() + if err := initConfig(); err != nil { + return err + } } if editConfigFlag { @@ -50,15 +52,13 @@ func runConfig(cmd *cobra.Command, args []string) error { } func initConfig() error { - slog.Debug("printing config file", "path", configPathFlag) + slog.Debug("creating initial config file", "path", configPathFlag) - marshalled, err := yaml.Marshal(configPkg.Default()) - if err != nil { - slog.Error("Failed to marshall config", "err", err) + if err := configPkg.Default().Save(configPathFlag); err != nil { + slog.Error("Failed to save initial config", "err", err) return err } - - fmt.Printf("%s\n", marshalled) + fmt.Printf("Initial config saved to %s\n", configPathFlag) return nil } diff --git a/internal/cmd/root.go b/internal/cmd/root.go index 58afbb8..be5b725 100644 --- a/internal/cmd/root.go +++ b/internal/cmd/root.go @@ -74,8 +74,6 @@ func setupGlobals(cmd *cobra.Command, args []string) error { return err } - slog.Debug("config", "config", config) - var caller api.Caller if notificationDumpPath != "" { caller = file.New(notificationDumpPath) diff --git a/internal/config/config.go b/internal/config/config.go index 6eecc4b..4082568 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -31,6 +31,7 @@ import ( "log/slog" "os" "path" + "path/filepath" "gopkg.in/yaml.v3" ) @@ -87,9 +88,24 @@ func New(path string) (*Config, error) { return nil, err } + slog.Warn("config file found", "path", path) + if err := yaml.Unmarshal(content, config); err != nil { return nil, err } return config, nil } + +func (c *Config) Save(path string) error { + marshalled, err := yaml.Marshal(c) + if err != nil { + return err + } + + if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil { + return err + } + + return os.WriteFile(path, marshalled, 0644) +}