Skip to content

Releases: smdn/Smdn.Fundamentals

Smdn.MSBuild.ProjectAssets.Library version 1.4.8

15 Apr 23:46
2de9753
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

Full changes

Full changes in this release:
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj b/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
index f679a4fe..de46c915 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
@@ -6,7 +6,7 @@ SPDX-License-Identifier: MIT
   <Import Project="$(MSBuildThisFileDirectory)..\..\eng\ProjectSettings.NoAssembliesNoBuild.props" />
 
   <PropertyGroup>
-    <VersionPrefix>1.4.7</VersionPrefix>
+    <VersionPrefix>1.4.8</VersionPrefix>
     <VersionSuffix></VersionSuffix>
     <DevelopmentDependency>true</DevelopmentDependency>
   </PropertyGroup>
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/StyleCop.Analyzers.ruleset b/src/Smdn.MSBuild.ProjectAssets.Library/project/StyleCop.Analyzers.ruleset
index ee7354f4..6f4132c5 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/StyleCop.Analyzers.ruleset
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/StyleCop.Analyzers.ruleset
@@ -85,7 +85,7 @@
     <Rule Id="SA1200"  Action="None" />             <!-- Using directives should be placed correctly -->
     <Rule Id="SA1201"  Action="None" />             <!-- Elements should appear in the correct order -->
     <Rule Id="SA1202"  Action="None" />             <!-- Elements should be ordered by access -->
-    <Rule Id="SA1203"  Action="Warning" />          <!-- Constants should appear before fields -->
+    <Rule Id="SA1203"  Action="Info" />             <!-- Constants should appear before fields -->
     <Rule Id="SA1204"  Action="None" />             <!-- Static elements should appear before instance elements -->
     <Rule Id="SA1205"  Action="None" />             <!-- Partial elements should declare access -->
     <Rule Id="SA1206"  Action="Warning" />          <!-- Declaration keywords should follow order -->

Notes

Full Changelog: releases/Smdn.MSBuild.ProjectAssets.Library-1.4.7...releases/Smdn.MSBuild.ProjectAssets.Library-1.4.8

Smdn.MSBuild.DefineConstants.NETSdkApi version 1.3.11

15 Apr 08:46
b5de2c2
Compare
Choose a tag to compare

Smdn.Fundamental.PortNumber version 3.0.0

