diff --git a/.github/workflows/ci-installer.yml b/.github/workflows/ci-installer.yml index 007e8aed..340a2658 100644 --- a/.github/workflows/ci-installer.yml +++ b/.github/workflows/ci-installer.yml @@ -28,15 +28,15 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: global-json-file: global.json - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.nuget/packages key: nuget-installer-${{ hashFiles('Optimum.Bootstrap.Core/**/*.csproj', 'Optimum.Cli/**/*.csproj', 'Optimum.Installer/**/*.csproj', 'Optimum.*.Tests/**/*.csproj') }} @@ -51,10 +51,10 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: global-json-file: global.json @@ -86,10 +86,10 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: global-json-file: global.json diff --git a/.github/workflows/ci-platform-bootstrap.yml b/.github/workflows/ci-platform-bootstrap.yml index 975e13b7..89b9fd24 100644 --- a/.github/workflows/ci-platform-bootstrap.yml +++ b/.github/workflows/ci-platform-bootstrap.yml @@ -27,10 +27,10 @@ jobs: timeout-minutes: 45 if: inputs.platform == 'all' || inputs.platform == 'windows' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up .NET 10 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: '10.0.x' dotnet-quality: ga @@ -55,7 +55,7 @@ jobs: } >> "$GITHUB_OUTPUT" - name: Cache client archive - uses: actions/cache@v4 + uses: actions/cache@v6 id: cache_client with: path: .vanilla/archives @@ -73,7 +73,7 @@ jobs: mv "${{ steps.client.outputs.path }}.part" "${{ steps.client.outputs.path }}" - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.nuget/packages key: nuget-windows-${{ hashFiles('**/*.csproj', '**/*.slnx') }} @@ -108,7 +108,7 @@ jobs: - name: Upload logs on failure if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bootstrap-logs-windows path: | @@ -123,7 +123,7 @@ jobs: timeout-minutes: 45 if: inputs.platform == 'all' || inputs.platform == 'macos-intel' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install bash 4+ run: | @@ -131,7 +131,7 @@ jobs: echo "$(brew --prefix)/bin" >> "$GITHUB_PATH" - name: Set up .NET 10 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: '10.0.x' dotnet-quality: ga @@ -156,7 +156,7 @@ jobs: } >> "$GITHUB_OUTPUT" - name: Cache client archive - uses: actions/cache@v4 + uses: actions/cache@v6 id: cache_client with: path: .vanilla/archives @@ -174,7 +174,7 @@ jobs: mv "${{ steps.client.outputs.path }}.part" "${{ steps.client.outputs.path }}" - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.nuget/packages key: nuget-macos-intel-${{ hashFiles('**/*.csproj', '**/*.slnx') }} @@ -206,7 +206,7 @@ jobs: - name: Upload logs on failure if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bootstrap-logs-macos-intel path: | @@ -220,7 +220,7 @@ jobs: timeout-minutes: 45 if: inputs.platform == 'all' || inputs.platform == 'macos-arm' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install bash 4+ run: | @@ -228,7 +228,7 @@ jobs: echo "$(brew --prefix)/bin" >> "$GITHUB_PATH" - name: Set up .NET 10 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: '10.0.x' dotnet-quality: ga @@ -253,7 +253,7 @@ jobs: } >> "$GITHUB_OUTPUT" - name: Cache client archive - uses: actions/cache@v4 + uses: actions/cache@v6 id: cache_client with: path: .vanilla/archives @@ -271,7 +271,7 @@ jobs: mv "${{ steps.client.outputs.path }}.part" "${{ steps.client.outputs.path }}" - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.nuget/packages key: nuget-macos-arm-${{ hashFiles('**/*.csproj', '**/*.slnx') }} @@ -301,7 +301,7 @@ jobs: - name: Upload logs on failure if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bootstrap-logs-macos-arm path: | @@ -315,10 +315,10 @@ jobs: timeout-minutes: 60 if: inputs.platform == 'all' || inputs.platform == 'linux' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up .NET 10 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: '10.0.x' dotnet-quality: ga @@ -343,7 +343,7 @@ jobs: } >> "$GITHUB_OUTPUT" - name: Cache client archive - uses: actions/cache@v4 + uses: actions/cache@v6 id: cache_client with: path: .vanilla/archives @@ -361,7 +361,7 @@ jobs: mv "${{ steps.client.outputs.path }}.part" "${{ steps.client.outputs.path }}" - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.nuget/packages key: nuget-linux-${{ hashFiles('**/*.csproj', '**/*.slnx') }} @@ -405,7 +405,7 @@ jobs: - name: Upload logs on failure if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bootstrap-logs-linux path: | @@ -420,10 +420,10 @@ jobs: timeout-minutes: 45 if: inputs.platform == 'all' || inputs.platform == 'linux-arm' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up .NET 10 - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: '10.0.x' dotnet-quality: ga @@ -448,7 +448,7 @@ jobs: } >> "$GITHUB_OUTPUT" - name: Cache client archive - uses: actions/cache@v4 + uses: actions/cache@v6 id: cache_client with: path: .vanilla/archives @@ -466,7 +466,7 @@ jobs: mv "${{ steps.client.outputs.path }}.part" "${{ steps.client.outputs.path }}" - name: Cache NuGet packages - uses: actions/cache@v4 + uses: actions/cache@v6 with: path: ~/.nuget/packages key: nuget-linux-arm-${{ hashFiles('**/*.csproj', '**/*.slnx') }} @@ -496,7 +496,7 @@ jobs: - name: Upload logs on failure if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bootstrap-logs-linux-arm path: | diff --git a/.github/workflows/ci-scripts.yml b/.github/workflows/ci-scripts.yml index c95283d6..a99223e9 100644 --- a/.github/workflows/ci-scripts.yml +++ b/.github/workflows/ci-scripts.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 5 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: bootstrap-git-test run: make bootstrap-git-test @@ -36,7 +36,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 5 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: install-linux-staging test run: bash scripts/tests/install-linux-staging.sh diff --git a/.github/workflows/release-installer.yml b/.github/workflows/release-installer.yml index e8809ec8..97d95a97 100644 --- a/.github/workflows/release-installer.yml +++ b/.github/workflows/release-installer.yml @@ -35,16 +35,16 @@ jobs: - { os: windows-latest, rid: win-x64, exe: Optimum.Installer.exe, label: win } - { os: ubuntu-latest, rid: linux-x64, exe: Optimum.Installer, label: linux } - { os: macos-14, rid: osx-arm64, exe: Optimum.Installer, label: osx-arm64 } - - { os: macos-13, rid: osx-x64, exe: Optimum.Installer, label: osx-x64 } + - { os: macos-14, rid: osx-x64, exe: Optimum.Installer, label: osx-x64 } runs-on: ${{ matrix.os }} timeout-minutes: 20 env: WINDOWS_CERT_BASE64: ${{ secrets.WINDOWS_CERT_BASE64 }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: global-json-file: global.json @@ -210,7 +210,7 @@ jobs: run: echo "signtool step goes here once a certificate secret exists" - name: Upload artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: installer-${{ matrix.label }} path: releases/ @@ -222,10 +222,10 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: global-json-file: global.json @@ -251,7 +251,7 @@ jobs: echo "tag=$tag" >> "$GITHUB_OUTPUT" - name: Download the feeds - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: pattern: installer-* path: feeds diff --git a/Optimum.Bootstrap.Core.Tests/PrerequisiteScannerTests.cs b/Optimum.Bootstrap.Core.Tests/PrerequisiteScannerTests.cs index 8f8acfe3..8d134b8d 100644 --- a/Optimum.Bootstrap.Core.Tests/PrerequisiteScannerTests.cs +++ b/Optimum.Bootstrap.Core.Tests/PrerequisiteScannerTests.cs @@ -152,7 +152,7 @@ public void WindowsDoesNotDemandUnixToolsAndClearsWithJustDotnetAndGit() Assert.DoesNotContain(results, r => r.Definition.Id is PrerequisiteId.Perl or PrerequisiteId.Python3 or PrerequisiteId.Chmod or PrerequisiteId.Tar or PrerequisiteId.Curl or PrerequisiteId.Appimagetool); - Assert.Empty(results.Where(r => r.BlocksBuild)); + Assert.DoesNotContain(results, r => r.BlocksBuild); Assert.Equal(PrerequisiteState.Ok, results.Single(r => r.Definition.Id == PrerequisiteId.Pwsh).State); } diff --git a/Optimum.Cli.Tests/NdjsonStream.cs b/Optimum.Cli.Tests/NdjsonStream.cs index a4f74be4..8a660118 100644 --- a/Optimum.Cli.Tests/NdjsonStream.cs +++ b/Optimum.Cli.Tests/NdjsonStream.cs @@ -52,7 +52,7 @@ public void AssertContract() switch (type) { case "progress": - Assert.True(KnownPhases.Contains(line.GetProperty("phase").GetString()!)); + Assert.Contains(line.GetProperty("phase").GetString()!, KnownPhases); int progress = line.GetProperty("progress").GetInt32(); Assert.InRange(progress, lastProgress, 99); lastProgress = progress; @@ -67,7 +67,7 @@ public void AssertContract() Assert.Equal(Lines.Count - 1, i); if (!line.GetProperty("ok").GetBoolean()) { - Assert.True(KnownReasons.Contains(line.GetProperty("reason").GetString()!)); + Assert.Contains(line.GetProperty("reason").GetString()!, KnownReasons); Assert.False(string.IsNullOrWhiteSpace(line.GetProperty("message").GetString())); } else diff --git a/Optimum.Installer.Tests/ScreenViewModelTests.cs b/Optimum.Installer.Tests/ScreenViewModelTests.cs index c57d510b..1d1d51b5 100644 --- a/Optimum.Installer.Tests/ScreenViewModelTests.cs +++ b/Optimum.Installer.Tests/ScreenViewModelTests.cs @@ -519,7 +519,7 @@ private static InstallOutcome Success(string launcher) => public async Task LaunchDisablesTheButtonAndThenAsksTheShellToExit() { string launcher = Path.Combine(Path.GetTempPath(), "optimum-launch-" + Guid.NewGuid().ToString("N") + ".sh"); - await File.WriteAllTextAsync(launcher, "#!/bin/sh\nexit 0\n"); + await File.WriteAllTextAsync(launcher, "#!/bin/sh\nexit 0\n", TestContext.Current.CancellationToken); if (!OperatingSystem.IsWindows()) File.SetUnixFileMode(launcher, UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute); @@ -537,7 +537,7 @@ public async Task LaunchDisablesTheButtonAndThenAsksTheShellToExit() Assert.False(vm.LaunchCommand.CanExecute(null)); Assert.Equal("Launching Optimum...", vm.LaunchLabel); - await run.WaitAsync(TimeSpan.FromSeconds(20)); + await run.WaitAsync(TimeSpan.FromSeconds(20), TestContext.Current.CancellationToken); Assert.True(exitAsked); } finally