4727a5df25e7347ae93a746594e3d68fd624a1f8

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix(config): mkdir before writing config

Diff

 1diff --git a/server/config/config.go b/server/config/config.go
 2index b0d74a041a5c5263feb73374b28df0dfb068208e..1418e4b8b938d976d22caa7a33d81647d110a758 100644
 3--- a/server/config/config.go
 4+++ b/server/config/config.go
 5@@ -125,6 +125,9 @@ func ParseConfig(path string) (*Config, error) {
 6 
 7 // WriteConfig writes the configuration to the given file.
 8 func WriteConfig(path string, cfg *Config) error {
 9+	if err := os.MkdirAll(filepath.Dir(path), 0o700); err != nil {
10+		return err
11+	}
12 	return os.WriteFile(path, []byte(newConfigFile(cfg)), 0o600) // nolint: errcheck
13 }
14 
15@@ -162,6 +165,7 @@ func DefaultConfig() *Config {
16 			ListenAddr: ":8081",
17 		},
18 	}
19+
20 	cp := filepath.Join(cfg.DataPath, "config.yaml")
21 	f, err := os.Open(cp)
22 	if err == nil {
23@@ -169,18 +173,22 @@ func DefaultConfig() *Config {
24 		if err := yaml.NewDecoder(f).Decode(cfg); err != nil {
25 			log.Error("failed to decode config", "err", err)
26 		}
27-	} else {
28-		defer func() {
29-			os.WriteFile(cp, []byte(newConfigFile(cfg)), 0o600) // nolint: errcheck
30-		}()
31 	}
32 
33+	// Override with environment variables
34 	if err := env.Parse(cfg, env.Options{
35 		Prefix: "SOFT_SERVE_",
36 	}); err != nil {
37 		log.Fatal(err)
38 	}
39 
40+	// Write config if it doesn't exist
41+	if _, err := os.Stat(cp); os.IsNotExist(err) {
42+		if err := WriteConfig(cp, cfg); err != nil {
43+			log.Fatal("failed to write config", "err", err)
44+		}
45+	}
46+
47 	if err := cfg.init(); err != nil {
48 		log.Fatal(err)
49 	}