fix(11-04): keep earlier overrides when compass Persist saves
Persist rewrote overrides.yaml with only this process's runtime values, so saving one key (for example websockets:generate-vapid-keys --update) dropped every key persisted earlier. It now starts from the saved file and lets runtime values win.
This commit is contained in:
@@ -27,7 +27,8 @@ func (c *Config) Set(path string, value any) error {
|
||||
}
|
||||
|
||||
// Persist writes runtime overrides to config/env/<env>/overrides.yaml
|
||||
// using an atomic replace and restrictive file permissions.
|
||||
// using an atomic replace and restrictive file permissions. Keys already in
|
||||
// the file are kept; a runtime value replaces the saved value of its key.
|
||||
func (c *Config) Persist() error {
|
||||
if c == nil {
|
||||
return fmt.Errorf("compass: config is nil")
|
||||
@@ -48,9 +49,20 @@ func (c *Config) Persist() error {
|
||||
if err := os.MkdirAll(destDir, 0o700); err != nil {
|
||||
return fmt.Errorf("compass: create overrides dir: %w", err)
|
||||
}
|
||||
raw := []byte("{}\n")
|
||||
// Start from the values persisted earlier, so saving one runtime value
|
||||
// never drops another key from the file; runtime values win.
|
||||
merged := koanf.New(".")
|
||||
if err := loadOverrides(merged, dest); err != nil {
|
||||
return err
|
||||
}
|
||||
if c.runtime != nil {
|
||||
body, err := c.runtime.Marshal(yaml.Parser())
|
||||
if err := merged.Merge(c.runtime); err != nil {
|
||||
return fmt.Errorf("compass: merge overrides: %w", err)
|
||||
}
|
||||
}
|
||||
raw := []byte("{}\n")
|
||||
if len(merged.Keys()) > 0 {
|
||||
body, err := merged.Marshal(yaml.Parser())
|
||||
if err != nil {
|
||||
return fmt.Errorf("compass: marshal overrides: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user