59 lines
2.0 KiB
C#
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);
|
|
});
|
|
}
|
|
}
|