Skip to content

Commit 8d0547b

Browse files
authored
fix missing aot model SourceGenerationContext (#1636)
* Add VersionTestAsync to validate Kubernetes client version retrieval * Add SourceGenerationContextGenerator and update registration in KubernetesClientSourceGenerator
1 parent f1125e9 commit 8d0547b

File tree

5 files changed

+50
-12
lines changed

5 files changed

+50
-12
lines changed

src/LibKubernetesGenerator/KubernetesClientSourceGenerator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ private static IContainer BuildContainer(OpenApiDocument swagger)
5959
;
6060

6161
builder.RegisterType<ModelExtGenerator>();
62+
builder.RegisterType<SourceGenerationContextGenerator>();
6263
builder.RegisterType<ModelGenerator>();
6364
builder.RegisterType<ApiGenerator>();
6465
builder.RegisterType<ClientSetGenerator>();
@@ -79,6 +80,7 @@ public void Initialize(IncrementalGeneratorInitializationContext generatorContex
7980

8081
container.Resolve<ModelGenerator>().Generate(swagger, ctx);
8182
container.Resolve<ModelExtGenerator>().Generate(swagger, ctx);
83+
container.Resolve<SourceGenerationContextGenerator>().Generate(swagger, ctx);
8284
container.Resolve<VersionConverterStubGenerator>().Generate(swagger, ctx);
8385
container.Resolve<ApiGenerator>().Generate(swagger, ctx);
8486
container.Resolve<ClientSetGenerator>().Generate(swagger, ctx);
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using Microsoft.CodeAnalysis;
2+
using NSwag;
3+
4+
namespace LibKubernetesGenerator
5+
{
6+
internal class SourceGenerationContextGenerator
7+
{
8+
private readonly ScriptObjectFactory scriptObjectFactory;
9+
10+
public SourceGenerationContextGenerator(ScriptObjectFactory scriptObjectFactory)
11+
{
12+
this.scriptObjectFactory = scriptObjectFactory;
13+
}
14+
15+
public void Generate(OpenApiDocument swagger, IncrementalGeneratorPostInitializationContext context)
16+
{
17+
var definitions = swagger.Definitions.Values;
18+
var sc = scriptObjectFactory.CreateScriptObject();
19+
sc.SetValue("definitions", definitions, true);
20+
21+
context.RenderToContext("SourceGenerationContext.cs.template", sc, "SourceGenerationContext.g.cs");
22+
}
23+
}
24+
}

src/LibKubernetesGenerator/templates/ModelExtensions.cs.template

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,3 @@ namespace k8s.Models
1515
}
1616
{{ end }}
1717
}
18-
19-
#if NET8_0_OR_GREATER
20-
namespace k8s
21-
{
22-
{{ for definition in definitions }}
23-
[JsonSerializable(typeof({{ GetClassName definition }}))]
24-
{{ end }}
25-
internal partial class SourceGenerationContext : JsonSerializerContext
26-
{
27-
}
28-
}
29-
#endif
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// <auto-generated>
2+
// Code generated by https://github.com/kubernetes-client/csharp/tree/master/src/LibKubernetesGenerator
3+
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
4+
// </auto-generated>
5+
#if NET8_0_OR_GREATER
6+
namespace k8s
7+
{
8+
{{ for definition in definitions }}
9+
[JsonSerializable(typeof({{ GetClassName definition }}))]
10+
{{ end }}
11+
internal partial class SourceGenerationContext : JsonSerializerContext
12+
{
13+
}
14+
}
15+
#endif

tests/E2E.Aot.Tests/MinikubeTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,15 @@ async Task AssertMd5sumAsync(string file, byte[] orig)
370370
}
371371
}
372372

373+
374+
[MinikubeFact]
375+
public async Task VersionTestAsync()
376+
{
377+
using var client = CreateClient();
378+
var version = await client.Version.GetCodeAsync().ConfigureAwait(false);
379+
Assert.NotNull(version);
380+
}
381+
373382
public static IKubernetes CreateClient()
374383
{
375384
return new Kubernetes(KubernetesClientConfiguration.BuildDefaultConfig());

0 commit comments

Comments
 (0)