fix missing aot model SourceGenerationContext (#1636)
* Add VersionTestAsync to validate Kubernetes client version retrieval * Add SourceGenerationContextGenerator and update registration in KubernetesClientSourceGenerator
This commit is contained in:
@@ -59,6 +59,7 @@ namespace LibKubernetesGenerator
|
||||
;
|
||||
|
||||
builder.RegisterType<ModelExtGenerator>();
|
||||
builder.RegisterType<SourceGenerationContextGenerator>();
|
||||
builder.RegisterType<ModelGenerator>();
|
||||
builder.RegisterType<ApiGenerator>();
|
||||
builder.RegisterType<ClientSetGenerator>();
|
||||
@@ -79,6 +80,7 @@ namespace LibKubernetesGenerator
|
||||
|
||||
container.Resolve<ModelGenerator>().Generate(swagger, ctx);
|
||||
container.Resolve<ModelExtGenerator>().Generate(swagger, ctx);
|
||||
container.Resolve<SourceGenerationContextGenerator>().Generate(swagger, ctx);
|
||||
container.Resolve<VersionConverterStubGenerator>().Generate(swagger, ctx);
|
||||
container.Resolve<ApiGenerator>().Generate(swagger, ctx);
|
||||
container.Resolve<ClientSetGenerator>().Generate(swagger, ctx);
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
using Microsoft.CodeAnalysis;
|
||||
using NSwag;
|
||||
|
||||
namespace LibKubernetesGenerator
|
||||
{
|
||||
internal class SourceGenerationContextGenerator
|
||||
{
|
||||
private readonly ScriptObjectFactory scriptObjectFactory;
|
||||
|
||||
public SourceGenerationContextGenerator(ScriptObjectFactory scriptObjectFactory)
|
||||
{
|
||||
this.scriptObjectFactory = scriptObjectFactory;
|
||||
}
|
||||
|
||||
public void Generate(OpenApiDocument swagger, IncrementalGeneratorPostInitializationContext context)
|
||||
{
|
||||
var definitions = swagger.Definitions.Values;
|
||||
var sc = scriptObjectFactory.CreateScriptObject();
|
||||
sc.SetValue("definitions", definitions, true);
|
||||
|
||||
context.RenderToContext("SourceGenerationContext.cs.template", sc, "SourceGenerationContext.g.cs");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,15 +15,3 @@ namespace k8s.Models
|
||||
}
|
||||
{{ end }}
|
||||
}
|
||||
|
||||
#if NET8_0_OR_GREATER
|
||||
namespace k8s
|
||||
{
|
||||
{{ for definition in definitions }}
|
||||
[JsonSerializable(typeof({{ GetClassName definition }}))]
|
||||
{{ end }}
|
||||
internal partial class SourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,15 @@
|
||||
// <auto-generated>
|
||||
// Code generated by https://github.com/kubernetes-client/csharp/tree/master/src/LibKubernetesGenerator
|
||||
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||
// </auto-generated>
|
||||
#if NET8_0_OR_GREATER
|
||||
namespace k8s
|
||||
{
|
||||
{{ for definition in definitions }}
|
||||
[JsonSerializable(typeof({{ GetClassName definition }}))]
|
||||
{{ end }}
|
||||
internal partial class SourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -370,6 +370,15 @@ namespace k8s.E2E
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[MinikubeFact]
|
||||
public async Task VersionTestAsync()
|
||||
{
|
||||
using var client = CreateClient();
|
||||
var version = await client.Version.GetCodeAsync().ConfigureAwait(false);
|
||||
Assert.NotNull(version);
|
||||
}
|
||||
|
||||
public static IKubernetes CreateClient()
|
||||
{
|
||||
return new Kubernetes(KubernetesClientConfiguration.BuildDefaultConfig());
|
||||
|
||||
Reference in New Issue
Block a user