31 Mar 17:23
740fb69
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net45.apilist.cs b/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net45.apilist.cs
new file mode 100644
index 00000000..1d0f62f5
--- /dev/null
+++ b/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net45.apilist.cs
@@ -0,0 +1,35 @@
+// Smdn.Fundamental.PortNumber.dll (Smdn.Fundamental.PortNumber-3.0.0)
+//   Name: Smdn.Fundamental.PortNumber
+//   AssemblyVersion: 3.0.0.0
+//   InformationalVersion: 3.0.0+6f2d0f65a01b169e05b6e4adc7526ce8bbb67e78
+//   TargetFramework: .NETFramework,Version=v4.5
+//   Configuration: Release
+//   Referenced assemblies:
+//     System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+//     System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+//     mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+#nullable enable annotations
+
+using System;
+using System.Collections.Generic;
+
+namespace Smdn.Net {
+  public static class PortNumberUtils {
+    public const int MaxIanaDynamicPort = 65535;
+    public const int MaxIanaSystemPort = 1023;
+    public const int MaxIanaUserPort = 49151;
+    public const int MinIanaDynamicPort = 49152;
+    public const int MinIanaSystemPort = 0;
+    public const int MinIanaUserPort = 1024;
+
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, Predicate<Exception> isPortInUseException) {}
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, Predicate<int>? exceptPort, Predicate<Exception> isPortInUseException) {}
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, int exceptPort, Predicate<Exception> isPortInUseException) {}
+    public static IEnumerable<int> EnumerateIanaDynamicPorts() {}
+    public static IEnumerable<int> EnumerateIanaDynamicPorts(Predicate<int>? exceptPort) {}
+    public static bool TryFindAvailablePort(Predicate<int>? exceptPort, out int port) {}
+    public static bool TryFindAvailablePort(out int port) {}
+  }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.2.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net472.apilist.cs b/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net472.apilist.cs
new file mode 100644
index 00000000..6dbeff66
--- /dev/null
+++ b/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net472.apilist.cs
@@ -0,0 +1,35 @@
+// Smdn.Fundamental.PortNumber.dll (Smdn.Fundamental.PortNumber-3.0.0)
+//   Name: Smdn.Fundamental.PortNumber
+//   AssemblyVersion: 3.0.0.0
+//   InformationalVersion: 3.0.0+6f2d0f65a01b169e05b6e4adc7526ce8bbb67e78
+//   TargetFramework: .NETFramework,Version=v4.7.2
+//   Configuration: Release
+//   Referenced assemblies:
+//     System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+//     System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+//     mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+#nullable enable annotations
+
+using System;
+using System.Collections.Generic;
+
+namespace Smdn.Net {
+  public static class PortNumberUtils {
+    public const int MaxIanaDynamicPort = 65535;
+    public const int MaxIanaSystemPort = 1023;
+    public const int MaxIanaUserPort = 49151;
+    public const int MinIanaDynamicPort = 49152;
+    public const int MinIanaSystemPort = 0;
+    public const int MinIanaUserPort = 1024;
+
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, Predicate<Exception> isPortInUseException) {}
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, Predicate<int>? exceptPort, Predicate<Exception> isPortInUseException) {}
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, int exceptPort, Predicate<Exception> isPortInUseException) {}
+    public static IEnumerable<int> EnumerateIanaDynamicPorts() {}
+    public static IEnumerable<int> EnumerateIanaDynamicPorts(Predicate<int>? exceptPort) {}
+    public static bool TryFindAvailablePort(Predicate<int>? exceptPort, out int port) {}
+    public static bool TryFindAvailablePort(out int port) {}
+  }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.2.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net6.0.apilist.cs b/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net6.0.apilist.cs
new file mode 100644
index 00000000..6326ecc4
--- /dev/null
+++ b/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-net6.0.apilist.cs
@@ -0,0 +1,37 @@
+// Smdn.Fundamental.PortNumber.dll (Smdn.Fundamental.PortNumber-3.0.0)
+//   Name: Smdn.Fundamental.PortNumber
+//   AssemblyVersion: 3.0.0.0
+//   InformationalVersion: 3.0.0+6f2d0f65a01b169e05b6e4adc7526ce8bbb67e78
+//   TargetFramework: .NETCoreApp,Version=v6.0
+//   Configuration: Release
+//   Referenced assemblies:
+//     System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Net.NetworkInformation, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+//     System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+#nullable enable annotations
+
+using System;
+using System.Collections.Generic;
+
+namespace Smdn.Net {
+  public static class PortNumberUtils {
+    public const int MaxIanaDynamicPort = 65535;
+    public const int MaxIanaSystemPort = 1023;
+    public const int MaxIanaUserPort = 49151;
+    public const int MinIanaDynamicPort = 49152;
+    public const int MinIanaSystemPort = 0;
+    public const int MinIanaUserPort = 1024;
+
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, Predicate<Exception> isPortInUseException) {}
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, Predicate<int>? exceptPort, Predicate<Exception> isPortInUseException) {}
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, int exceptPort, Predicate<Exception> isPortInUseException) {}
+    public static IEnumerable<int> EnumerateIanaDynamicPorts() {}
+    public static IEnumerable<int> EnumerateIanaDynamicPorts(Predicate<int>? exceptPort) {}
+    public static bool TryFindAvailablePort(Predicate<int>? exceptPort, out int port) {}
+    public static bool TryFindAvailablePort(out int port) {}
+  }
+}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.2.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (/~https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-netstandard2.0.apilist.cs b/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-netstandard2.0.apilist.cs
new file mode 100644
index 00000000..2b3be9ea
--- /dev/null
+++ b/doc/api-list/Smdn.Fundamental.PortNumber/Smdn.Fundamental.PortNumber-netstandard2.0.apilist.cs
@@ -0,0 +1,33 @@
+// Smdn.Fundamental.PortNumber.dll (Smdn.Fundamental.PortNumber-3.0.0)
+//   Name: Smdn.Fundamental.PortNumber
+//   AssemblyVersion: 3.0.0.0
+//   InformationalVersion: 3.0.0+6f2d0f65a01b169e05b6e4adc7526ce8bbb67e78
+//   TargetFramework: .NETStandard,Version=v2.0
+//   Configuration: Release
+//   Referenced assemblies:
+//     netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+#nullable enable annotations
+
+using System;
+using System.Collections.Generic;
+
+namespace Smdn.Net {
+  public static class PortNumberUtils {
+    public const int MaxIanaDynamicPort = 65535;
+    public const int MaxIanaSystemPort = 1023;
+    public const int MaxIanaUserPort = 49151;
+    public const int MinIanaDynamicPort = 49152;
+    public const int MinIanaSystemPort = 0;
+    public const int MinIanaUserPort = 1024;
+
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, Predicate<Exception> isPortInUseException) {}
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, Predicate<int>? exceptPort, Predicate<Exception> isPortInUseException) {}
+    public static TService CreateServiceWithAvailablePort<TService>(Func<int, TService> createService, int exceptPort, Predicate<Exception> isPortInUseException) {}
+    public static IEnumerable<int> EnumerateIanaDynamicPorts() {}
+    public static IEnumerable<int> EnumerateIanaDynamicPorts(Predicate<int>? exceptPort) {}
+    public static bool TryFindAvailablePort(Predicate<int>? exceptPort, out int port) {}
+    public static ...
Read more

Smdn.MSBuild.ProjectAssets.Library version 1.4.7

23 Mar 12:24
61b67d4
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

Full changes

Full changes in this release:
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj b/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
index 69935b13..f679a4fe 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
@@ -6,7 +6,7 @@ SPDX-License-Identifier: MIT
   <Import Project="$(MSBuildThisFileDirectory)..\..\eng\ProjectSettings.NoAssembliesNoBuild.props" />
 
   <PropertyGroup>
-    <VersionPrefix>1.4.6</VersionPrefix>
+    <VersionPrefix>1.4.7</VersionPrefix>
     <VersionSuffix></VersionSuffix>
     <DevelopmentDependency>true</DevelopmentDependency>
   </PropertyGroup>
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets b/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
index dfd78204..ded17049 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
@@ -16,7 +16,7 @@ SPDX-License-Identifier: MIT
     -->
     <_APIListDoGenerate Condition=" '$(IncludeBuildOutput)' != '' and '$(IncludeBuildOutput)' != 'true' ">false</_APIListDoGenerate>
     <!-- Disable if IsPackable is falsy. -->
-    <_APIListDoGenerate Condition=" '$(IsPackable)' != 'true' ">false</_APIListDoGenerate>
+    <_APIListDoGenerate Condition=" '$(IsPackable)' != '' and '$(IsPackable)' != 'true' ">false</_APIListDoGenerate>
 
     <!-- This is required to import .props and .targets from Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks -->
     <ExcludeRestorePackageImports

Notes

Full Changelog: releases/Smdn.MSBuild.ProjectAssets.Library-1.4.6...releases/Smdn.MSBuild.ProjectAssets.Library-1.4.7

Smdn.MSBuild.ProjectAssets.Library version 1.4.6

23 Mar 12:06
f6e20c4
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

Full changes

Full changes in this release:
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj b/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
index 8ddcc321..69935b13 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
@@ -6,7 +6,7 @@ SPDX-License-Identifier: MIT
   <Import Project="$(MSBuildThisFileDirectory)..\..\eng\ProjectSettings.NoAssembliesNoBuild.props" />
 
   <PropertyGroup>
-    <VersionPrefix>1.4.5</VersionPrefix>
+    <VersionPrefix>1.4.6</VersionPrefix>
     <VersionSuffix></VersionSuffix>
     <DevelopmentDependency>true</DevelopmentDependency>
   </PropertyGroup>
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets b/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
index 4c903abb..dfd78204 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
@@ -15,6 +15,8 @@ SPDX-License-Identifier: MIT
       Note that the default value of 'IncludeBuildOutput' is empty, not 'true'.
     -->
     <_APIListDoGenerate Condition=" '$(IncludeBuildOutput)' != '' and '$(IncludeBuildOutput)' != 'true' ">false</_APIListDoGenerate>
+    <!-- Disable if IsPackable is falsy. -->
+    <_APIListDoGenerate Condition=" '$(IsPackable)' != 'true' ">false</_APIListDoGenerate>
 
     <!-- This is required to import .props and .targets from Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks -->
     <ExcludeRestorePackageImports
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/CodeAnalysis.StyleCop.props b/src/Smdn.MSBuild.ProjectAssets.Library/project/CodeAnalysis.StyleCop.props
index 3cd42833..8cce26f4 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/CodeAnalysis.StyleCop.props
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/CodeAnalysis.StyleCop.props
@@ -8,10 +8,5 @@ SPDX-License-Identifier: MIT
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
     </PackageReference>
-    <AdditionalFiles Include="$(MSBuildThisFileDirectory)\stylecop.json" Link="stylecop.json" />
   </ItemGroup>
-
-  <PropertyGroup Label="StyleCop code analysis">
-    <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)\StyleCop.Analyzers.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
 </Project>
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/CodeAnalysis.StyleCop.targets b/src/Smdn.MSBuild.ProjectAssets.Library/project/CodeAnalysis.StyleCop.targets
new file mode 100644
index 00000000..918d1559
--- /dev/null
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/CodeAnalysis.StyleCop.targets
@@ -0,0 +1,26 @@
+<!--
+SPDX-FileCopyrightText: 2022 smdn <smdn@smdn.jp>
+SPDX-License-Identifier: MIT
+-->
+<Project>
+  <ItemGroup Label="StyleCop code analysis">
+    <AdditionalFiles
+      Include="$(StyleCopAnalyzersConfigurationFile)"
+      Link="stylecop.json"
+      Condition=" '$(StyleCopAnalyzersConfigurationFile)' != '' "
+    />
+    <!-- include default 'stylecop.json' to AdditionalFiles here if StyleCopAnalyzersConfigurationFile is not specified -->
+    <AdditionalFiles
+      Include="$(MSBuildThisFileDirectory)\stylecop.json"
+      Link="stylecop.json"
+      Condition=" '$(StyleCopAnalyzersConfigurationFile)' == '' "
+    />
+  </ItemGroup>
+
+  <PropertyGroup Label="StyleCop code analysis">
+    <!-- set default to CodeAnalysisRuleSet here if not set -->
+    <CodeAnalysisRuleSet
+      Condition=" '$(CodeAnalysisRuleSet)' == '' "
+    >$(MSBuildThisFileDirectory)\StyleCop.Analyzers.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+</Project>
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/LiquidTestReports.targets b/src/Smdn.MSBuild.ProjectAssets.Library/project/LiquidTestReports.targets
index 35238dd5..443179a7 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/LiquidTestReports.targets
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/LiquidTestReports.targets
@@ -65,6 +65,9 @@ SPDX-License-Identifier: MIT
 
     <ItemGroup>
       <LiquidTestReportsLogFileCandidate Include="$(LiquidTestReportsTestReportDirectory)*$(LiquidTestReportsTestReportFileExtensionWithTargetFramework)" />
