From daf8746f5da80a5227e52ac961a88bc7b7794335 Mon Sep 17 00:00:00 2001 From: Ivan Josipovic <9521987+IvanJosipovic@users.noreply.github.com> Date: Mon, 25 Aug 2025 17:27:05 -0700 Subject: [PATCH 1/3] fix: yaml byte[] output --- src/KubernetesClient/KubernetesYaml.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/KubernetesClient/KubernetesYaml.cs b/src/KubernetesClient/KubernetesYaml.cs index 7f677a3f2..f50e24a83 100644 --- a/src/KubernetesClient/KubernetesYaml.cs +++ b/src/KubernetesClient/KubernetesYaml.cs @@ -92,7 +92,14 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerializer serializer) { var obj = (byte[])value; - emitter?.Emit(new Scalar(Encoding.UTF8.GetString(obj))); + emitter.Emit(new Scalar( + AnchorName.Empty, + TagName.Empty, + Encoding.UTF8.GetString(obj), + ScalarStyle.Literal, // renders as | + true, + true + )); } } From 5a28f2d8e35d5e6dc4b0842f65c85e3ba15c222d Mon Sep 17 00:00:00 2001 From: Ivan Josipovic <9521987+IvanJosipovic@users.noreply.github.com> Date: Wed, 27 Aug 2025 10:33:05 -0700 Subject: [PATCH 2/3] chore: fix styling --- src/KubernetesClient/KubernetesYaml.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/KubernetesClient/KubernetesYaml.cs b/src/KubernetesClient/KubernetesYaml.cs index f50e24a83..beb22adf7 100644 --- a/src/KubernetesClient/KubernetesYaml.cs +++ b/src/KubernetesClient/KubernetesYaml.cs @@ -98,8 +98,7 @@ public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerialize Encoding.UTF8.GetString(obj), ScalarStyle.Literal, // renders as | true, - true - )); + true)); } } From 0d3745ad0667dbf19536a0ac34b03682a29912f9 Mon Sep 17 00:00:00 2001 From: Ivan Josipovic <9521987+IvanJosipovic@users.noreply.github.com> Date: Wed, 27 Aug 2025 12:03:26 -0700 Subject: [PATCH 3/3] chore: fix logic for single line values and add test --- src/KubernetesClient/KubernetesYaml.cs | 9 +++++-- .../KubernetesYamlTests.cs | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/KubernetesClient/KubernetesYaml.cs b/src/KubernetesClient/KubernetesYaml.cs index beb22adf7..e7134daa5 100644 --- a/src/KubernetesClient/KubernetesYaml.cs +++ b/src/KubernetesClient/KubernetesYaml.cs @@ -92,11 +92,16 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerializer serializer) { var obj = (byte[])value; + var strValue = Encoding.UTF8.GetString(obj); + + // Check if the string is multi-line by looking for a newline character. + var scalarStyle = strValue.Contains('\n') ? ScalarStyle.Literal : ScalarStyle.Any; + emitter.Emit(new Scalar( AnchorName.Empty, TagName.Empty, - Encoding.UTF8.GetString(obj), - ScalarStyle.Literal, // renders as | + strValue, + scalarStyle, true, true)); } diff --git a/tests/KubernetesClient.Tests/KubernetesYamlTests.cs b/tests/KubernetesClient.Tests/KubernetesYamlTests.cs index 9f14f73af..29c3b0d53 100644 --- a/tests/KubernetesClient.Tests/KubernetesYamlTests.cs +++ b/tests/KubernetesClient.Tests/KubernetesYamlTests.cs @@ -817,6 +817,30 @@ public void LoadSecret() Assert.Equal("Mzk1MjgkdmRnN0pi", Encoding.UTF8.GetString(result.Data["password"])); } + [Fact] + public void WriteSecret() + { + var kManifest = """ +apiVersion: v1 +data: + username: bXktYXBw + tls2.crt: | + -----BEGIN CERTIFICATE----- + FAKE CERT + FAKE CERT + FAKE CERT + -----END CERTIFICATE----- +kind: Secret +metadata: + name: test-secret +"""; + + var result = KubernetesYaml.Deserialize(kManifest, true); + var yaml = KubernetesYaml.Serialize(result); + + Assert.Equal(kManifest, yaml); + } + [Fact] public void DeserializeWithJsonPropertyName() {