Skip to content

Commit

Permalink
Tests - support for library versions only for subset of target framew…
Browse files Browse the repository at this point in the history
  • Loading branch information
Kielek authored Feb 15, 2024
1 parent 66a1bc2 commit 67673bb
Show file tree
Hide file tree
Showing 14 changed files with 128 additions and 41 deletions.
2 changes: 1 addition & 1 deletion build/Build.Steps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ DotNetBuildSettings BuildTestApplication(DotNetBuildSettings x) =>
{
DotNetBuild(x =>
BuildTestApplication(x)
.CombineWithBuildInfos(libraryVersions));
.CombineWithBuildInfos(libraryVersions, TestTargetFramework));
}
else
{
Expand Down
27 changes: 22 additions & 5 deletions build/Extensions/DotNetSettingsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using Nuke.Common.Tooling;
using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.MSBuild;
using static Nuke.Common.Tooling.SettingsEntityExtensions;

namespace Extensions;

Expand Down Expand Up @@ -72,11 +71,15 @@ public static DotNetMSBuildSettings SetFilter(this DotNetMSBuildSettings setting
.SetProperty("VSTestTestCaseFilter", filter);
}

public static DotNetBuildSettings[] CombineWithBuildInfos(this DotNetBuildSettings settings, IReadOnlyCollection<PackageBuildInfo> buildInfos)
public static DotNetBuildSettings[] CombineWithBuildInfos(this DotNetBuildSettings settings, IReadOnlyCollection<PackageBuildInfo> buildInfos, TargetFramework targetFramework)
{
// NOTE: SetProperty creates internally a new instance!

return settings.CombineWith(buildInfos, (p, buildInfo) =>
#if NET7_0
// workaround for building on Centos. It should be removed when we drop support for .NET6/.NET7. ETA November 2024
return settings.CombineWith(buildInfos.Where(buildInfo => (targetFramework == TargetFramework.NOT_SPECIFIED || buildInfo.SupportedFrameworks.Length == 0 || buildInfo.SupportedFrameworks.Contains(targetFramework)) && !buildInfo.SupportedFrameworks.Contains(TargetFramework.NET8_0)), (p, buildInfo) =>
#else
return settings.CombineWith(buildInfos.Where(buildInfo => targetFramework == TargetFramework.NOT_SPECIFIED || buildInfo.SupportedFrameworks.Length == 0 || buildInfo.SupportedFrameworks.Contains(targetFramework)), (p, buildInfo) =>
#endif
{
p = p.SetProperty("LibraryVersion", buildInfo.LibraryVersion);

Expand All @@ -85,15 +88,24 @@ public static DotNetBuildSettings[] CombineWithBuildInfos(this DotNetBuildSettin
p = p.SetProperty(item.Key, item.Value);
}

if (buildInfo.SupportedFrameworks.Length > 0)
{
p = p.SetProperty("TargetFrameworks", string.Join(";", buildInfo.SupportedFrameworks));
}

return p;
});
}

public static DotNetRestoreSettings[] CombineWithBuildInfos(this DotNetRestoreSettings settings, IReadOnlyCollection<PackageBuildInfo> buildInfos)
{
// NOTE: SetProperty creates internally a new instance!

#if NET7_0
// workaround for building on Centos. It should be removed when we drop support for .NET6/.NET7. ETA November 2024
return settings.CombineWith(buildInfos.Where(buildInfo => !buildInfo.SupportedFrameworks.Contains(TargetFramework.NET8_0)), (p, buildInfo) =>
#else
return settings.CombineWith(buildInfos, (p, buildInfo) =>
#endif
{
p = p.SetProperty("LibraryVersion", buildInfo.LibraryVersion);
Expand All @@ -102,6 +114,11 @@ public static DotNetRestoreSettings[] CombineWithBuildInfos(this DotNetRestoreSe
p = p.SetProperty(item.Key, item.Value);
}
if (buildInfo.SupportedFrameworks.Length > 0)
{
p = p.SetProperty("TargetFrameworks", string.Join(";", buildInfo.SupportedFrameworks));
}
return p;
});
}
Expand Down
10 changes: 6 additions & 4 deletions build/LibraryVersions.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ public static class LibraryVersion
"TestApplication.EntityFrameworkCore",
new List<PackageBuildInfo>
{
new("6.0.12"),
new("7.0.13"),
new("6.0.27"),
new("7.0.16"),
new("8.0.2", new string[] {"net8.0"}),
}
},
{
Expand All @@ -46,14 +47,15 @@ public static class LibraryVersion
{
new("6.0.2"),
new("7.0.0"),
new("8.0.0", new string[] {"net8.0"}),
}
},
{
"TestApplication.GraphQL",
new List<PackageBuildInfo>
{
new("7.5.0", new() {{"GraphQLMicrosoftDI","7.5.0"},{"GraphQLServerTransportsAspNetCore","7.5.0"},{"GraphQLServerUIPlayground","7.5.0"}}),
new("7.8.0", new() {{"GraphQLMicrosoftDI","7.8.0"},{"GraphQLServerTransportsAspNetCore","7.7.0"},{"GraphQLServerUIPlayground","7.7.0"}}),
new("7.5.0", Array.Empty<string>(), new() {{"GraphQLMicrosoftDI","7.5.0"},{"GraphQLServerTransportsAspNetCore","7.5.0"},{"GraphQLServerUIPlayground","7.5.0"}}),
new("7.8.0", Array.Empty<string>(), new() {{"GraphQLMicrosoftDI","7.8.0"},{"GraphQLServerTransportsAspNetCore","7.7.0"},{"GraphQLServerUIPlayground","7.7.0"}}),
}
},
{
Expand Down
19 changes: 12 additions & 7 deletions build/Models/PackageBuildInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,24 @@ namespace Models;

public class PackageBuildInfo
{
public PackageBuildInfo(string libraryVersion)
public PackageBuildInfo(string libraryVersion) : this(libraryVersion, Array.Empty<string>())
{
}

public PackageBuildInfo(string libraryVersion, string[] supportedFrameworks) : this(libraryVersion, supportedFrameworks, new Dictionary<string, string>())
{
LibraryVersion = libraryVersion;
AdditionalMetaData = new Dictionary<string, string>();
}

public PackageBuildInfo(string libraryVersion, Dictionary<string, string> additionalMetaData)
: this(libraryVersion)
public PackageBuildInfo(string libraryVersion, string[] supportedFrameworks, Dictionary<string, string> additionalMetaData)
{
LibraryVersion = libraryVersion;
SupportedFrameworks = supportedFrameworks;
AdditionalMetaData = additionalMetaData;
}

public string LibraryVersion { get; private set; }
public string LibraryVersion { get; }

public string[] SupportedFrameworks { get; }

public Dictionary<string, string> AdditionalMetaData { get; private set; }
public Dictionary<string, string> AdditionalMetaData { get; }
}
4 changes: 2 additions & 2 deletions test/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<PackageVersion Include="Microsoft.Build" Version="15.9.20" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="15.9.20" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.1.5" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
Expand All @@ -37,7 +37,7 @@
<PackageVersion Include="Npgsql" Version="8.0.2" />
<PackageVersion Include="NuGet.Versioning" Version="6.5.0" />
<PackageVersion Include="OpenTracing" Version="0.12.1" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="7.0.0" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0" />
<PackageVersion Include="Quartz" Version="3.8.0" />
<PackageVersion Include="Quartz.Extensions.DependencyInjection" Version="3.8.0" />
<PackageVersion Include="Quartz.Extensions.Hosting" Version="3.8.0" />
Expand Down
10 changes: 8 additions & 2 deletions test/IntegrationTests/LibraryVersions.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,11 @@ public static class LibraryVersion
#if DEFAULT_TEST_PACKAGE_VERSIONS
new object[] { string.Empty }
#else
new object[] { "6.0.12" },
new object[] { "7.0.13" },
new object[] { "6.0.27" },
new object[] { "7.0.16" },
#if NET8_0
new object[] { "8.0.2" },
#endif
#endif
};
public static readonly IReadOnlyCollection<object[]> EntityFrameworkCorePomeloMySql = new List<object[]>
Expand All @@ -48,6 +51,9 @@ public static class LibraryVersion
#else
new object[] { "6.0.2" },
new object[] { "7.0.0" },
#if NET8_0
new object[] { "8.0.0" },
#endif
#endif
};
public static readonly IReadOnlyCollection<object[]> GraphQL = new List<object[]>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" VersionOverride="$(LibraryVersion)" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" VersionOverride="$(LibraryVersion)" Condition=" '$(LibraryVersion)' != '' or '$(TargetFramework)' == 'net8.0' "/>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" VersionOverride="7.0.0" Condition=" '$(LibraryVersion)' == '' and '$(TargetFramework)' != 'net8.0' "/>

<!-- Microsoft.Extensions.Configuration.Abstractions, Microsoft.Extensions.Logging.Abstractions,
Microsoft.Extensions.Options, and Microsoft.Extensions.DependencyInjection
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net7.0;net6.0</TargetFrameworks>
<TargetFrameworks Condition=" '$(IsCentos)' == '' ">net8.0;$(TargetFrameworks)</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" VersionOverride="$(LibraryVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" VersionOverride="$(LibraryVersion)" Condition=" '$(LibraryVersion)' != '' or '$(TargetFramework)' == 'net8.0' "/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" VersionOverride="7.0.16" Condition=" '$(LibraryVersion)' == '' and '$(TargetFramework)' != 'net8.0' "/>

<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
</ItemGroup>
</Project>
41 changes: 37 additions & 4 deletions tools/LibraryVersionsGenerator/BuildFileBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,23 @@ public override CSharpFileBuilder BeginTestPackage(string testApplicationName, s
return this;
}

public override CSharpFileBuilder AddVersion(string version)
public override CSharpFileBuilder AddVersion(string version, string[] supportedFrameworks)
{
Builder.AppendLine($" new(\"{version}\"),");
if (supportedFrameworks.Length > 0)
{
Builder.AppendLine($" new(\"{version}\", {SerializeArray(supportedFrameworks)}),");
}
else
{
Builder.AppendLine($" new(\"{version}\"),");
}

return this;
}

public override CSharpFileBuilder AddVersionWithDependencies(string version, Dictionary<string, string> dependencies)
public override CSharpFileBuilder AddVersionWithDependencies(string version, Dictionary<string, string> dependencies, string[] supportedFrameworks)
{
Builder.AppendLine($" new(\"{version}\", {SerializeDictionary(dependencies)}),");
Builder.AppendLine($" new(\"{version}\", {SerializeArray(supportedFrameworks)}, {SerializeDictionary(dependencies)}),");
return this;
}

Expand Down Expand Up @@ -78,4 +86,29 @@ private static string SerializeDictionary(Dictionary<string, string> dictionary)

return dictionarySb.ToString();
}

private static string SerializeArray(string[] array)
{
if (array.Length == 0)
{
return "Array.Empty<string>()";
}

var arraySb = new StringBuilder();
arraySb.Append("new string[] {");

for (var i = 0; i < array.Length; i++)
{
arraySb.Append($"\"{array[i]}\"");

if (i != array.Length - 1)
{
arraySb.Append(',');
}
}

arraySb.Append("}");

return arraySb.ToString();
}
}
4 changes: 2 additions & 2 deletions tools/LibraryVersionsGenerator/CSharpFileBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ public virtual CSharpFileBuilder EndClass()

public abstract CSharpFileBuilder BeginTestPackage(string testApplicationName, string integrationName);

public abstract CSharpFileBuilder AddVersion(string version);
public abstract CSharpFileBuilder AddVersion(string version, string[] supportedFrameworks);

public abstract CSharpFileBuilder AddVersionWithDependencies(string version, Dictionary<string, string> dependencies);
public abstract CSharpFileBuilder AddVersionWithDependencies(string version, Dictionary<string, string> dependencies, string[] supportedFrameworks);

public abstract CSharpFileBuilder EndTestPackage();

Expand Down
5 changes: 4 additions & 1 deletion tools/LibraryVersionsGenerator/Models/PackageVersion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@ namespace LibraryVersionsGenerator.Models;

internal class PackageVersion
{
public PackageVersion(string version)
public PackageVersion(string version, params string[] supportedFrameworks)
{
Version = version;
SupportedFrameworks = supportedFrameworks;
}

public string Version { get; init; }

public string[] SupportedFrameworks { get; set; }
}
10 changes: 7 additions & 3 deletions tools/LibraryVersionsGenerator/PackageVersionDefinitions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,10 @@ internal static class PackageVersionDefinitions
TestApplicationName = "TestApplication.EntityFrameworkCore",
Versions = new List<PackageVersion>
{
new("6.0.12"),
new("*")
new("6.0.27"),
new("7.0.16"),
new("8.0.2", "net8.0"),
new("*", "net8.0")
}
},
new()
Expand All @@ -51,7 +53,9 @@ internal static class PackageVersionDefinitions
Versions = new List<PackageVersion>
{
new("6.0.2"),
new("*")
new("7.0.0"),
new("8.0.0", "net8.0"),
new("*", "net8.0")
}
},
new()
Expand Down
8 changes: 4 additions & 4 deletions tools/LibraryVersionsGenerator/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ public static async Task Main()
{
if (version.GetType() == typeof(PackageVersion))
{
xUnitFileStringBuilder.AddVersion(calculatedVersion);
buildFileStringBuilder.AddVersion(calculatedVersion);
xUnitFileStringBuilder.AddVersion(calculatedVersion, version.SupportedFrameworks);
buildFileStringBuilder.AddVersion(calculatedVersion, version.SupportedFrameworks);
}
else
{
xUnitFileStringBuilder.AddVersionWithDependencies(calculatedVersion, GetDependencies(version));
buildFileStringBuilder.AddVersionWithDependencies(calculatedVersion, GetDependencies(version));
xUnitFileStringBuilder.AddVersionWithDependencies(calculatedVersion, GetDependencies(version), version.SupportedFrameworks);
buildFileStringBuilder.AddVersionWithDependencies(calculatedVersion, GetDependencies(version), version.SupportedFrameworks);
}
}
}
Expand Down
19 changes: 16 additions & 3 deletions tools/LibraryVersionsGenerator/XUnitFileBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,29 @@ public override CSharpFileBuilder BeginTestPackage(string testApplicationName, s
return this;
}

public override CSharpFileBuilder AddVersion(string version)
public override CSharpFileBuilder AddVersion(string version, string[] supportedFrameworks)
{
var conditionalCompilation = supportedFrameworks.Length > 0;
if (conditionalCompilation)
{
Builder.AppendFormat("#if {0}", string.Join(" || ", supportedFrameworks.Select(x => x.ToUpperInvariant().Replace('.', '_'))));
Builder.AppendLine();
}

Builder.AppendLine($" new object[] {{ \"{version}\" }},");

if (conditionalCompilation)
{
Builder.AppendLine("#endif");
}

return this;
}

public override CSharpFileBuilder AddVersionWithDependencies(string version, Dictionary<string, string> dependencies)
public override CSharpFileBuilder AddVersionWithDependencies(string version, Dictionary<string, string> dependencies, string[] supportedFrameworks)
{
// Dependencies info is currently not usable here. Build is located based on main package version string.
return AddVersion(version);
return AddVersion(version, supportedFrameworks);
}

public override CSharpFileBuilder EndTestPackage()
Expand Down

0 comments on commit 67673bb

Please sign in to comment.