+    </ItemGroup>
+
+    <ItemGroup Condition=" '@(LiquidTestReportsLogFileCandidate)' != '' ">
       <!-- extract only log files that are created after the started time and before the finished time -->
       <LiquidTestReportsLogFile
         Include="@(LiquidTestReportsLogFileCandidate)"
@@ -73,6 +76,20 @@ SPDX-License-Identifier: MIT
           ($([System.DateTimeOffset]::Parse(%(CreatedTime)).Ticks)) &lt; ($(LiquidTestReportsTestFinishedAt))
         "
       />
+    </ItemGroup>
+
+    <PropertyGroup>
+      <_HasLiquidTestReportsLogFileGenerated>false</_HasLiquidTestReportsLogFileGenerated>
+      <_HasLiquidTestReportsLogFileGenerated Condition=" '@(LiquidTestReportsLogFile)' != '' ">true</_HasLiquidTestReportsLogFileGenerated>
+    </PropertyGroup>
+
+    <Warning
+      Text="No test logs were output to directory '$(LiquidTestReportsTestReportDirectory)'. Make sure that the configurations are valid and there are no syntax errors in the template file."
+      File="$(MSBuildProjectFullPath)"
+      Condition=" '$(_HasLiquidTestReportsLogFileGenerated)' != 'true' "
+    />
+
+    <ItemGroup Condition=" '$(_HasLiquidTestReportsLogFileGenerated)' == 'true' ">
       <LiquidTestReportsLogFileContent Include="$([System.IO.File]::ReadAllText('%(LiquidTestReportsLogFile.Identity)'))" />
     </ItemGroup>
 
