Skip to content

Commit

Permalink
Merge branch 'hotfix/9.0.2'
Browse files Browse the repository at this point in the history
  • Loading branch information
matkoch committed Dec 3, 2024
2 parents a94fbe2 + 8bb7b0e commit b8bba6e
Show file tree
Hide file tree
Showing 93 changed files with 202 additions and 733 deletions.
2 changes: 1 addition & 1 deletion .run/Generate-Tools.run.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" />
<option name="PROJECT_KIND" value="DotNetCore" />
<option name="PROJECT_TFM" value="net7.0" />
<option name="PROJECT_TFM" value="net8.0" />
<method v="2">
<option name="Build" />
</method>
Expand Down
4 changes: 2 additions & 2 deletions .run/Publish MSBuildTasks.run.xml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Publish MSBuildTasks" type="RunNativeExe" factoryName="Native Executable">
<option name="EXE_PATH" value="/usr/local/share/dotnet/dotnet" />
<option name="PROGRAM_PARAMETERS" value="publish --framework net9.0" />
<option name="PROGRAM_PARAMETERS" value="publish --framework net8.0" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/source/Nuke.MSBuildTasks" />
<option name="PASS_PARENT_ENVS" value="1" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<method v="2" />
</configuration>
</component>
</component>
16 changes: 15 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,19 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

## [vNext]

## [9.0.2] / 2024-12-03
- Fixed MSBuild tasks to use `net8.0` target framework
- Fixed error handling in `:update` command
- Fixed resolving tool path from options
- Fixed nullable options for `ToolTasks.Run`
- Fixed nullable underlying dictionary for delegate properties
- Fixed skipping null and whitespace arguments
- Fixed tool requirements
- Fixed NPM tool path resolution
- Fixed logging errors as standard in `GitTasks` and `DockerTasks`
- Fixed argument format in `DotNetTasks`
- Fixed nullable `Plugins` dictionary in `ReSharperTasks`

## [9.0.1] / 2024-11-21
- Fixed `Options` serialization to JSON
- Fixed `Options` for default members in interfaces
Expand Down Expand Up @@ -1183,7 +1196,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Added CLT tasks for Git
- Fixed background color in console output

[vNext]: https://github.com/nuke-build/nuke/compare/9.0.1...HEAD
[vNext]: https://github.com/nuke-build/nuke/compare/9.0.2...HEAD
[9.0.2]: https://github.com/nuke-build/nuke/compare/9.0.1...9.0.2
[9.0.1]: https://github.com/nuke-build/nuke/compare/9.0.0...9.0.1
[9.0.0]: https://github.com/nuke-build/nuke/compare/8.1.4...9.0.0
[8.1.4]: https://github.com/nuke-build/nuke/compare/8.1.3...8.1.4
Expand Down
2 changes: 1 addition & 1 deletion build/_build.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<!-- Test properties for MSBuild integration -->
<PropertyGroup>
<NukeTasksEnabled Condition="'$(NukeTasksEnabled)' == ''">False</NukeTasksEnabled>
<NukeTasksDirectory>$(MSBuildThisFileDirectory)\..\source\Nuke.MSBuildTasks\bin\Debug\net9.0\publish</NukeTasksDirectory>
<NukeTasksDirectory>$(MSBuildThisFileDirectory)\..\source\Nuke.MSBuildTasks\bin\Debug\net8.0\publish</NukeTasksDirectory>

<!-- <PackAsTool>True</PackAsTool>-->
<!-- <ToolCommandName>build</ToolCommandName>-->
Expand Down
4 changes: 2 additions & 2 deletions source/Nuke.Build/Execution/TargetDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,14 +140,14 @@ public ITargetDefinition Requires(Expression<Func<bool>> requirement, params Exp
public ITargetDefinition Requires<T>()
where T : IRequireTool
{
ToolRequirements.Add(typeof(T).GetCustomAttribute<ToolRequirementAttributeBase>().NotNull().GetRequirement());
ToolRequirements.Add(typeof(T).GetCustomAttribute<ToolAttribute>().NotNull().GetRequirement());
return this;
}

public ITargetDefinition Requires<T>(string version)
where T : IRequireToolWithVersion
{
ToolRequirements.Add(typeof(T).GetCustomAttribute<ToolRequirementAttributeBase>().NotNull().GetRequirement(version));
ToolRequirements.Add(typeof(T).GetCustomAttribute<ToolAttribute>().NotNull().GetRequirement(version));
return this;
}

Expand Down
2 changes: 1 addition & 1 deletion source/Nuke.Build/RequiresAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ public class RequiresAttribute<T> : RequiresAttribute

public override ToolRequirement GetRequirement()
{
return typeof(T).GetCustomAttribute<ToolRequirementAttributeBase>().NotNull().GetRequirement(Version);
return typeof(T).GetCustomAttribute<ToolAttribute>().NotNull().GetRequirement(Version);
}
}
25 changes: 21 additions & 4 deletions source/Nuke.Common.Tests/SettingsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,24 @@ public void TestDotNet()
Assert(new DotNetRunSettings()
.AddApplicationArguments("arg1")
.AddApplicationArguments("arg2")
.SetProperty("foo", "bar"),
"run --property:foo=bar -- arg1 arg2");
.SetProperty("foo", "bar")
.SetInformationalVersion("version"),
"run --property:foo=bar --property:InformationalVersion=version -- arg1 arg2");

