Files
git.stella-ops.org/src/__Libraries/StellaOps.Policy.Tools/PolicyDslValidatorCommand.cs
2026-02-01 21:37:40 +02:00

59 lines
2.0 KiB
C#

using StellaOps.Policy;
using System.CommandLine;
namespace StellaOps.Policy.Tools;
public static class PolicyDslValidatorCommand
{
public static RootCommand Build(IPolicyValidationRunner runner, CancellationToken? cancellationTokenOverride = null)
{
var root = new RootCommand("Validate StellaOps policy DSL files.");
Configure(root, runner, cancellationTokenOverride);
return root;
}
public static Command BuildCommand(IPolicyValidationRunner runner, CancellationToken? cancellationTokenOverride = null)
{
var command = new Command("policy-dsl-validate", "Validate StellaOps policy DSL files.");
Configure(command, runner, cancellationTokenOverride);
return command;
}
private static void Configure(Command command, IPolicyValidationRunner runner, CancellationToken? cancellationTokenOverride)
{
var inputs = new Argument<List<string>>("inputs")
{
Description = "Policy files, directories, or globs to validate.",
Arity = ArgumentArity.OneOrMore
};
var strict = new Option<bool>("--strict", new[] { "-s" })
{
Description = "Treat warnings as errors."
};
var outputJson = new Option<bool>("--json", new[] { "-j" })
{
Description = "Emit machine-readable JSON output."
};
command.Add(inputs);
command.Add(strict);
command.Add(outputJson);
command.SetAction(async (parseResult, cancellationToken) =>
{
var options = new PolicyValidationCliOptions
{
Inputs = parseResult.GetValue(inputs) ?? new List<string>(),
Strict = parseResult.GetValue(strict),
OutputJson = parseResult.GetValue(outputJson),
};
var effectiveCancellationToken = cancellationTokenOverride ?? cancellationToken;
return await runner.RunAsync(options, effectiveCancellationToken);
});
}
}