diff --git a/tools/builder/models/BuildContext.cs b/tools/builder/models/BuildContext.cs index 178c9295..4d31f027 100644 --- a/tools/builder/models/BuildContext.cs +++ b/tools/builder/models/BuildContext.cs @@ -46,8 +46,21 @@ public class BuildContext [Argument(0, "targets", Description = "The target(s) to run (default: 'PR'; values: 'Build', 'CI', 'Packages', 'PR', 'Restore', 'Test', 'TestCore', 'TestFx')")] public BuildTarget[] Targets { get; } = new[] { BuildTarget.PR }; - [Option("-v|--verbose", Description = "Enable verbose output")] - public bool Verbose { get; } + [Option("-v|--verbosity", Description = "Set verbosity level (default: 'minimal'; values: 'q[uiet]', 'm[inimal]', 'n[ormal]', 'd[etailed]', and 'diag[nostic]'")] + public BuildVerbosity Verbosity { get; } = BuildVerbosity.minimal; + + internal BuildVerbosity VerbosityNuGet + { + get + { + switch (Verbosity) + { + case BuildVerbosity.diagnostic: return BuildVerbosity.detailed; + case BuildVerbosity.minimal: return BuildVerbosity.normal; + default: return Verbosity; + } + } + } // Helper methods for build target consumption diff --git a/tools/builder/models/BuildVerbosity.cs b/tools/builder/models/BuildVerbosity.cs new file mode 100644 index 00000000..7f986595 --- /dev/null +++ b/tools/builder/models/BuildVerbosity.cs @@ -0,0 +1,15 @@ +public enum BuildVerbosity +{ + quiet, + minimal, + normal, + detailed, + diagnostic, + + // Shortcut names to match with msbuild/dotnet build + q = quiet, + m = minimal, + n = normal, + d = detailed, + diag = diagnostic +} diff --git a/tools/builder/targets/Build.cs b/tools/builder/targets/Build.cs index caf168ac..b531b402 100644 --- a/tools/builder/targets/Build.cs +++ b/tools/builder/targets/Build.cs @@ -10,6 +10,6 @@ public static async Task OnExecute(BuildContext context) { context.BuildStep("Compiling binaries"); - await context.Exec("dotnet", $"build --no-restore --configuration {context.ConfigurationText}"); + await context.Exec("dotnet", $"build --no-restore --configuration {context.ConfigurationText} --verbosity {context.Verbosity}"); } } diff --git a/tools/builder/targets/Packages.cs b/tools/builder/targets/Packages.cs index d2937a37..d6d9f177 100644 --- a/tools/builder/targets/Packages.cs +++ b/tools/builder/targets/Packages.cs @@ -13,17 +13,19 @@ public static async Task OnExecute(BuildContext context) { context.BuildStep("Creating NuGet packages"); - var versionOverride = string.Format("{0}.{1}+{2}", - Environment.GetEnvironmentVariable("NBGV_CloudBuildNumber"), - Environment.GetEnvironmentVariable("NBGV_VersionHeight"), - Environment.GetEnvironmentVariable("NBGV_GitCommitIdShort")); + var versionOverride = string.Format( + "{0}.{1}+{2}", + Environment.GetEnvironmentVariable("NBGV_CloudBuildNumber"), + Environment.GetEnvironmentVariable("NBGV_VersionHeight"), + Environment.GetEnvironmentVariable("NBGV_GitCommitIdShort")); var versionOption = versionOverride == ".+" ? string.Empty : $"-Version \"{versionOverride}\""; - var nuspecFiles = Directory.GetFiles(context.BaseFolder, "*.nuspec", SearchOption.AllDirectories) - .OrderBy(x => x) - .Select(x => x.Substring(context.BaseFolder.Length + 1)); + var nuspecFiles = + Directory.GetFiles(context.BaseFolder, "*.nuspec", SearchOption.AllDirectories) + .OrderBy(x => x) + .Select(x => x.Substring(context.BaseFolder.Length + 1)); foreach (var nuspecFile in nuspecFiles) - await context.Exec(context.NuGetExe, $"pack {nuspecFile} -NonInteractive -NoPackageAnalysis -OutputDirectory {context.PackageOutputFolder} -Properties Configuration={context.ConfigurationText} {versionOption}"); + await context.Exec(context.NuGetExe, $"pack {nuspecFile} -NonInteractive -NoPackageAnalysis -OutputDirectory {context.PackageOutputFolder} -Properties Configuration={context.ConfigurationText} -Verbosity {context.VerbosityNuGet} {versionOption}"); } } diff --git a/tools/builder/targets/PublishPackages.cs b/tools/builder/targets/PublishPackages.cs index e3c4893f..6acfa0cd 100644 --- a/tools/builder/targets/PublishPackages.cs +++ b/tools/builder/targets/PublishPackages.cs @@ -20,9 +20,10 @@ public static async Task OnExecute(BuildContext context) return; } - var packageFiles = Directory.GetFiles(context.PackageOutputFolder, "*.nupkg", SearchOption.AllDirectories) - .OrderBy(x => x) - .Select(x => x.Substring(context.BaseFolder.Length + 1)); + var packageFiles = + Directory.GetFiles(context.PackageOutputFolder, "*.nupkg", SearchOption.AllDirectories) + .OrderBy(x => x) + .Select(x => x.Substring(context.BaseFolder.Length + 1)); foreach (var packageFile in packageFiles) { diff --git a/tools/builder/targets/Restore.cs b/tools/builder/targets/Restore.cs index 4df1bb8b..3a577d81 100644 --- a/tools/builder/targets/Restore.cs +++ b/tools/builder/targets/Restore.cs @@ -7,10 +7,10 @@ public static async Task OnExecute(BuildContext context) { context.BuildStep("Restoring NuGet packages"); - await context.Exec("dotnet", "restore"); + await context.Exec("dotnet", $"restore --verbosity {context.Verbosity}"); context.BuildStep("Restoring .NET Core command-line tools"); - await context.Exec("dotnet", "tool restore"); + await context.Exec("dotnet", $"tool restore --verbosity {context.Verbosity}"); } } diff --git a/tools/builder/targets/SignPackages.cs b/tools/builder/targets/SignPackages.cs index 3a46ce0f..945612f6 100644 --- a/tools/builder/targets/SignPackages.cs +++ b/tools/builder/targets/SignPackages.cs @@ -21,16 +21,18 @@ public static async Task OnExecute(BuildContext context) return; } - var packageFiles = Directory.GetFiles(context.PackageOutputFolder, "*.nupkg", SearchOption.AllDirectories) - .OrderBy(x => x) - .Select(x => x.Substring(context.BaseFolder.Length + 1)); + var packageFiles = + Directory.GetFiles(context.PackageOutputFolder, "*.nupkg", SearchOption.AllDirectories) + .OrderBy(x => x) + .Select(x => x.Substring(context.BaseFolder.Length + 1)); var signClientAppSettings = Path.Combine(context.BaseFolder, "tools", "SignClient", "appsettings.json"); foreach (var packageFile in packageFiles) { var args = $"SignClient sign -c \"{signClientAppSettings}\" -r \"{signClientUser}\" -s \"{signClientSecret}\" -n \"xUnit.net\" -d \"xUnit.net\" -u \"https://github.com/xunit/xunit\" -i \"{packageFile}\""; - var redactedArgs = args.Replace(signClientUser, "[redacted]") - .Replace(signClientSecret, "[redacted]"); + var redactedArgs = + args.Replace(signClientUser, "[redacted]") + .Replace(signClientSecret, "[redacted]"); await context.Exec("dotnet", args, redactedArgs); } diff --git a/tools/builder/targets/TestCore.cs b/tools/builder/targets/TestCore.cs index aa79cf4e..6ea4e6ed 100644 --- a/tools/builder/targets/TestCore.cs +++ b/tools/builder/targets/TestCore.cs @@ -14,6 +14,6 @@ public static Task OnExecute(BuildContext context) var resultPath = Path.Combine(context.BaseFolder, "artifacts", "test"); File.Delete(Path.Combine(resultPath, "netcore.trx")); - return context.Exec("dotnet", $"test test/xunit.analyzers.tests --framework netcoreapp2.1 --configuration {context.ConfigurationText} --no-build --logger trx;LogFileName=netcore.trx --results-directory \"{resultPath}\""); + return context.Exec("dotnet", $"test test/xunit.analyzers.tests --framework netcoreapp2.1 --configuration {context.ConfigurationText} --no-build --logger trx;LogFileName=netcore.trx --results-directory \"{resultPath}\" --verbosity {context.Verbosity}"); } } diff --git a/tools/builder/targets/TestFx.cs b/tools/builder/targets/TestFx.cs index 044e0ad4..65fb3a28 100644 --- a/tools/builder/targets/TestFx.cs +++ b/tools/builder/targets/TestFx.cs @@ -14,6 +14,6 @@ public static Task OnExecute(BuildContext context) var resultPath = Path.Combine(context.BaseFolder, "artifacts", "test"); File.Delete(Path.Combine(resultPath, "netfx.trx")); - return context.Exec("dotnet", $"test test/xunit.analyzers.tests --framework net472 --configuration {context.ConfigurationText} --no-build --logger trx;LogFileName=netfx.trx --results-directory \"{resultPath}\""); + return context.Exec("dotnet", $"test test/xunit.analyzers.tests --framework net472 --configuration {context.ConfigurationText} --no-build --logger trx;LogFileName=netfx.trx --results-directory \"{resultPath}\" --verbosity {context.Verbosity}"); } }