@@ -80,6 +97,9 @@ SPDX-License-Identifier: MIT
       <LiquidTestReportsStepSummaryContents>%0A%0A@(LiquidTestReportsLogFileContent, '%0A%0A----%0A%0A')</LiquidTestReportsStepSummaryContents>
     </PropertyGroup>
 
-    <GitHubActionsStepSummaryAppendContent Contents="$(LiquidTestReportsStepSummaryContents)" />
+    <GitHubActionsStepSummaryAppendContent
+      Contents="$(LiquidTestReportsStepSummaryContents)"
+      Condition=" '$(_HasLiquidTestReportsLogFileGenerated)' == 'true' "
+    />
   </Target>
 </Project>
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/PackageReadmeFile.targets b/src/Smdn.MSBuild.ProjectAssets.Library/project/PackageReadmeFile.targets
index 57583f80..f4fdd726 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/PackageReadmeFile.targets
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/PackageReadmeFile.targets
@@ -29,6 +29,7 @@ SPDX-License-Identifier: MIT
   <Target
     Name="GenerateNupkgReadmeFileContentAPIList"
     DependsOnTargets="GenerateNupkgReadmeFileContent"
+    Condition=" '@(ApiListFiles)' != '' "
   >
     <GetLatestFramework Frameworks="$(TargetFrameworks)" Condition="'$(TargetFrameworks)' != ''">
       <Output TaskParameter="LatestFramework" PropertyName="LatestTargetFramework" />
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/Project.targets b/src/Smdn.MSBuild.ProjectAssets.Library/project/Project.targets
index 8f92534c..78b9fe34 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/Project.targets
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/Project.targets
@@ -11,6 +11,8 @@ SPDX-License-Identifier: MIT
     <Import Project="$(MSBuildThisFileDirectory)ApiListGenerator.targets" />
     <!-- PackageReadmeFile auto-generating -->
     <Import Project="$(MSBuildThisFileDirectory)PackageReadmeFile.targets" Condition=" '$(GeneratePackageReadmeFile)' == 'true' " />
