Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,17 @@

<ItemGroup>
<PackageReference Update="SauceControl.InheritDoc" Version="2.0.2" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.102">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.103" PrivateAssets="All"/>
<PackageReference Include="Nerdbank.GitVersioning" Condition="!Exists('packages.config')">
<PrivateAssets>all</PrivateAssets>
<Version>3.9.50</Version>
</PackageReference>
<None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath="" />
</ItemGroup>

<ItemGroup Condition="'$(IsPackable)' == 'true'">
<None Include="$(LicenseFile)" Pack="true" PackagePath=""/>
<None Include="$(RepoRootPath)aet.png" Pack="true" PackagePath=""/>
<None Include="$(RepoRootPath)README.md" Pack="true" PackagePath="" />
</ItemGroup>

</Project>
Binary file added aet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 5 additions & 7 deletions src/ModVerify.CliApp/App/CreateBaselineAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
using AET.ModVerify.App.Settings;
using AET.ModVerify.App.Utilities;
using AET.ModVerify.Reporting;
using AET.ModVerify.Reporting.Baseline;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO.Abstractions;
using System.Threading.Tasks;

Expand All @@ -26,24 +26,22 @@ protected override void PrintAction(VerificationTarget target)
Console.WriteLine();
}

protected override async Task<int> ProcessVerifyFindings(
VerificationTarget verificationTarget,
IReadOnlyCollection<VerificationError> allErrors)
protected override async Task<int> ProcessResult(VerificationResult result)
{
var baselineFactory = ServiceProvider.GetRequiredService<IBaselineFactory>();
var baseline = baselineFactory.CreateBaseline(verificationTarget, Settings, allErrors);
var baseline = baselineFactory.CreateBaseline(result.Target, Settings, result.Errors);

var fullPath = _fileSystem.Path.GetFullPath(Settings.NewBaselinePath);
Logger?.LogInformation(ModVerifyConstants.ConsoleEventId,
"Writing Baseline to '{FullPath}' with {Number} findings", fullPath, allErrors.Count);
"Writing Baseline to '{FullPath}' with {Number} findings", fullPath, result.Errors.Count);

await baselineFactory.WriteBaselineAsync(baseline, Settings.NewBaselinePath);

Logger?.LogDebug("Baseline successfully created.");

Console.WriteLine();
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine($"Baseline for {verificationTarget.Name} created.");
Console.WriteLine($"Baseline for {result.Target.Name} created.");
Console.ResetColor();

return ModVerifyConstants.Success;
Expand Down
59 changes: 34 additions & 25 deletions src/ModVerify.CliApp/App/ModVerifyApplicationAction.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
using System;
using System.Collections.Generic;
using System.IO.Abstractions;
using System.Threading.Tasks;
using AET.ModVerify.App.GameFinder;
using AET.ModVerify.App.Reporting;
using AET.ModVerify.App.Settings;
using AET.ModVerify.App.TargetSelectors;
using AET.ModVerify.Pipeline;
using AET.ModVerify.Reporting;
using AET.ModVerify.Reporting.Baseline;
using AET.ModVerify.Reporting.Suppressions;
using AnakinRaW.ApplicationBase;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
Expand Down Expand Up @@ -71,43 +71,55 @@ public async Task<int> ExecuteAsync()

PrintAction(verificationTarget);

var allErrors = await VerifyTargetAsync(verificationTarget)
var verificationResult = await VerifyTargetAsync(verificationTarget)
.ConfigureAwait(false);

return await ProcessVerifyFindings(verificationTarget, allErrors);
return await ProcessResult(verificationResult);
}

protected abstract Task<int> ProcessVerifyFindings(
VerificationTarget verificationTarget,
IReadOnlyCollection<VerificationError> allErrors);
protected abstract Task<int> ProcessResult(VerificationResult result);

protected abstract VerificationBaseline GetBaseline(VerificationTarget verificationTarget);

