From 939f58a70ac527d13a39bf101f74b29b795ea498 Mon Sep 17 00:00:00 2001 From: nicrowe Date: Tue, 10 Sep 2024 12:50:01 +0100 Subject: [PATCH] Drop support for EOL .NET versions, remove obsolete tests and update test matrix. Dropping support from tests for versions of .NET that are now EOL. Removing tests that are rendered obsolete by recent changes. Updating the test matrix for the latest OS releases. --- .github/workflows/ci.yml | 96 ++++++++++++------- Samples/BashTestSpecificToDotNet2x/test.json | 12 --- Samples/BashTestSpecificToDotNet2x/test.sh | 3 - Samples/BashTestSpecificToDotNet50/test.json | 12 --- Samples/BashTestSpecificToDotNet50/test.sh | 3 - .../CsprojCompatibilityPatcherTest.cs | 36 ------- Turkey.Tests/ProcessExtensionsTest.cs | 9 +- Turkey.Tests/SourceBuildTest.cs | 11 --- Turkey/CsprojCompatibilityPatcher.cs | 11 +-- Turkey/Program.cs | 30 ------ Turkey/SourceBuild.cs | 14 +-- Turkey/Test.cs | 19 +--- 12 files changed, 76 insertions(+), 180 deletions(-) delete mode 100644 Samples/BashTestSpecificToDotNet2x/test.json delete mode 100755 Samples/BashTestSpecificToDotNet2x/test.sh delete mode 100644 Samples/BashTestSpecificToDotNet50/test.json delete mode 100755 Samples/BashTestSpecificToDotNet50/test.sh delete mode 100644 Turkey.Tests/CsprojCompatibilityPatcherTest.cs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 462c69f..92126cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,20 +14,11 @@ jobs: fail-fast: false matrix: container_image: - - quay.io/centos/centos:stream8 - - quay.io/centos/centos:stream9 - - registry.fedoraproject.org/fedora:37 - - registry.fedoraproject.org/fedora:38 - - registry.fedoraproject.org/fedora:39 - - registry.fedoraproject.org/fedora:rawhide - - registry.access.redhat.com/ubi8 - - registry.access.redhat.com/ubi9 + - docker.io/library/alpine:latest + - docker.io/library/alpine:edge dotnet_version: - "6.0" - - "7.0" - include: - - container_image: quay.io/centos/centos:stream9 - dotnet_version: "8.0" + - "8.0" container: image: ${{ matrix.container_image }} @@ -38,13 +29,31 @@ jobs: timeout-minutes: 5 run: | set -euo pipefail - if command -v dnf; then + cat /etc/os-release + if grep fedora /etc/os-release; then + if [[ ${{ matrix.dotnet_version }} == 9.* ]]; then + dnf install 'dnf-command(copr)' -y + dnf copr enable @dotnet-sig/dotnet-preview -y + dnf install -y dotnet-sdk-aot-${{ matrix.dotnet_version }} + fi dnf install -y dotnet-sdk-${{ matrix.dotnet_version }} git make - elif command -v apk; then - apk add bash curl git icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ make zlib - curl -sSLO https://dot.net/v1/dotnet-install.sh - chmod +x ./dotnet-install.sh - ./dotnet-install.sh --channel ${{ matrix.dotnet_version }} + if [[ ! ${{ matrix.dotnet_version }} == *6* ]]; then + dnf install -y \ + dotnet-sdk-dbg-${{ matrix.dotnet_version }} \ + dotnet-runtime-dbg-${{ matrix.dotnet_version }} \ + aspnetcore-runtime-dbg-${{ matrix.dotnet_version }} + fi + elif grep alpine /etc/os-release; then + if grep edge /etc/os-release; then + echo "https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories + fi + apk add dotnet-sdk-${{ matrix.dotnet_version }} dotnet-doc git make + if [[ ! ${{ matrix.dotnet_version }} == *6* ]]; then + apk add \ + dotnet-sdk-dbg-${{ matrix.dotnet_version }} \ + dotnet-runtime-dbg-${{ matrix.dotnet_version }} \ + aspnetcore-runtime-dbg-${{ matrix.dotnet_version }} + fi fi - uses: actions/checkout@v2 @@ -80,20 +89,11 @@ jobs: fail-fast: false matrix: container_image: - - quay.io/centos/centos:stream8 - - quay.io/centos/centos:stream9 - - registry.fedoraproject.org/fedora:37 - - registry.fedoraproject.org/fedora:38 - - registry.fedoraproject.org/fedora:39 - - registry.fedoraproject.org/fedora:rawhide - - registry.access.redhat.com/ubi8 - - registry.access.redhat.com/ubi9 + - docker.io/library/alpine:latest + - docker.io/library/alpine:edge dotnet_version: - "6.0" - - "7.0" - include: - - container_image: quay.io/centos/centos:stream9 - dotnet_version: "8.0" + - "8.0" container: @@ -105,7 +105,32 @@ jobs: timeout-minutes: 5 run: | set -euo pipefail - dnf install -y dotnet-sdk-${{ matrix.dotnet_version }} git make + cat /etc/os-release + if grep fedora /etc/os-release ; then + if [[ ${{ matrix.dotnet_version }} == 9.* ]]; then + dnf install 'dnf-command(copr)' -y + dnf copr enable @dotnet-sig/dotnet-preview -y + dnf install -y dotnet-sdk-aot-${{ matrix.dotnet_version }} + fi + dnf install -y dotnet-sdk-${{ matrix.dotnet_version }} git make + if [[ ! ${{ matrix.dotnet_version }} == *6* ]]; then + dnf install -y \ + dotnet-sdk-dbg-${{ matrix.dotnet_version }} \ + dotnet-runtime-dbg-${{ matrix.dotnet_version }} \ + aspnetcore-runtime-dbg-${{ matrix.dotnet_version }} + fi + elif grep alpine /etc/os-release; then + if grep edge /etc/os-release; then + echo "https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories + fi + apk add dotnet-sdk-${{ matrix.dotnet_version }} dotnet-doc git make + if [[ ! ${{ matrix.dotnet_version }} == *6* ]]; then + apk add \ + dotnet-sdk-dbg-${{ matrix.dotnet_version }} \ + dotnet-runtime-dbg-${{ matrix.dotnet_version }} \ + aspnetcore-runtime-dbg-${{ matrix.dotnet_version }} + fi + fi # We need to fetch the tags, so 'git tag' in 'make publish' below works - uses: actions/checkout@v2 @@ -127,9 +152,12 @@ jobs: - name: Install Test dependencies timeout-minutes: 2 run: | - dnf install -y python3 wget \ - $(grep '^Dependencies(dnf): ' dotnet-regular-tests/README.md | cut -d: -f2-) \ - --skip-broken + if grep fedora /etc/os-release ; then + dnf install -y python3 wget $(grep '^Dependencies(dnf): ' README.md | cut -d: -f2-) --skip-broken + elif grep alpine /etc/os-release; then + apk add python3 wget curl $(grep '^Dependencies(apk): ' README.md | cut -d: -f2-) + echo -e '[PostgreSQL]\nDescription=PostgreSQL Unicode\nDriver=/usr/lib/psqlodbcw.so\nUsageCount=1' > /etc/odbcinst.ini + fi - name: Run reproducers run: | diff --git a/Samples/BashTestSpecificToDotNet2x/test.json b/Samples/BashTestSpecificToDotNet2x/test.json deleted file mode 100644 index cfa7c79..0000000 --- a/Samples/BashTestSpecificToDotNet2x/test.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "BashTestSpecificToDotNet2x", - "enabled": true, - "requiresSdk": true, - "version": "2.x", - "versionSpecific": true, - "type": "bash", - "cleanup": true, - "ignoredRIDs":[ - ] -} - diff --git a/Samples/BashTestSpecificToDotNet2x/test.sh b/Samples/BashTestSpecificToDotNet2x/test.sh deleted file mode 100755 index 3395065..0000000 --- a/Samples/BashTestSpecificToDotNet2x/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -true diff --git a/Samples/BashTestSpecificToDotNet50/test.json b/Samples/BashTestSpecificToDotNet50/test.json deleted file mode 100644 index 8579aa2..0000000 --- a/Samples/BashTestSpecificToDotNet50/test.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "BashTestSpecificToDotNet50", - "enabled": true, - "requiresSdk": true, - "version": "50.0", - "versionSpecific": true, - "type": "bash", - "cleanup": true, - "ignoredRIDs":[ - ] -} - diff --git a/Samples/BashTestSpecificToDotNet50/test.sh b/Samples/BashTestSpecificToDotNet50/test.sh deleted file mode 100755 index 5b71ffd..0000000 --- a/Samples/BashTestSpecificToDotNet50/test.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -false diff --git a/Turkey.Tests/CsprojCompatibilityPatcherTest.cs b/Turkey.Tests/CsprojCompatibilityPatcherTest.cs deleted file mode 100644 index f69e0e8..0000000 --- a/Turkey.Tests/CsprojCompatibilityPatcherTest.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; - -using Turkey; - -using Xunit; - -namespace Turkey.Tests -{ - public class CsprojCompatibilityPatcherTest - { - [Theory] - [InlineData("netcoreapp1.0", "2.1", "netcoreapp2.1")] - [InlineData("netcoreapp2.1", "3.1", "netcoreapp3.1")] - [InlineData("netcoreapp3.1", "3.1", "netcoreapp3.1")] - [InlineData("net5.0", "3.1", "netcoreapp3.1")] - [InlineData("net5.0", "2.1", "netcoreapp2.1")] - public void TargetFrameworksAreReplacedCorrectly(string currentTfm, string runtimeVersion, string expectedTfm) - { - Version newRuntimeVersion = Version.Parse(runtimeVersion); - string csproj = $@" - - - - {currentTfm} - - -"; - string patched = new CsprojCompatibilityPatcher().Patch(csproj, newRuntimeVersion); - Assert.Contains(expectedTfm, patched); - if (currentTfm != expectedTfm) - { - Assert.DoesNotContain(currentTfm, patched); - } - } - } -} diff --git a/Turkey.Tests/ProcessExtensionsTest.cs b/Turkey.Tests/ProcessExtensionsTest.cs index 6ef9d3c..0a5a0a6 100644 --- a/Turkey.Tests/ProcessExtensionsTest.cs +++ b/Turkey.Tests/ProcessExtensionsTest.cs @@ -16,21 +16,23 @@ public async Task WaitForExitAsync_DoesNotHangForOrphanedGrandChildren() const int GrandChildAgeSeconds = 3 * WaitTimeoutSeconds; string filename = Path.GetTempFileName(); + File.Copy(filename, "test.tmp"); + string path = "test.tmp"; try { // This script creates a 'sleep' grandchild that outlives its parent. - File.WriteAllText(filename, + File.WriteAllText(path, $@"#!/bin/bash sleep {GrandChildAgeSeconds} & "); - Process chmodProcess = Process.Start("chmod", $"+x {filename}"); + Process chmodProcess = Process.Start("chmod", $"+x {path}"); chmodProcess.WaitForExit(); Assert.Equal(0, chmodProcess.ExitCode); var psi = new ProcessStartInfo() { - FileName = filename, + FileName = path, RedirectStandardOutput = true, RedirectStandardError = true, }; @@ -44,6 +46,7 @@ public async Task WaitForExitAsync_DoesNotHangForOrphanedGrandChildren() } finally { + File.Delete(path); File.Delete(filename); } } diff --git a/Turkey.Tests/SourceBuildTest.cs b/Turkey.Tests/SourceBuildTest.cs index 3ce5f0b..bf6b112 100644 --- a/Turkey.Tests/SourceBuildTest.cs +++ b/Turkey.Tests/SourceBuildTest.cs @@ -48,17 +48,6 @@ protected override Task SendAsync(HttpRequestMessage messag } } - [Fact] - public async Task VerifyProdConFeedIsLookedUpAndThenTheFeedIsVerifiedToResolve() - { - var messageHandler = new ProdConHandler(); - var client = new HttpClient(messageHandler); - var sourceBuild = new SourceBuild(client); - - var feed = await sourceBuild.GetProdConFeedAsync(Version.Parse("3.1")); - - Assert.Equal(FAKE_FEED, feed); - } [Fact] public async Task VerifyProdConFeedIsNotUsedForNewReleases() diff --git a/Turkey/CsprojCompatibilityPatcher.cs b/Turkey/CsprojCompatibilityPatcher.cs index c676965..ce14067 100644 --- a/Turkey/CsprojCompatibilityPatcher.cs +++ b/Turkey/CsprojCompatibilityPatcher.cs @@ -14,15 +14,8 @@ public string Patch(string originalCsprojContents, Version newRuntime) { var pattern = @"net(?:coreapp)?\d\.\d+"; var versionString = newRuntime.MajorMinor; - string replacement = null; - if (newRuntime.Major < 4) - { - replacement = $"netcoreapp{versionString}"; - } - else - { - replacement = $"net{versionString}"; - } + var replacement = $"net{versionString}"; + var output = Regex.Replace(originalCsprojContents, pattern, replacement); return output; diff --git a/Turkey/Program.cs b/Turkey/Program.cs index 957a5aa..fba1d31 100644 --- a/Turkey/Program.cs +++ b/Turkey/Program.cs @@ -152,25 +152,6 @@ public static async Task GenerateNuGetConfigIfNeededAsync(string additio var nuget = new NuGet(client); var sourceBuild = new SourceBuild(client); - if (netCoreAppVersion.Major < 4) - { - try - { - var prodConUrl = await GetProdConFeedUrlIfNeededAsync(nuget, sourceBuild, netCoreAppVersion); - if (!string.IsNullOrEmpty(prodConUrl)) - { - prodConUrl = prodConUrl.Trim(); - Console.WriteLine($"Packages are not live on nuget.org; using {prodConUrl} as additional package source"); - urls.Add(prodConUrl); - } - } - catch (HttpRequestException exception) - { - Console.WriteLine("WARNING: failed to get ProdCon url. Ignoring Exception:"); - Console.WriteLine(exception.ToString()); - } - } - string nugetConfig = null; if (useSourceBuildNuGetConfig) { @@ -233,17 +214,6 @@ public static IReadOnlySet CreateTraits(Version runtimeVersion, Version return traits; } - public static async Task GetProdConFeedUrlIfNeededAsync(NuGet nuget, SourceBuild sourceBuild, Version netCoreAppVersion) - { - bool live = await nuget.IsPackageLiveAsync("runtime.linux-x64.Microsoft.NetCore.DotNetAppHost", netCoreAppVersion); - if (!live) - { - return await sourceBuild.GetProdConFeedAsync(netCoreAppVersion); - } - - return null; - } - static async Task Main(string[] args) { var rootCommand = new RootCommand(description: "A test runner for running standalone bash-based or xunit tests"); diff --git a/Turkey/SourceBuild.cs b/Turkey/SourceBuild.cs index d12965b..ce847d9 100644 --- a/Turkey/SourceBuild.cs +++ b/Turkey/SourceBuild.cs @@ -18,18 +18,8 @@ public SourceBuild(HttpClient client) public string GetBranchContentUrl(Version version) { - string url; - if (version.Major <= 3) - { - var branchName = "release/" + version.MajorMinor; - url = $"https://raw.githubusercontent.com/dotnet/source-build/{branchName}/"; - } - else - { - var branchName = "release/" + version.MajorMinor + ".1xx"; - url = $"https://raw.githubusercontent.com/dotnet/installer/{branchName}/"; - } - + var branchName = "release/" + version.MajorMinor + ".1xx"; + var url = $"https://raw.githubusercontent.com/dotnet/installer/{branchName}/"; return url; } diff --git a/Turkey/Test.cs b/Turkey/Test.cs index 523395f..c1c528c 100644 --- a/Turkey/Test.cs +++ b/Turkey/Test.cs @@ -75,22 +75,11 @@ public async Task RunAsync(Action logger, CancellationToken private void UpdateProjectFilesIfPresent() { - if (SystemUnderTest.RuntimeVersion < Version.Parse("2.0")) + var csprojFile = $"{Directory.Name}.csproj"; + var csprojPath = Path.Combine(this.Directory.FullName, csprojFile); + if (File.Exists(csprojPath)) { - var projectJsonPath = Path.Combine(this.Directory.FullName, "project.json"); - if (File.Exists(projectJsonPath)) - { - CopyProjectJsonFile(); - } - } - else - { - var csprojFile = $"{Directory.Name}.csproj"; - var csprojPath = Path.Combine(this.Directory.FullName, csprojFile); - if (File.Exists(csprojPath)) - { - UpdateCsprojVersion(csprojPath); - } + UpdateCsprojVersion(csprojPath); } }