diff --git a/cmd/release_config/build_flag/main.go b/cmd/release_config/build_flag/main.go index f74784bd8..e18044b4e 100644 --- a/cmd/release_config/build_flag/main.go +++ b/cmd/release_config/build_flag/main.go @@ -278,6 +278,23 @@ func SetCommand(configs *rc_lib.ReleaseConfigs, commonFlags Flags, cmd string, a valueDir = mapDir } + var updatedFiles []string + rcPath := filepath.Join(valueDir, "release_configs", fmt.Sprintf("%s.textproto", targetRelease)) + // Create the release config declaration only if necessary. + if _, err = os.Stat(rcPath); err != nil { + if err = os.MkdirAll(filepath.Dir(rcPath), 0775); err != nil { + return err + } + rcValue := &rc_proto.ReleaseConfig{ + Name: proto.String(targetRelease), + } + err = rc_lib.WriteMessage(rcPath, rcValue) + if err != nil { + return err + } + updatedFiles = append(updatedFiles, rcPath) + } + flagValue := &rc_proto.FlagValue{ Name: proto.String(name), Value: rc_lib.UnmarshalValue(value), @@ -297,7 +314,8 @@ func SetCommand(configs *rc_lib.ReleaseConfigs, commonFlags Flags, cmd string, a if err != nil { return err } - fmt.Printf("Updated: %s\n", flagPath) + updatedFiles = append(updatedFiles, flagPath) + fmt.Printf("Added/Updated: %s\n", strings.Join(updatedFiles, " ")) return nil } diff --git a/cmd/release_config/release_config_lib/util.go b/cmd/release_config/release_config_lib/util.go index b8824d19c..0a19efe01 100644 --- a/cmd/release_config/release_config_lib/util.go +++ b/cmd/release_config/release_config_lib/util.go @@ -83,6 +83,11 @@ func WriteMessage(path string, message proto.Message) (err error) { // error: any error encountered. func WriteFormattedMessage(path, format string, message proto.Message) (err error) { var data []byte + if _, err := os.Stat(filepath.Dir(path)); err != nil { + if err = os.MkdirAll(filepath.Dir(path), 0775); err != nil { + return err + } + } switch format { case "json": data, err = json.MarshalIndent(message, "", " ")