- Implemented PolicyDslValidator with command-line options for strict mode and JSON output. - Created PolicySchemaExporter to generate JSON schemas for policy-related models. - Developed PolicySimulationSmoke tool to validate policy simulations against expected outcomes. - Added project files and necessary dependencies for each tool. - Ensured proper error handling and usage instructions across tools.
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.Collections.Immutable;
 | 
						|
using System.Text.Json;
 | 
						|
using System.Text.Json.Serialization;
 | 
						|
using NJsonSchema;
 | 
						|
using NJsonSchema.Generation;
 | 
						|
using NJsonSchema.Generation.SystemTextJson;
 | 
						|
using Newtonsoft.Json;
 | 
						|
using StellaOps.Scheduler.Models;
 | 
						|
 | 
						|
var output = args.Length switch
 | 
						|
{
 | 
						|
    0 => Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "docs", "schemas")),
 | 
						|
    1 => Path.GetFullPath(args[0]),
 | 
						|
    _ => throw new ArgumentException("Usage: dotnet run --project tools/PolicySchemaExporter -- [outputDirectory]")
 | 
						|
};
 | 
						|
 | 
						|
Directory.CreateDirectory(output);
 | 
						|
 | 
						|
var generatorSettings = new SystemTextJsonSchemaGeneratorSettings
 | 
						|
{
 | 
						|
    SchemaType = SchemaType.JsonSchema,
 | 
						|
    DefaultReferenceTypeNullHandling = ReferenceTypeNullHandling.NotNull,
 | 
						|
    SerializerOptions = new JsonSerializerOptions
 | 
						|
    {
 | 
						|
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
 | 
						|
        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
 | 
						|
    },
 | 
						|
};
 | 
						|
 | 
						|
var generator = new JsonSchemaGenerator(generatorSettings);
 | 
						|
 | 
						|
var exports = ImmutableArray.Create(
 | 
						|
    (FileName: "policy-run-request.schema.json", Type: typeof(PolicyRunRequest)),
 | 
						|
    (FileName: "policy-run-status.schema.json", Type: typeof(PolicyRunStatus)),
 | 
						|
    (FileName: "policy-diff-summary.schema.json", Type: typeof(PolicyDiffSummary)),
 | 
						|
    (FileName: "policy-explain-trace.schema.json", Type: typeof(PolicyExplainTrace))
 | 
						|
);
 | 
						|
 | 
						|
foreach (var export in exports)
 | 
						|
{
 | 
						|
    var schema = generator.Generate(export.Type);
 | 
						|
    schema.Title = export.Type.Name;
 | 
						|
    schema.AllowAdditionalProperties = false;
 | 
						|
 | 
						|
    var outputPath = Path.Combine(output, export.FileName);
 | 
						|
    await File.WriteAllTextAsync(outputPath, schema.ToJson(Formatting.Indented) + Environment.NewLine);
 | 
						|
    Console.WriteLine($"Wrote {outputPath}");
 | 
						|
}
 |