diff --git a/.github/workflows/draft.yaml b/.github/workflows/draft.yaml index e946830..742a4bf 100644 --- a/.github/workflows/draft.yaml +++ b/.github/workflows/draft.yaml @@ -1,4 +1,4 @@ -name: Nuget +name: Draft Release on: push: @@ -35,13 +35,13 @@ jobs: - name: dotnet test run: dotnet test - - name: dotnet pack - run: dotnet pack -c Release src/KubernetesClient -o pkg --include-symbols + - uses: dotnet/nbgv@master + with: + setAllVars: true - name: create release shell: pwsh env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - $VERSION = Get-ChildItem -Path pkg/*.nupkg -Name | Select-String -Pattern '\d+.\d+.\d+' | foreach {$_.Matches.Value} - gh release create -d --generate-notes v$VERSION + gh release create -d --generate-notes v$env:NBGV_NuGetPackageVersion \ No newline at end of file diff --git a/.github/workflows/nuget.yaml b/.github/workflows/nuget.yaml index c5e167e..be09bc2 100644 --- a/.github/workflows/nuget.yaml +++ b/.github/workflows/nuget.yaml @@ -36,7 +36,7 @@ jobs: run: dotnet test - name: dotnet pack - run: dotnet pack -c Release src/KubernetesClient -o pkg --include-symbols + run: dotnet pack -c Release src/nuget.proj -o pkg --include-symbols - name: dotnet nuget push run: dotnet nuget push pkg\*.nupkg -s https://www.nuget.org/ -k ${{ secrets.nuget_api_key }} diff --git a/Directory.Build.props b/Directory.Build.props index a2a68f7..440a63a 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -5,4 +5,35 @@ true true + + + The Kubernetes Project Authors + 2017 The Kubernetes Project Authors + Client library for the Kubernetes open source container orchestrator. + + Apache-2.0 + https://github.com/kubernetes-client/csharp + https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.png + logo.png + kubernetes;docker;containers; + true + + + true + + + true + snupkg + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + 10.0 + + + + true + + + + + diff --git a/Directory.Build.targets b/Directory.Build.targets index ac1a4f0..c6cb986 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,12 +1,9 @@ - - All - - - - All - + + + + diff --git a/examples/attach/Attach.cs b/examples/attach/Attach.cs index d15d7fe..26aeb16 100755 --- a/examples/attach/Attach.cs +++ b/examples/attach/Attach.cs @@ -2,7 +2,6 @@ using System; using System.Threading.Tasks; using k8s; using k8s.Models; -using k8s.Autorest; namespace attach { diff --git a/examples/watch/Program.cs b/examples/watch/Program.cs index fff0bbb..d16a5fb 100644 --- a/examples/watch/Program.cs +++ b/examples/watch/Program.cs @@ -3,7 +3,6 @@ using System.Threading; using System.Threading.Tasks; using k8s; using k8s.Models; -using k8s.Autorest; namespace watch { diff --git a/examples/yaml/Program.cs b/examples/yaml/Program.cs index 06185f1..b15e295 100644 --- a/examples/yaml/Program.cs +++ b/examples/yaml/Program.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; using System.Threading.Tasks; using k8s; using k8s.Models; diff --git a/global.json b/global.json index 66e7197..125707b 100644 --- a/global.json +++ b/global.json @@ -3,5 +3,8 @@ "sdk": { "version": "6.0.100", "rollForward": "latestMajor" + }, + "msbuild-sdks": { + "Microsoft.Build.Traversal" : "3.1.6" } } diff --git a/kubernetes-client.sln b/kubernetes-client.sln index 2d7eec7..af88113 100644 --- a/kubernetes-client.sln +++ b/kubernetes-client.sln @@ -49,6 +49,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "prometheus", "examples\prom EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "yaml", "examples\yaml\yaml.csproj", "{17AB0AD8-6C90-42DD-880C-16B5AC4A373F}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KubernetesClient.Models", "src\KubernetesClient.Models\KubernetesClient.Models.csproj", "{F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KubernetesClient.Basic", "src\KubernetesClient.Basic\KubernetesClient.Basic.csproj", "{927995F5-05CC-4078-8805-8E6CC06914D8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -299,6 +303,30 @@ Global {17AB0AD8-6C90-42DD-880C-16B5AC4A373F}.Release|x64.Build.0 = Release|Any CPU {17AB0AD8-6C90-42DD-880C-16B5AC4A373F}.Release|x86.ActiveCfg = Release|Any CPU {17AB0AD8-6C90-42DD-880C-16B5AC4A373F}.Release|x86.Build.0 = Release|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Debug|x64.ActiveCfg = Debug|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Debug|x64.Build.0 = Debug|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Debug|x86.ActiveCfg = Debug|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Debug|x86.Build.0 = Debug|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Release|Any CPU.Build.0 = Release|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Release|x64.ActiveCfg = Release|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Release|x64.Build.0 = Release|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Release|x86.ActiveCfg = Release|Any CPU + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8}.Release|x86.Build.0 = Release|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Debug|x64.ActiveCfg = Debug|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Debug|x64.Build.0 = Debug|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Debug|x86.ActiveCfg = Debug|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Debug|x86.Build.0 = Debug|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Release|Any CPU.Build.0 = Release|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Release|x64.ActiveCfg = Release|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Release|x64.Build.0 = Release|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Release|x86.ActiveCfg = Release|Any CPU + {927995F5-05CC-4078-8805-8E6CC06914D8}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -324,6 +352,8 @@ Global {DFBB1025-BD22-459D-A04D-E2AB31E129E2} = {B70AFB57-57C9-46DC-84BE-11B7DDD34B40} {682B94E4-1761-48FF-B5D0-87B45DC0C735} = {B70AFB57-57C9-46DC-84BE-11B7DDD34B40} {17AB0AD8-6C90-42DD-880C-16B5AC4A373F} = {B70AFB57-57C9-46DC-84BE-11B7DDD34B40} + {F066A4D8-2EF0-4C07-AC0D-BD325DE3FFA8} = {3D1864AA-1FFC-4512-BB13-46055E410F73} + {927995F5-05CC-4078-8805-8E6CC06914D8} = {3D1864AA-1FFC-4512-BB13-46055E410F73} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {049A763A-C891-4E8D-80CF-89DD3E22ADC7} diff --git a/src/KubernetesClient.Basic/AbstractKubernetes.cs b/src/KubernetesClient.Basic/AbstractKubernetes.cs new file mode 100644 index 0000000..c5f7348 --- /dev/null +++ b/src/KubernetesClient.Basic/AbstractKubernetes.cs @@ -0,0 +1,72 @@ +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using k8s.Autorest; +using System.Net.Http.Headers; + + +namespace k8s +{ + public abstract partial class AbstractKubernetes + { + private sealed class QueryBuilder + { + private List parameters = new List(); + + public void Append(string key, params object[] values) + { + foreach (var value in values) + { + switch (value) + { + case int intval: + parameters.Add($"{key}={intval}"); + break; + case string strval: + parameters.Add($"{key}={Uri.EscapeDataString(strval)}"); + break; + case bool boolval: + parameters.Add($"{key}={(boolval ? "true" : "false")}"); + break; + default: + // null + break; + } + } + } + + public override string ToString() + { + if (parameters.Count > 0) + { + return "?" + string.Join("&", parameters); + } + + return ""; + } + } + + private Task SendRequest(T body, HttpRequestMessage httpRequest, CancellationToken cancellationToken) + { + if (body != null) + { + var requestContent = KubernetesJson.Serialize(body); + httpRequest.Content = new StringContent(requestContent, System.Text.Encoding.UTF8); + httpRequest.Content.Headers.ContentType = GetHeader(body); + return SendRequestRaw(requestContent, httpRequest, cancellationToken); + } + + return SendRequestRaw("", httpRequest, cancellationToken); + } + + public virtual TimeSpan HttpClientTimeout { get; set; } = TimeSpan.FromSeconds(100); + + protected abstract Task> CreateResultAsync(HttpRequestMessage httpRequest, HttpResponseMessage httpResponse, bool? watch, CancellationToken cancellationToken); + + protected abstract HttpRequestMessage CreateRequest(string relativeUri, string method, IDictionary> customHeaders); + + protected abstract MediaTypeHeaderValue GetHeader(object body); + + protected abstract Task SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken); + } +} diff --git a/src/KubernetesClient.Basic/AssemblyInfo.cs b/src/KubernetesClient.Basic/AssemblyInfo.cs new file mode 100644 index 0000000..2c93bfa --- /dev/null +++ b/src/KubernetesClient.Basic/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("KubernetesClient")] +[assembly: InternalsVisibleTo("KubernetesClient.VanillaRest")] +[assembly: InternalsVisibleTo("KubernetesClient.Tests")] diff --git a/src/KubernetesClient/Autorest/BasicAuthenticationCredentials.cs b/src/KubernetesClient.Basic/Autorest/BasicAuthenticationCredentials.cs similarity index 100% rename from src/KubernetesClient/Autorest/BasicAuthenticationCredentials.cs rename to src/KubernetesClient.Basic/Autorest/BasicAuthenticationCredentials.cs diff --git a/src/KubernetesClient/Autorest/HttpExtensions.cs b/src/KubernetesClient.Basic/Autorest/HttpExtensions.cs similarity index 100% rename from src/KubernetesClient/Autorest/HttpExtensions.cs rename to src/KubernetesClient.Basic/Autorest/HttpExtensions.cs diff --git a/src/KubernetesClient/Autorest/HttpMessageWrapper.cs b/src/KubernetesClient.Basic/Autorest/HttpMessageWrapper.cs similarity index 100% rename from src/KubernetesClient/Autorest/HttpMessageWrapper.cs rename to src/KubernetesClient.Basic/Autorest/HttpMessageWrapper.cs diff --git a/src/KubernetesClient/Autorest/HttpOperationException.cs b/src/KubernetesClient.Basic/Autorest/HttpOperationException.cs similarity index 100% rename from src/KubernetesClient/Autorest/HttpOperationException.cs rename to src/KubernetesClient.Basic/Autorest/HttpOperationException.cs diff --git a/src/KubernetesClient/Autorest/HttpOperationResponse.cs b/src/KubernetesClient.Basic/Autorest/HttpOperationResponse.cs similarity index 100% rename from src/KubernetesClient/Autorest/HttpOperationResponse.cs rename to src/KubernetesClient.Basic/Autorest/HttpOperationResponse.cs diff --git a/src/KubernetesClient/Autorest/HttpRequestMessageWrapper.cs b/src/KubernetesClient.Basic/Autorest/HttpRequestMessageWrapper.cs similarity index 100% rename from src/KubernetesClient/Autorest/HttpRequestMessageWrapper.cs rename to src/KubernetesClient.Basic/Autorest/HttpRequestMessageWrapper.cs diff --git a/src/KubernetesClient/Autorest/HttpResponseMessageWrapper.cs b/src/KubernetesClient.Basic/Autorest/HttpResponseMessageWrapper.cs similarity index 100% rename from src/KubernetesClient/Autorest/HttpResponseMessageWrapper.cs rename to src/KubernetesClient.Basic/Autorest/HttpResponseMessageWrapper.cs diff --git a/src/KubernetesClient/Autorest/ITokenProvider.cs b/src/KubernetesClient.Basic/Autorest/ITokenProvider.cs similarity index 100% rename from src/KubernetesClient/Autorest/ITokenProvider.cs rename to src/KubernetesClient.Basic/Autorest/ITokenProvider.cs diff --git a/src/KubernetesClient/Autorest/RestException.cs b/src/KubernetesClient.Basic/Autorest/RestException.cs similarity index 100% rename from src/KubernetesClient/Autorest/RestException.cs rename to src/KubernetesClient.Basic/Autorest/RestException.cs diff --git a/src/KubernetesClient/Autorest/ServiceClientCredentials.cs b/src/KubernetesClient.Basic/Autorest/ServiceClientCredentials.cs similarity index 100% rename from src/KubernetesClient/Autorest/ServiceClientCredentials.cs rename to src/KubernetesClient.Basic/Autorest/ServiceClientCredentials.cs diff --git a/src/KubernetesClient/Autorest/StringTokenProvider.cs b/src/KubernetesClient.Basic/Autorest/StringTokenProvider.cs similarity index 100% rename from src/KubernetesClient/Autorest/StringTokenProvider.cs rename to src/KubernetesClient.Basic/Autorest/StringTokenProvider.cs diff --git a/src/KubernetesClient/Autorest/TokenCredentials.cs b/src/KubernetesClient.Basic/Autorest/TokenCredentials.cs similarity index 100% rename from src/KubernetesClient/Autorest/TokenCredentials.cs rename to src/KubernetesClient.Basic/Autorest/TokenCredentials.cs diff --git a/src/KubernetesClient.Basic/Global.cs b/src/KubernetesClient.Basic/Global.cs new file mode 100644 index 0000000..70b3700 --- /dev/null +++ b/src/KubernetesClient.Basic/Global.cs @@ -0,0 +1,5 @@ +global using System; +global using System.Collections.Generic; +global using System.Linq; +global using System.Text.Json; +global using System.Text.Json.Serialization; diff --git a/src/KubernetesClient.Basic/KubernetesClient.Basic.csproj b/src/KubernetesClient.Basic/KubernetesClient.Basic.csproj new file mode 100644 index 0000000..d38f5ec --- /dev/null +++ b/src/KubernetesClient.Basic/KubernetesClient.Basic.csproj @@ -0,0 +1,18 @@ + + + + netstandard2.0 + k8s + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/KubernetesClient/KubernetesJson.cs b/src/KubernetesClient.Basic/KubernetesJson.cs similarity index 97% rename from src/KubernetesClient/KubernetesJson.cs rename to src/KubernetesClient.Basic/KubernetesJson.cs index 4690a80..5a66b8c 100644 --- a/src/KubernetesClient/KubernetesJson.cs +++ b/src/KubernetesClient.Basic/KubernetesJson.cs @@ -32,7 +32,7 @@ namespace k8s public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var str = reader.GetString(); - return DateTimeOffset.ParseExact(str, new[] { Iso8601Format, SerializeFormat }, CultureInfo.InvariantCulture); + return DateTimeOffset.ParseExact(str, new[] { Iso8601Format, SerializeFormat }, CultureInfo.InvariantCulture, DateTimeStyles.None); } public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options) diff --git a/src/KubernetesClient.Models/AssemblyInfo.cs b/src/KubernetesClient.Models/AssemblyInfo.cs new file mode 100644 index 0000000..d4ad31b --- /dev/null +++ b/src/KubernetesClient.Models/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("KubernetesClient")] +[assembly: InternalsVisibleTo("KubernetesClient.Basic")] +[assembly: InternalsVisibleTo("KubernetesClient.Tests")] diff --git a/src/KubernetesClient/Extensions.cs b/src/KubernetesClient.Models/Extensions.cs similarity index 100% rename from src/KubernetesClient/Extensions.cs rename to src/KubernetesClient.Models/Extensions.cs diff --git a/src/KubernetesClient.Models/Global.cs b/src/KubernetesClient.Models/Global.cs new file mode 100644 index 0000000..70b3700 --- /dev/null +++ b/src/KubernetesClient.Models/Global.cs @@ -0,0 +1,5 @@ +global using System; +global using System.Collections.Generic; +global using System.Linq; +global using System.Text.Json; +global using System.Text.Json.Serialization; diff --git a/src/KubernetesClient/IItems.cs b/src/KubernetesClient.Models/IItems.cs similarity index 100% rename from src/KubernetesClient/IItems.cs rename to src/KubernetesClient.Models/IItems.cs diff --git a/src/KubernetesClient/IKubernetesObject.cs b/src/KubernetesClient.Models/IKubernetesObject.cs similarity index 100% rename from src/KubernetesClient/IKubernetesObject.cs rename to src/KubernetesClient.Models/IKubernetesObject.cs diff --git a/src/KubernetesClient/IMetadata.cs b/src/KubernetesClient.Models/IMetadata.cs similarity index 100% rename from src/KubernetesClient/IMetadata.cs rename to src/KubernetesClient.Models/IMetadata.cs diff --git a/src/KubernetesClient/ISpec.cs b/src/KubernetesClient.Models/ISpec.cs similarity index 100% rename from src/KubernetesClient/ISpec.cs rename to src/KubernetesClient.Models/ISpec.cs diff --git a/src/KubernetesClient/IStatus.cs b/src/KubernetesClient.Models/IStatus.cs similarity index 100% rename from src/KubernetesClient/IStatus.cs rename to src/KubernetesClient.Models/IStatus.cs diff --git a/src/KubernetesClient/IValidate.cs b/src/KubernetesClient.Models/IValidate.cs similarity index 100% rename from src/KubernetesClient/IValidate.cs rename to src/KubernetesClient.Models/IValidate.cs diff --git a/src/KubernetesClient/IntOrStringConverter.cs b/src/KubernetesClient.Models/IntOrStringConverter.cs similarity index 88% rename from src/KubernetesClient/IntOrStringConverter.cs rename to src/KubernetesClient.Models/IntOrStringConverter.cs index 5ad4ad6..b2b2fd3 100644 --- a/src/KubernetesClient/IntOrStringConverter.cs +++ b/src/KubernetesClient.Models/IntOrStringConverter.cs @@ -19,6 +19,11 @@ namespace k8s.Models public override void Write(Utf8JsonWriter writer, IntstrIntOrString value, JsonSerializerOptions options) { + if (writer == null) + { + throw new ArgumentNullException(nameof(writer)); + } + var s = value?.Value; if (long.TryParse(s, out var intv)) diff --git a/src/KubernetesClient/IntstrIntOrString.cs b/src/KubernetesClient.Models/IntstrIntOrString.cs similarity index 100% rename from src/KubernetesClient/IntstrIntOrString.cs rename to src/KubernetesClient.Models/IntstrIntOrString.cs diff --git a/src/KubernetesClient.Models/KubernetesClient.Models.csproj b/src/KubernetesClient.Models/KubernetesClient.Models.csproj new file mode 100644 index 0000000..a3cf59a --- /dev/null +++ b/src/KubernetesClient.Models/KubernetesClient.Models.csproj @@ -0,0 +1,18 @@ + + + netstandard2.0 + k8s.Models + + + + + + + + + + + + + + diff --git a/src/KubernetesClient/KubernetesEntityAttribute.cs b/src/KubernetesClient.Models/KubernetesEntityAttribute.cs similarity index 100% rename from src/KubernetesClient/KubernetesEntityAttribute.cs rename to src/KubernetesClient.Models/KubernetesEntityAttribute.cs diff --git a/src/KubernetesClient/QuantityConverter.cs b/src/KubernetesClient.Models/QuantityConverter.cs similarity index 80% rename from src/KubernetesClient/QuantityConverter.cs rename to src/KubernetesClient.Models/QuantityConverter.cs index 13a583a..1dacd5b 100644 --- a/src/KubernetesClient/QuantityConverter.cs +++ b/src/KubernetesClient.Models/QuantityConverter.cs @@ -9,6 +9,11 @@ namespace k8s.Models public override void Write(Utf8JsonWriter writer, ResourceQuantity value, JsonSerializerOptions options) { + if (writer == null) + { + throw new ArgumentNullException(nameof(writer)); + } + writer.WriteStringValue(value?.ToString()); } } diff --git a/src/KubernetesClient/ResourceQuantity.cs b/src/KubernetesClient.Models/ResourceQuantity.cs similarity index 94% rename from src/KubernetesClient/ResourceQuantity.cs rename to src/KubernetesClient.Models/ResourceQuantity.cs index 0de0053..9d179c7 100644 --- a/src/KubernetesClient/ResourceQuantity.cs +++ b/src/KubernetesClient.Models/ResourceQuantity.cs @@ -1,9 +1,6 @@ using System.Globalization; using System.Numerics; using Fractions; -using YamlDotNet.Core; -using YamlDotNet.Core.Events; -using YamlDotNet.Serialization; namespace k8s.Models { @@ -57,7 +54,7 @@ namespace k8s.Models /// cause implementors to also use a fixed point implementation. /// [JsonConverter(typeof(QuantityConverter))] - public partial class ResourceQuantity : IYamlConvertible + public partial class ResourceQuantity { public enum SuffixFormat { @@ -201,28 +198,6 @@ namespace k8s.Models return BigInteger.Remainder(value.Numerator, value.Denominator) > 0; } - /// - public void Read(IParser parser, Type expectedType, ObjectDeserializer nestedObjectDeserializer) - { - if (expectedType != typeof(ResourceQuantity)) - { - throw new ArgumentOutOfRangeException(nameof(expectedType)); - } - - if (parser?.Current is Scalar) - { - Value = ((Scalar)parser.Current).Value; - parser.MoveNext(); - CustomInit(); - } - } - - /// - public void Write(IEmitter emitter, ObjectSerializer nestedObjectSerializer) - { - emitter?.Emit(new Scalar(ToString())); - } - public static implicit operator decimal(ResourceQuantity v) { return v?.ToDecimal() ?? 0; diff --git a/src/KubernetesClient/V1Patch.cs b/src/KubernetesClient.Models/V1Patch.cs similarity index 100% rename from src/KubernetesClient/V1Patch.cs rename to src/KubernetesClient.Models/V1Patch.cs diff --git a/src/KubernetesClient/V1PatchJsonConverter.cs b/src/KubernetesClient.Models/V1PatchJsonConverter.cs similarity index 83% rename from src/KubernetesClient/V1PatchJsonConverter.cs rename to src/KubernetesClient.Models/V1PatchJsonConverter.cs index 88702c3..a8db069 100644 --- a/src/KubernetesClient/V1PatchJsonConverter.cs +++ b/src/KubernetesClient.Models/V1PatchJsonConverter.cs @@ -9,6 +9,11 @@ namespace k8s.Models public override void Write(Utf8JsonWriter writer, V1Patch value, JsonSerializerOptions options) { + if (writer == null) + { + throw new ArgumentNullException(nameof(writer)); + } + var content = value?.Content; if (content is string s) { diff --git a/src/KubernetesClient/V1Status.ObjectView.cs b/src/KubernetesClient.Models/V1Status.ObjectView.cs similarity index 100% rename from src/KubernetesClient/V1Status.ObjectView.cs rename to src/KubernetesClient.Models/V1Status.ObjectView.cs diff --git a/src/KubernetesClient/V1Status.cs b/src/KubernetesClient.Models/V1Status.cs similarity index 100% rename from src/KubernetesClient/V1Status.cs rename to src/KubernetesClient.Models/V1Status.cs diff --git a/src/KubernetesClient/Versioning/KubernetesVersionComparer.cs b/src/KubernetesClient.Models/Versioning/KubernetesVersionComparer.cs similarity index 100% rename from src/KubernetesClient/Versioning/KubernetesVersionComparer.cs rename to src/KubernetesClient.Models/Versioning/KubernetesVersionComparer.cs diff --git a/src/KubernetesClient/Versioning/VersionConverter.cs b/src/KubernetesClient.Models/Versioning/VersionConverter.cs similarity index 100% rename from src/KubernetesClient/Versioning/VersionConverter.cs rename to src/KubernetesClient.Models/Versioning/VersionConverter.cs diff --git a/src/KubernetesClient/IKubernetes.cs b/src/KubernetesClient/IKubernetes.cs index 5fa42e9..c3f871d 100644 --- a/src/KubernetesClient/IKubernetes.cs +++ b/src/KubernetesClient/IKubernetes.cs @@ -1,6 +1,6 @@ namespace k8s; -public partial interface IKubernetes : IDisposable +public partial interface IKubernetes : IBasicKubernetes, IDisposable { /// /// The base URI of the service. diff --git a/src/KubernetesClient/Kubernetes.ConfigInit.cs b/src/KubernetesClient/Kubernetes.ConfigInit.cs index 7a09cff..e6a8bbf 100644 --- a/src/KubernetesClient/Kubernetes.ConfigInit.cs +++ b/src/KubernetesClient/Kubernetes.ConfigInit.cs @@ -9,13 +9,6 @@ namespace k8s { public partial class Kubernetes { - /// - /// Timeout of REST calls to Kubernetes server - /// Does not apply to watch related api - /// - /// timeout - public TimeSpan HttpClientTimeout { get; set; } = TimeSpan.FromSeconds(100); - /// /// Initializes a new instance of the class. /// diff --git a/src/KubernetesClient/Kubernetes.Header.cs b/src/KubernetesClient/Kubernetes.Header.cs index af6e538..598e0da 100644 --- a/src/KubernetesClient/Kubernetes.Header.cs +++ b/src/KubernetesClient/Kubernetes.Header.cs @@ -5,7 +5,7 @@ namespace k8s { public partial class Kubernetes { - public virtual MediaTypeHeaderValue GetHeader(object body) + protected override MediaTypeHeaderValue GetHeader(object body) { if (body == null) { @@ -21,7 +21,7 @@ namespace k8s } - public virtual MediaTypeHeaderValue GetHeader(V1Patch body) + private MediaTypeHeaderValue GetHeader(V1Patch body) { if (body == null) { diff --git a/src/KubernetesClient/Kubernetes.cs b/src/KubernetesClient/Kubernetes.cs index 2a0275e..506d7a4 100644 --- a/src/KubernetesClient/Kubernetes.cs +++ b/src/KubernetesClient/Kubernetes.cs @@ -7,7 +7,7 @@ using k8s.Autorest; namespace k8s { - public partial class Kubernetes + public partial class Kubernetes : AbstractKubernetes, IKubernetes { private Uri baseuri; @@ -47,7 +47,6 @@ namespace k8s private HttpClientHandler HttpClientHandler { get; set; } #endif - /// /// Initializes client properties. /// @@ -56,8 +55,18 @@ namespace k8s BaseUri = new Uri("http://localhost"); } - private async Task> CreateResultAsync(HttpRequestMessage httpRequest, HttpResponseMessage httpResponse, bool? watch, CancellationToken cancellationToken) + protected override async Task> CreateResultAsync(HttpRequestMessage httpRequest, HttpResponseMessage httpResponse, bool? watch, CancellationToken cancellationToken) { + if (httpRequest == null) + { + throw new ArgumentNullException(nameof(httpRequest)); + } + + if (httpResponse == null) + { + throw new ArgumentNullException(nameof(httpResponse)); + } + var result = new HttpOperationResponse() { Request = httpRequest, Response = httpResponse }; if (watch == true) @@ -86,48 +95,11 @@ namespace k8s return result; } - private sealed class QueryBuilder - { - private List parameters = new List(); - - public void Append(string key, params object[] values) - { - foreach (var value in values) - { - switch (value) - { - case int intval: - parameters.Add($"{key}={intval}"); - break; - case string strval: - parameters.Add($"{key}={Uri.EscapeDataString(strval)}"); - break; - case bool boolval: - parameters.Add($"{key}={(boolval ? "true" : "false")}"); - break; - default: - // null - break; - } - } - } - - public override string ToString() - { - if (parameters.Count > 0) - { - return "?" + string.Join("&", parameters); - } - - return ""; - } - } - - private HttpRequestMessage CreateRequest(string url, HttpMethod method, IDictionary> customHeaders) + protected override HttpRequestMessage CreateRequest(string relativeUri, string method, IDictionary> customHeaders) { var httpRequest = new HttpRequestMessage(); - httpRequest.Method = method; - httpRequest.RequestUri = new Uri(url); + httpRequest.Method = new HttpMethod(method); + httpRequest.RequestUri = new Uri(BaseUri, relativeUri); httpRequest.Version = HttpVersion.Version20; // Set Headers if (customHeaders != null) @@ -142,21 +114,13 @@ namespace k8s return httpRequest; } - private Task SendRequest(T body, HttpRequestMessage httpRequest, CancellationToken cancellationToken) + protected override async Task SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken) { - if (body != null) + if (httpRequest == null) { - var requestContent = KubernetesJson.Serialize(body); - httpRequest.Content = new StringContent(requestContent, System.Text.Encoding.UTF8); - httpRequest.Content.Headers.ContentType = GetHeader(body); - return SendRequestRaw(requestContent, httpRequest, cancellationToken); + throw new ArgumentNullException(nameof(httpRequest)); } - return SendRequestRaw("", httpRequest, cancellationToken); - } - - private async Task SendRequestRaw(string requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken) - { // Set Credentials if (Credentials != null) { diff --git a/src/KubernetesClient/KubernetesClient.csproj b/src/KubernetesClient/KubernetesClient.csproj index d24a124..f0a3b5e 100644 --- a/src/KubernetesClient/KubernetesClient.csproj +++ b/src/KubernetesClient/KubernetesClient.csproj @@ -1,60 +1,27 @@ - The Kubernetes Project Authors - 2017 The Kubernetes Project Authors - Client library for the Kubernetes open source container orchestrator. - - Apache-2.0 - https://github.com/kubernetes-client/csharp - https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.png - logo.png - kubernetes;docker;containers; - netstandard2.1;net5;net6 k8s - true - true - - - true - - - true - snupkg - true - $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb - 10.0 - - - - true - - - - - - - - - - - - + + + + + \ No newline at end of file diff --git a/src/KubernetesClient/ResourceQuantityYamlConverter.cs b/src/KubernetesClient/ResourceQuantityYamlConverter.cs new file mode 100644 index 0000000..ef274bf --- /dev/null +++ b/src/KubernetesClient/ResourceQuantityYamlConverter.cs @@ -0,0 +1,42 @@ +using YamlDotNet.Core; +using YamlDotNet.Serialization; + +namespace k8s.Models +{ + public class ResourceQuantityYamlConverter : IYamlTypeConverter + { + public bool Accepts(Type type) + { + return type == typeof(ResourceQuantity); + } + + public object ReadYaml(IParser parser, Type type) + { + if (parser?.Current is YamlDotNet.Core.Events.Scalar scalar) + { + try + { + if (string.IsNullOrEmpty(scalar?.Value)) + { + return null; + } + + return new ResourceQuantity(scalar?.Value); + } + finally + { + parser?.MoveNext(); + } + } + + throw new InvalidOperationException(parser?.Current?.ToString()); + } + + + public void WriteYaml(IEmitter emitter, object value, Type type) + { + var obj = (ResourceQuantity)value; + emitter?.Emit(new YamlDotNet.Core.Events.Scalar(obj?.ToString())); + } + } +} diff --git a/src/KubernetesClient/Versioning/ModelConvertionOperators.cs b/src/KubernetesClient/Versioning/ModelConvertionOperators.cs deleted file mode 100644 index a94053e..0000000 --- a/src/KubernetesClient/Versioning/ModelConvertionOperators.cs +++ /dev/null @@ -1,726 +0,0 @@ -// using k8s.Versioning; -// namespace k8s.Models -// { -// public partial class V1MutatingWebhookConfiguration -// { -// public static explicit operator V1MutatingWebhookConfiguration(V1beta1MutatingWebhookConfiguration s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1MutatingWebhookConfiguration -// { -// public static explicit operator V1beta1MutatingWebhookConfiguration(V1MutatingWebhookConfiguration s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1MutatingWebhookConfigurationList -// { -// public static explicit operator V1MutatingWebhookConfigurationList(V1beta1MutatingWebhookConfigurationList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1MutatingWebhookConfigurationList -// { -// public static explicit operator V1beta1MutatingWebhookConfigurationList(V1MutatingWebhookConfigurationList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ValidatingWebhookConfiguration -// { -// public static explicit operator V1ValidatingWebhookConfiguration(V1beta1ValidatingWebhookConfiguration s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ValidatingWebhookConfiguration -// { -// public static explicit operator V1beta1ValidatingWebhookConfiguration(V1ValidatingWebhookConfiguration s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ValidatingWebhookConfigurationList -// { -// public static explicit operator V1ValidatingWebhookConfigurationList(V1beta1ValidatingWebhookConfigurationList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ValidatingWebhookConfigurationList -// { -// public static explicit operator V1beta1ValidatingWebhookConfigurationList(V1ValidatingWebhookConfigurationList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1TokenReview -// { -// public static explicit operator V1TokenReview(V1beta1TokenReview s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1TokenReview -// { -// public static explicit operator V1beta1TokenReview(V1TokenReview s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1LocalSubjectAccessReview -// { -// public static explicit operator V1LocalSubjectAccessReview(V1beta1LocalSubjectAccessReview s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1LocalSubjectAccessReview -// { -// public static explicit operator V1beta1LocalSubjectAccessReview(V1LocalSubjectAccessReview s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1SelfSubjectAccessReview -// { -// public static explicit operator V1SelfSubjectAccessReview(V1beta1SelfSubjectAccessReview s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1SelfSubjectAccessReview -// { -// public static explicit operator V1beta1SelfSubjectAccessReview(V1SelfSubjectAccessReview s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1SelfSubjectRulesReview -// { -// public static explicit operator V1SelfSubjectRulesReview(V1beta1SelfSubjectRulesReview s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1SelfSubjectRulesReview -// { -// public static explicit operator V1beta1SelfSubjectRulesReview(V1SelfSubjectRulesReview s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1SubjectAccessReview -// { -// public static explicit operator V1SubjectAccessReview(V1beta1SubjectAccessReview s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1SubjectAccessReview -// { -// public static explicit operator V1beta1SubjectAccessReview(V1SubjectAccessReview s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1Lease -// { -// public static explicit operator V1Lease(V1beta1Lease s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1Lease -// { -// public static explicit operator V1beta1Lease(V1Lease s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1LeaseList -// { -// public static explicit operator V1LeaseList(V1beta1LeaseList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1LeaseList -// { -// public static explicit operator V1beta1LeaseList(V1LeaseList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1Event -// { -// public static explicit operator V1Event(V1beta1Event s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1Event -// { -// public static explicit operator V1beta1Event(V1Event s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1EventList -// { -// public static explicit operator V1EventList(V1beta1EventList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1EventList -// { -// public static explicit operator V1beta1EventList(V1EventList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ClusterRole -// { -// public static explicit operator V1ClusterRole(V1beta1ClusterRole s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ClusterRole -// { -// public static explicit operator V1beta1ClusterRole(V1ClusterRole s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ClusterRoleBinding -// { -// public static explicit operator V1ClusterRoleBinding(V1beta1ClusterRoleBinding s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ClusterRoleBinding -// { -// public static explicit operator V1beta1ClusterRoleBinding(V1ClusterRoleBinding s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ClusterRoleBindingList -// { -// public static explicit operator V1ClusterRoleBindingList(V1beta1ClusterRoleBindingList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ClusterRoleBindingList -// { -// public static explicit operator V1beta1ClusterRoleBindingList(V1ClusterRoleBindingList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ClusterRoleList -// { -// public static explicit operator V1ClusterRoleList(V1beta1ClusterRoleList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ClusterRoleList -// { -// public static explicit operator V1beta1ClusterRoleList(V1ClusterRoleList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1Role -// { -// public static explicit operator V1Role(V1beta1Role s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1Role -// { -// public static explicit operator V1beta1Role(V1Role s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1RoleBinding -// { -// public static explicit operator V1RoleBinding(V1beta1RoleBinding s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1RoleBinding -// { -// public static explicit operator V1beta1RoleBinding(V1RoleBinding s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1RoleBindingList -// { -// public static explicit operator V1RoleBindingList(V1beta1RoleBindingList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1RoleBindingList -// { -// public static explicit operator V1beta1RoleBindingList(V1RoleBindingList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1RoleList -// { -// public static explicit operator V1RoleList(V1beta1RoleList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1RoleList -// { -// public static explicit operator V1beta1RoleList(V1RoleList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1PriorityClass -// { -// public static explicit operator V1PriorityClass(V1beta1PriorityClass s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1PriorityClass -// { -// public static explicit operator V1beta1PriorityClass(V1PriorityClass s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1PriorityClassList -// { -// public static explicit operator V1PriorityClassList(V1beta1PriorityClassList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1PriorityClassList -// { -// public static explicit operator V1beta1PriorityClassList(V1PriorityClassList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CSIDriver -// { -// public static explicit operator V1CSIDriver(V1beta1CSIDriver s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CSIDriver -// { -// public static explicit operator V1beta1CSIDriver(V1CSIDriver s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CSIDriverList -// { -// public static explicit operator V1CSIDriverList(V1beta1CSIDriverList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CSIDriverList -// { -// public static explicit operator V1beta1CSIDriverList(V1CSIDriverList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CSINode -// { -// public static explicit operator V1CSINode(V1beta1CSINode s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CSINode -// { -// public static explicit operator V1beta1CSINode(V1CSINode s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CSINodeList -// { -// public static explicit operator V1CSINodeList(V1beta1CSINodeList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CSINodeList -// { -// public static explicit operator V1beta1CSINodeList(V1CSINodeList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1StorageClass -// { -// public static explicit operator V1StorageClass(V1beta1StorageClass s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1StorageClass -// { -// public static explicit operator V1beta1StorageClass(V1StorageClass s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1StorageClassList -// { -// public static explicit operator V1StorageClassList(V1beta1StorageClassList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1StorageClassList -// { -// public static explicit operator V1beta1StorageClassList(V1StorageClassList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1VolumeAttachment -// { -// public static explicit operator V1VolumeAttachment(V1beta1VolumeAttachment s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1VolumeAttachment -// { -// public static explicit operator V1beta1VolumeAttachment(V1VolumeAttachment s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1VolumeAttachmentList -// { -// public static explicit operator V1VolumeAttachmentList(V1beta1VolumeAttachmentList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1VolumeAttachmentList -// { -// public static explicit operator V1beta1VolumeAttachmentList(V1VolumeAttachmentList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceDefinition -// { -// public static explicit operator V1CustomResourceDefinition(V1beta1CustomResourceDefinition s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceDefinition -// { -// public static explicit operator V1beta1CustomResourceDefinition(V1CustomResourceDefinition s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceDefinitionList -// { -// public static explicit operator V1CustomResourceDefinitionList(V1beta1CustomResourceDefinitionList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceDefinitionList -// { -// public static explicit operator V1beta1CustomResourceDefinitionList(V1CustomResourceDefinitionList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1APIService -// { -// public static explicit operator V1APIService(V1beta1APIService s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1APIService -// { -// public static explicit operator V1beta1APIService(V1APIService s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1APIServiceList -// { -// public static explicit operator V1APIServiceList(V1beta1APIServiceList s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1APIServiceList -// { -// public static explicit operator V1beta1APIServiceList(V1APIServiceList s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1AggregationRule -// { -// public static explicit operator V1AggregationRule(V1beta1AggregationRule s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1AggregationRule -// { -// public static explicit operator V1beta1AggregationRule(V1AggregationRule s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1APIServiceCondition -// { -// public static explicit operator V1APIServiceCondition(V1beta1APIServiceCondition s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1APIServiceCondition -// { -// public static explicit operator V1beta1APIServiceCondition(V1APIServiceCondition s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1APIServiceSpec -// { -// public static explicit operator V1APIServiceSpec(V1beta1APIServiceSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1APIServiceSpec -// { -// public static explicit operator V1beta1APIServiceSpec(V1APIServiceSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1APIServiceStatus -// { -// public static explicit operator V1APIServiceStatus(V1beta1APIServiceStatus s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1APIServiceStatus -// { -// public static explicit operator V1beta1APIServiceStatus(V1APIServiceStatus s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CSIDriverSpec -// { -// public static explicit operator V1CSIDriverSpec(V1beta1CSIDriverSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CSIDriverSpec -// { -// public static explicit operator V1beta1CSIDriverSpec(V1CSIDriverSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CSINodeDriver -// { -// public static explicit operator V1CSINodeDriver(V1beta1CSINodeDriver s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CSINodeDriver -// { -// public static explicit operator V1beta1CSINodeDriver(V1CSINodeDriver s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CSINodeSpec -// { -// public static explicit operator V1CSINodeSpec(V1beta1CSINodeSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CSINodeSpec -// { -// public static explicit operator V1beta1CSINodeSpec(V1CSINodeSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceColumnDefinition -// { -// public static explicit operator V1CustomResourceColumnDefinition(V1beta1CustomResourceColumnDefinition s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceColumnDefinition -// { -// public static explicit operator V1beta1CustomResourceColumnDefinition(V1CustomResourceColumnDefinition s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceConversion -// { -// public static explicit operator V1CustomResourceConversion(V1beta1CustomResourceConversion s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceConversion -// { -// public static explicit operator V1beta1CustomResourceConversion(V1CustomResourceConversion s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceDefinitionCondition -// { -// public static explicit operator V1CustomResourceDefinitionCondition(V1beta1CustomResourceDefinitionCondition s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceDefinitionCondition -// { -// public static explicit operator V1beta1CustomResourceDefinitionCondition(V1CustomResourceDefinitionCondition s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceDefinitionNames -// { -// public static explicit operator V1CustomResourceDefinitionNames(V1beta1CustomResourceDefinitionNames s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceDefinitionNames -// { -// public static explicit operator V1beta1CustomResourceDefinitionNames(V1CustomResourceDefinitionNames s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceDefinitionSpec -// { -// public static explicit operator V1CustomResourceDefinitionSpec(V1beta1CustomResourceDefinitionSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceDefinitionSpec -// { -// public static explicit operator V1beta1CustomResourceDefinitionSpec(V1CustomResourceDefinitionSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceDefinitionStatus -// { -// public static explicit operator V1CustomResourceDefinitionStatus(V1beta1CustomResourceDefinitionStatus s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceDefinitionStatus -// { -// public static explicit operator V1beta1CustomResourceDefinitionStatus(V1CustomResourceDefinitionStatus s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceDefinitionVersion -// { -// public static explicit operator V1CustomResourceDefinitionVersion(V1beta1CustomResourceDefinitionVersion s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceDefinitionVersion -// { -// public static explicit operator V1beta1CustomResourceDefinitionVersion(V1CustomResourceDefinitionVersion s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceSubresources -// { -// public static explicit operator V1CustomResourceSubresources(V1beta1CustomResourceSubresources s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceSubresources -// { -// public static explicit operator V1beta1CustomResourceSubresources(V1CustomResourceSubresources s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceSubresourceScale -// { -// public static explicit operator V1CustomResourceSubresourceScale(V1beta1CustomResourceSubresourceScale s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceSubresourceScale -// { -// public static explicit operator V1beta1CustomResourceSubresourceScale(V1CustomResourceSubresourceScale s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1CustomResourceValidation -// { -// public static explicit operator V1CustomResourceValidation(V1beta1CustomResourceValidation s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1CustomResourceValidation -// { -// public static explicit operator V1beta1CustomResourceValidation(V1CustomResourceValidation s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1EndpointPort -// { -// public static explicit operator V1EndpointPort(V1beta1EndpointPort s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1EndpointPort -// { -// public static explicit operator V1beta1EndpointPort(V1EndpointPort s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1EventSeries -// { -// public static explicit operator V1EventSeries(V1beta1EventSeries s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1EventSeries -// { -// public static explicit operator V1beta1EventSeries(V1EventSeries s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ExternalDocumentation -// { -// public static explicit operator V1ExternalDocumentation(V1beta1ExternalDocumentation s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ExternalDocumentation -// { -// public static explicit operator V1beta1ExternalDocumentation(V1ExternalDocumentation s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1JSONSchemaProps -// { -// public static explicit operator V1JSONSchemaProps(V1beta1JSONSchemaProps s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1JSONSchemaProps -// { -// public static explicit operator V1beta1JSONSchemaProps(V1JSONSchemaProps s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1LeaseSpec -// { -// public static explicit operator V1LeaseSpec(V1beta1LeaseSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1LeaseSpec -// { -// public static explicit operator V1beta1LeaseSpec(V1LeaseSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1MutatingWebhook -// { -// public static explicit operator V1MutatingWebhook(V1beta1MutatingWebhook s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1MutatingWebhook -// { -// public static explicit operator V1beta1MutatingWebhook(V1MutatingWebhook s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1NonResourceAttributes -// { -// public static explicit operator V1NonResourceAttributes(V1beta1NonResourceAttributes s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1NonResourceAttributes -// { -// public static explicit operator V1beta1NonResourceAttributes(V1NonResourceAttributes s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1NonResourceRule -// { -// public static explicit operator V1NonResourceRule(V1beta1NonResourceRule s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1NonResourceRule -// { -// public static explicit operator V1beta1NonResourceRule(V1NonResourceRule s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1PolicyRule -// { -// public static explicit operator V1PolicyRule(V1beta1PolicyRule s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1PolicyRule -// { -// public static explicit operator V1beta1PolicyRule(V1PolicyRule s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ResourceAttributes -// { -// public static explicit operator V1ResourceAttributes(V1beta1ResourceAttributes s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ResourceAttributes -// { -// public static explicit operator V1beta1ResourceAttributes(V1ResourceAttributes s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ResourceRule -// { -// public static explicit operator V1ResourceRule(V1beta1ResourceRule s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ResourceRule -// { -// public static explicit operator V1beta1ResourceRule(V1ResourceRule s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1RoleRef -// { -// public static explicit operator V1RoleRef(V1beta1RoleRef s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1RoleRef -// { -// public static explicit operator V1beta1RoleRef(V1RoleRef s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1RuleWithOperations -// { -// public static explicit operator V1RuleWithOperations(V1beta1RuleWithOperations s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1RuleWithOperations -// { -// public static explicit operator V1beta1RuleWithOperations(V1RuleWithOperations s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1SelfSubjectAccessReviewSpec -// { -// public static explicit operator V1SelfSubjectAccessReviewSpec(V1beta1SelfSubjectAccessReviewSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1SelfSubjectAccessReviewSpec -// { -// public static explicit operator V1beta1SelfSubjectAccessReviewSpec(V1SelfSubjectAccessReviewSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1SelfSubjectRulesReviewSpec -// { -// public static explicit operator V1SelfSubjectRulesReviewSpec(V1beta1SelfSubjectRulesReviewSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1SelfSubjectRulesReviewSpec -// { -// public static explicit operator V1beta1SelfSubjectRulesReviewSpec(V1SelfSubjectRulesReviewSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1Subject -// { -// public static explicit operator V1Subject(V1beta1Subject s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1Subject -// { -// public static explicit operator V1beta1Subject(V1Subject s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1SubjectAccessReviewSpec -// { -// public static explicit operator V1SubjectAccessReviewSpec(V1beta1SubjectAccessReviewSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1SubjectAccessReviewSpec -// { -// public static explicit operator V1beta1SubjectAccessReviewSpec(V1SubjectAccessReviewSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1SubjectAccessReviewStatus -// { -// public static explicit operator V1SubjectAccessReviewStatus(V1beta1SubjectAccessReviewStatus s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1SubjectAccessReviewStatus -// { -// public static explicit operator V1beta1SubjectAccessReviewStatus(V1SubjectAccessReviewStatus s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1SubjectRulesReviewStatus -// { -// public static explicit operator V1SubjectRulesReviewStatus(V1beta1SubjectRulesReviewStatus s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1SubjectRulesReviewStatus -// { -// public static explicit operator V1beta1SubjectRulesReviewStatus(V1SubjectRulesReviewStatus s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1TokenReviewSpec -// { -// public static explicit operator V1TokenReviewSpec(V1beta1TokenReviewSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1TokenReviewSpec -// { -// public static explicit operator V1beta1TokenReviewSpec(V1TokenReviewSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1TokenReviewStatus -// { -// public static explicit operator V1TokenReviewStatus(V1beta1TokenReviewStatus s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1TokenReviewStatus -// { -// public static explicit operator V1beta1TokenReviewStatus(V1TokenReviewStatus s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1UserInfo -// { -// public static explicit operator V1UserInfo(V1beta1UserInfo s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1UserInfo -// { -// public static explicit operator V1beta1UserInfo(V1UserInfo s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1ValidatingWebhook -// { -// public static explicit operator V1ValidatingWebhook(V1beta1ValidatingWebhook s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1ValidatingWebhook -// { -// public static explicit operator V1beta1ValidatingWebhook(V1ValidatingWebhook s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1VolumeAttachmentSource -// { -// public static explicit operator V1VolumeAttachmentSource(V1beta1VolumeAttachmentSource s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1VolumeAttachmentSource -// { -// public static explicit operator V1beta1VolumeAttachmentSource(V1VolumeAttachmentSource s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1VolumeAttachmentSpec -// { -// public static explicit operator V1VolumeAttachmentSpec(V1beta1VolumeAttachmentSpec s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1VolumeAttachmentSpec -// { -// public static explicit operator V1beta1VolumeAttachmentSpec(V1VolumeAttachmentSpec s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1VolumeAttachmentStatus -// { -// public static explicit operator V1VolumeAttachmentStatus(V1beta1VolumeAttachmentStatus s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1VolumeAttachmentStatus -// { -// public static explicit operator V1beta1VolumeAttachmentStatus(V1VolumeAttachmentStatus s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1VolumeError -// { -// public static explicit operator V1VolumeError(V1beta1VolumeError s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1VolumeError -// { -// public static explicit operator V1beta1VolumeError(V1VolumeError s) => VersionConverter.Mapper.Map(s); -// } -// -// public partial class V1VolumeNodeResources -// { -// public static explicit operator V1VolumeNodeResources(V1beta1VolumeNodeResources s) => VersionConverter.Mapper.Map(s); -// } -// public partial class V1beta1VolumeNodeResources -// { -// public static explicit operator V1beta1VolumeNodeResources(V1VolumeNodeResources s) => VersionConverter.Mapper.Map(s); -// } -// -// -// -// } diff --git a/src/KubernetesClient/Yaml.cs b/src/KubernetesClient/Yaml.cs index 0f41ed9..af74dfc 100644 --- a/src/KubernetesClient/Yaml.cs +++ b/src/KubernetesClient/Yaml.cs @@ -20,6 +20,7 @@ namespace k8s .WithNamingConvention(CamelCaseNamingConvention.Instance) .WithTypeConverter(new IntOrStringYamlConverter()) .WithTypeConverter(new ByteArrayStringYamlConverter()) + .WithTypeConverter(new ResourceQuantityYamlConverter()) .WithOverridesFromJsonPropertyAttributes() .IgnoreUnmatchedProperties() .Build(); @@ -30,6 +31,7 @@ namespace k8s .WithNamingConvention(CamelCaseNamingConvention.Instance) .WithTypeConverter(new IntOrStringYamlConverter()) .WithTypeConverter(new ByteArrayStringYamlConverter()) + .WithTypeConverter(new ResourceQuantityYamlConverter()) .WithEventEmitter(e => new StringQuotingEmitter(e)) .ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull) .WithOverridesFromJsonPropertyAttributes() diff --git a/src/LibKubernetesGenerator/KubernetesClientSourceGenerator.cs b/src/LibKubernetesGenerator/KubernetesClientSourceGenerator.cs index 895d25d..087f2ba 100644 --- a/src/LibKubernetesGenerator/KubernetesClientSourceGenerator.cs +++ b/src/LibKubernetesGenerator/KubernetesClientSourceGenerator.cs @@ -21,6 +21,9 @@ namespace LibKubernetesGenerator var swaggerfile = context.AdditionalFiles.First(f => f.Path.EndsWith("swagger.json")); var swagger = OpenApiDocument.FromJsonAsync(swaggerfile.GetText().ToString()).GetAwaiter().GetResult(); + context.AnalyzerConfigOptions.GetOptions(swaggerfile).TryGetValue("build_metadata.AdditionalFiles.Generator", out var generatorSetting); + var generators = new HashSet(generatorSetting.Split(',')); + var builder = new ContainerBuilder(); builder.RegisterType() @@ -78,13 +81,25 @@ namespace LibKubernetesGenerator } - container.Resolve().Generate(swagger, context); + if (generators.Contains("api")) + { + container.Resolve().Generate(swagger, context); + } - container.Resolve().Generate(swagger, context); + if (generators.Contains("model")) + { + container.Resolve().Generate(swagger, context); + } - container.Resolve().Generate(swagger, context); + if (generators.Contains("modelext")) + { + container.Resolve().Generate(swagger, context); + } - container.Resolve().Generate(swagger, context); + if (generators.Contains("versionconverter")) + { + container.Resolve().Generate(swagger, context); + } } } @@ -110,11 +125,11 @@ namespace LibKubernetesGenerator public void Initialize(GeneratorInitializationContext context) { #if DEBUG - // if (!Debugger.IsAttached) - // { - // Debugger.Launch(); - // } + // if (!Debugger.IsAttached) + // { + // Debugger.Launch(); + // } #endif - } + } } } diff --git a/src/LibKubernetesGenerator/templates/IKubernetes.cs.template b/src/LibKubernetesGenerator/templates/IKubernetes.cs.template index 40e5fab..d297026 100644 --- a/src/LibKubernetesGenerator/templates/IKubernetes.cs.template +++ b/src/LibKubernetesGenerator/templates/IKubernetes.cs.template @@ -17,7 +17,7 @@ namespace k8s /// /// - public partial interface IKubernetes + public partial interface IBasicKubernetes { {{#.}} /// diff --git a/src/LibKubernetesGenerator/templates/Kubernetes.cs.template b/src/LibKubernetesGenerator/templates/Kubernetes.cs.template index 3f6bbcc..ec40eee 100644 --- a/src/LibKubernetesGenerator/templates/Kubernetes.cs.template +++ b/src/LibKubernetesGenerator/templates/Kubernetes.cs.template @@ -15,7 +15,7 @@ namespace k8s using System.Threading; using System.Threading.Tasks; - public partial class Kubernetes : IKubernetes + public partial class AbstractKubernetes : IBasicKubernetes { {{#.}} /// @@ -46,20 +46,20 @@ namespace k8s {{/operation.parameters}} // Construct URL - var url = new System.Uri(BaseUri, $"{{ToInterpolationPathString path}}").ToString(); - {{#IfGroupPathParamContainsGroup path}} - url = url.Replace("/apis//", "/api/"); - {{/IfGroupPathParamContainsGroup}} + var url = $"{{ToInterpolationPathString path}}"; + {{#IfGroupPathParamContainsGroup path}} + url = url.Replace("apis//", "api/"); + {{/IfGroupPathParamContainsGroup}} var q = new QueryBuilder(); {{#operation.parameters}} {{#IfKindIs . "query"}} - q.Append("{{name}}", {{GetDotNetName name}}); + q.Append("{{name}}", {{GetDotNetName name}}); {{/IfKindIs . "query"}} {{/operation.parameters}} url += q.ToString(); - + // Create HTTP transport - var httpRequest = CreateRequest(url, HttpMethod.{{Method}}, customHeaders); + var httpRequest = CreateRequest(url, "{{Method}}", customHeaders); {{#IfParamContains operation "body"}} var httpResponse = await SendRequest(body, httpRequest, cancellationToken); {{/IfParamContains operation "body"}} diff --git a/src/LibKubernetesGenerator/templates/KubernetesExtensions.cs.template b/src/LibKubernetesGenerator/templates/KubernetesExtensions.cs.template index df67ffb..8395dcc 100644 --- a/src/LibKubernetesGenerator/templates/KubernetesExtensions.cs.template +++ b/src/LibKubernetesGenerator/templates/KubernetesExtensions.cs.template @@ -29,7 +29,7 @@ namespace k8s /// {{/operation.parameters}} public static {{GetReturnType operation "void"}} {{GetMethodName operation ""}}( - this IKubernetes operations + this IBasicKubernetes operations {{#operation.parameters}} ,{{GetDotNetType .}} {{GetDotNetName . "true"}} {{/operation.parameters}} @@ -58,7 +58,7 @@ namespace k8s /// A which can be used to cancel the asynchronous operation. /// public static async Task{{GetReturnType operation "<>"}} {{GetMethodName operation "Async"}}( - this IKubernetes operations, + this IBasicKubernetes operations, {{#operation.parameters}} {{GetDotNetType .}} {{GetDotNetName . "true"}}, {{/operation.parameters}} diff --git a/src/nuget.proj b/src/nuget.proj new file mode 100644 index 0000000..e22ee48 --- /dev/null +++ b/src/nuget.proj @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/KubernetesClient/swagger.json b/swagger.json similarity index 100% rename from src/KubernetesClient/swagger.json rename to swagger.json diff --git a/tests/KubernetesClient.Tests/KubernetesExecTests.cs b/tests/KubernetesClient.Tests/KubernetesExecTests.cs index 30ddc22..6bc82c4 100644 --- a/tests/KubernetesClient.Tests/KubernetesExecTests.cs +++ b/tests/KubernetesClient.Tests/KubernetesExecTests.cs @@ -3,7 +3,6 @@ */ using k8s.Tests.Mock; -using k8s.Autorest; using System; using System.Collections.Generic; using System.Threading; diff --git a/tests/KubernetesClient.Tests/PodExecTests.cs b/tests/KubernetesClient.Tests/PodExecTests.cs index 4ae2db5..4949860 100644 --- a/tests/KubernetesClient.Tests/PodExecTests.cs +++ b/tests/KubernetesClient.Tests/PodExecTests.cs @@ -10,7 +10,6 @@ using System.Diagnostics; using System.IO; using System.Net.Http; using System.Net.WebSockets; -using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Tasks; diff --git a/tests/KubernetesClient.Tests/StreamDemuxerTests.cs b/tests/KubernetesClient.Tests/StreamDemuxerTests.cs index befe54a..926857e 100644 --- a/tests/KubernetesClient.Tests/StreamDemuxerTests.cs +++ b/tests/KubernetesClient.Tests/StreamDemuxerTests.cs @@ -6,7 +6,6 @@ using System.Threading; using System.Threading.Tasks; using k8s.Tests.Mock; using Xunit; -using Xunit.Abstractions; namespace k8s.Tests { diff --git a/version.json b/version.json index 305d29e..c3d95ac 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "7.1", + "version": "7.2", "publicReleaseRefSpec": [ "^refs/heads/master$", "^refs/tags/v\\d+\\.\\d+\\.\\d+"