diff --git a/.github/workflows/buildtest.yaml b/.github/workflows/buildtest.yaml index 5a42247a..1870d99e 100644 --- a/.github/workflows/buildtest.yaml +++ b/.github/workflows/buildtest.yaml @@ -12,7 +12,7 @@ jobs: with: fetch-depth: 0 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | 8.0.x @@ -48,7 +48,7 @@ jobs: - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v2 - name: Setup dotnet SDK - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: '9.0.x' - name: Restore nugets (msbuild) @@ -63,7 +63,7 @@ jobs: with: fetch-depth: 0 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | 8.0.x diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6e43f5b7..2a4c6568 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: fetch-depth: 0 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | 8.0.x diff --git a/.github/workflows/docfx.yaml b/.github/workflows/docfx.yaml index 7fefb65c..3eec06ec 100644 --- a/.github/workflows/docfx.yaml +++ b/.github/workflows/docfx.yaml @@ -30,7 +30,7 @@ jobs: fetch-depth: 0 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | 8.0.x diff --git a/.github/workflows/draft.yaml b/.github/workflows/draft.yaml index b7a13bb9..01b09851 100644 --- a/.github/workflows/draft.yaml +++ b/.github/workflows/draft.yaml @@ -18,7 +18,7 @@ jobs: fetch-depth: 0 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | 8.0.x diff --git a/.github/workflows/nuget.yaml b/.github/workflows/nuget.yaml index f2936156..fa654822 100644 --- a/.github/workflows/nuget.yaml +++ b/.github/workflows/nuget.yaml @@ -15,7 +15,7 @@ jobs: fetch-depth: 0 - name: Setup dotnet - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v5 with: dotnet-version: | 8.0.x diff --git a/src/KubernetesClient/KubernetesYaml.cs b/src/KubernetesClient/KubernetesYaml.cs index e7134daa..84feb358 100644 --- a/src/KubernetesClient/KubernetesYaml.cs +++ b/src/KubernetesClient/KubernetesYaml.cs @@ -78,7 +78,7 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria return null; } - return Encoding.UTF8.GetBytes(scalar.Value); + return Convert.FromBase64String(scalar.Value); } finally { @@ -91,19 +91,15 @@ public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeseria public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerializer serializer) { + if (value == null) + { + emitter.Emit(new Scalar(string.Empty)); + return; + } + 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, - strValue, - scalarStyle, - true, - true)); + var encoded = Convert.ToBase64String(obj); + emitter.Emit(new Scalar(encoded)); } } diff --git a/tests/KubernetesClient.Tests/KubernetesYamlTests.cs b/tests/KubernetesClient.Tests/KubernetesYamlTests.cs index 29c3b0d5..19b03fda 100644 --- a/tests/KubernetesClient.Tests/KubernetesYamlTests.cs +++ b/tests/KubernetesClient.Tests/KubernetesYamlTests.cs @@ -804,12 +804,12 @@ public void LoadSecret() { var kManifest = @" apiVersion: v1 +data: + username: YlhrdFlYQnc= + password: TXprMU1qZ2tkbVJuTjBwaQ== kind: Secret metadata: name: test-secret -data: - username: bXktYXBw - password: Mzk1MjgkdmRnN0pi "; var result = KubernetesYaml.Deserialize(kManifest, true); @@ -823,13 +823,8 @@ public void WriteSecret() var kManifest = """ apiVersion: v1 data: - username: bXktYXBw - tls2.crt: | - -----BEGIN CERTIFICATE----- - FAKE CERT - FAKE CERT - FAKE CERT - -----END CERTIFICATE----- + username: YlhrdFlYQnc= + password: TXprMU1qZ2tkbVJuTjBwaQ== kind: Secret metadata: name: test-secret @@ -841,6 +836,45 @@ FAKE CERT Assert.Equal(kManifest, yaml); } + [Fact] + public void LoadConfigMap() + { + var kManifest = @" +apiVersion: v1 +binaryData: + username: YlhrdFlYQnc= +data: + password: Mzk1MjgkdmRnN0pi +kind: ConfigMap +metadata: + name: test-configmap +"; + + var result = KubernetesYaml.Deserialize(kManifest, true); + Assert.Equal("bXktYXBw", Encoding.UTF8.GetString(result.BinaryData["username"])); + Assert.Equal("Mzk1MjgkdmRnN0pi", result.Data["password"]); + } + + [Fact] + public void WriteConfigMap() + { + var kManifest = """ +apiVersion: v1 +binaryData: + username: YlhrdFlYQnc= +data: + password: Mzk1MjgkdmRnN0pi +kind: ConfigMap +metadata: + name: test-configmap +"""; + + var result = KubernetesYaml.Deserialize(kManifest, true); + var yaml = KubernetesYaml.Serialize(result); + + Assert.Equal(kManifest, yaml); + } + [Fact] public void DeserializeWithJsonPropertyName() {