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:
Boshi Lian
2025-06-02 19:08:37 -07:00
committed by GitHub
parent f1125e9435
commit 8d0547bcff
5 changed files with 50 additions and 12 deletions

View File

@@ -59,6 +59,7 @@ namespace LibKubernetesGenerator
; ;
builder.RegisterType<ModelExtGenerator>(); builder.RegisterType<ModelExtGenerator>();
builder.RegisterType<SourceGenerationContextGenerator>();
builder.RegisterType<ModelGenerator>(); builder.RegisterType<ModelGenerator>();
builder.RegisterType<ApiGenerator>(); builder.RegisterType<ApiGenerator>();
builder.RegisterType<ClientSetGenerator>(); builder.RegisterType<ClientSetGenerator>();
@@ -79,6 +80,7 @@ namespace LibKubernetesGenerator
container.Resolve<ModelGenerator>().Generate(swagger, ctx); container.Resolve<ModelGenerator>().Generate(swagger, ctx);
container.Resolve<ModelExtGenerator>().Generate(swagger, ctx); container.Resolve<ModelExtGenerator>().Generate(swagger, ctx);
container.Resolve<SourceGenerationContextGenerator>().Generate(swagger, ctx);
container.Resolve<VersionConverterStubGenerator>().Generate(swagger, ctx); container.Resolve<VersionConverterStubGenerator>().Generate(swagger, ctx);
container.Resolve<ApiGenerator>().Generate(swagger, ctx); container.Resolve<ApiGenerator>().Generate(swagger, ctx);
container.Resolve<ClientSetGenerator>().Generate(swagger, ctx); container.Resolve<ClientSetGenerator>().Generate(swagger, ctx);

View File

@@ -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");
}
}
}

View File

@@ -15,15 +15,3 @@ namespace k8s.Models
} }
{{ end }} {{ end }}
} }
#if NET8_0_OR_GREATER
namespace k8s
{
{{ for definition in definitions }}
[JsonSerializable(typeof({{ GetClassName definition }}))]
{{ end }}
internal partial class SourceGenerationContext : JsonSerializerContext
{
}
}
#endif

View File

@@ -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

View File

@@ -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() public static IKubernetes CreateClient()
{ {
return new Kubernetes(KubernetesClientConfiguration.BuildDefaultConfig()); return new Kubernetes(KubernetesClientConfiguration.BuildDefaultConfig());