name: Build on: - push - pull_request - workflow_dispatch jobs: Linux: runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # needed for Nerdbank.GitVersioning - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Build Unit Tests .NET run: dotnet build -f net8.0 test/Renci.SshNet.Tests/ - name: Build IntegrationTests .NET run: dotnet build -f net8.0 test/Renci.SshNet.IntegrationTests/ - name: Build IntegrationTests .NET Framework run: dotnet build -f net48 test/Renci.SshNet.IntegrationTests/ - name: Run Unit Tests .NET run: | dotnet test \ -f net8.0 \ --no-build \ --logger "console;verbosity=normal" \ --logger GitHubActions \ -p:CollectCoverage=true \ -p:CoverletOutputFormat=cobertura \ -p:CoverletOutput=../../coverlet/linux_unit_test_net_8_coverage.xml \ test/Renci.SshNet.Tests/ - name: Run Integration Tests .NET run: | dotnet test \ -f net8.0 \ --no-build \ --logger "console;verbosity=normal" \ --logger GitHubActions \ -p:CollectCoverage=true \ -p:CoverletOutputFormat=cobertura \ -p:CoverletOutput=../../coverlet/linux_integration_test_net_8_coverage.xml \ test/Renci.SshNet.IntegrationTests/ # Also run a subset of the integration tests targeting netfx using mono. This is a temporary measure to get # some coverage until a proper solution for running the .NET Framework integration tests in CI is found. # Running all the tests causes problems which are not worth solving in this rare configuration. # See https://github.com/sshnet/SSH.NET/pull/1462 and related links - name: Run Integration Tests Mono run: | sudo apt-get install ca-certificates gnupg sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/mono-official-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb [signed-by=/usr/share/keyrings/mono-official-archive-keyring.gpg] https://download.mono-project.com/repo/ubuntu stable-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list sudo apt-get update sudo apt-get install mono-devel dotnet test \ -f net48 \ --no-build \ --logger "console;verbosity=normal" \ --logger GitHubActions \ -p:CollectCoverage=true \ -p:CoverletOutputFormat=cobertura \ -p:CoverletOutput=../../coverlet/linux_integration_test_net_48_coverage.xml \ --filter "Name~Ecdh|Name~ECDsa|Name~Zlib|Name~Gcm" \ test/Renci.SshNet.IntegrationTests/ - name: Archive Coverlet Results uses: actions/upload-artifact@v4 with: name: Coverlet Results Linux path: coverlet Windows: runs-on: windows-2022 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # needed for Nerdbank.GitVersioning - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 9.0.x - name: Build Solution run: dotnet build Renci.SshNet.sln - name: Publish AOT Compatibility Test App run: dotnet publish -r win-x64 /warnaserror test/Renci.SshNet.AotCompatibilityTestApp/ - name: Create NuGet Package run: dotnet pack - name: Archive NuGet Package uses: actions/upload-artifact@v4 with: name: NuGet Package path: src/Renci.SshNet/bin/Release/*.*nupkg - name: Run Unit Tests .NET run: | dotnet test ` -f net8.0 ` --no-build ` --logger "console;verbosity=normal" ` --logger GitHubActions ` -p:CollectCoverage=true ` -p:CoverletOutputFormat=cobertura ` -p:CoverletOutput=../../coverlet/windows_unit_test_net_8_coverage.xml ` test/Renci.SshNet.Tests/ - name: Run Unit Tests .NET Framework run: | dotnet test ` -f net462 ` --no-build ` --logger "console;verbosity=normal" ` --logger GitHubActions ` -p:CollectCoverage=true ` -p:CoverletOutputFormat=cobertura ` -p:CoverletOutput=../../coverlet/windows_unit_test_net_4_6_2_coverage.xml ` test/Renci.SshNet.Tests/ - name: Archive Coverlet Results uses: actions/upload-artifact@v4 with: name: Coverlet Results Windows path: coverlet Publish: runs-on: ubuntu-24.04 if: github.ref == 'refs/heads/develop' permissions: packages: write needs: - Windows - Linux steps: - name: Download NuGet Package uses: actions/download-artifact@v4 with: name: NuGet Package - name: Publish to GitHub NuGet Registry run: | dotnet nuget add source \ --username $GITHUB_ACTOR \ --password ${{ secrets.GITHUB_TOKEN }} \ --store-password-in-clear-text \ --name github \ "https://nuget.pkg.github.com/$GITHUB_REPOSITORY_OWNER/index.json" dotnet nuget push "*.nupkg" \ --source github \ --api-key ${{ secrets.GITHUB_TOKEN }}