From 04ec28993e4229da8ae1ebb9997c7fd72ca77a2d Mon Sep 17 00:00:00 2001 From: yxxhero Date: Thu, 15 May 2025 08:55:28 +0800 Subject: [PATCH] refactor(yaml): enhance yaml encoding with consistent formatting and quotes Signed-off-by: yxxhero --- pkg/tmpl/context_funcs_test.go | 2 +- pkg/yaml/yaml.go | 50 ++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/pkg/tmpl/context_funcs_test.go b/pkg/tmpl/context_funcs_test.go index 9ce3fa49..377aa916 100644 --- a/pkg/tmpl/context_funcs_test.go +++ b/pkg/tmpl/context_funcs_test.go @@ -196,7 +196,7 @@ func TestToYaml(t *testing.T) { // https://github.com/helmfile/helmfile/issues/2024 name: "test unmarshalling issue 2024", input: map[string]any{"thisShouldBeString": "01234567890123456789"}, - expected: `'thisShouldBeString': '01234567890123456789' + expected: `thisShouldBeString: "01234567890123456789" `, }, { diff --git a/pkg/yaml/yaml.go b/pkg/yaml/yaml.go index 8dd02752..7acc09a4 100644 --- a/pkg/yaml/yaml.go +++ b/pkg/yaml/yaml.go @@ -21,15 +21,37 @@ func NewEncoder(w io.Writer) Encoder { return yaml.NewEncoder(w) } - return v3.NewEncoder(w) + v3Encoder := v3.NewEncoder(w) + v3Encoder.SetIndent(2) + return v3Encoder } -func Unmarshal(data []byte, v any) error { +func Marshal(v any) ([]byte, error) { + var b bytes.Buffer if runtime.GoccyGoYaml { - return yaml.Unmarshal(data, v) + yamlEncoderOpts := []yaml.EncodeOption{ + yaml.Indent(2), + yaml.UseSingleQuote(true), + yaml.UseLiteralStyleIfMultiline(true), + } + yamlEncoder := yaml.NewEncoder( + &b, + yamlEncoderOpts..., + ) + err := yamlEncoder.Encode(v) + defer func() { + _ = yamlEncoder.Close() + }() + return b.Bytes(), err } - return v3.Unmarshal(data, v) + v3Encoder := v3.NewEncoder(&b) + v3Encoder.SetIndent(2) + err := v3Encoder.Encode(v) + defer func() { + _ = v3Encoder.Close() + }() + return b.Bytes(), err } // NewDecoder creates and returns a function that is used to decode a YAML document @@ -63,24 +85,10 @@ func NewDecoder(data []byte, strict bool) func(any) error { } } -func Marshal(v any) ([]byte, error) { +func Unmarshal(data []byte, v any) error { if runtime.GoccyGoYaml { - var b bytes.Buffer - yamlEncoderOpts := []yaml.EncodeOption{ - yaml.Indent(2), - yaml.UseSingleQuote(true), - yaml.UseLiteralStyleIfMultiline(true), - } - yamlEncoder := yaml.NewEncoder( - &b, - yamlEncoderOpts..., - ) - err := yamlEncoder.Encode(v) - defer func() { - _ = yamlEncoder.Close() - }() - return b.Bytes(), err + return yaml.Unmarshal(data, v) } - return v3.Marshal(v) + return v3.Unmarshal(data, v) }