diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17d4eea..f16ad5d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,14 +16,22 @@ jobs: container_image: - quay.io/centos/centos:stream9 - quay.io/centos/centos:stream10 - - registry.fedoraproject.org/fedora:40 - registry.fedoraproject.org/fedora:41 + - registry.fedoraproject.org/fedora:42 - registry.fedoraproject.org/fedora:rawhide - registry.access.redhat.com/ubi8 - registry.access.redhat.com/ubi9 + - registry.access.redhat.com/ubi10 dotnet_version: - "8.0" - "9.0" + include: + - container_image: registry.fedoraproject.org/fedora:42 + dotnet_version: "10.0" + - container_image: registry.fedoraproject.org/fedora:rawhide + dotnet_version: "10.0" + - container_image: quay.io/centos/centos:stream10 + dotnet_version: "10.0" container: image: ${{ matrix.container_image }} @@ -34,12 +42,20 @@ jobs: timeout-minutes: 5 run: | set -euo pipefail + if [[ ${{ matrix.dotnet_version }} == 10.* ]]; then + dnf install 'dnf-command(copr)' -y + if grep centos /etc/os-release; then + dnf copr enable @dotnet-sig/dotnet-preview centos-stream-10-x86_64 -y + else + dnf copr enable @dotnet-sig/dotnet-preview -y + fi + fi dnf install -y dotnet-sdk-${{ matrix.dotnet_version }} git make dnf install -y \ dotnet-sdk-dbg-${{ matrix.dotnet_version }} \ dotnet-runtime-dbg-${{ matrix.dotnet_version }} \ aspnetcore-runtime-dbg-${{ matrix.dotnet_version }} - if [[ ${{ matrix.dotnet_version }} == 9.* ]]; then + if [[ ${{ matrix.dotnet_version }} != 8.* ]]; then dnf install -y dotnet-sdk-aot-${{ matrix.dotnet_version }} fi @@ -78,14 +94,22 @@ jobs: container_image: - quay.io/centos/centos:stream9 - quay.io/centos/centos:stream10 - - registry.fedoraproject.org/fedora:40 - registry.fedoraproject.org/fedora:41 + - registry.fedoraproject.org/fedora:42 - registry.fedoraproject.org/fedora:rawhide - registry.access.redhat.com/ubi8 - registry.access.redhat.com/ubi9 + - registry.access.redhat.com/ubi10 dotnet_version: - "8.0" - "9.0" + include: + - container_image: registry.fedoraproject.org/fedora:42 + dotnet_version: "10.0" + - container_image: registry.fedoraproject.org/fedora:rawhide + dotnet_version: "10.0" + - container_image: quay.io/centos/centos:stream10 + dotnet_version: "10.0" container: image: ${{ matrix.container_image }} @@ -96,12 +120,20 @@ jobs: timeout-minutes: 5 run: | set -euo pipefail + if [[ ${{ matrix.dotnet_version }} == 10.* ]]; then + dnf install 'dnf-command(copr)' -y + if grep centos /etc/os-release; then + dnf copr enable @dotnet-sig/dotnet-preview centos-stream-10-x86_64 -y + else + dnf copr enable @dotnet-sig/dotnet-preview -y + fi + fi dnf install -y dotnet-sdk-${{ matrix.dotnet_version }} git make dnf install -y \ dotnet-sdk-dbg-${{ matrix.dotnet_version }} \ dotnet-runtime-dbg-${{ matrix.dotnet_version }} \ aspnetcore-runtime-dbg-${{ matrix.dotnet_version }} - if [[ ${{ matrix.dotnet_version }} == 9.* ]]; then + if [[ ${{ matrix.dotnet_version }} != 8.* ]]; then dnf install -y dotnet-sdk-aot-${{ matrix.dotnet_version }} fi diff --git a/Turkey.Tests/ProgramTest.cs b/Turkey.Tests/ProgramTest.cs index ab34ed3..698c449 100644 --- a/Turkey.Tests/ProgramTest.cs +++ b/Turkey.Tests/ProgramTest.cs @@ -3,6 +3,7 @@ using System.Runtime.InteropServices; using System.Linq; using Xunit; +using Microsoft.VisualBasic; namespace Turkey.Tests { @@ -51,22 +52,24 @@ public static IEnumerable SystemTraits_MemberData() Version runtimeVersion = Version.Parse("6.5"); Version sdkVersion = Version.Parse("3.1"); - string[] expectedVersionTraits = new[] { "version=6.5", "version=6" }; + var release = "released"; + + string[] expectedVersionTraits = new[] { "version=6.5", "version=6", "status=released" }; string expectedArch = $"arch={OSArchitectureName}"; // default traits. - yield return new object[] { runtimeVersion, sdkVersion, Array.Empty(), false, Array.Empty(), CombineTraits() }; + yield return new object[] { runtimeVersion, sdkVersion, release, Array.Empty(), false, Array.Empty(), CombineTraits() }; // 'runtime=mono' - yield return new object[] { runtimeVersion, sdkVersion, Array.Empty(), true, Array.Empty(), CombineTraits(isMonoRuntime: true) }; + yield return new object[] { runtimeVersion, sdkVersion, release, Array.Empty(), true, Array.Empty(), CombineTraits(isMonoRuntime: true) }; // 'os=..' and 'rid=...' are added for the platform rids. - yield return new object[] { runtimeVersion, sdkVersion, new[] { "linux-x64", "fedora.37-x64", "linux-musl-x64" }, false, Array.Empty(), + yield return new object[] { runtimeVersion, sdkVersion, release, new[] { "linux-x64", "fedora.37-x64", "linux-musl-x64" }, false, Array.Empty(), CombineTraits(new[] { "os=linux", "os=fedora.37", "os=linux-musl", "rid=linux-x64", "rid=fedora.37-x64", "rid=linux-musl-x64" } ) }; // additional traits are added. - yield return new object[] { runtimeVersion, sdkVersion, Array.Empty(), false, new[] { "blue", "green" }, + yield return new object[] { runtimeVersion, sdkVersion, release, Array.Empty(), false, new[] { "blue", "green" }, CombineTraits(new[] { "blue", "green" } ) }; string[] CombineTraits(string[] expectedAdditionalTraits = null, bool isMonoRuntime = false) @@ -79,9 +82,9 @@ string[] CombineTraits(string[] expectedAdditionalTraits = null, bool isMonoRunt [Theory] [MemberData(nameof(SystemTraits_MemberData))] - public void SystemTraits(Version runtimeVersion, Version sdkVersion, string[] rids, bool isMonoRuntime, string[] additionalTraits, string[] expectedTraits) + public void SystemTraits(Version runtimeVersion, Version sdkVersion, string release, string[] rids, bool isMonoRuntime, string[] additionalTraits, string[] expectedTraits) { - IReadOnlySet systemTraits = Program.CreateTraits(runtimeVersion, sdkVersion, new List(rids), isMonoRuntime, additionalTraits); + IReadOnlySet systemTraits = Program.CreateTraits(runtimeVersion, sdkVersion, new List(rids), isMonoRuntime, release, additionalTraits); Assert.Equal(expectedTraits.OrderBy(s => s), systemTraits.OrderBy(s => s)); } diff --git a/Turkey.Tests/VersionTest.cs b/Turkey.Tests/VersionTest.cs index 34de22e..6eb42a5 100644 --- a/Turkey.Tests/VersionTest.cs +++ b/Turkey.Tests/VersionTest.cs @@ -102,7 +102,7 @@ public void VersionComparisons() public void TestToString() { var v1 = Version.Parse("1.0"); - Assert.Equal("1.0", v1.ToString()); + Assert.Equal("1.0.0", v1.ToString()); } } } diff --git a/Turkey/Program.cs b/Turkey/Program.cs index d9b52c1..cb288f2 100644 --- a/Turkey/Program.cs +++ b/Turkey/Program.cs @@ -104,7 +104,7 @@ public static async Task Run(string testRoot, var sanitizer = new EnvironmentVariableSanitizer(); var envVars = sanitizer.SanitizeCurrentEnvironmentVariables(); - var traits = CreateTraits(runtimeVersion, dotnet.LatestSdkVersion, platformIds, dotnet.IsMonoRuntime(runtimeVersion), trait); + var traits = CreateTraits(runtimeVersion, dotnet.LatestSdkVersion, platformIds, dotnet.IsMonoRuntime(runtimeVersion), runtimeVersion.Release, trait); Console.WriteLine($"Tests matching these traits will be skipped: {string.Join(", ", traits.OrderBy(s => s))}."); envVars["TestTargetFramework"] = $"net{runtimeVersion.Major}.{runtimeVersion.Minor}"; @@ -183,7 +183,7 @@ public static async Task GenerateNuGetConfigIfNeededAsync(string additio } #pragma warning disable CA1801 // Remove unused parameter - public static IReadOnlySet CreateTraits(Version runtimeVersion, Version sdkVersion, List rids, bool isMonoRuntime, IEnumerable additionalTraits) + public static IReadOnlySet CreateTraits(Version runtimeVersion, Version sdkVersion, List rids, bool isMonoRuntime, string release, IEnumerable additionalTraits) #pragma warning restore CA1801 // Remove unused parameter { var traits = new HashSet(StringComparer.OrdinalIgnoreCase); @@ -192,6 +192,9 @@ public static IReadOnlySet CreateTraits(Version runtimeVersion, Version traits.Add($"version={runtimeVersion.Major}.{runtimeVersion.Minor}"); traits.Add($"version={runtimeVersion.Major}"); + // Add 'status=' trait. + traits.Add($"status={runtimeVersion.Release}"); + // Add 'os=', 'rid=' traits. foreach (var rid in rids) { diff --git a/Turkey/Version.cs b/Turkey/Version.cs index 0bcbd18..e2457c0 100644 --- a/Turkey/Version.cs +++ b/Turkey/Version.cs @@ -11,6 +11,8 @@ public class Version: IComparable public int Minor { get; } public string MajorMinor { get; } + public string Release { get; } + private List parts = null; public static Version Parse(string input) @@ -26,9 +28,10 @@ public static Version Parse(string input) { throw new FormatException(); } - if (parts.Count() == 1) + if (parts.Count() <= 2) { - parts.Add("0"); + while (parts.Count() <= 2) + { parts.Add("0"); } } int.Parse(parts[0], CultureInfo.InvariantCulture); int.Parse(parts[1], CultureInfo.InvariantCulture); @@ -42,6 +45,21 @@ private Version(List parts) this.Major = int.Parse(parts[0], CultureInfo.InvariantCulture); this.Minor = int.Parse(parts[1], CultureInfo.InvariantCulture); this.MajorMinor = this.Major + "." + this.Minor; + + string status = ""; + if (parts[2].Contains("preview", StringComparison.Ordinal)) + { + status = "preview"; + } + else if (parts[2].Contains("rc", StringComparison.Ordinal)) + { + status = "rc"; + } + else + { + status = "released"; + } + this.Release = status; } public override string ToString()