Assert(new DotNetPackSettings()
.SetAuthors("a", "b"),
"pack --property:Authors=a,b");
}

[Fact]
public void TestDotNet_Empty()
{
Assert(new DotNetBuildSettings()
.SetFramework(null)
.SetConfiguration("")
.SetProperty("foo1", null)

Check warning on line 135 in source/Nuke.Common.Tests/SettingsTest.cs

View workflow job for this annotation

GitHub Actions / Qodana for .NET

Use preferred argument style for literal values

Inconsistent argument style: missing name identifier
.SetProperty("foo2", ""),
"build");
}

[Fact]
Expand Down Expand Up @@ -157,9 +173,10 @@ public void TestKubernetes()
"exec --container=container --cluster=cluster -- command arg1 arg2");
}

private static void Assert<T>(T options, string arguments)
private static void Assert<T>(T options, string expected)
where T : ToolOptions, new()
{
options.GetArguments().JoinSpace().Should().Be(arguments);
var arguments = options.GetArguments().JoinSpace();
arguments.Should().Be(expected);
}
}
2 changes: 1 addition & 1 deletion source/Nuke.Common/Attributes/NpmPackageAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public NpmPackageAttribute(string packageId, string packageExecutable = null)

public override ToolRequirement GetRequirement(MemberInfo member)
{
return NpmPackageRequirement.Create(_packageId, Version);
return new NpmPackageRequirement(_packageId, Version);
}

