From 496d763b38d6fb9220d5bf0e214f30840d13cba7 Mon Sep 17 00:00:00 2001 From: Nikolay Pianikov Date: Wed, 30 Oct 2024 16:06:27 +0300 Subject: [PATCH] Improved build --- Build/Program.cs | 52 +++++++++++++++------------- Samples/MySampleLib/Build/Program.cs | 43 ++++++++++++++++------- 2 files changed, 58 insertions(+), 37 deletions(-) diff --git a/Build/Program.cs b/Build/Program.cs index 5e0c599a..e3d7ab37 100644 --- a/Build/Program.cs +++ b/Build/Program.cs @@ -82,14 +82,18 @@ } } -var buildProps = new[] {("version", packageVersion.ToString())}; +var buildProps = new[] +{ + ("configuration", configuration), + ("version", packageVersion.ToString()) +}; + new MSBuild() .WithProject(Path.Combine(currentDir, "CSharpInteractive", "CSharpInteractive.Tool.csproj")) .WithRestore(true) .WithTarget("Rebuild;GetDependencyTargetPaths") .WithProps(buildProps) - .Build() - .EnsureSuccess(); + .Build().EnsureSuccess(); const string templateJson = "CSharpInteractive.Templates/content/ConsoleApplication-CSharp/.template.config/template.json"; var content = File.ReadAllText(templateJson); @@ -173,13 +177,17 @@ } } -var uninstallTool = new DotNetToolUninstall() +var hasTool = new DotNetToolList() .WithPackage(toolPackageId) - .WithGlobal(true); + .WithGlobal(true) + .Run().ExitCode == 0; -if (uninstallTool.Run(_ => { }).ExitCode != 0) +if (hasTool) { - Warning($"{uninstallTool} failed."); + new DotNetToolUninstall() + .WithPackage(toolPackageId) + .WithGlobal(true) + .Run().EnsureSuccess(); } if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -196,28 +204,22 @@ .WithProject(Path.Combine("Samples", "MySampleLib")) .BuildAsync().EnsureSuccess(); -var installTool = new DotNetToolInstall() +new DotNetToolInstall() .WithPackage(toolPackageId) .WithGlobal(true) + .WithNoCache(true) .WithVersion(packageVersion.ToString()) - .AddSources(Path.Combine(outputDir, "CSharpInteractive.Tool")); - -installTool.Run(output => -{ - output.Handled = true; - WriteLine(output.Line); -}).EnsureSuccess(_ => true); + .AddSources(Path.Combine(outputDir, "CSharpInteractive.Tool")) + .Run().EnsureSuccess(); -new DotNetCsi().WithVersion(true).WithShortName("Checking csi tool").Run().EnsureSuccess(); +new DotNetCsi() + .WithVersion(true) + .WithShortName("Checking csi tool") + .Run().EnsureSuccess(); -var uninstallTemplates = new DotNetNewUninstall() - .WithPackage(templatesPackageId); - -uninstallTemplates.Run(output => -{ - output.Handled = true; - WriteLine(output.Line); -}).EnsureSuccess(_ => true); +new DotNetNewUninstall() + .WithPackage(templatesPackageId) + .Run(); var installTemplates = new DotNetNewInstall() .WithPackage($"{templatesPackageId}::{packageVersion.ToString()}") @@ -243,7 +245,7 @@ Info("Pushing NuGet packages were skipped."); } -if (integrationTests || dockerLinuxTests) +if (!skipTests && (integrationTests || dockerLinuxTests)) { var logicOp = integrationTests && dockerLinuxTests ? "|" : "&"; var filter = $"Integration={integrationTests}{logicOp}Docker={dockerLinuxTests}"; diff --git a/Samples/MySampleLib/Build/Program.cs b/Samples/MySampleLib/Build/Program.cs index fb101bf8..e82a1502 100644 --- a/Samples/MySampleLib/Build/Program.cs +++ b/Samples/MySampleLib/Build/Program.cs @@ -2,6 +2,8 @@ using HostApi; using Microsoft.Extensions.DependencyInjection; using NuGet.Versioning; +// ReSharper disable SeparateLocalFunctionsWithJumpStatement +// ReSharper disable UnusedVariable // Output, logging and tracing API WriteLine("Hello"); @@ -58,7 +60,9 @@ } // API for .NET CLI -var buildResult = new DotNetBuild().WithConfiguration(configuration).WithNoLogo(true) +var buildResult = new DotNetBuild() + .WithConfiguration(configuration) + .WithNoLogo(true) .Build().EnsureSuccess(); var warnings = buildResult.Warnings @@ -76,11 +80,11 @@ // Asynchronous way var cts = new CancellationTokenSource(); -/*await new DotNetTest() +await new DotNetTest() .WithConfiguration(configuration) - .WithNoLogo(true).WithNoBuild(true) - .BuildAsync(CancellationOnFirstFailedTest, cts.Token) - .EnsureSuccess();*/ + .WithNoLogo(true) + .WithNoBuild(true) + .BuildAsync(CancellationOnFirstFailedTest, cts.Token); void CancellationOnFirstFailedTest(BuildMessage message) { @@ -95,20 +99,35 @@ void CancellationOnFirstFailedTest(BuildMessage message) async Task> RunTestsAsync(string framework, params string[] platforms) { - var publish = new DotNetPublish().WithWorkingDirectory("MySampleLib.Tests") - .WithFramework($"net{framework}").WithConfiguration(configuration).WithNoBuild(true); + var publish = new DotNetPublish() + .WithWorkingDirectory("MySampleLib.Tests") + .WithFramework($"net{framework}") + .WithConfiguration(configuration) + .WithNoBuild(true); + await publish.BuildAsync(cancellationToken: cts.Token).EnsureSuccess(); var publishPath = Path.Combine(publish.WorkingDirectory, "bin", configuration, $"net{framework}", "publish"); - var test = new VSTest().WithTestFileNames("*.Tests.dll"); - var testInDocker = new DockerRun().WithCommandLine(test).WithAutoRemove(true).WithQuiet(true) - .WithVolumes((Path.GetFullPath(publishPath), "/app")).WithContainerWorkingDirectory("/app"); + var test = new VSTest() + .WithTestFileNames("*.Tests.dll"); + + var testInDocker = new DockerRun() + .WithCommandLine(test) + .WithAutoRemove(true) + .WithQuiet(true) + .WithVolumes((Path.GetFullPath(publishPath), "/app")) + .WithContainerWorkingDirectory("/app"); + var tasks = from platform in platforms let image = $"mcr.microsoft.com/dotnet/sdk:{framework}-{platform}" - select testInDocker.WithImage(image).BuildAsync(CancellationOnFirstFailedTest, cts.Token); + select testInDocker + .WithImage(image) + .BuildAsync(CancellationOnFirstFailedTest, cts.Token); return await Task.WhenAll(tasks); } #pragma warning disable CS9113// Parameter is unread. -class MyTool(INuGet nuGet); + +internal class MyTool(INuGet nuGet); + #pragma warning restore CS9113// Parameter is unread. \ No newline at end of file