LotSizingDataModel.Checker.Cli 2.0.1
Command-line interface for solution checking and validation workflows.
Loading...
Searching...
No Matches
Program.cs
Go to the documentation of this file.
1using System.Text;
2using LotSizingDataModel.Checker.Campaign;
3
5
6internal static class Program
7{
8 public static async Task<int> Main(string[] args)
9 {
10 Console.OutputEncoding = Encoding.UTF8;
11
12 CliParseResult parseResult =
14
15 if (parseResult.ShowHelp)
16 {
17 CliHelp.Write();
18 return (int)CliExitCode.Success;
19 }
20
21 if (parseResult.ShowVersion)
22 {
23 Console.WriteLine(CliHelp.Version);
24 return (int)CliExitCode.Success;
25 }
26
27 if (!parseResult.Success || parseResult.Options is null)
28 {
29 Console.Error.WriteLine(
30 "checker: " +
31 (parseResult.ErrorMessage ?? "Invalid command line."));
32 Console.Error.WriteLine("Use 'checker --help' for usage.");
33 return (int)CliExitCode.InvalidArguments;
34 }
35
36 CliOptions cliOptions =
37 parseResult.Options;
38
39 using var cancellationSource =
40 new CancellationTokenSource();
41
42 ConsoleCancelEventHandler cancelHandler =
43 (_, eventArgs) =>
44 {
45 eventArgs.Cancel = true;
46 cancellationSource.Cancel();
47 };
48
49 Console.CancelKeyPress += cancelHandler;
50
51 CliProgressRenderer? progressRenderer =
52 cliOptions.ShowProgress
54 : null;
55
56 try
57 {
58 DirectoryVerificationCampaignOptions campaignOptions =
59 cliOptions.BuildCampaignOptions();
60
61 var service =
62 new DirectoryVerificationCampaignService();
63
64 DirectoryVerificationCampaignResult result =
65 await service.RunAsync(
66 cliOptions.InputDirectory,
67 cliOptions.OutputDirectory,
68 campaignOptions,
69 progressRenderer,
70 cancellationSource.Token)
71 .ConfigureAwait(false);
72
73 progressRenderer?.CompleteLine();
74
75 WriteSummary(result);
76
77 return (int)CliExitCodePolicy.Determine(result);
78 }
79 catch (OperationCanceledException)
80 when (cancellationSource.IsCancellationRequested)
81 {
82 progressRenderer?.CompleteLine();
83 Console.Error.WriteLine("checker: campaign cancelled.");
84 return (int)CliExitCode.Cancelled;
85 }
86 catch (DirectoryNotFoundException exception)
87 {
88 progressRenderer?.CompleteLine();
89 Console.Error.WriteLine("checker: " + exception.Message);
90 return (int)CliExitCode.InvalidArguments;
91 }
92 catch (ArgumentException exception)
93 {
94 progressRenderer?.CompleteLine();
95 Console.Error.WriteLine("checker: " + exception.Message);
96 return (int)CliExitCode.InvalidArguments;
97 }
98 catch (InvalidOperationException exception)
99 {
100 progressRenderer?.CompleteLine();
101 Console.Error.WriteLine("checker: " + exception.Message);
102 return (int)CliExitCode.InvalidArguments;
103 }
104 catch (Exception exception)
105 {
106 progressRenderer?.CompleteLine();
107 Console.Error.WriteLine(
108 "checker: unexpected failure: " +
109 exception.GetType().FullName +
110 ": " +
111 exception.Message);
112 return (int)CliExitCode.UnexpectedFailure;
113 }
114 finally
115 {
116 Console.CancelKeyPress -= cancelHandler;
117 }
118 }
119
120 private static void WriteSummary(
121 DirectoryVerificationCampaignResult result)
122 {
123 Console.WriteLine("Lot-sizing checker campaign");
124 Console.WriteLine(new string('=', 48));
125 Console.WriteLine($"Input files : {result.DiscoveredXmlFileCount}");
126 Console.WriteLine($"Loaded instances : {result.LoadedInstanceCount}");
127 Console.WriteLine($"Candidates : {result.CandidateCount}");
128 Console.WriteLine($"Valid : {result.BatchResult.ValidCandidateCount}");
129 Console.WriteLine($"Invalid : {result.BatchResult.InvalidCandidateCount}");
130 Console.WriteLine($"Execution failures : {result.BatchResult.ExecutionFailureCount}");
131 Console.WriteLine($"File load failures : {result.FileLoadFailureCount}");
132 Console.WriteLine($"Overall : {(result.IsValid ? "VALID" : "INVALID")}");
133
134 if (!string.IsNullOrWhiteSpace(result.ReportFiles.SummaryReportPath))
135 {
136 Console.WriteLine($"Summary report : {result.ReportFiles.SummaryReportPath}");
137 }
138
139 if (!string.IsNullOrWhiteSpace(result.ReportFiles.ManifestPath))
140 {
141 Console.WriteLine($"Manifest : {result.ReportFiles.ManifestPath}");
142 }
143 }
144}
Determines the process exit code corresponding to one completed checker campaign.
static CliExitCode Determine(DirectoryVerificationCampaignResult result)
Maps a completed campaign result to a stable CLI exit code.
DirectoryVerificationCampaignOptions BuildCampaignOptions()
Definition CliOptions.cs:25
static CliParseResult Parse(string[] args)
static async Task< int > Main(string[] args)
Definition Program.cs:8