private async Task<IReadOnlyCollection<VerificationError>> VerifyTargetAsync(VerificationTarget verificationTarget)
private async Task<VerificationResult> VerifyTargetAsync(VerificationTarget verificationTarget)
{
var progressReporter = new VerifyConsoleProgressReporter(verificationTarget.Name, Settings.ReportSettings);

var baseline = GetBaseline(verificationTarget);
var suppressions = GetSuppressions();

using var verifyPipeline = new GameVerifyPipeline(
verificationTarget,
Settings.VerifyPipelineSettings,
progressReporter,
new EngineInitializeProgressReporter(verificationTarget.Engine),
baseline,
suppressions,
ServiceProvider);

try
{
var verifierService = ServiceProvider.GetRequiredService<IGameVerifierService>();

Logger?.LogInformation(ModVerifyConstants.ConsoleEventId, "Verifying '{Target}'...", verificationTarget.Name);
await verifyPipeline.RunAsync().ConfigureAwait(false);

var verificationResult = await verifierService.VerifyAsync(
verificationTarget,
Settings.VerifierServiceSettings,
baseline,
suppressions,
progressReporter,
new EngineInitializeProgressReporter(verificationTarget.Engine));

progressReporter.Report(string.Empty, 1.0);
}
catch (OperationCanceledException)
{
Logger?.LogWarning(ModVerifyConstants.ConsoleEventId, "Verification stopped due to enabled failFast setting.");

switch (verificationResult.Status)
{
case VerificationCompletionStatus.CompletedFailFast:
Logger?.LogWarning(ModVerifyConstants.ConsoleEventId, "Verification stopped due to enabled failFast setting.");
break;
case VerificationCompletionStatus.Cancelled:
Logger?.LogWarning(ModVerifyConstants.ConsoleEventId, "Verification was cancelled.");
break;
case VerificationCompletionStatus.Completed:
default:
Logger?.LogInformation(ModVerifyConstants.ConsoleEventId, "Verification completed successfully.");
break;
}

return verificationResult;

}
catch (Exception e)
{
Expand All @@ -119,9 +131,6 @@ private async Task<IReadOnlyCollection<VerificationError>> VerifyTargetAsync(Ver
{
progressReporter.Dispose();
}

Logger?.LogInformation(ModVerifyConstants.ConsoleEventId, "Finished verification");
return verifyPipeline.FilteredErrors;
}

private SuppressionList GetSuppressions()
Expand Down
53 changes: 45 additions & 8 deletions src/ModVerify.CliApp/App/VerifyAction.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
using AET.ModVerify.App.Reporting;
using AET.ModVerify.App.Settings;
using AET.ModVerify.App.Utilities;
using AET.ModVerify.Reporting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AET.ModVerify.App.Utilities;
using AET.ModVerify.Reporting.Reporters;
using AET.ModVerify.Reporting.Baseline;

namespace AET.ModVerify.App;

Expand All @@ -23,20 +25,27 @@ protected override void PrintAction(VerificationTarget target)
Console.WriteLine();
}

protected override async Task<int> ProcessVerifyFindings(
VerificationTarget verificationTarget,
IReadOnlyCollection<VerificationError> allErrors)
protected override async Task<int> ProcessResult(VerificationResult result)
{
Logger?.LogInformation(ModVerifyConstants.ConsoleEventId, "Reporting Errors...");
var reportBroker = new VerificationReportBroker(ServiceProvider);
await reportBroker.ReportAsync(allErrors);
var reportBroker = new VerificationReportBroker(CreateReporters(), ServiceProvider);

result = result with
{
Target = result.Target with
{
Location = result.Target.Location.MaskUsername()
}
};

await reportBroker.ReportAsync(result);

if (Settings.AppFailsOnMinimumSeverity.HasValue &&
allErrors.Any(x => x.Severity >= Settings.AppFailsOnMinimumSeverity))
result.Errors.Any(x => x.Severity >= Settings.AppFailsOnMinimumSeverity))
{
Logger?.LogInformation(ModVerifyConstants.ConsoleEventId,
"The verification of {Target} completed with findings of the specified failure severity {Severity}",
verificationTarget.Name, Settings.AppFailsOnMinimumSeverity);
result.Target.Name, Settings.AppFailsOnMinimumSeverity);

return ModVerifyConstants.CompletedWithFindings;
}
Expand All @@ -57,4 +66,32 @@ protected override VerificationBaseline GetBaseline(VerificationTarget verificat
}
return baseline;
}

private IReadOnlyCollection<IVerificationReporter> CreateReporters()
{
var reporters = new List<IVerificationReporter>();

reporters.Add(IVerificationReporter.CreateConsole(new ConsoleReporterSettings
{
MinimumReportSeverity = Settings.VerifierServiceSettings.FailFastSettings.IsFailFast
? VerificationSeverity.Information
: VerificationSeverity.Error
}, ServiceProvider));

var outputDirectory = Settings.ReportDirectory;
reporters.Add(IVerificationReporter.CreateJson(new JsonReporterSettings
{
OutputDirectory = outputDirectory,
MinimumReportSeverity = Settings.ReportSettings.MinimumReportSeverity,
AggregateResults = true
}, ServiceProvider));

reporters.Add(IVerificationReporter.CreateText(new TextFileReporterSettings
{
OutputDirectory = outputDirectory!,
MinimumReportSeverity = Settings.ReportSettings.MinimumReportSeverity
}, ServiceProvider));

return reporters;
}
}
14 changes: 3 additions & 11 deletions src/ModVerify.CliApp/ModVerify.CliApp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
<OutputType>Exe</OutputType>
<RootNamespace>AET.ModVerify.App</RootNamespace>
<AssemblyName>ModVerify</AssemblyName>
<ApplicationIcon>$(RepoRootPath)aet.ico</ApplicationIcon>
<ApplicationIcon>Resources/aet.ico</ApplicationIcon>
<PackageId>AlamoEngineTools.ModVerify.CliApp</PackageId>
</PropertyGroup>