public override object GetValue(MemberInfo member, object instance)
Expand Down
2 changes: 1 addition & 1 deletion source/Nuke.Common/Attributes/NuGetPackageAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public NuGetPackageAttribute(string packageId, string packageExecutable32, strin

public override ToolRequirement GetRequirement(MemberInfo member)
{
return NuGetPackageRequirement.Create(_packageId, Version);
return new NuGetPackageRequirement(_packageId, Version);
}

public override object GetValue(MemberInfo member, object instance)
Expand Down
2 changes: 1 addition & 1 deletion source/Nuke.Common/Attributes/PathVariableAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public PathVariableAttribute(string pathExecutable = null)
public override ToolRequirement GetRequirement(MemberInfo member)
{
var name = _pathExecutable ?? member.Name.ToLowerInvariant();
return PathToolRequirement.Create(name);
return new PathToolRequirement(name);
}

public override object GetValue(MemberInfo member, object instance)
Expand Down
2 changes: 1 addition & 1 deletion source/Nuke.Common/Nuke.Common.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<None Include="$(MSBuildProjectName).targets" PackagePath="build" Pack="true" />
<None Include="..\Nuke.MSBuildTasks\Nuke.MSBuildTasks.targets" PackagePath="build\netcore" Pack="true" />
<None Include="..\Nuke.MSBuildTasks\Nuke.MSBuildTasks.targets" PackagePath="build\netfx" Pack="true" />
<None Include="..\Nuke.MSBuildTasks\bin\$(Configuration)\net9.0\publish\**\*.*" PackagePath="build\netcore" Pack="true" />
<None Include="..\Nuke.MSBuildTasks\bin\$(Configuration)\net8.0\publish\**\*.*" PackagePath="build\netcore" Pack="true" />
<None Include="..\Nuke.MSBuildTasks\bin\$(Configuration)\net472\publish\**\*.*" PackagePath="build\netfx" Pack="true" />
<None Include="..\Nuke.SourceGenerators\bin\$(Configuration)\netstandard2.0\*.dll" PackagePath="analyzers\dotnet\cs" Pack="true" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.AzureSignTool;
/// <summary><p>Azure Sign Tool is similar to <c>signtool</c> in the Windows SDK, with the major difference being that it uses Azure Key Vault for performing the signing process. The usage is like <c>signtool</c>, except with a limited set of options for signing and options for authenticating to Azure Key Vault.</p><p>For more details, visit the <a href="https://github.com/vcsjones/AzureSignTool">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId, Executable = PackageExecutable)]
public partial class AzureSignToolTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.BenchmarkDotNet;
/// <summary><p>Powerful .NET library for benchmarking</p><p>For more details, visit the <a href="https://benchmarkdotnet.org/">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId, Executable = PackageExecutable)]
public partial class BenchmarkDotNetTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
1 change: 0 additions & 1 deletion source/Nuke.Common/Tools/Boots/Boots.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.Boots;
/// <summary><p>boots is a .NET global tool for <c>bootstrapping</c> <c>vsix</c> and <c>pkg</c> files.</p><p>For more details, visit the <a href="https://github.com/jonathanpeppers/boots">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId, Executable = PackageExecutable)]
public partial class BootsTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.Chocolatey;
/// <summary><p>Chocolatey has the largest online registry of Windows packages. Chocolatey packages encapsulate everything required to manage a particular piece of software into one deployment artifact by wrapping installers, executables, zips, and/or scripts into a compiled package file.</p><p>For more details, visit the <a href="https://chocolatey.org/">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[PathToolRequirement(PathExecutable)]
[PathTool(Executable = PathExecutable)]
public partial class ChocolateyTasks : ToolTasks, IRequirePathTool
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.CodeMetrics;
/// <summary><p>Code metrics is a set of software measures that provide developers better insight into the code they are developing. By taking advantage of code metrics, developers can understand which types and/or methods should be reworked or more thoroughly tested. Development teams can identify potential risks, understand the current state of a project, and track progress during software development.</p><p>For more details, visit the <a href="https://docs.microsoft.com/en-us/visualstudio/code-quality/code-metrics-values">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId, Executable = PackageExecutable)]
public partial class CodeMetricsTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
1 change: 0 additions & 1 deletion source/Nuke.Common/Tools/Codecov/Codecov.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.Codecov;
/// <summary><p>Code coverage is a measurement used to express which lines of code were executed by a test suite. We use three primary terms to describe each line executed.<para/><ul><li>hit - indicates that the source code was executed by the test suite.</li><li>partial - indicates that the source code was not fully executed by the test suite; there are remaining branches that were not executed.</li><li>miss - indicates that the source code was not executed by the test suite.</li></ul><para/>Coverage is the ratio of <c>hits / (sum of hit + partial + miss)</c>. A code base that has 5 lines executed by tests out of 12 total lines will receive a coverage ratio of 41% (rounding down).<para/>Phrased simply, code coverage provides a visual measurement of what source code is being executed by a test suite. This information indicates to the software developer where they should write new tests in an effort to achieve higher coverage.<para/>Testing source code helps to prevent bugs and syntax errors by executing each line with a known variable and cross-checking it with an expected output.</p><p>For more details, visit the <a href="https://about.codecov.io/">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId)]
public partial class CodecovTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
1 change: 0 additions & 1 deletion source/Nuke.Common/Tools/CorFlags/CorFlags.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.CorFlags;
/// <summary><p>The CorFlags Conversion tool allows you to configure the CorFlags section of the header of a portable executable image.</p><p>For more details, visit the <a href="https://docs.microsoft.com/en-us/dotnet/framework/tools/corflags-exe-corflags-conversion-tool">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[PathToolRequirement(PathExecutable)]
[PathTool(Executable = PathExecutable)]
public partial class CorFlagsTasks : ToolTasks, IRequirePathTool
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.CoverallsNet;
/// <summary><p>Coveralls uploader for .Net Code coverage of your C# source code. Should work with any code files that get reported with the supported coverage tools, but the primary focus is CSharp.</p><p>For more details, visit the <a href="https://coverallsnet.readthedocs.io">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId, Executable = PackageExecutable)]
public partial class CoverallsNetTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
1 change: 0 additions & 1 deletion source/Nuke.Common/Tools/Coverlet/Coverlet.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ namespace Nuke.Common.Tools.Coverlet;
/// <summary><p><c>Coverlet</c> is a cross platform code coverage library for .NET Core, with support for line, branch and method coverage.The <c>dotnet test</c> command is used to execute unit tests in a given project. Unit tests are console application projects that have dependencies on the unit test framework (for example, MSTest, NUnit, or xUnit) and the dotnet test runner for the unit testing framework. These are packaged as NuGet packages and are restored as ordinary dependencies for the project.</p><p>For more details, visit the <a href="https://github.com/tonerdo/coverlet/">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId, Executable = PackageExecutable)]
public partial class CoverletTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
1 change: 0 additions & 1 deletion source/Nuke.Common/Tools/DocFX/DocFX.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.DocFX;
/// <summary><p>DocFX is an API documentation generator for .NET, and currently it supports C# and VB. It generates API reference documentation from triple-slash comments in your source code. It also allows you to use Markdown files to create additional topics such as tutorials and how-tos, and to customize the generated reference documentation. DocFX builds a static HTML website from your source code and Markdown files, which can be easily hosted on any web servers (for example, <em>github.io</em>). Also, DocFX provides you the flexibility to customize the layout and style of your website through templates. If you are interested in creating your own website with your own styles, you can follow <a href="http://dotnet.github.io/docfx/tutorial/howto_create_custom_template.html">how to create custom template</a> to create custom templates.</p><p>For more details, visit the <a href="https://dotnet.github.io/docfx/">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId, Executable = PackageExecutable)]
public partial class DocFXTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
1 change: 0 additions & 1 deletion source/Nuke.Common/Tools/Docker/Docker.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.Docker;
/// <summary><p>Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.</p><p>For more details, visit the <a href="https://www.docker.com/">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[PathToolRequirement(PathExecutable)]
[PathTool(Executable = PathExecutable)]
public partial class DockerTasks : ToolTasks, IRequirePathTool
{
Expand Down
1 change: 1 addition & 0 deletions source/Nuke.Common/Tools/Docker/DockerTasks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@

namespace Nuke.Common.Tools.Docker;

[LogErrorAsStandard]
[LogLevelPattern(LogEventLevel.Warning, "^WARNING!")]
partial class DockerTasks;
1 change: 0 additions & 1 deletion source/Nuke.Common/Tools/DotCover/DotCover.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.DotCover;
/// <summary><p>dotCover is a .NET unit testing and code coverage tool that works right in Visual Studio, helps you know to what extent your code is covered with unit tests, provides great ways to visualize code coverage, and is Continuous Integration ready. dotCover calculates and reports statement-level code coverage in applications targeting .NET Framework, Silverlight, and .NET Core.</p><p>For more details, visit the <a href="https://www.jetbrains.com/dotcover">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId)]
public partial class DotCoverTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.DotMemoryUnit;
/// <summary><p>dotMemory Unit is a unit testing framework which allows you to write tests that check your code for all kinds of memory issues. You can now extend NUnit, MSTest or another .NET unit testing framework with the functionality of a memory profiler.<para/>Perfect fit for any workflow: integrated with Visual Studio, works with stand-alone unit test runners, Continuous Integration ready. Last but not least, dotMemory Unit is free.</p><p>For more details, visit the <a href="https://www.jetbrains.com/dotmemory/unit/">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[NuGetPackageRequirement(PackageId)]
[NuGetTool(Id = PackageId, Executable = PackageExecutable)]
public partial class DotMemoryUnitTasks : ToolTasks, IRequireNuGetPackage
{
Expand Down
3 changes: 1 addition & 2 deletions source/Nuke.Common/Tools/DotNet/DotNet.Generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ namespace Nuke.Common.Tools.DotNet;
/// <summary><p>For more details, visit the <a href="https://docs.microsoft.com/en-us/dotnet/core/tools/">official website</a>.</p></summary>
[PublicAPI]
[ExcludeFromCodeCoverage]
[PathToolRequirement(PathExecutable)]
[PathTool(Executable = PathExecutable)]
public partial class DotNetTasks : ToolTasks, IRequirePathTool
{
Expand Down Expand Up @@ -559,7 +558,7 @@ public partial class DotNetMSBuildSettings : ToolOptions
/// <summary>Generate MSBuild <a href="https://github.com/dotnet/msbuild/blob/main/documentation/wiki/Binary-Log.md">binary log</a>.</summary>
[Argument(Format = "-bl:{value}")] public string BinaryLog => Get<string>(() => BinaryLog);
/// <summary><p>Set or override the specified project-level properties, where name is the property name and value is the property value. Specify each property separately, or use a semicolon or comma to separate multiple properties, as the following example shows:</p><p><c>/property:WarningLevel=2;OutDir=bin\Debug</c></p></summary>
[Argument(Format = "/property:{value}")] public IReadOnlyDictionary<string, object> Properties => Get<Dictionary<string, object>>(() => Properties);
[Argument(Format = "/property:{key}={value}")] public IReadOnlyDictionary<string, object> Properties => Get<Dictionary<string, object>>(() => Properties);
}
#endregion
#region DotNetCleanSettings
Expand Down
3 changes: 1 addition & 2 deletions source/Nuke.Common/Tools/DotNet/DotNet.json
Original file line number Diff line number Diff line change
Expand Up @@ -606,8 +606,7 @@
{
"name": "Properties",
"type": "Dictionary<string, object>",
"format": "/property:{value}",
"itemFormat": "{key}={value}",
"format": "/property:{key}={value}",
"disallowedCharacter": ";",
"help": "<p>Set or override the specified project-level properties, where name is the property name and value is the property value. Specify each property separately, or use a semicolon or comma to separate multiple properties, as the following example shows:</p><p><c>/property:WarningLevel=2;OutDir=bin\\Debug</c></p>",
"delegates": [
Expand Down
Loading

0 comments on commit b8bba6e

Please sign in to comment.