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 }