<PropertyGroup>
<Title>ModVerify Console Application</Title>
<Product>AET.ModVerify</Product>
<Description>Console application that analyzes game modifications for Empire at War / Forces of Corruption for common errors.</Description>
<Description>An application that analyzes game modifications for Empire at War / Forces of Corruption for common errors.</Description>
<PackageTags>alamo,petroglyph,glyphx</PackageTags>
</PropertyGroup>

Expand All @@ -25,10 +25,6 @@
<NBGV_ThisAssemblyIncludesPackageVersion>true</NBGV_ThisAssemblyIncludesPackageVersion>
</PropertyGroup>

<ItemGroup>
<None Remove="Resources\Baselines\baseline-foc.json" />
</ItemGroup>

<ItemGroup>
<EmbeddedResource Include="Resources\Baselines\baseline-foc.json" />
</ItemGroup>
Expand Down Expand Up @@ -70,7 +66,7 @@
<ExcludeAssets>compile</ExcludeAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="IndexRange" Version="1.0.3" Condition="'$(TargetFramework)' == 'net481'">
<PackageReference Include="IndexRange" Version="1.1.0" Condition="'$(TargetFramework)' == 'net481'">
<ExcludeAssets>compile</ExcludeAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand All @@ -86,10 +82,6 @@
<ProjectReference Include="..\ModVerify\ModVerify.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Update="Microsoft.SourceLink.GitHub" Version="10.0.103" />
</ItemGroup>

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<WeaverConfiguration>
<Weavers>
Expand Down
40 changes: 1 addition & 39 deletions src/ModVerify.CliApp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@
using AET.ModVerify.App.Settings.CommandLine;
using AET.ModVerify.App.Updates;
using AET.ModVerify.App.Utilities;
using AET.ModVerify.Reporting;
using AET.ModVerify.Reporting.Reporters;
using AET.ModVerify.Reporting.Reporters.JSON;
using AET.ModVerify.Reporting.Reporters.Text;
using AET.ModVerify.Reporting.Settings;
using AET.SteamAbstraction;
using AnakinRaW.ApplicationBase;
using AnakinRaW.ApplicationBase.Environment;
Expand Down Expand Up @@ -36,7 +31,6 @@
using Serilog.Sinks.SystemConsole.Themes;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO.Abstractions;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
Expand Down Expand Up @@ -157,11 +151,10 @@ protected override void CreateAppServices(IServiceCollection services, IReadOnly
PetroglyphCommons.ContributeServices(services);

PetroglyphEngineServiceContribution.ContributeServices(services);
services.AddModVerify();
services.RegisterVerifierCache();

services.AddSingleton<IBaselineFactory>(sp => new BaselineFactory(sp));

SetupVerifyReporting(services);

if (_offlineMode)
{
Expand Down Expand Up @@ -200,37 +193,6 @@ protected override async Task<int> RunAppAsync(string[] args, IServiceProvider a
return await new ModVerifyApplication(_modVerifyAppSettings, appServiceProvider).RunAsync().ConfigureAwait(false);
}

private void SetupVerifyReporting(IServiceCollection serviceCollection)
{
Debug.Assert(_modVerifyAppSettings is not null);

var verifySettings = _modVerifyAppSettings as AppVerifySettings;

// Console should be in minimal summary mode if we are in a different mode than verify.
serviceCollection.RegisterConsoleReporter(new ReporterSettings
{
MinimumReportSeverity = verifySettings?.VerifyPipelineSettings.FailFastSettings.IsFailFast is true
? VerificationSeverity.Information
: VerificationSeverity.Error
}, summaryOnly: verifySettings is null);

if (verifySettings == null)
return;

var outputDirectory = verifySettings.ReportDirectory;
serviceCollection.RegisterJsonReporter(new JsonReporterSettings
{
OutputDirectory = outputDirectory!,
MinimumReportSeverity = _modVerifyAppSettings.ReportSettings.MinimumReportSeverity
});

serviceCollection.RegisterTextFileReporter(new TextFileReporterSettings
{
OutputDirectory = outputDirectory!,
MinimumReportSeverity = _modVerifyAppSettings.ReportSettings.MinimumReportSeverity
});
}

private void ConfigureLogging(ILoggingBuilder loggingBuilder)
{
loggingBuilder.ClearProviders();
Expand Down
Loading
Loading