+    <!-- StyleCop code analysis -->
+    <Import Project="$(MSBuildThisFileDirectory)CodeAnalysis.StyleCop.targets" />
   </ImportGroup>
 
   <ImportGroup Condition=" '$(IsTestProject)' == 'true' ">
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/TestReport.template.liquid.md b/src/Smdn.MSBuild.ProjectAssets.Library/project/TestReport.template.liquid.md
index 9345fd47..444c259a 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/TestReport.template.liquid.md
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/TestReport.template.liquid.md
@@ -222,8 +222,9 @@ SPDX-License-Identifier: MIT
 {%-     comment -%}
           find and enumerate corresponding test results from their index
 {%-     endcomment -%}
-{%-     for result_index in result_indices -%}
-{%-       assign result = set.results | slice: result_index | first -%}{%- comment -%} array[index] does not works fine, so use slice+first instead {%- endcomment -%}
+{%-     for r...
Read more

Smdn.MSBuild.DefineConstants.NETSdkApi version 1.3.10

28 Feb 12:59
4b9afb8
Compare
Choose a tag to compare

Smdn.MSBuild.ProjectAssets.Common version 1.3.5

25 Jan 14:55
51903ff
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

Full changes

Full changes in this release:
diff --git a/src/Smdn.MSBuild.ProjectAssets.Common/Smdn.MSBuild.ProjectAssets.Common.csproj b/src/Smdn.MSBuild.ProjectAssets.Common/Smdn.MSBuild.ProjectAssets.Common.csproj
index eb7a8a25..e7432009 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Common/Smdn.MSBuild.ProjectAssets.Common.csproj
+++ b/src/Smdn.MSBuild.ProjectAssets.Common/Smdn.MSBuild.ProjectAssets.Common.csproj
@@ -6,7 +6,7 @@ SPDX-License-Identifier: MIT
   <Import Project="$(MSBuildThisFileDirectory)..\..\eng\ProjectSettings.NoAssembliesNoBuild.props" />
 
   <PropertyGroup>
-    <VersionPrefix>1.3.4</VersionPrefix>
+    <VersionPrefix>1.3.5</VersionPrefix>
     <VersionSuffix></VersionSuffix>
     <DevelopmentDependency>true</DevelopmentDependency>
     <NoWarn>NU5110;NU5111;$(NoWarn)</NoWarn>
diff --git a/src/Smdn.MSBuild.ProjectAssets.Common/project/scripts/psmodules/NuGet.PackageContent/NuGet.PackageContent.psm1 b/src/Smdn.MSBuild.ProjectAssets.Common/project/scripts/psmodules/NuGet.PackageContent/NuGet.PackageContent.psm1
index 1d6359bb..cfaf19c0 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Common/project/scripts/psmodules/NuGet.PackageContent/NuGet.PackageContent.psm1
+++ b/src/Smdn.MSBuild.ProjectAssets.Common/project/scripts/psmodules/NuGet.PackageContent/NuGet.PackageContent.psm1
@@ -29,8 +29,78 @@ function Get-NuGetPackageVersions {
 
   return $get_package_versions_response.Content | `
     ConvertFrom-Json | `
-    Select-Object -ExpandProperty 'versions' | `
-    ForEach-Object { New-Object System.Version -ArgumentList $_ }
+    Select-Object -ExpandProperty 'versions'
+}
+
+<#
+  Summary: Parses and gets the semantic version from the specified version sstring.
+#>
+function Get-SemanticVersion {
+  Param(
+    [Parameter(Mandatory = $true)][string]$Version
+  )
+
+  $components = $Version -split { $_ -eq '+' -or $_-eq '-' }, 2
+
+  $version_core = $components[0]
+  $is_prerelease = $Version[$version_core.Length] -eq '-'
+
+  $suffix = $components.Count -eq 2 ? $components[1] : $null
+
+  if ($is_prerelease) {
+    $suffix_components = $suffix -split { $_ -eq '+' -or $_-eq '-' }, 2
+
+    if ($suffix_components.Count -eq 2) {
+      $prerelease = $suffix_components[0]
+      $build = $suffix_components[1]
+    }
+    else {
+      $prerelease = $suffix
+      $build = $null
+    }
+  }
+  else {
+    $build = $components[1]
+  }
+
+  return [PSCustomObject]@{
+    Version = $Version
+    VersionCore = New-Object System.Version -ArgumentList $version_core
+    Suffix = $suffix
+    IsPreRelease = $is_prerelease
+    PreRelease = $prerelease
+    Build = $build
+  }
+}
+
+<#
+  Summary: Sorts the version strings by order of the semantic version.
+#>
+function Get-OrderedSemanticVersions {
+  [OutputType([string[]])]
+  Param(
+    [Parameter(Mandatory = $true)]
+    [string[]]$Versions,
+
+    [switch][bool]$Descending = $false,
+    [switch][bool]$Unique = $false
+  )
+
+  return $Versions | `
+    ForEach-Object {
+      Get-SemanticVersion $_
+    } | `
+    Sort-Object `
+      -Property `
+        @{Expression = "VersionCore"; Descending = $Descending}, `
+        @{Expression = { -not $_.IsPreRelease }; Descending = $Descending}, `
+        @{Expression = { $_.PreRelease.Length }; Descending = $Descending}, `
+        @{Expression = "PreRelease"; Descending = $Descending}, `
+        @{Expression = { $_.Build.Length }; Descending = $Descending}, `
+        @{Expression = "Build"; Descending = $Descending} | `
+    Select-Object `
+      -ExpandProperty Version `
+      -Unique:$Unique
 }
 
 <#
@@ -45,10 +115,15 @@ function Get-NuGetLatestPackageVersion {
     [Parameter(Mandatory = $true)][string]$package_id
   )
 
-  $package_versions = Get-NuGetPackageVersions $nuget_service_package_base_address $package_id | `
-    Sort-Object -Descending
+  $package_versions = Get-NuGetPackageVersions $nuget_service_package_base_address $package_id
+
+  if ($package_versions.Count -le 0) {
+    return $null
+  }
+
+  $ordered_versions = Get-OrderedSemanticVersions $package_versions -Descending
 
-  return $package_versions.Count -gt 0 ? $package_versions[0] : $null
+  return $ordered_versions[0]
 }
 
 <#

Notes

Full Changelog: releases/Smdn.MSBuild.ProjectAssets.Common-1.3.4...releases/Smdn.MSBuild.ProjectAssets.Common-1.3.5

Smdn.MSBuild.DefineConstants.NETSdkApi version 1.3.9

25 Jan 17:35
a844b18
Compare
Choose a tag to compare

Smdn.MSBuild.ProjectAssets.Library version 1.4.5

23 Jan 13:54
7264312
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

Full changes

Full changes in this release:
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj b/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
index be8d27de..8ddcc321 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/Smdn.MSBuild.ProjectAssets.Library.csproj
@@ -6,7 +6,7 @@ SPDX-License-Identifier: MIT
   <Import Project="$(MSBuildThisFileDirectory)..\..\eng\ProjectSettings.NoAssembliesNoBuild.props" />
 
   <PropertyGroup>
-    <VersionPrefix>1.4.4</VersionPrefix>
+    <VersionPrefix>1.4.5</VersionPrefix>
     <VersionSuffix></VersionSuffix>
     <DevelopmentDependency>true</DevelopmentDependency>
   </PropertyGroup>
diff --git a/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets b/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
index 94c3ca00..4c903abb 100644
--- a/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
+++ b/src/Smdn.MSBuild.ProjectAssets.Library/project/ApiListGenerator.targets
@@ -6,7 +6,7 @@ SPDX-License-Identifier: MIT
   <PropertyGroup Label="API list generator">
     <!-- default configurations -->
     <APIListOutputBaseDirectory Condition=" '$(APIListOutputBaseDirectory)' == '' ">api-list\</APIListOutputBaseDirectory>
-    <APIListPackageVersion Condition=" '$(APIListPackageVersion)' == '' ">1.2.0</APIListPackageVersion>
+    <APIListPackageVersion Condition=" '$(APIListPackageVersion)' == '' ">1.2.1</APIListPackageVersion>
     <APIListLoadIntoReflectionOnlyContext Condition=" '$(APIListLoadIntoReflectionOnlyContext)' == '' ">false</APIListLoadIntoReflectionOnlyContext>
 
     <_APIListDoGenerate>$(APIListEnableGenerating)</_APIListDoGenerate>

Notes

Full Changelog: releases/Smdn.MSBuild.ProjectAssets.Library-1.4.4...releases/Smdn.MSBuild.ProjectAssets.Library-1.4.5

Smdn.Fundamental.Uuid version 3.1.1

22 Jan 17:01
785220f
Compare
Choose a tag to compare

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Fundamental.Uuid/Smdn.Fundamental.Uuid-net45.apilist.cs b/doc/api-list/Smdn.Fundamental.Uuid/Smdn.Fundamental.Uuid-net45.apilist.cs
index 4325e271..2bef5a69 100644
--- a/doc/api-list/Smdn.Fundamental.Uuid/Smdn.Fundamental.Uuid-net45.apilist.cs
+++ b/doc/api-list/Smdn.Fundamental.Uuid/Smdn.Fundamental.Uuid-net45.apilist.cs
@@ -1,210 +1,210 @@
-// Smdn.Fundamental.Uuid.dll (Smdn.Fundamental.Uuid-3.1.0)
+// Smdn.Fundamental.Uuid.dll (Smdn.Fundamental.Uuid-3.1.1)
 //   Name: Smdn.Fundamental.Uuid
-//   AssemblyVersion: 3.1.0.0
-//   InformationalVersion: 3.1.0+ae4a97a93ac395fe5044a3c8ed3ba4411533bc12
+//   AssemblyVersion: 3.1.1.0
+//   InformationalVersion: 3.1.1+b57b4cba29f01d9537ede2ca39db9abb783b20da
 //   TargetFramework: .NETFramework,Version=v4.5
 //   Configuration: Release
 //   Referenced assemblies:
-//     Smdn.Fundamental.Exception, Version=3.0.2.0, Culture=neutral
-//     Smdn.Fundamental.Shim, Version=3.1.2.0, Culture=neutral
+//     Smdn.Fundamental.Exception, Version=3.0.3.0, Culture=neutral
+//     Smdn.Fundamental.Shim, Version=3.1.4.0, Culture=neutral
 //     System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 //     System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 //     mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 
 using System;
 using System.Net.NetworkInformation;
 using System.Security.Cryptography;
 using Smdn;
 using Smdn.Formats.UniversallyUniqueIdentifiers;
 
 namespace Smdn {
   [TypeForwardedFrom("Smdn, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null")]
   public enum UuidVersion : byte {
     NameBasedMD5Hash = 3,
     NameBasedSHA1Hash = 5,
     None = 0,
     RandomNumber = 4,
     TimeBased = 1,
     Version1 = 1,
     Version2 = 2,
     Version3 = 3,
     Version4 = 4,
     Version5 = 5,
   }
 
   [TypeForwardedFrom("Smdn, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null")]
   [StructLayout(LayoutKind.Explicit, Pack = 1)]
   public readonly struct Uuid :
     IComparable,
     IComparable<Guid>,
     IComparable<Uuid>,
     IEquatable<Guid>,
     IEquatable<Uuid>,
     IFormattable
   {
     public enum Namespace : int {
       RFC4122Dns = 1806153744,
       RFC4122IsoOid = 1806153746,
       RFC4122Url = 1806153745,
       RFC4122X500 = 1806153748,
     }
 
     public enum Variant : byte {
       MicrosoftReserved = 192,
       NCSReserved = 0,
       RFC4122 = 128,
       Reserved = 224,
     }
 
     public static readonly Uuid Nil; // = "00000000-0000-0000-0000-000000000000"
     public static readonly Uuid RFC4122NamespaceDns; // = "6ba7b810-9dad-11d1-80b4-00c04fd430c8"
     public static readonly Uuid RFC4122NamespaceIsoOid; // = "6ba7b812-9dad-11d1-80b4-00c04fd430c8"
     public static readonly Uuid RFC4122NamespaceUrl; // = "6ba7b811-9dad-11d1-80b4-00c04fd430c8"
     public static readonly Uuid RFC4122NamespaceX500; // = "6ba7b814-9dad-11d1-80b4-00c04fd430c8"
 
     public static Uuid CreateFromRandomNumber() {}
     public static Uuid CreateFromRandomNumber(RandomNumberGenerator rng) {}
     public static Uuid CreateFromRandomNumber(ReadOnlySpan<byte> randomNumber) {}
     public static Uuid CreateFromRandomNumber(byte[] randomNumber) {}
     public static Uuid CreateNameBased(ReadOnlySpan<byte> name, Uuid namespaceId, UuidVersion version) {}
     public static Uuid CreateNameBased(ReadOnlySpan<byte> name, Uuid.Namespace ns, UuidVersion version) {}
     public static Uuid CreateNameBased(Uri url, UuidVersion version) {}
     public static Uuid CreateNameBased(byte[] name, Uuid namespaceId, UuidVersion version) {}
     public static Uuid CreateNameBased(byte[] name, Uuid.Namespace ns, UuidVersion version) {}
     public static Uuid CreateNameBased(string name, Uuid namespaceId, UuidVersion version) {}
     public static Uuid CreateNameBased(string name, Uuid.Namespace ns, UuidVersion version) {}
     public static Uuid CreateNameBasedMD5(ReadOnlySpan<byte> name, Uuid.Namespace ns) {}
     public static Uuid CreateNameBasedMD5(Uri url) {}
     public static Uuid CreateNameBasedMD5(byte[] name, Uuid.Namespace ns) {}
     public static Uuid CreateNameBasedMD5(string name, Uuid.Namespace ns) {}
     public static Uuid CreateNameBasedSHA1(ReadOnlySpan<byte> name, Uuid.Namespace ns) {}
     public static Uuid CreateNameBasedSHA1(Uri url) {}
     public static Uuid CreateNameBasedSHA1(byte[] name, Uuid.Namespace ns) {}
     public static Uuid CreateNameBasedSHA1(string name, Uuid.Namespace ns) {}
     public static Uuid CreateTimeBased() {}
     public static Uuid CreateTimeBased(DateTime timestamp, int clock) {}
     public static Uuid CreateTimeBased(DateTime timestamp, int clock, PhysicalAddress node) {}
     public static Uuid CreateTimeBased(DateTime timestamp, int clock, byte[] node) {}
     public static Uuid CreateTimeBased(PhysicalAddress node) {}
     public static Uuid CreateTimeBased(byte[] node) {}
     public static Uuid NewUuid() {}
     public static Uuid Parse(ReadOnlySpan<char> s, IFormatProvider provider = null) {}
     public static Uuid Parse(string s, IFormatProvider provider = null) {}
     public static bool TryParse(ReadOnlySpan<char> s, IFormatProvider provider, out Uuid result) {}
     public static bool TryParse(ReadOnlySpan<char> s, out Uuid result) {}
     public static bool TryParse(string s, IFormatProvider provider, out Uuid result) {}
     public static bool operator == (Uuid x, Uuid y) {}
     public static explicit operator Guid(Uuid @value) {}
     public static explicit operator Uuid(Guid @value) {}
     public static bool operator > (Uuid x, Uuid y) {}
     public static bool operator >= (Uuid x, Uuid y) {}
     public static bool operator != (Uuid x, Uuid y) {}
     public static bool operator < (Uuid x, Uuid y) {}
     public static bool operator <= (Uuid x, Uuid y) {}
 
     public Uuid(Guid guidValue) {}
     public Uuid(ReadOnlySpan<byte> octets) {}
     public Uuid(ReadOnlySpan<byte> octets, bool isBigEndian) {}
     public Uuid(byte[] octets) {}
     public Uuid(byte[] octets, bool isBigEndian) {}
     public Uuid(byte[] octets, int index, bool isBigEndian = true) {}
     public Uuid(string uuid) {}
     public Uuid(uint time_low, ushort time_mid, ushort time_hi_and_version, byte clock_seq_hi_and_reserved, byte clock_seq_low, PhysicalAddress node) {}
     public Uuid(uint time_low, ushort time_mid, ushort time_hi_and_version, byte clock_seq_hi_and_reserved, byte clock_seq_low, ReadOnlySpan<byte> node) {}
     public Uuid(uint time_low, ushort time_mid, ushort time_hi_and_version, byte clock_seq_hi_and_reserved, byte clock_seq_low, byte node0, byte node1, byte node2, byte node3, byte node4, byte node5) {}
     public Uuid(uint time_...
Read more